Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # ** MicKo's Skill Tree - Revised
- #------------------------------------------------------------------------------
- # by DerVVulfman (July 3, 2014)
- # based on MicKo's work from February 28, 2011
- # Version 1.1
- # RPGMaker XP / RGSS
- #==============================================================================
- #
- # INTRODUCTION:
- #
- # This system allows you to craft a skill tree such as those in games like
- # Diablo or some Final Fantasy RPGs. Earlier systems required the crafting
- # of these with elaborate events systems, but no more.
- #
- # Not only can the player select skills from the tree by spending points to
- # acquire them, but may also increase or advance a skill from one skill to
- # another. Unlike MicKo's original system, this revised version keeps the
- # changed skills solely for the individual actor. In the previous version,
- # any changes to a skill would affect all users of that partucular skill...
- # but no longer will with this version.
- #
- # There are added bonuses to this system. Through this system, you can make
- # a skill give bonus 'passive' effects to an actor, allowing them to gain
- # or lose stats and/or maximum health scores. However, the passive skills
- # feature from MicKo's original version was removed.
- #
- # And skills may increase if additional points are added to an already gained
- # skill, if that skill allows
- #
- #------------------------------------------------------------------------------
- #
- # SCRIPT CALL
- #
- # $scene = Scene_SkillTree.new(actor_index[, from_map])
- # -or-
- # skilltree(actor_index[, from_map])
- #
- # actor_index This is the index value of the actor in your party, not in
- # your actor's database. Thus an actor_index of 0 would set
- # the system to display your party leader. Default = 0
- #
- # from_map This is a true/false value that indicates if you are using
- # this feature from a menu or from the field map. If set to
- # true, the system exits straight to the field map. But if
- # set to false, the system goes straight to the main menu.
- # By default, it is set to false so you return to the menu.
- #
- # * * *
- #
- # NOTE: The first script call method is advised if being used in a custom
- # menu system.
- #
- #==============================================================================
- #
- # COMPATABILITY
- #
- # Rewrites the pdef and mdef methods in Game_Battler (683 & 693)
- # Rewrites the refresh method in Window_Skill (1072, noted the changed lines)
- #
- #==============================================================================
- #
- # CREDITS AND THANKS
- #
- # Definite thanks to MicKo who crafted the bulk of this fine system. And
- # thank to finalholylight who noted a rank leveling issue in the original
- # version.
- #
- #==============================================================================
- #==============================================================================
- #
- # ** C O N F I G U R A T I O N M O D U L E ** #
- #
- # For purposes of ease, the configuration section, module SkillTree, has been
- # broken down into parts. These parts relate to the actors, the skill tree
- # layout, default texts, and the like. Please study it.
- #
- #==============================================================================
- module SkillTree
- #--------------------------------------------------------------------------
- # * SYSTEM REQUIRED HASHES - DO NOT TOUCH -
- #--------------------------------------------------------------------------
- STARTING_POINTS, RANKS, POINT_COST, TREE_COST, PREREQUISITES = {},{},{},{},{}
- PASSIVE_EFFECT, BACKGROUND_LIST, INFOBACKGROUND_LIST, BOOKS = {},{},{},{}
- #--------------------------------------------------------------------------
- #--------------------------------------------------------------------------
- # * PART I: STARTUP OPTIONS
- #--------------------------------------------------------------------------
- # == ACTOR POINTS ==
- # This sets how many points your actor has when starting. Default = 0
- #
- # Actor ID Points given to actor
- # =================== ======================
- STARTING_POINTS[1] = 4,
- STARTING_POINTS[2] = 4,
- STARTING_POINTS[3] = 4,
- STARTING_POINTS[4] = 4,
- STARTING_POINTS[5] = 0,
- STARTING_POINTS[6] = 0,
- STARTING_POINTS[7] = 0,
- STARTING_POINTS[8] = 0,
- STARTING_POINTS[9] = 0,
- STARTING_POINTS[10] = 4,
- STARTING_POINTS[11] = 4,
- STARTING_POINTS[12] = 4,
- STARTING_POINTS[13] = 4,
- STARTING_POINTS[14] = 4,
- STARTING_POINTS[15] = 4,
- STARTING_POINTS[16] = 4,
- STARTING_POINTS[17] = 4,
- STARTING_POINTS[18] = 4,
- STARTING_POINTS[19] = 999,
- STARTING_POINTS[20] = 999,
- STARTING_POINTS[21] = 999,
- STARTING_POINTS[22] = 999,
- STARTING_POINTS[23] = 999,
- STARTING_POINTS[24] = 3000,
- STARTING_POINTS[25] = 2000,
- STARTING_POINTS[26] = 4,
- STARTING_POINTS[27] = 4,
- STARTING_POINTS[28] = 4,
- STARTING_POINTS[29] = 4,
- STARTING_POINTS[30] = 4,
- STARTING_POINTS[31] = 0,
- STARTING_POINTS[32] = 0
- # == CLASS ACTOR BEHAVIOR ==
- # This sets whether the tree system is based on individual trees for the
- # actor or are skill trees shared among character classes. Default = false
- #
- # ===================
- CLASS_TREE_START = false
- #--------------------------------------------------------------------------
- # * PART II: BOOK ITEM OPTIONS
- #--------------------------------------------------------------------------
- # == BOOKS ==
- # This is fairly straight forward. This identifies an item as a book
- # in which an actor can use to either learn a skill or advance an al-
- # ready learned skill if the skill itself can be advanced. The ID of
- # the skill learned can be any. But note that advancable skills should
- # use the ID of the starting skill (ie, the original skill).
- #
- # Item ID Base Skill ID(s)
- # =================== ======================
- #BOOKS[33] = [1, 10]
- #--------------------------------------------------------------------------
- # * PART III: BOARD DESIGN
- #--------------------------------------------------------------------------
- # == SPACING SYSTEM ==
- # This set of arrays handles the spacing of the skill icons displayed in
- # the skill tree. The first set handles how much space is between the
- # individual skills, both horzontally and vertically. The second sets
- # how far the icons are from the top and left-most edge of the grid.
- #
- # Syntax: = [ horiz, vert ]
- #
- SKILL_SPACING = [6, 10] # Distance (in px) between skills in grid.
- BORDER_SPACING = [5, 5] # Distance (in px) from top-left grid corner.
- # == THE SKILL TREE ==
- # This literally defines your skill tree. Each tree is a hash array made up
- # of a collection of Skill IDs or nil values that are drawn on your screen.
- # Nil values act as spaces between the individual skills in the trees.
- # And each actor or class may have one or more skill tree branches assigned
- # to him or her.
- # * * *
- # Each row in the hash array tree is defined in this syntax / manner...
- # Row number => [ Skill ID, Skill ID,... Skill ID ]
- # ... and each row of data for a given tree must have the same number of
- # values. So if the first row has five IDs, the second row must likewise
- # have five IDs, and so on.
- # * * *
- # Trees must be uniformly designed, and every row within each branch must
- # have the same number of objects.
- #
- # * * *
- # It is possible to use predefined skill trees and place them within the
- # arrays of one or more trees as you can see below. Originally, the trees
- # for the 2nd tree had to be written within its own skill array. But as you
- # can see below, copies of this tree were made and placed within that of
- # the 3rd skill tree.
- # * * *
- # Syntax: SKILLS_ROWS = [{Row number => [skill id, skill id, ...]}]
- # -------------------------------------------------------------------------
- SKILLS_ROWS = {} # Do Not Touch
- # -------------------------------------------------------------------------
- # --- First Skill Tree (either 1st actor's or 1st character class's ---
- SKILLS_ROWS[1] = [
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Dunkel Tree
- {0 => [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134],
- 1 => [856, 862, 868, 874, 880, 886, 892, 898, 904, 910, 916, 922, 928, 934, 940, 946, 952, 958, 964, 970],
- 2 => [857, 863, 869, 875, 881, 887, 893, 899, 905, 911, 917, 923, 929, 935, 941, 947, 953, 959, 965, 971],
- 3 => [858, 864, 870, 876, 882, 888, 894, 900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966, 972],
- 4 => [859, 865, 871, 877, 883, 889, 895, 901, 907, 913, 919, 925, 931, 937, 943, 949, 955, 961, 967, 973],
- 5 => [860, 866, 872, 878, 884, 890, 896, 902, 908, 914, 920, 926, 932, 938, 944, 950, 956, 962, 968, 974],
- 6 => [861, 867, 873, 879, 885, 891, 897, 903, 909, 915, 921, 927, 933, 939, 945, 951, 957, 963, 969, 975],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[2] = [
- # Dunkel Tree
- {0 => [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134],
- 1 => [856, 862, 868, 874, 880, 886, 892, 898, 904, 910, 916, 922, 928, 934, 940, 946, 952, 958, 964, 970],
- 2 => [857, 863, 869, 875, 881, 887, 893, 899, 905, 911, 917, 923, 929, 935, 941, 947, 953, 959, 965, 971],
- 3 => [858, 864, 870, 876, 882, 888, 894, 900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966, 972],
- 4 => [859, 865, 871, 877, 883, 889, 895, 901, 907, 913, 919, 925, 931, 937, 943, 949, 955, 961, 967, 973],
- 5 => [860, 866, 872, 878, 884, 890, 896, 902, 908, 914, 920, 926, 932, 938, 944, 950, 956, 962, 968, 974],
- 6 => [861, 867, 873, 879, 885, 891, 897, 903, 909, 915, 921, 927, 933, 939, 945, 951, 957, 963, 969, 975],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[3] = [
- # Dunkel Tree
- {0 => [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134],
- 1 => [856, 862, 868, 874, 880, 886, 892, 898, 904, 910, 916, 922, 928, 934, 940, 946, 952, 958, 964, 970],
- 2 => [857, 863, 869, 875, 881, 887, 893, 899, 905, 911, 917, 923, 929, 935, 941, 947, 953, 959, 965, 971],
- 3 => [858, 864, 870, 876, 882, 888, 894, 900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966, 972],
- 4 => [859, 865, 871, 877, 883, 889, 895, 901, 907, 913, 919, 925, 931, 937, 943, 949, 955, 961, 967, 973],
- 5 => [860, 866, 872, 878, 884, 890, 896, 902, 908, 914, 920, 926, 932, 938, 944, 950, 956, 962, 968, 974],
- 6 => [861, 867, 873, 879, 885, 891, 897, 903, 909, 915, 921, 927, 933, 939, 945, 951, 957, 963, 969, 975],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[4] = [
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Feuer Tree
- {0 => [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],
- 1 => [246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360],
- 2 => [247, 253, 259, 265, 271, 277, 283, 289, 295, 301, 307, 313, 319, 325, 331, 337, 343, 349, 355, 361],
- 3 => [248, 254, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 332, 338, 344, 350, 356, 362],
- 4 => [249, 255, 261, 267, 273, 279, 285, 291, 297, 303, 309, 315, 321, 327, 333, 339, 345, 351, 357, 363],
- 5 => [250, 256, 262, 268, 274, 280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364],
- 6 => [251, 257, 263, 269, 275, 281, 287, 293, 299, 305, 311, 317, 323, 329, 335, 341, 347, 353, 359, 365],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[5] = [
- # Feuer Tree
- {0 => [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],
- 1 => [246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360],
- 2 => [247, 253, 259, 265, 271, 277, 283, 289, 295, 301, 307, 313, 319, 325, 331, 337, 343, 349, 355, 361],
- 3 => [248, 254, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 332, 338, 344, 350, 356, 362],
- 4 => [249, 255, 261, 267, 273, 279, 285, 291, 297, 303, 309, 315, 321, 327, 333, 339, 345, 351, 357, 363],
- 5 => [250, 256, 262, 268, 274, 280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364],
- 6 => [251, 257, 263, 269, 275, 281, 287, 293, 299, 305, 311, 317, 323, 329, 335, 341, 347, 353, 359, 365],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Erde Tree
- {0 => [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94],
- 1 => [612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726],
- 2 => [613, 619, 625, 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, 691, 697, 703, 709, 715, 721, 727],
- 3 => [614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, 692, 698, 704, 710, 716, 722, 728],
- 4 => [615, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 693, 699, 705, 711, 717, 723, 729],
- 5 => [616, 622, 628, 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, 694, 700, 706, 712, 718, 724, 730],
- 6 => [617, 623, 629, 635, 641, 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, 707, 713, 719, 725, 731],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[6] = [
- # Erde Tree
- {0 => [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94],
- 1 => [612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726],
- 2 => [613, 619, 625, 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, 691, 697, 703, 709, 715, 721, 727],
- 3 => [614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, 692, 698, 704, 710, 716, 722, 728],
- 4 => [615, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 693, 699, 705, 711, 717, 723, 729],
- 5 => [616, 622, 628, 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, 694, 700, 706, 712, 718, 724, 730],
- 6 => [617, 623, 629, 635, 641, 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, 707, 713, 719, 725, 731],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[7] = [
- # Feuer Tree
- {0 => [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],
- 1 => [246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360],
- 2 => [247, 253, 259, 265, 271, 277, 283, 289, 295, 301, 307, 313, 319, 325, 331, 337, 343, 349, 355, 361],
- 3 => [248, 254, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 332, 338, 344, 350, 356, 362],
- 4 => [249, 255, 261, 267, 273, 279, 285, 291, 297, 303, 309, 315, 321, 327, 333, 339, 345, 351, 357, 363],
- 5 => [250, 256, 262, 268, 274, 280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364],
- 6 => [251, 257, 263, 269, 275, 281, 287, 293, 299, 305, 311, 317, 323, 329, 335, 341, 347, 353, 359, 365],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Erde Tree
- {0 => [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94],
- 1 => [612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726],
- 2 => [613, 619, 625, 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, 691, 697, 703, 709, 715, 721, 727],
- 3 => [614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, 692, 698, 704, 710, 716, 722, 728],
- 4 => [615, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 693, 699, 705, 711, 717, 723, 729],
- 5 => [616, 622, 628, 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, 694, 700, 706, 712, 718, 724, 730],
- 6 => [617, 623, 629, 635, 641, 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, 707, 713, 719, 725, 731],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[8] = [
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[9] = [
- # Wasser Tree
- {0 => [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54],
- 1 => [368, 374, 380, 386, 392, 398, 404, 410, 416, 422, 428, 434, 440, 446, 452, 458, 464, 470, 476, 482],
- 2 => [369, 375, 381, 387, 393, 399, 405, 411, 417, 423, 429, 435, 441, 447, 453, 459, 465, 471, 477, 483],
- 3 => [370, 376, 382, 388, 394, 400, 406, 412, 418, 424, 430, 436, 442, 448, 454, 460, 466, 472, 478, 484],
- 4 => [371, 377, 383, 389, 395, 401, 407, 413, 419, 425, 431, 437, 443, 449, 455, 461, 467, 473, 479, 485],
- 5 => [372, 378, 384, 390, 396, 402, 408, 414, 420, 426, 432, 438, 444, 450, 456, 462, 468, 474, 480, 486],
- 6 => [373, 379, 385, 391, 397, 403, 409, 415, 421, 427, 433, 439, 445, 451, 457, 463, 469, 475, 481, 487],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[10] = [
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Erde Tree
- {0 => [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94],
- 1 => [612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726],
- 2 => [613, 619, 625, 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, 691, 697, 703, 709, 715, 721, 727],
- 3 => [614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, 692, 698, 704, 710, 716, 722, 728],
- 4 => [615, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 693, 699, 705, 711, 717, 723, 729],
- 5 => [616, 622, 628, 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, 694, 700, 706, 712, 718, 724, 730],
- 6 => [617, 623, 629, 635, 641, 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, 707, 713, 719, 725, 731],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[11] = [
- # Feuer Tree
- {0 => [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],
- 1 => [246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360],
- 2 => [247, 253, 259, 265, 271, 277, 283, 289, 295, 301, 307, 313, 319, 325, 331, 337, 343, 349, 355, 361],
- 3 => [248, 254, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 332, 338, 344, 350, 356, 362],
- 4 => [249, 255, 261, 267, 273, 279, 285, 291, 297, 303, 309, 315, 321, 327, 333, 339, 345, 351, 357, 363],
- 5 => [250, 256, 262, 268, 274, 280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364],
- 6 => [251, 257, 263, 269, 275, 281, 287, 293, 299, 305, 311, 317, 323, 329, 335, 341, 347, 353, 359, 365],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Erde Tree
- {0 => [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94],
- 1 => [612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726],
- 2 => [613, 619, 625, 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, 691, 697, 703, 709, 715, 721, 727],
- 3 => [614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, 692, 698, 704, 710, 716, 722, 728],
- 4 => [615, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 693, 699, 705, 711, 717, 723, 729],
- 5 => [616, 622, 628, 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, 694, 700, 706, 712, 718, 724, 730],
- 6 => [617, 623, 629, 635, 641, 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, 707, 713, 719, 725, 731],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[12] = [
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Dunkel Tree
- {0 => [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134],
- 1 => [856, 862, 868, 874, 880, 886, 892, 898, 904, 910, 916, 922, 928, 934, 940, 946, 952, 958, 964, 970],
- 2 => [857, 863, 869, 875, 881, 887, 893, 899, 905, 911, 917, 923, 929, 935, 941, 947, 953, 959, 965, 971],
- 3 => [858, 864, 870, 876, 882, 888, 894, 900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966, 972],
- 4 => [859, 865, 871, 877, 883, 889, 895, 901, 907, 913, 919, 925, 931, 937, 943, 949, 955, 961, 967, 973],
- 5 => [860, 866, 872, 878, 884, 890, 896, 902, 908, 914, 920, 926, 932, 938, 944, 950, 956, 962, 968, 974],
- 6 => [861, 867, 873, 879, 885, 891, 897, 903, 909, 915, 921, 927, 933, 939, 945, 951, 957, 963, 969, 975],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[13] = [
- # Wasser Tree
- {0 => [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54],
- 1 => [368, 374, 380, 386, 392, 398, 404, 410, 416, 422, 428, 434, 440, 446, 452, 458, 464, 470, 476, 482],
- 2 => [369, 375, 381, 387, 393, 399, 405, 411, 417, 423, 429, 435, 441, 447, 453, 459, 465, 471, 477, 483],
- 3 => [370, 376, 382, 388, 394, 400, 406, 412, 418, 424, 430, 436, 442, 448, 454, 460, 466, 472, 478, 484],
- 4 => [371, 377, 383, 389, 395, 401, 407, 413, 419, 425, 431, 437, 443, 449, 455, 461, 467, 473, 479, 485],
- 5 => [372, 378, 384, 390, 396, 402, 408, 414, 420, 426, 432, 438, 444, 450, 456, 462, 468, 474, 480, 486],
- 6 => [373, 379, 385, 391, 397, 403, 409, 415, 421, 427, 433, 439, 445, 451, 457, 463, 469, 475, 481, 487],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[14] = [
- # Feuer Tree
- {0 => [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],
- 1 => [246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360],
- 2 => [247, 253, 259, 265, 271, 277, 283, 289, 295, 301, 307, 313, 319, 325, 331, 337, 343, 349, 355, 361],
- 3 => [248, 254, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 332, 338, 344, 350, 356, 362],
- 4 => [249, 255, 261, 267, 273, 279, 285, 291, 297, 303, 309, 315, 321, 327, 333, 339, 345, 351, 357, 363],
- 5 => [250, 256, 262, 268, 274, 280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364],
- 6 => [251, 257, 263, 269, 275, 281, 287, 293, 299, 305, 311, 317, 323, 329, 335, 341, 347, 353, 359, 365],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[15] = [
- # Erde Tree
- {0 => [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94],
- 1 => [612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726],
- 2 => [613, 619, 625, 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, 691, 697, 703, 709, 715, 721, 727],
- 3 => [614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, 692, 698, 704, 710, 716, 722, 728],
- 4 => [615, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 693, 699, 705, 711, 717, 723, 729],
- 5 => [616, 622, 628, 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, 694, 700, 706, 712, 718, 724, 730],
- 6 => [617, 623, 629, 635, 641, 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, 707, 713, 719, 725, 731],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Feuer Tree
- {0 => [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],
- 1 => [246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360],
- 2 => [247, 253, 259, 265, 271, 277, 283, 289, 295, 301, 307, 313, 319, 325, 331, 337, 343, 349, 355, 361],
- 3 => [248, 254, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 332, 338, 344, 350, 356, 362],
- 4 => [249, 255, 261, 267, 273, 279, 285, 291, 297, 303, 309, 315, 321, 327, 333, 339, 345, 351, 357, 363],
- 5 => [250, 256, 262, 268, 274, 280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364],
- 6 => [251, 257, 263, 269, 275, 281, 287, 293, 299, 305, 311, 317, 323, 329, 335, 341, 347, 353, 359, 365],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[16] = [
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Wasser Tree
- {0 => [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54],
- 1 => [368, 374, 380, 386, 392, 398, 404, 410, 416, 422, 428, 434, 440, 446, 452, 458, 464, 470, 476, 482],
- 2 => [369, 375, 381, 387, 393, 399, 405, 411, 417, 423, 429, 435, 441, 447, 453, 459, 465, 471, 477, 483],
- 3 => [370, 376, 382, 388, 394, 400, 406, 412, 418, 424, 430, 436, 442, 448, 454, 460, 466, 472, 478, 484],
- 4 => [371, 377, 383, 389, 395, 401, 407, 413, 419, 425, 431, 437, 443, 449, 455, 461, 467, 473, 479, 485],
- 5 => [372, 378, 384, 390, 396, 402, 408, 414, 420, 426, 432, 438, 444, 450, 456, 462, 468, 474, 480, 486],
- 6 => [373, 379, 385, 391, 397, 403, 409, 415, 421, 427, 433, 439, 445, 451, 457, 463, 469, 475, 481, 487],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[17] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[18] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[19] = [ { 0 => [978, 979, 980],
- 1 => [981, 982, 983],
- 2 => [nil, nil, nil],
- 3 => [nil, nil, nil] } ]
- SKILLS_ROWS[20] = [ { 0 => [978, 979, 980],
- 1 => [981, 982, 983],
- 2 => [nil, nil, nil],
- 3 => [nil, nil, nil] } ]
- SKILLS_ROWS[22] = [ { 0 => [978, 979, 980],
- 1 => [981, 982, 983],
- 2 => [nil, nil, nil],
- 3 => [nil, nil, nil] } ]
- SKILLS_ROWS[23] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[24] = [
- # Feuer Tree
- {0 => [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],
- 1 => [246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360],
- 2 => [247, 253, 259, 265, 271, 277, 283, 289, 295, 301, 307, 313, 319, 325, 331, 337, 343, 349, 355, 361],
- 3 => [248, 254, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 332, 338, 344, 350, 356, 362],
- 4 => [249, 255, 261, 267, 273, 279, 285, 291, 297, 303, 309, 315, 321, 327, 333, 339, 345, 351, 357, 363],
- 5 => [250, 256, 262, 268, 274, 280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364],
- 6 => [251, 257, 263, 269, 275, 281, 287, 293, 299, 305, 311, 317, 323, 329, 335, 341, 347, 353, 359, 365],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[25] = [
- # Wasser Tree
- {0 => [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54],
- 1 => [368, 374, 380, 386, 392, 398, 404, 410, 416, 422, 428, 434, 440, 446, 452, 458, 464, 470, 476, 482],
- 2 => [369, 375, 381, 387, 393, 399, 405, 411, 417, 423, 429, 435, 441, 447, 453, 459, 465, 471, 477, 483],
- 3 => [370, 376, 382, 388, 394, 400, 406, 412, 418, 424, 430, 436, 442, 448, 454, 460, 466, 472, 478, 484],
- 4 => [371, 377, 383, 389, 395, 401, 407, 413, 419, 425, 431, 437, 443, 449, 455, 461, 467, 473, 479, 485],
- 5 => [372, 378, 384, 390, 396, 402, 408, 414, 420, 426, 432, 438, 444, 450, 456, 462, 468, 474, 480, 486],
- 6 => [373, 379, 385, 391, 397, 403, 409, 415, 421, 427, 433, 439, 445, 451, 457, 463, 469, 475, 481, 487],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[26] = [
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[27] = [
- # Erde Tree
- {0 => [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94],
- 1 => [612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726],
- 2 => [613, 619, 625, 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, 691, 697, 703, 709, 715, 721, 727],
- 3 => [614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, 692, 698, 704, 710, 716, 722, 728],
- 4 => [615, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 693, 699, 705, 711, 717, 723, 729],
- 5 => [616, 622, 628, 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, 694, 700, 706, 712, 718, 724, 730],
- 6 => [617, 623, 629, 635, 641, 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, 707, 713, 719, 725, 731],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[28] = [
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[29] = [
- # Dunkel Tree
- {0 => [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134],
- 1 => [856, 862, 868, 874, 880, 886, 892, 898, 904, 910, 916, 922, 928, 934, 940, 946, 952, 958, 964, 970],
- 2 => [857, 863, 869, 875, 881, 887, 893, 899, 905, 911, 917, 923, 929, 935, 941, 947, 953, 959, 965, 971],
- 3 => [858, 864, 870, 876, 882, 888, 894, 900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966, 972],
- 4 => [859, 865, 871, 877, 883, 889, 895, 901, 907, 913, 919, 925, 931, 937, 943, 949, 955, 961, 967, 973],
- 5 => [860, 866, 872, 878, 884, 890, 896, 902, 908, 914, 920, 926, 932, 938, 944, 950, 956, 962, 968, 974],
- 6 => [861, 867, 873, 879, 885, 891, 897, 903, 909, 915, 921, 927, 933, 939, 945, 951, 957, 963, 969, 975],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[30] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[16] = [
- # Licht Tree
- {0 => [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114],
- 1 => [734, 740, 746, 752, 758, 764, 770, 776, 782, 788, 794, 800, 806, 812, 818, 824, 830, 836, 842, 848],
- 2 => [735, 741, 747, 753, 759, 765, 771, 777, 783, 789, 795, 801, 807, 813, 819, 825, 831, 837, 843, 849],
- 3 => [736, 742, 748, 754, 760, 766, 772, 778, 784, 790, 796, 802, 808, 814, 820, 826, 832, 838, 844, 850],
- 4 => [737, 743, 749, 755, 761, 767, 773, 779, 785, 791, 797, 803, 809, 815, 821, 827, 833, 839, 845, 851],
- 5 => [738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852],
- 6 => [739, 745, 751, 757, 763, 769, 775, 781, 787, 793, 799, 805, 811, 817, 823, 829, 835, 841, 847, 853],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Wind Tree
- {0 => [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74],
- 1 => [490, 496, 502, 508, 514, 520, 526, 532, 538, 544, 550, 556, 562, 568, 574, 580, 586, 592, 598, 604],
- 2 => [491, 497, 503, 509, 515, 521, 527, 533, 539, 545, 551, 557, 563, 569, 575, 581, 587, 593, 599, 605],
- 3 => [492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606],
- 4 => [493, 499, 505, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 595, 601, 607],
- 5 => [494, 500, 506, 512, 518, 524, 530, 536, 542, 548, 554, 560, 566, 572, 578, 584, 590, 596, 602, 608],
- 6 => [495, 501, 507, 513, 519, 525, 531, 537, 543, 549, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[32] = [
- # Wasser Tree
- {0 => [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54],
- 1 => [368, 374, 380, 386, 392, 398, 404, 410, 416, 422, 428, 434, 440, 446, 452, 458, 464, 470, 476, 482],
- 2 => [369, 375, 381, 387, 393, 399, 405, 411, 417, 423, 429, 435, 441, 447, 453, 459, 465, 471, 477, 483],
- 3 => [370, 376, 382, 388, 394, 400, 406, 412, 418, 424, 430, 436, 442, 448, 454, 460, 466, 472, 478, 484],
- 4 => [371, 377, 383, 389, 395, 401, 407, 413, 419, 425, 431, 437, 443, 449, 455, 461, 467, 473, 479, 485],
- 5 => [372, 378, 384, 390, 396, 402, 408, 414, 420, 426, 432, 438, 444, 450, 456, 462, 468, 474, 480, 486],
- 6 => [373, 379, 385, 391, 397, 403, 409, 415, 421, 427, 433, 439, 445, 451, 457, 463, 469, 475, 481, 487],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]},
- # Dunkel Tree
- {0 => [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134],
- 1 => [856, 862, 868, 874, 880, 886, 892, 898, 904, 910, 916, 922, 928, 934, 940, 946, 952, 958, 964, 970],
- 2 => [857, 863, 869, 875, 881, 887, 893, 899, 905, 911, 917, 923, 929, 935, 941, 947, 953, 959, 965, 971],
- 3 => [858, 864, 870, 876, 882, 888, 894, 900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966, 972],
- 4 => [859, 865, 871, 877, 883, 889, 895, 901, 907, 913, 919, 925, 931, 937, 943, 949, 955, 961, 967, 973],
- 5 => [860, 866, 872, 878, 884, 890, 896, 902, 908, 914, 920, 926, 932, 938, 944, 950, 956, 962, 968, 974],
- 6 => [861, 867, 873, 879, 885, 891, 897, 903, 909, 915, 921, 927, 933, 939, 945, 951, 957, 963, 969, 975],
- 7 => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]}
- ]
- SKILLS_ROWS[33] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[34] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[35] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[36] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[37] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[38] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[39] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[40] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[41] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[42] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[43] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[44] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- SKILLS_ROWS[45] = [ { 0 => [nil, 57, nil],
- 1 => [nil, nil, 60],
- 2 => [nil, nil, 61],
- 3 => [nil, 62, nil] } ]
- # == THE SKILL TABS ==
- # This set of arrays defines the names of the individual branches in each
- # tree within the system. Not every skill tree need have an array. But if
- # an array is defined, its recommended to have as many 'names' or elements
- # as it does branches. So, if a tree has three branches, each branch should
- # have a name.
- # * * *
- # And if no tab set is defined for a tree, the tabs for each branch in that
- # tree will be blank.
- # -------------------------------------------------------------------------
- SKILLS_TABS = {} # Do Not Touch
- # -------------------------------------------------------------------------
- #
- SKILLS_TABS[1] = ["Licht","Dunkelheit"],
- SKILLS_TABS[2] = ["Dunkelheit","Licht"],
- SKILLS_TABS[3] = ["Dunkelheit","Feuer"],
- SKILLS_TABS[4] = ["Licht","Wasser"],
- SKILLS_TABS[5] = ["Feuer","Erde"],
- SKILLS_TABS[6] = ["Erde","Wind"],
- SKILLS_TABS[7] = ["Feuer","Erde"],
- SKILLS_TABS[8] = ["Erde","Wind"],
- SKILLS_TABS[9] = ["Feuer","Erde"],
- SKILLS_TABS[10] = ["Licht","Erde"],
- SKILLS_TABS[11] = ["Feuer","Erde"],
- SKILLS_TABS[12] = ["Erde","Dunkelheit"],
- SKILLS_TABS[13] = ["Wind","Licht"],
- SKILLS_TABS[14] = ["Feuer","Wasser"],
- SKILLS_TABS[15] = ["Erde","Feuer"],
- SKILLS_TABS[16] = ["Wind","Wasser"],
- SKILLS_TABS[17] = ["Empty"],
- SKILLS_TABS[18] = ["Empty"],
- SKILLS_TABS[19] = ["Göttlich"],
- SKILLS_TABS[20] = ["Göttlich"],
- SKILLS_TABS[21] = ["Göttlich"],
- SKILLS_TABS[22] = ["Göttlich"],
- SKILLS_TABS[23] = ["SCENE"],
- SKILLS_TABS[24] = ["Feuer"],
- SKILLS_TABS[25] = ["Wasser"],
- SKILLS_TABS[26] = ["Wind"],
- SKILLS_TABS[27] = ["Erde"],
- SKILLS_TABS[28] = ["Licht"],
- SKILLS_TABS[29] = ["Dunkelheit"],
- SKILLS_TABS[30] = ["Empty"],
- SKILLS_TABS[31] = ["Wasser","Wind"],
- SKILLS_TABS[32] = ["Wasser","Dunkelheit"]
- SKILLS_TABS[33] = ["Empty"],
- SKILLS_TABS[34] = ["Empty"],
- SKILLS_TABS[35] = ["Empty"],
- SKILLS_TABS[36] = ["Empty"],
- SKILLS_TABS[37] = ["Empty"],
- SKILLS_TABS[38] = ["Empty"],
- SKILLS_TABS[39] = ["Empty"],
- SKILLS_TABS[40] = ["Empty"],
- SKILLS_TABS[41] = ["Empty"],
- SKILLS_TABS[42] = ["Empty"],
- SKILLS_TABS[43] = ["Empty"],
- SKILLS_TABS[44] = ["Empty"],
- SKILLS_TABS[45] = ["Empty"],
- #--------------------------------------------------------------------------
- # * PART IV: SKILL REQUIREMENTS
- #--------------------------------------------------------------------------
- # == POINTS COST ==
- # Default is set to 1, so if you want all your skills to cost 1 skill point,
- # just leave this blank.
- #
- # Skill ID Point Cost for Skill
- # ===================== ======================
- POINT_COST[15] = 1
- POINT_COST[16] = 2
- POINT_COST[17] = 3
- POINT_COST[18] = 4
- POINT_COST[19] = 5
- POINT_COST[20] = 6
- POINT_COST[21] = 7
- POINT_COST[22] = 8
- POINT_COST[23] = 9
- POINT_COST[24] = 10
- POINT_COST[25] = 11
- POINT_COST[26] = 12
- POINT_COST[27] = 13
- POINT_COST[28] = 14
- POINT_COST[29] = 15
- POINT_COST[30] = 16
- POINT_COST[31] = 17
- POINT_COST[32] = 18
- POINT_COST[33] = 19
- POINT_COST[34] = 20
- #===========Wasser===========
- POINT_COST[36] = 2
- POINT_COST[37] = 3
- POINT_COST[38] = 4
- POINT_COST[39] = 5
- POINT_COST[40] = 6
- POINT_COST[41] = 7
- POINT_COST[42] = 8
- POINT_COST[43] = 9
- POINT_COST[44] = 10
- POINT_COST[45] = 11
- POINT_COST[46] = 12
- POINT_COST[47] = 13
- POINT_COST[48] = 14
- POINT_COST[49] = 15
- POINT_COST[50] = 16
- POINT_COST[51] = 17
- POINT_COST[52] = 18
- POINT_COST[53] = 19
- POINT_COST[54] = 20
- #===========Wind=============
- POINT_COST[56] = 2
- POINT_COST[57] = 3
- POINT_COST[58] = 4
- POINT_COST[59] = 5
- POINT_COST[60] = 6
- POINT_COST[61] = 7
- POINT_COST[62] = 8
- POINT_COST[63] = 9
- POINT_COST[64] = 10
- POINT_COST[65] = 11
- POINT_COST[66] = 12
- POINT_COST[67] = 13
- POINT_COST[68] = 14
- POINT_COST[69] = 15
- POINT_COST[70] = 16
- POINT_COST[71] = 17
- POINT_COST[72] = 18
- POINT_COST[73] = 19
- POINT_COST[74] = 20
- #===========Erde=============
- POINT_COST[76] = 2
- POINT_COST[77] = 3
- POINT_COST[78] = 4
- POINT_COST[79] = 5
- POINT_COST[80] = 6
- POINT_COST[81] = 7
- POINT_COST[82] = 8
- POINT_COST[83] = 9
- POINT_COST[84] = 10
- POINT_COST[85] = 11
- POINT_COST[86] = 12
- POINT_COST[87] = 13
- POINT_COST[88] = 14
- POINT_COST[89] = 15
- POINT_COST[90] = 16
- POINT_COST[91] = 17
- POINT_COST[92] = 18
- POINT_COST[93] = 19
- POINT_COST[94] = 20
- #===========Licht=============
- POINT_COST[96] = 2
- POINT_COST[97] = 3
- POINT_COST[98] = 4
- POINT_COST[99] = 5
- POINT_COST[100] = 6
- POINT_COST[101] = 7
- POINT_COST[102] = 8
- POINT_COST[103] = 9
- POINT_COST[104] = 10
- POINT_COST[105] = 11
- POINT_COST[106] = 12
- POINT_COST[107] = 13
- POINT_COST[108] = 14
- POINT_COST[109] = 15
- POINT_COST[110] = 16
- POINT_COST[111] = 17
- POINT_COST[112] = 18
- POINT_COST[113] = 19
- POINT_COST[114] = 20
- #===========Dunkel=============
- POINT_COST[116] = 2
- POINT_COST[117] = 3
- POINT_COST[118] = 4
- POINT_COST[119] = 5
- POINT_COST[120] = 6
- POINT_COST[121] = 7
- POINT_COST[122] = 8
- POINT_COST[123] = 9
- POINT_COST[124] = 10
- POINT_COST[125] = 11
- POINT_COST[126] = 12
- POINT_COST[127] = 13
- POINT_COST[128] = 14
- POINT_COST[129] = 15
- POINT_COST[130] = 16
- POINT_COST[131] = 17
- POINT_COST[132] = 18
- POINT_COST[133] = 19
- POINT_COST[134] = 20
- # == TREE SYSTEM SPENDING POINTS ==
- # Skills are only unlocked when 'X' amount of points have been spent in
- # total within the skill tree.
- #
- # Skill ID Prerequisite Skill IDs
- # ===================== ======================
- TREE_COST[1] = 0
- # TREE_COST[10] = 5 # Must spend at least 5 points in total
- # TREE_COST[14] = 4
- # TREE_COST[19] = 5
- # TREE_COST[21] = 10
- # TREE_COST[26] = 10
- # TREE_COST[27] = 15 # Must spend at least 15 points in total
- # TREE_COST[30] = 15
- # TREE_COST[33] = 20
- # == RANK ==
- # Skills that may increase and change when more points are applied.
- # The actual skill increases to the next one in the array.
- #
- RANKS[1] = [2,3,4,5]
- # RANKS[7] = [8,9]
- # RANKS[10] = [11,12]
- # RANKS[14] = [15,16,17,18]
- # == POINT_COST ==
- # Skills that are required before gaining the new one. You can assign
- # a skill to have one or more 'required' skills which must be learned
- # before access is granted through the tree. If the skill ID given is
- # of a ranked skill, the ranked skill must be at its maximum level be-
- # fore the skill is attainable
- #
- # Skill ID Prerequisite Skill IDs
- # ===================== ======================
- #===========Feuer===========
- PREREQUISITES[16] = 15
- PREREQUISITES[17] = 16
- PREREQUISITES[18] = 17
- PREREQUISITES[19] = 18
- PREREQUISITES[20] = 19
- PREREQUISITES[21] = 20
- PREREQUISITES[22] = 21
- PREREQUISITES[23] = 22
- PREREQUISITES[24] = 23
- PREREQUISITES[25] = 24
- PREREQUISITES[26] = 25
- PREREQUISITES[27] = 26
- PREREQUISITES[28] = 27
- PREREQUISITES[29] = 28
- PREREQUISITES[30] = 29
- PREREQUISITES[31] = 30
- PREREQUISITES[32] = 31
- PREREQUISITES[33] = 32
- PREREQUISITES[34] = 33
- PREREQUISITES[246] = 15
- PREREQUISITES[247] = 15
- PREREQUISITES[248] = 15
- PREREQUISITES[249] = 15
- PREREQUISITES[250] = 15
- PREREQUISITES[251] = 15
- PREREQUISITES[252] = 16
- PREREQUISITES[253] = 16
- PREREQUISITES[254] = 16
- PREREQUISITES[255] = 16
- PREREQUISITES[256] = 16
- PREREQUISITES[257] = 16
- PREREQUISITES[258] = 17
- PREREQUISITES[259] = 17
- PREREQUISITES[260] = 17
- PREREQUISITES[261] = 17
- PREREQUISITES[262] = 17
- PREREQUISITES[263] = 17
- PREREQUISITES[264] = 18
- PREREQUISITES[265] = 18
- PREREQUISITES[266] = 18
- PREREQUISITES[267] = 18
- PREREQUISITES[268] = 18
- PREREQUISITES[269] = 18
- PREREQUISITES[270] = 19
- PREREQUISITES[271] = 19
- PREREQUISITES[272] = 19
- PREREQUISITES[273] = 19
- PREREQUISITES[274] = 19
- PREREQUISITES[275] = 19
- PREREQUISITES[276] = 20
- PREREQUISITES[277] = 20
- PREREQUISITES[278] = 20
- PREREQUISITES[279] = 20
- PREREQUISITES[280] = 20
- PREREQUISITES[281] = 20
- PREREQUISITES[282] = 21
- PREREQUISITES[283] = 21
- PREREQUISITES[284] = 21
- PREREQUISITES[285] = 21
- PREREQUISITES[286] = 21
- PREREQUISITES[287] = 21
- PREREQUISITES[288] = 22
- PREREQUISITES[289] = 22
- PREREQUISITES[290] = 22
- PREREQUISITES[291] = 22
- PREREQUISITES[292] = 22
- PREREQUISITES[293] = 22
- PREREQUISITES[294] = 23
- PREREQUISITES[295] = 23
- PREREQUISITES[296] = 23
- PREREQUISITES[297] = 23
- PREREQUISITES[298] = 23
- PREREQUISITES[299] = 23
- PREREQUISITES[300] = 24
- PREREQUISITES[301] = 24
- PREREQUISITES[302] = 24
- PREREQUISITES[303] = 24
- PREREQUISITES[304] = 24
- PREREQUISITES[305] = 24
- PREREQUISITES[306] = 25
- PREREQUISITES[307] = 25
- PREREQUISITES[308] = 25
- PREREQUISITES[309] = 25
- PREREQUISITES[310] = 25
- PREREQUISITES[311] = 25
- PREREQUISITES[312] = 26
- PREREQUISITES[313] = 26
- PREREQUISITES[314] = 26
- PREREQUISITES[315] = 26
- PREREQUISITES[316] = 26
- PREREQUISITES[317] = 26
- PREREQUISITES[318] = 27
- PREREQUISITES[319] = 27
- PREREQUISITES[320] = 27
- PREREQUISITES[321] = 27
- PREREQUISITES[322] = 27
- PREREQUISITES[323] = 27
- PREREQUISITES[324] = 28
- PREREQUISITES[325] = 28
- PREREQUISITES[326] = 28
- PREREQUISITES[327] = 28
- PREREQUISITES[328] = 28
- PREREQUISITES[329] = 28
- PREREQUISITES[330] = 29
- PREREQUISITES[331] = 29
- PREREQUISITES[332] = 29
- PREREQUISITES[333] = 29
- PREREQUISITES[334] = 29
- PREREQUISITES[335] = 29
- PREREQUISITES[336] = 30
- PREREQUISITES[337] = 30
- PREREQUISITES[338] = 30
- PREREQUISITES[339] = 30
- PREREQUISITES[340] = 30
- PREREQUISITES[341] = 30
- PREREQUISITES[342] = 31
- PREREQUISITES[343] = 31
- PREREQUISITES[344] = 31
- PREREQUISITES[345] = 31
- PREREQUISITES[346] = 31
- PREREQUISITES[347] = 31
- PREREQUISITES[348] = 32
- PREREQUISITES[349] = 32
- PREREQUISITES[350] = 32
- PREREQUISITES[351] = 32
- PREREQUISITES[352] = 32
- PREREQUISITES[353] = 32
- PREREQUISITES[354] = 33
- PREREQUISITES[355] = 33
- PREREQUISITES[356] = 33
- PREREQUISITES[357] = 33
- PREREQUISITES[358] = 33
- PREREQUISITES[359] = 33
- PREREQUISITES[360] = 34
- PREREQUISITES[361] = 34
- PREREQUISITES[362] = 34
- PREREQUISITES[363] = 34
- PREREQUISITES[364] = 34
- PREREQUISITES[365] = 34
- #===========Wasser===========
- PREREQUISITES[36] = 35
- PREREQUISITES[37] = 36
- PREREQUISITES[38] = 37
- PREREQUISITES[39] = 38
- PREREQUISITES[40] = 39
- PREREQUISITES[41] = 40
- PREREQUISITES[42] = 41
- PREREQUISITES[43] = 42
- PREREQUISITES[44] = 43
- PREREQUISITES[45] = 44
- PREREQUISITES[46] = 45
- PREREQUISITES[47] = 46
- PREREQUISITES[48] = 47
- PREREQUISITES[49] = 48
- PREREQUISITES[50] = 49
- PREREQUISITES[51] = 50
- PREREQUISITES[52] = 51
- PREREQUISITES[53] = 52
- PREREQUISITES[54] = 53
- PREREQUISITES[368] = 35
- PREREQUISITES[369] = 35
- PREREQUISITES[370] = 35
- PREREQUISITES[371] = 35
- PREREQUISITES[372] = 35
- PREREQUISITES[373] = 35
- PREREQUISITES[374] = 36
- PREREQUISITES[375] = 36
- PREREQUISITES[376] = 36
- PREREQUISITES[377] = 36
- PREREQUISITES[378] = 36
- PREREQUISITES[379] = 36
- PREREQUISITES[380] = 37
- PREREQUISITES[381] = 37
- PREREQUISITES[382] = 37
- PREREQUISITES[383] = 37
- PREREQUISITES[384] = 37
- PREREQUISITES[385] = 37
- PREREQUISITES[386] = 38
- PREREQUISITES[387] = 38
- PREREQUISITES[388] = 38
- PREREQUISITES[389] = 38
- PREREQUISITES[390] = 38
- PREREQUISITES[391] = 38
- PREREQUISITES[392] = 39
- PREREQUISITES[393] = 39
- PREREQUISITES[394] = 39
- PREREQUISITES[395] = 39
- PREREQUISITES[396] = 39
- PREREQUISITES[397] = 39
- PREREQUISITES[398] = 40
- PREREQUISITES[399] = 40
- PREREQUISITES[400] = 40
- PREREQUISITES[401] = 40
- PREREQUISITES[402] = 40
- PREREQUISITES[403] = 40
- PREREQUISITES[404] = 41
- PREREQUISITES[405] = 41
- PREREQUISITES[406] = 41
- PREREQUISITES[407] = 41
- PREREQUISITES[408] = 41
- PREREQUISITES[409] = 41
- PREREQUISITES[410] = 42
- PREREQUISITES[411] = 42
- PREREQUISITES[412] = 42
- PREREQUISITES[413] = 42
- PREREQUISITES[414] = 42
- PREREQUISITES[415] = 42
- PREREQUISITES[416] = 43
- PREREQUISITES[417] = 43
- PREREQUISITES[418] = 43
- PREREQUISITES[419] = 43
- PREREQUISITES[420] = 43
- PREREQUISITES[421] = 43
- PREREQUISITES[422] = 44
- PREREQUISITES[423] = 44
- PREREQUISITES[424] = 44
- PREREQUISITES[425] = 44
- PREREQUISITES[426] = 44
- PREREQUISITES[427] = 44
- PREREQUISITES[428] = 45
- PREREQUISITES[429] = 45
- PREREQUISITES[430] = 45
- PREREQUISITES[431] = 45
- PREREQUISITES[432] = 45
- PREREQUISITES[433] = 45
- PREREQUISITES[434] = 46
- PREREQUISITES[435] = 46
- PREREQUISITES[436] = 46
- PREREQUISITES[437] = 46
- PREREQUISITES[438] = 46
- PREREQUISITES[439] = 46
- PREREQUISITES[440] = 47
- PREREQUISITES[441] = 47
- PREREQUISITES[442] = 47
- PREREQUISITES[443] = 47
- PREREQUISITES[444] = 47
- PREREQUISITES[445] = 47
- PREREQUISITES[446] = 48
- PREREQUISITES[447] = 48
- PREREQUISITES[448] = 48
- PREREQUISITES[449] = 48
- PREREQUISITES[450] = 48
- PREREQUISITES[451] = 48
- PREREQUISITES[452] = 49
- PREREQUISITES[453] = 49
- PREREQUISITES[454] = 49
- PREREQUISITES[455] = 49
- PREREQUISITES[456] = 49
- PREREQUISITES[457] = 49
- PREREQUISITES[458] = 50
- PREREQUISITES[459] = 50
- PREREQUISITES[460] = 50
- PREREQUISITES[461] = 50
- PREREQUISITES[462] = 50
- PREREQUISITES[463] = 50
- PREREQUISITES[464] = 51
- PREREQUISITES[465] = 51
- PREREQUISITES[466] = 51
- PREREQUISITES[467] = 51
- PREREQUISITES[468] = 51
- PREREQUISITES[469] = 51
- PREREQUISITES[470] = 52
- PREREQUISITES[471] = 52
- PREREQUISITES[472] = 52
- PREREQUISITES[473] = 52
- PREREQUISITES[474] = 52
- PREREQUISITES[475] = 52
- PREREQUISITES[476] = 53
- PREREQUISITES[477] = 53
- PREREQUISITES[478] = 53
- PREREQUISITES[479] = 53
- PREREQUISITES[480] = 53
- PREREQUISITES[481] = 53
- PREREQUISITES[482] = 54
- PREREQUISITES[483] = 54
- PREREQUISITES[484] = 54
- PREREQUISITES[485] = 54
- PREREQUISITES[486] = 54
- PREREQUISITES[487] = 54
- #===========Wind=============
- PREREQUISITES[56] = 55
- PREREQUISITES[57] = 56
- PREREQUISITES[58] = 57
- PREREQUISITES[59] = 58
- PREREQUISITES[60] = 59
- PREREQUISITES[61] = 60
- PREREQUISITES[62] = 61
- PREREQUISITES[63] = 62
- PREREQUISITES[64] = 63
- PREREQUISITES[65] = 64
- PREREQUISITES[66] = 65
- PREREQUISITES[67] = 66
- PREREQUISITES[68] = 67
- PREREQUISITES[69] = 68
- PREREQUISITES[70] = 69
- PREREQUISITES[71] = 70
- PREREQUISITES[72] = 71
- PREREQUISITES[73] = 72
- PREREQUISITES[74] = 73
- PREREQUISITES[490] = 55
- PREREQUISITES[491] = 55
- PREREQUISITES[492] = 55
- PREREQUISITES[493] = 55
- PREREQUISITES[494] = 55
- PREREQUISITES[495] = 55
- PREREQUISITES[496] = 56
- PREREQUISITES[497] = 56
- PREREQUISITES[498] = 56
- PREREQUISITES[499] = 56
- PREREQUISITES[500] = 56
- PREREQUISITES[501] = 56
- PREREQUISITES[502] = 57
- PREREQUISITES[503] = 57
- PREREQUISITES[504] = 57
- PREREQUISITES[505] = 57
- PREREQUISITES[506] = 57
- PREREQUISITES[507] = 57
- PREREQUISITES[508] = 58
- PREREQUISITES[509] = 58
- PREREQUISITES[510] = 58
- PREREQUISITES[511] = 58
- PREREQUISITES[512] = 58
- PREREQUISITES[513] = 58
- PREREQUISITES[514] = 59
- PREREQUISITES[515] = 59
- PREREQUISITES[516] = 59
- PREREQUISITES[517] = 59
- PREREQUISITES[518] = 59
- PREREQUISITES[519] = 59
- PREREQUISITES[520] = 60
- PREREQUISITES[521] = 60
- PREREQUISITES[522] = 60
- PREREQUISITES[523] = 60
- PREREQUISITES[524] = 60
- PREREQUISITES[525] = 60
- PREREQUISITES[526] = 61
- PREREQUISITES[527] = 61
- PREREQUISITES[528] = 61
- PREREQUISITES[529] = 61
- PREREQUISITES[530] = 61
- PREREQUISITES[531] = 61
- PREREQUISITES[532] = 62
- PREREQUISITES[533] = 62
- PREREQUISITES[534] = 62
- PREREQUISITES[535] = 62
- PREREQUISITES[536] = 62
- PREREQUISITES[537] = 62
- PREREQUISITES[538] = 63
- PREREQUISITES[539] = 63
- PREREQUISITES[540] = 63
- PREREQUISITES[541] = 63
- PREREQUISITES[542] = 63
- PREREQUISITES[543] = 63
- PREREQUISITES[544] = 64
- PREREQUISITES[545] = 64
- PREREQUISITES[546] = 64
- PREREQUISITES[547] = 64
- PREREQUISITES[548] = 64
- PREREQUISITES[549] = 64
- PREREQUISITES[550] = 65
- PREREQUISITES[551] = 65
- PREREQUISITES[552] = 65
- PREREQUISITES[553] = 65
- PREREQUISITES[554] = 65
- PREREQUISITES[555] = 65
- PREREQUISITES[556] = 66
- PREREQUISITES[557] = 66
- PREREQUISITES[558] = 66
- PREREQUISITES[559] = 66
- PREREQUISITES[560] = 66
- PREREQUISITES[561] = 66
- PREREQUISITES[562] = 67
- PREREQUISITES[563] = 67
- PREREQUISITES[564] = 67
- PREREQUISITES[565] = 67
- PREREQUISITES[566] = 67
- PREREQUISITES[567] = 67
- PREREQUISITES[568] = 68
- PREREQUISITES[569] = 68
- PREREQUISITES[570] = 68
- PREREQUISITES[571] = 68
- PREREQUISITES[572] = 68
- PREREQUISITES[573] = 68
- PREREQUISITES[574] = 69
- PREREQUISITES[575] = 69
- PREREQUISITES[576] = 69
- PREREQUISITES[577] = 69
- PREREQUISITES[578] = 69
- PREREQUISITES[579] = 69
- PREREQUISITES[580] = 70
- PREREQUISITES[581] = 70
- PREREQUISITES[582] = 70
- PREREQUISITES[583] = 70
- PREREQUISITES[584] = 70
- PREREQUISITES[585] = 70
- PREREQUISITES[586] = 71
- PREREQUISITES[587] = 71
- PREREQUISITES[588] = 71
- PREREQUISITES[589] = 71
- PREREQUISITES[590] = 71
- PREREQUISITES[591] = 71
- PREREQUISITES[592] = 72
- PREREQUISITES[593] = 72
- PREREQUISITES[594] = 72
- PREREQUISITES[595] = 72
- PREREQUISITES[596] = 72
- PREREQUISITES[597] = 72
- PREREQUISITES[598] = 73
- PREREQUISITES[599] = 73
- PREREQUISITES[600] = 73
- PREREQUISITES[601] = 73
- PREREQUISITES[602] = 73
- PREREQUISITES[603] = 73
- PREREQUISITES[604] = 74
- PREREQUISITES[605] = 74
- PREREQUISITES[606] = 74
- PREREQUISITES[607] = 74
- PREREQUISITES[608] = 74
- PREREQUISITES[609] = 74
- #===========Erde=============
- PREREQUISITES[76] = 75
- PREREQUISITES[77] = 76
- PREREQUISITES[78] = 77
- PREREQUISITES[79] = 78
- PREREQUISITES[80] = 79
- PREREQUISITES[81] = 80
- PREREQUISITES[82] = 81
- PREREQUISITES[83] = 82
- PREREQUISITES[84] = 83
- PREREQUISITES[85] = 84
- PREREQUISITES[86] = 85
- PREREQUISITES[87] = 86
- PREREQUISITES[88] = 87
- PREREQUISITES[89] = 88
- PREREQUISITES[90] = 89
- PREREQUISITES[91] = 90
- PREREQUISITES[92] = 91
- PREREQUISITES[93] = 92
- PREREQUISITES[94] = 93
- PREREQUISITES[612] = 75
- PREREQUISITES[613] = 75
- PREREQUISITES[614] = 75
- PREREQUISITES[615] = 75
- PREREQUISITES[616] = 75
- PREREQUISITES[617] = 75
- PREREQUISITES[618] = 76
- PREREQUISITES[619] = 76
- PREREQUISITES[620] = 76
- PREREQUISITES[621] = 76
- PREREQUISITES[622] = 76
- PREREQUISITES[623] = 76
- PREREQUISITES[624] = 77
- PREREQUISITES[625] = 77
- PREREQUISITES[626] = 77
- PREREQUISITES[627] = 77
- PREREQUISITES[628] = 77
- PREREQUISITES[629] = 77
- PREREQUISITES[630] = 78
- PREREQUISITES[631] = 78
- PREREQUISITES[632] = 78
- PREREQUISITES[633] = 78
- PREREQUISITES[634] = 78
- PREREQUISITES[635] = 78
- PREREQUISITES[636] = 79
- PREREQUISITES[637] = 79
- PREREQUISITES[638] = 79
- PREREQUISITES[639] = 79
- PREREQUISITES[640] = 79
- PREREQUISITES[641] = 79
- PREREQUISITES[642] = 80
- PREREQUISITES[643] = 80
- PREREQUISITES[644] = 80
- PREREQUISITES[645] = 80
- PREREQUISITES[646] = 80
- PREREQUISITES[647] = 80
- PREREQUISITES[648] = 81
- PREREQUISITES[649] = 81
- PREREQUISITES[650] = 81
- PREREQUISITES[651] = 81
- PREREQUISITES[652] = 81
- PREREQUISITES[653] = 81
- PREREQUISITES[654] = 82
- PREREQUISITES[655] = 82
- PREREQUISITES[656] = 82
- PREREQUISITES[657] = 82
- PREREQUISITES[658] = 82
- PREREQUISITES[659] = 82
- PREREQUISITES[660] = 83
- PREREQUISITES[661] = 83
- PREREQUISITES[662] = 83
- PREREQUISITES[663] = 83
- PREREQUISITES[664] = 83
- PREREQUISITES[665] = 83
- PREREQUISITES[666] = 84
- PREREQUISITES[667] = 84
- PREREQUISITES[668] = 84
- PREREQUISITES[669] = 84
- PREREQUISITES[670] = 84
- PREREQUISITES[671] = 84
- PREREQUISITES[672] = 85
- PREREQUISITES[673] = 85
- PREREQUISITES[674] = 85
- PREREQUISITES[675] = 85
- PREREQUISITES[676] = 85
- PREREQUISITES[677] = 85
- PREREQUISITES[678] = 86
- PREREQUISITES[679] = 86
- PREREQUISITES[680] = 86
- PREREQUISITES[681] = 86
- PREREQUISITES[682] = 86
- PREREQUISITES[683] = 86
- PREREQUISITES[684] = 87
- PREREQUISITES[685] = 87
- PREREQUISITES[686] = 87
- PREREQUISITES[687] = 87
- PREREQUISITES[688] = 87
- PREREQUISITES[689] = 87
- PREREQUISITES[690] = 88
- PREREQUISITES[691] = 88
- PREREQUISITES[692] = 88
- PREREQUISITES[693] = 88
- PREREQUISITES[694] = 88
- PREREQUISITES[695] = 88
- PREREQUISITES[696] = 89
- PREREQUISITES[697] = 89
- PREREQUISITES[698] = 89
- PREREQUISITES[699] = 89
- PREREQUISITES[700] = 89
- PREREQUISITES[701] = 89
- PREREQUISITES[702] = 90
- PREREQUISITES[703] = 90
- PREREQUISITES[704] = 90
- PREREQUISITES[705] = 90
- PREREQUISITES[706] = 90
- PREREQUISITES[707] = 90
- PREREQUISITES[708] = 91
- PREREQUISITES[709] = 91
- PREREQUISITES[710] = 91
- PREREQUISITES[711] = 91
- PREREQUISITES[712] = 91
- PREREQUISITES[713] = 91
- PREREQUISITES[714] = 92
- PREREQUISITES[715] = 92
- PREREQUISITES[716] = 92
- PREREQUISITES[717] = 92
- PREREQUISITES[718] = 92
- PREREQUISITES[719] = 92
- PREREQUISITES[720] = 93
- PREREQUISITES[721] = 93
- PREREQUISITES[722] = 93
- PREREQUISITES[723] = 93
- PREREQUISITES[724] = 93
- PREREQUISITES[725] = 93
- PREREQUISITES[726] = 94
- PREREQUISITES[727] = 94
- PREREQUISITES[728] = 94
- PREREQUISITES[729] = 94
- PREREQUISITES[730] = 94
- PREREQUISITES[731] = 94
- #===========Licht=============
- PREREQUISITES[96] = 95
- PREREQUISITES[97] = 96
- PREREQUISITES[98] = 97
- PREREQUISITES[99] = 98
- PREREQUISITES[100] = 99
- PREREQUISITES[101] = 100
- PREREQUISITES[102] = 101
- PREREQUISITES[103] = 102
- PREREQUISITES[104] = 103
- PREREQUISITES[105] = 104
- PREREQUISITES[106] = 105
- PREREQUISITES[107] = 106
- PREREQUISITES[108] = 107
- PREREQUISITES[109] = 108
- PREREQUISITES[110] = 109
- PREREQUISITES[111] = 110
- PREREQUISITES[112] = 111
- PREREQUISITES[113] = 112
- PREREQUISITES[114] = 113
- PREREQUISITES[734] = 95
- PREREQUISITES[735] = 95
- PREREQUISITES[736] = 95
- PREREQUISITES[737] = 95
- PREREQUISITES[738] = 95
- PREREQUISITES[739] = 95
- PREREQUISITES[740] = 96
- PREREQUISITES[741] = 96
- PREREQUISITES[742] = 96
- PREREQUISITES[743] = 96
- PREREQUISITES[744] = 96
- PREREQUISITES[745] = 96
- PREREQUISITES[746] = 97
- PREREQUISITES[747] = 97
- PREREQUISITES[748] = 97
- PREREQUISITES[749] = 97
- PREREQUISITES[750] = 97
- PREREQUISITES[751] = 97
- PREREQUISITES[752] = 98
- PREREQUISITES[753] = 98
- PREREQUISITES[754] = 98
- PREREQUISITES[755] = 98
- PREREQUISITES[756] = 98
- PREREQUISITES[757] = 98
- PREREQUISITES[758] = 99
- PREREQUISITES[759] = 99
- PREREQUISITES[760] = 99
- PREREQUISITES[761] = 99
- PREREQUISITES[762] = 99
- PREREQUISITES[763] = 99
- PREREQUISITES[764] = 100
- PREREQUISITES[765] = 100
- PREREQUISITES[766] = 100
- PREREQUISITES[767] = 100
- PREREQUISITES[768] = 100
- PREREQUISITES[769] = 100
- PREREQUISITES[770] = 101
- PREREQUISITES[771] = 101
- PREREQUISITES[772] = 101
- PREREQUISITES[773] = 101
- PREREQUISITES[774] = 101
- PREREQUISITES[775] = 101
- PREREQUISITES[776] = 102
- PREREQUISITES[777] = 102
- PREREQUISITES[778] = 102
- PREREQUISITES[779] = 102
- PREREQUISITES[780] = 102
- PREREQUISITES[781] = 102
- PREREQUISITES[782] = 103
- PREREQUISITES[673] = 103
- PREREQUISITES[784] = 103
- PREREQUISITES[785] = 103
- PREREQUISITES[786] = 103
- PREREQUISITES[787] = 103
- PREREQUISITES[788] = 104
- PREREQUISITES[789] = 104
- PREREQUISITES[790] = 104
- PREREQUISITES[791] = 104
- PREREQUISITES[792] = 104
- PREREQUISITES[793] = 104
- PREREQUISITES[794] = 105
- PREREQUISITES[795] = 105
- PREREQUISITES[796] = 105
- PREREQUISITES[797] = 105
- PREREQUISITES[798] = 105
- PREREQUISITES[799] = 105
- PREREQUISITES[800] = 106
- PREREQUISITES[801] = 106
- PREREQUISITES[802] = 106
- PREREQUISITES[803] = 106
- PREREQUISITES[804] = 106
- PREREQUISITES[805] = 106
- PREREQUISITES[806] = 107
- PREREQUISITES[807] = 107
- PREREQUISITES[808] = 107
- PREREQUISITES[809] = 107
- PREREQUISITES[810] = 107
- PREREQUISITES[811] = 107
- PREREQUISITES[812] = 108
- PREREQUISITES[813] = 108
- PREREQUISITES[814] = 108
- PREREQUISITES[815] = 108
- PREREQUISITES[816] = 108
- PREREQUISITES[817] = 108
- PREREQUISITES[818] = 109
- PREREQUISITES[819] = 109
- PREREQUISITES[820] = 109
- PREREQUISITES[821] = 109
- PREREQUISITES[822] = 109
- PREREQUISITES[823] = 109
- PREREQUISITES[824] = 110
- PREREQUISITES[825] = 110
- PREREQUISITES[826] = 110
- PREREQUISITES[827] = 110
- PREREQUISITES[828] = 110
- PREREQUISITES[829] = 110
- PREREQUISITES[830] = 111
- PREREQUISITES[831] = 111
- PREREQUISITES[832] = 111
- PREREQUISITES[833] = 111
- PREREQUISITES[834] = 111
- PREREQUISITES[835] = 111
- PREREQUISITES[836] = 112
- PREREQUISITES[837] = 112
- PREREQUISITES[838] = 112
- PREREQUISITES[839] = 112
- PREREQUISITES[840] = 112
- PREREQUISITES[841] = 112
- PREREQUISITES[842] = 113
- PREREQUISITES[843] = 113
- PREREQUISITES[844] = 113
- PREREQUISITES[845] = 113
- PREREQUISITES[846] = 113
- PREREQUISITES[847] = 113
- PREREQUISITES[848] = 114
- PREREQUISITES[849] = 114
- PREREQUISITES[850] = 114
- PREREQUISITES[851] = 114
- PREREQUISITES[852] = 114
- PREREQUISITES[853] = 114
- #===========Dunkel=============
- PREREQUISITES[116] = 115
- PREREQUISITES[117] = 116
- PREREQUISITES[118] = 117
- PREREQUISITES[119] = 118
- PREREQUISITES[120] = 119
- PREREQUISITES[121] = 120
- PREREQUISITES[122] = 121
- PREREQUISITES[123] = 122
- PREREQUISITES[124] = 123
- PREREQUISITES[125] = 124
- PREREQUISITES[126] = 125
- PREREQUISITES[127] = 126
- PREREQUISITES[128] = 127
- PREREQUISITES[129] = 128
- PREREQUISITES[130] = 129
- PREREQUISITES[131] = 130
- PREREQUISITES[132] = 131
- PREREQUISITES[133] = 132
- PREREQUISITES[134] = 133
- PREREQUISITES[856] = 115
- PREREQUISITES[857] = 115
- PREREQUISITES[858] = 115
- PREREQUISITES[859] = 115
- PREREQUISITES[860] = 115
- PREREQUISITES[861] = 115
- PREREQUISITES[862] = 116
- PREREQUISITES[863] = 116
- PREREQUISITES[864] = 116
- PREREQUISITES[865] = 116
- PREREQUISITES[866] = 116
- PREREQUISITES[867] = 116
- PREREQUISITES[868] = 117
- PREREQUISITES[869] = 117
- PREREQUISITES[870] = 117
- PREREQUISITES[871] = 117
- PREREQUISITES[872] = 117
- PREREQUISITES[873] = 117
- PREREQUISITES[874] = 118
- PREREQUISITES[875] = 118
- PREREQUISITES[876] = 118
- PREREQUISITES[877] = 118
- PREREQUISITES[878] = 118
- PREREQUISITES[879] = 118
- PREREQUISITES[880] = 119
- PREREQUISITES[881] = 119
- PREREQUISITES[882] = 119
- PREREQUISITES[883] = 119
- PREREQUISITES[884] = 119
- PREREQUISITES[885] = 119
- PREREQUISITES[886] = 120
- PREREQUISITES[887] = 120
- PREREQUISITES[888] = 120
- PREREQUISITES[889] = 120
- PREREQUISITES[890] = 120
- PREREQUISITES[891] = 120
- PREREQUISITES[892] = 121
- PREREQUISITES[893] = 121
- PREREQUISITES[894] = 121
- PREREQUISITES[895] = 121
- PREREQUISITES[896] = 121
- PREREQUISITES[897] = 121
- PREREQUISITES[898] = 122
- PREREQUISITES[899] = 122
- PREREQUISITES[900] = 122
- PREREQUISITES[901] = 122
- PREREQUISITES[902] = 122
- PREREQUISITES[903] = 122
- PREREQUISITES[904] = 123
- PREREQUISITES[905] = 123
- PREREQUISITES[906] = 123
- PREREQUISITES[907] = 123
- PREREQUISITES[908] = 123
- PREREQUISITES[909] = 123
- PREREQUISITES[910] = 124
- PREREQUISITES[911] = 124
- PREREQUISITES[912] = 124
- PREREQUISITES[913] = 124
- PREREQUISITES[914] = 124
- PREREQUISITES[915] = 124
- PREREQUISITES[916] = 125
- PREREQUISITES[917] = 125
- PREREQUISITES[918] = 125
- PREREQUISITES[919] = 125
- PREREQUISITES[920] = 125
- PREREQUISITES[921] = 125
- PREREQUISITES[922] = 126
- PREREQUISITES[923] = 126
- PREREQUISITES[924] = 126
- PREREQUISITES[925] = 126
- PREREQUISITES[926] = 126
- PREREQUISITES[927] = 126
- PREREQUISITES[928] = 127
- PREREQUISITES[929] = 127
- PREREQUISITES[930] = 127
- PREREQUISITES[931] = 127
- PREREQUISITES[932] = 127
- PREREQUISITES[933] = 127
- PREREQUISITES[934] = 128
- PREREQUISITES[935] = 128
- PREREQUISITES[936] = 128
- PREREQUISITES[937] = 128
- PREREQUISITES[938] = 128
- PREREQUISITES[939] = 128
- PREREQUISITES[940] = 129
- PREREQUISITES[941] = 129
- PREREQUISITES[942] = 129
- PREREQUISITES[943] = 129
- PREREQUISITES[944] = 129
- PREREQUISITES[945] = 129
- PREREQUISITES[946] = 130
- PREREQUISITES[947] = 130
- PREREQUISITES[948] = 130
- PREREQUISITES[949] = 130
- PREREQUISITES[950] = 130
- PREREQUISITES[951] = 130
- PREREQUISITES[952] = 131
- PREREQUISITES[953] = 131
- PREREQUISITES[954] = 131
- PREREQUISITES[955] = 131
- PREREQUISITES[956] = 131
- PREREQUISITES[957] = 131
- PREREQUISITES[958] = 132
- PREREQUISITES[959] = 132
- PREREQUISITES[960] = 132
- PREREQUISITES[961] = 132
- PREREQUISITES[962] = 132
- PREREQUISITES[963] = 132
- PREREQUISITES[964] = 133
- PREREQUISITES[965] = 133
- PREREQUISITES[966] = 133
- PREREQUISITES[967] = 133
- PREREQUISITES[968] = 133
- PREREQUISITES[969] = 133
- PREREQUISITES[970] = 134
- PREREQUISITES[971] = 134
- PREREQUISITES[972] = 134
- PREREQUISITES[973] = 134
- PREREQUISITES[974] = 134
- PREREQUISITES[975] = 134
- # == PASSIVE EFFECT: ACTOR ==
- # Skills within this group will give the actor bonuses to their max HP,
- # Strength, Physical Defense and like scores. The skill must be learned
- # within the Skill Tree for the bonuses to take effect.
- #
- # Syntax: [ MaxHP+, MaxSP+, STR+, DEX+, AGI+, INT+, PDEF+, MDEF+ ]
- #
- # Skill ID Passive effect changes
- # ===================== ======================
- PASSIVE_EFFECT[15] = [0,0,0,0,0,0]
- #PASSIVE_EFFECT[6] = [15,30,1,2,3,4,5,6]
- #PASSIVE_EFFECT[13] = [20,30,1,2,3,4,5,6]
- #--------------------------------------------------------------------------
- # * PART V: VISIBILITY & FEATURES
- #--------------------------------------------------------------------------
- # == HIGHLIGHTED NOTICE SETTINGS ==
- # These are the values that help notify the player if a skill needs more
- # points to attain, or is used to highlight the rank value drawn over the
- # icons in the tree itself.
- #
- UNAVAILABLE_COLOR = Color.new(255, 0, 0) # Set color to unavailable text
- RANK_DISPLAY_COLOR = Color.new(255,0,255) # Sets color to rank in tree
- RANK_DISPLAY_SIZE = 16 # Adjusts rank text size
- RANK_DISPLAY_SHADOW = true # If rank has shadow effect
- # == WINDOW AREAS ==
- # This allows you to set the position, dimensions and opacity of the
- # individual windows of the tree system.
- #
- # Syntax = [ x, y, width, height, opacity, backopacity ]
- #
- SKILL_NAME_AREA = [500, 416, 140, 64, 255, 100] # Actor Name
- SKILL_TABS_AREA = [ 0, 0, 520, 64, 255, 100] # Selection
- SKILL_WINDOW_AREA = [ 0, 64, 640, 265, 255, 100] # Tree Area
- SKILL_INFO_AREA = [0, 330, 500, 150, 0, 0] # Description
- SKILL_POINT_AREA = [520, 0, 120, 64, 255, 100] # Points Remaining
- # == INFO WINDOW AREAS ==
- # This allows you to set the position, dimensions and alignment of the
- # text in the information window. All arrays follow the same syntax.
- #
- # Syntax = [ x, y, width, height, alignment]
- # Alignment values are: 0=left, 1=right, 2=center
- # The only exception is TEXT_SKILLICON, which has no centering value.
- #
- TEXT_SKILLICON = [ 0, 0 ] # The icon position
- TEXT_SKILLNAME = [ 28, -4, 400, 32, 0 ] # The Skill Name
- TEXT_SKILLRANK = [ 0, 20, 450, 32, 0 ] # The Skill's Rank
- TEXT_SKILLDESC = [ 0, 44, 450, 32, 0 ] # The Skill's Description
- TEXT_SKILLCOST = [160, -4, 300, 32, 2 ] # Cost to gain or level
- TEXT_SKILLSPEND = [130, 20, 330, 32, 2 ] # Points needed spent in tree
- TEXT_SKILLREQUIRED = [ 0, 68, 450, 32, 0 ] # Required skills
- TEXT_SKILLGAIN = [ 0, 92, 450, 32, 0 ] # Skill availability
- # == SHOW/HIDE FLAGS ==
- # These values are used to show or hide certain aspects or dieplays in the
- # skill tree system. These are simple boolean(true/false) values.
- #
- SHOW_NAME_WINDOW = true # Display the actor name window?
- HIDE_NAME_INACTIVE = false # Hide the name window if actor has no tree?
- SHOW_NEXT_SKILL = true # Show next available skill if can level?
- INFO_SHOW_ALL = true # Show info, even if skill unavailable?
- RANK_SHOW_ALL = false # Show rank, even non ranking skills?
- RANK_SHOW_ZERO = false # Show if rank is currently '0'
- SHOW_ALL_TREE = true # Show the arrows & rank to possible skills?
- # == SKILL AVAILABILITY OPACITIES ==
- # This sets how solid or transparent icons are, based on the skill's avail-
- # ability. The first three values in the array govern the icons for the
- # actual skills while the fourth deals with the opacity of the unavailable
- # icon that is typically drawn overtop.
- #
- # The opacity settings are a range of 0 to 255, with 255 being more opaque.
- #
- # Syntax: = [ Learned, Learnable, Unavailable, Unavailable-Icon]
- #
- SKILL_AVAILABLE = [255, 125, 50, 255]
- #--------------------------------------------------------------------------
- # * PART VI: CUSTOM GRAPHICS
- #--------------------------------------------------------------------------
- # == SKILL TREE ARROWS ==
- # These three arrays hold the arrow graphics, corner graphics and the
- # horizontal and vertical line graphics drawn in the skill tree. It
- # should be self-explanatory. All these graphics are stored within
- # the Graphics\SkillGree folder.
- #
- ARROW_ARRAY = ["arrowdown", "arrowup", "arrowleft", "arrowright" ]
- CORNER_ARRAY = ["corner1", "corner2", "corner3", "corner4" ]
- LINE_ARRAY = ["linehoriz", "linevert" ]
- # == UNAVAILABLE SYMBOL ICON ==
- # This is a graphic that is drawn overtop of skills that cannot be
- # selected. If you do not wish to use this feature, just set it to nil.
- # The icon, like the other graphics used in this system, are stored in
- # the Graphics\SkillTree folder.
- #
- UNAVAILABLE_ICON = "Unavailable"
- # == BACKGROUND ==
- # This is the background image shown when the skill tree is running. It
- # may be drawn behind the windows of the system, and concealed if the
- # windows are not set to a transparent setting (see WINDOW AREAS for
- # opacity settings).
- #
- # Optionally, it may be set to nil for no image background, or set to a
- # value of -1 if you opt for the field map as a background.
- #
- # All backgrounds and like images for this system are cached within the
- # Graphics\SkillTree folder
- #
- WINDOW_BACKGROUND = "CRD_PANO"
- # == BACKGROUND ARRAY ==
- # This array collection defines the background images of each skill tree
- # for each actor in your database. Unlike the SKILL_TABS array, this one
- # need not match up with the SKILLS_ROWS array. The image stored within
- # the WINDOW_BACKGROUND value will be used in its place if not found. But
- # if you were to have an actor has four skill trees defined for him alone,
- # this array should have an array containing all four background images.
- #
- # All backgrounds and like images for this system are cached within the
- # Graphics\SkillTree folder.
- #
- # You only need to identify the actor or actors, and their collection of
- # images. Any not listed are assumed to have no background array images
- # and will use the previously defined background image from the above
- # system.
- #
- #
- # BACKGROUND_LIST[2] = ["MN_BK2", "MN_BK2"] # Basil's images
- # BACKGROUND_LIST[5] = ["MN_nil"] # Estelle's image
- # == INFO WINDOW BACKGROUND ==
- # This is the background image optionally used by the Skill Information
- # window. The image is still drawn overtop of the main Skill Tree win-
- # dow, but behind the information window so the windowskin and opacities
- # may influence its appearance. Please make sure you create an image
- # large enough to accommodate your window area. It does not stretch the
- # image to fit.
- #
- # Optionally, just enter nil to avoid using it.
- #
- # And all backgrounds and like images for this system are cached within the
- # Graphics\SkillTree folder
- #
- INFOBACKGROUND = "info"
- # == INFOW WINDOW ARRAY ==
- # This array collection defines the background images for the information
- # window that matches the skill trees for each actor in the database. It
- # works exactly like the BACKGROUND ARRAY system (above) but only relates
- # to the information window.
- #
- # All backgrounds and like images for this system are cached within the
- # Graphics\SkillTree folder
- #
- #
- # INFOBACKGROUND_LIST[2] =[nil, "info2"] # Basil's info box
- # Changes in the 2nd
- # tab of his tree.
- #--------------------------------------------------------------------------
- # * PART VII: INFO WINDOW DIALOG
- #--------------------------------------------------------------------------
- # PURPOSE: Internationalism. This section allows the end user to change
- # the text used in the system depending on his/her own language.
- # == SKILL POINT TEXT ==
- # This array holds the text for both singular and plural versions of the
- # skill points text shown.
- #
- SKILLPOINTS_NAME = ["Skillpunkt", "Skillpunkte"]
- # == RANK SCORE TEXT ==
- # Thexe strings set the text that displays the skill's current rank. The
- # text ' {rank_score} ' is a required placeholder that is filled with the
- # actual rank score.
- #
- RANK_TEXT_1 = "Current Rank : {rank_score}" # If the skill has a rank
- RANK_TEXT_2 = "Current Rank : 0" # If the skill has no rank
- # == REQUIRED POINTS TEXT ==
- # These strings set the text that displays how many points are needed
- # to be spent to obtain the skill or to increase that skill's rank/level.
- # And one to display how many points need to be spent in total in the tree.
- # The text ' {point_score} ' is a required placeholder that is filled with
- # the points needed, while the ' {point_text} ' value is a placeholder
- # filled with the text from the SKILLPOINTS_NAME array, whether it is
- # singular or plural.
- #
- POINT_COST_1 = "Benötigt {point_score} {point_text}"
- POINT_COST_2 = "Benötigt {point_score} {point_text} zum leveln"
- POINT_COST_3 = "Benötigt {point_score} {point_text} in diesem Element"
- # == SKILL ACCESS TEXT ==
- # This string sets the text that displays if a skill is acquired, leveled
- # to its maximum rank, has another level attainable, or unavailable.
- #
- ACQUIRED_TXT = "Skill freigeschaltet"
- ACQUIRED_LEVEL = "Maximum level acquired"
- NEXT_RANKING_SKILL = "Nächster Skill: "
- UNAVAILABLE = "Nicht verfügbar"
- # == SKILL PREREQUISITES TEXT ==
- # This string sets the text that displays if you need prerequisite skills
- # to garner the new skill.
- #
- SKILLS_REQ = "Benötigt: "
- end
- #==============================================================================
- # ** RPG::Cache
- #------------------------------------------------------------------------------
- # A module that loads each of RPGXP's graphic formats, creates a Bitmap
- # object, and retains it.
- #==============================================================================
- module RPG::Cache
- #--------------------------------------------------------------------------
- # * SkillTree Image Folder
- #--------------------------------------------------------------------------
- def self.skilltree(filename)
- self.load_bitmap("Graphics/SkillTree/", filename)
- end
- end
- #==============================================================================
- # ** RPG::Skill
- #------------------------------------------------------------------------------
- # Data class for skills.
- #==============================================================================
- class RPG::Skill
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_reader :need_update
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias skilltree_rpgskill_initialize initialize
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize
- # Perform the original call
- skilltree_rpgskill_initialize
- # Add Skilltree values
- @rank = 1
- @need_update = true
- end
- #--------------------------------------------------------------------------
- # * Set Update Needed
- #--------------------------------------------------------------------------
- def need_update=(need_update)
- @need_update = need_update
- end
- #--------------------------------------------------------------------------
- # * Get Skill Point Cost
- #--------------------------------------------------------------------------
- def skill_points_cost
- value = (SkillTree::POINT_COST[@id].nil?) ? 1 : SkillTree::POINT_COST[@id]
- return value
- end
- #--------------------------------------------------------------------------
- # * Get Skill Tree Spending Points Needed
- #--------------------------------------------------------------------------
- def spentpoints_needed
- value = SkillTree::TREE_COST.include?(@id) ? SkillTree::TREE_COST[@id] : 0
- return value
- end
- #--------------------------------------------------------------------------
- # * Defines skill's line
- #--------------------------------------------------------------------------
- def line(actor, tree)
- for i in $game_actors[actor].initialskills[tree].keys
- if $game_actors[actor].initialskills[tree][i].include?(@id)
- @goodline = i
- return @goodline
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Defines skill's position in line
- #--------------------------------------------------------------------------
- def position(actor, tree)
- return if @goodline.nil?
- for i in 0...$game_actors[actor].initialskills[tree][@goodline].size
- if $game_actors[actor].initialskills[tree][@goodline][i] == (@id)
- @goodposition = i
- return @goodposition
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Defines skill's x position
- #--------------------------------------------------------------------------
- def x
- (24 + SkillTree::SKILL_SPACING[0]) * @goodposition +
- SkillTree::BORDER_SPACING[0]
- end
- #--------------------------------------------------------------------------
- # * Defines skill's y position
- #--------------------------------------------------------------------------
- def y
- (24 + SkillTree::SKILL_SPACING[1]) * @goodline +
- SkillTree::BORDER_SPACING[1]
- end
- end
- #==============================================================================
- # ** Game_Battler
- #------------------------------------------------------------------------------
- # This class deals with battlers. It's used as a superclass for the Game_Actor
- # and Game_Enemy classes.
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias skilltree_game_battler_initialize initialize
- alias skilltree_game_battler_skill_can_use? skill_can_use?
- alias skilltree_game_battler_skill_effect skill_effect
- alias skilltree_game_battler_item_effect item_effect
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize
- @pdef_plus = 0
- @mdef_plus = 0
- # Perform the original call
- skilltree_game_battler_initialize
- end
- #--------------------------------------------------------------------------
- # * Set Pdef
- # pdef : new Pdef
- #--------------------------------------------------------------------------
- def pdef=(pdef)
- @pdef_plus += pdef - self.pdef
- end
- #--------------------------------------------------------------------------
- # * Set Mdef
- # mdef : new Mdef
- #--------------------------------------------------------------------------
- def mdef=(mdef)
- @mdef_plus += mdef - self.mdef
- end
- #--------------------------------------------------------------------------
- # * Get Physical Defense Power
- #--------------------------------------------------------------------------
- def pdef
- n = base_pdef + @pdef_plus
- for i in @states
- n *= $data_states[i].pdef_rate / 100.0
- end
- return Integer(n)
- end
- #--------------------------------------------------------------------------
- # * Get Magic Defense Power
- #--------------------------------------------------------------------------
- def mdef
- n = base_mdef + @mdef_plus
- for i in @states
- n *= $data_states[i].mdef_rate / 100.0
- end
- return Integer(n)
- end
- #--------------------------------------------------------------------------
- # * Determine Usable Skills
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def skill_can_use?(skill_id)
- if self.is_a?(Game_Actor)
- for skill in @skills
- if SkillTree::RANKS.has_key?(skill)
- if SkillTree::RANKS[skill].include?(skill_id)
- skill_id = skill
- break
- end
- end
- end
- end
- return skilltree_game_battler_skill_can_use?(skill_id)
- end
- #--------------------------------------------------------------------------
- # * Apply Skill Effects
- # user : the one using skills (battler)
- # skill : skill
- #--------------------------------------------------------------------------
- def skill_effect(user, skill)
- if self.is_a?(Game_Actor)
- id = skill.id
- new_id = @skill_id[id]
- skill = $data_skills[new_id]
- end
- return skilltree_game_battler_skill_effect(user, skill)
- end
- #--------------------------------------------------------------------------
- # * Application of Item Effects
- # item : item
- #--------------------------------------------------------------------------
- def item_effect(item)
- # Perform Book Effect and return effective
- book_effective = book_effect(item)
- # The original call
- effective = skilltree_game_battler_item_effect(item)
- # Return effective (true if either original or book is true, else false)
- return book_effective if book_effective == true
- return effective
- end
- #--------------------------------------------------------------------------
- # * Application of Book Effects
- # item : item
- #--------------------------------------------------------------------------
- def book_effect(item)
- effective = false
- if SkillTree::BOOKS.has_key?(item.id)
- skill_list = SkillTree::BOOKS[item.id]
- for skill in skill_list
- rank = @skill_level[skill]
- rank_max = 0
- if SkillTree::RANKS.has_key?(skill)
- rank_max = SkillTree::RANKS[skill].size
- end
- if !skill_check(skill)
- update_add_skill(skill)
- effective = true
- elsif rank < rank_max && skill_check(skill)
- update_increase_skill(skill)
- effective = true
- end
- end
- end
- return effective
- end
- #--------------------------------------------------------------------------
- # * Check if Finished Learning Skill Including Ranked Skills
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def skill_check(skill_id)
- for skill in @skills
- if SkillTree::RANKS.has_key?(skill)
- return true if SkillTree::RANKS[skill].include?(skill_id)
- end
- end
- return @skills.include?(skill_id)
- end
- #--------------------------------------------------------------------------
- # * Frame Update (updating with new skill not learned)
- #--------------------------------------------------------------------------
- def update_add_skill(skill)
- learn_skill(skill)
- $data_skills[skill].need_update = true
- update_actor_tree_passive_effects(skill)
- end
- #--------------------------------------------------------------------------
- # * Learn Skill
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def learn_skill(skill_id)
- return unless (skill_id > 0 and not skill_learn?(skill_id))
- @skills.push(skill_id)
- @skills.sort!
- end
- #--------------------------------------------------------------------------
- # * Frame Update (updating new skill that was learned)
- #--------------------------------------------------------------------------
- def update_increase_skill(skill)
- rank_max = SkillTree::RANKS[skill].size
- rank = @skill_level[skill]
- @skill_level[skill] += 1
- $data_skills[skill].need_update = true
- new_id = SkillTree::RANKS[skill][@skill_level[skill]-1]
- update_skill(skill, new_id)
- end
- #--------------------------------------------------------------------------
- # * Update actor skill (based on new learned skill)
- #--------------------------------------------------------------------------
- def update_skill(id, new_id)
- return if skill_id[id] == $data_skills[new_id].id
- @skill_id[id] = $data_skills[new_id].id
- @skill_icon_name[id] = $data_skills[new_id].icon_name
- update_actor_tree_passive_effects(id)
- return
- end
- #--------------------------------------------------------------------------
- # * Update actor stats (support for passive skills)
- #--------------------------------------------------------------------------
- def update_actor_tree_passive_effects(skill)
- # Get Current 'recorded' Skill ID
- current_skill = @skill_id[skill]
- # Get Previous 'recorded' Skill ID
- prev_skill = update_actor_prev_skill_rank_id(skill_id)
- # Perform passive effect removal and additions
- update_actor_passive_removal(prev_skill)
- update_actor_passive_addition(current_skill)
- end
- #--------------------------------------------------------------------------
- # * Determine previous skill ID from Skill Rank Chain if any
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def update_actor_prev_skill_rank_id(skill_id)
- # Get Previous 'recorded' Skill ID
- target_id = nil
- for skills in @skills
- next unless SkillTree::RANKS.has_key?(skills)
- test = SkillTree::RANKS[skills]
- ind = test.index(skill_id)
- unless ind.nil?
- target_id = test[ind-1] if ind > 0
- end
- end
- return target_id
- end
- #--------------------------------------------------------------------------
- # * Decrease actor stats from losing passive effect skill
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def update_actor_passive_removal(skill_id)
- return if skill_id.nil?
- return unless SkillTree::PASSIVE_EFFECT.has_key?(skill_id)
- self.maxhp -= SkillTree::PASSIVE_EFFECT[skill_id][0]
- self.maxsp -= SkillTree::PASSIVE_EFFECT[skill_id][1]
- self.str -= SkillTree::PASSIVE_EFFECT[skill_id][2]
- self.dex -= SkillTree::PASSIVE_EFFECT[skill_id][3]
- self.agi -= SkillTree::PASSIVE_EFFECT[skill_id][4]
- self.int -= SkillTree::PASSIVE_EFFECT[skill_id][5]
- self.pdef -= SkillTree::PASSIVE_EFFECT[skill_id][6]
- self.mdef -= SkillTree::PASSIVE_EFFECT[skill_id][7]
- end
- #--------------------------------------------------------------------------
- # * Increase actor stats after adding passive effect skill
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def update_actor_passive_addition(skill_id)
- return unless SkillTree::PASSIVE_EFFECT.has_key?(skill_id)
- self.maxhp += SkillTree::PASSIVE_EFFECT[skill_id][0]
- self.maxsp += SkillTree::PASSIVE_EFFECT[skill_id][1]
- self.str += SkillTree::PASSIVE_EFFECT[skill_id][2]
- self.dex += SkillTree::PASSIVE_EFFECT[skill_id][3]
- self.agi += SkillTree::PASSIVE_EFFECT[skill_id][4]
- self.int += SkillTree::PASSIVE_EFFECT[skill_id][5]
- # self.pdef += SkillTree::PASSIVE_EFFECT[skill_id][6]
- # self.mdef += SkillTree::PASSIVE_EFFECT[skill_id][7]
- end
- end
- #==============================================================================
- # ** Game_Actor
- #------------------------------------------------------------------------------
- # This class handles the actor. It's used within the Game_Actors class
- # ($game_actors) and refers to the Game_Party class ($game_party).
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :skill_level # Skill level or rank attained
- attr_accessor :skill_id # Revised Skill ID (New skill)
- attr_accessor :skill_icon_name # Revised Skill Icon Used
- attr_accessor :skillpoints # Initial Tree System Skill Points
- attr_accessor :initialskills # Initial Skills in Tree System
- attr_accessor :skills_used # Tree System Skills Flagged
- attr_accessor :points_spent # Total Points Spent in Tree
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias skilltree_game_actor_setup setup
- alias skilltree_game_actor_skill_can_use? skill_can_use?
- #--------------------------------------------------------------------------
- # * Setup
- # actor_id : actor ID
- #--------------------------------------------------------------------------
- def setup(actor_id)
- # Perform the original call
- skilltree_game_actor_setup(actor_id)
- # Set Skill Tree Data
- @skillpoints = 0
- @points_spent = 0
- @skill_level = []
- @skill_id = []
- @skill_icon_name = []
- @passive_skills = []
- @skills_used = []
- @initialskills = []
- # Create individual (adjustable) list per actor
- for id in 1...$data_skills.size
- @skill_level[id] = 0
- @skill_id[id] = $data_skills[id].id
- @skill_icon_name[id] = $data_skills[id].icon_name
- unless $data_skills[id].nil?
- update_actor_tree_passive_effects(id)
- end
- end
- # Reupdate HP and SP if changed
- @hp = maxhp
- @sp = maxsp
- # Skip if no tree
- return if SkillTree::SKILLS_ROWS[actor_id].nil?
- switch_id = (SkillTree::CLASS_TREE_START == true) ? @class_id : actor_id
- # Loop through skill tree
- for i in 0...SkillTree::SKILLS_ROWS[switch_id].size
- # Determine how many rows in selected tree
- cnt = SkillTree::SKILLS_ROWS[switch_id][i].size
- # Create a temp array
- temparray = []
- # Loop through rows in tree branch
- for j in 0..cnt-1
- # Add each row into temp data array
- temparray = temparray + SkillTree::SKILLS_ROWS[switch_id][i][j]
- end
- # Add temp data
- @skills_used[i] = temparray
- @skills_used[i].flatten!
- @initialskills[i] = SkillTree::SKILLS_ROWS[switch_id][i]
- end
- # Add Points to actors
- if SkillTree::STARTING_POINTS[actor_id] != nil
- @skillpoints = SkillTree::STARTING_POINTS[actor_id]
- end
- # Delete Skill Used
- @skills_used.delete(nil)
- end
- #--------------------------------------------------------------------------
- # * Check if actor can learn skill
- # skill_id : skill ID
- # tree : Tree
- #--------------------------------------------------------------------------
- def can_learn?(id, tree)
- return false unless ( (was_used?(id, tree) || can_rank?(id, tree) ||
- !skill_learn?(id)) && enough_points?(id) && enough_points_spent?(id))
- # Return true if no needed prereqisites
- return true if SkillTree::PREREQUISITES[id].nil?
- # Handle multiple Prerequisites for a skill
- if SkillTree::PREREQUISITES[id].is_a?(Array)
- id_array = SkillTree::PREREQUISITES[id]
- if SkillTree::PREREQUISITES[id].all? {|v|
- if SkillTree::RANKS.has_key?(v)
- skill_learn?(v) && @skill_id[v] == ranked_skill(v)
- else
- skill_learn?(v)
- end
- }
- return true
- end
- # Handle multiple Prerequisites for a skill
- else
- pid = SkillTree::PREREQUISITES[id]
- flag_passed = false
- if SkillTree::RANKS.has_key?(pid)
- flag_passed = skill_learn?(pid) && @skill_id[pid] == ranked_skill(pid)
- else
- flag_passed = skill_learn?(pid)
- end
- return true if flag_passed
- end
- # End Method
- return false
- end
- #--------------------------------------------------------------------------
- # * Check highest ranked skill in list
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def ranked_skill(skill_id)
- placement = (SkillTree::RANKS[skill_id].size)-1
- value = SkillTree::RANKS[skill_id][placement]
- return value
- end
- #--------------------------------------------------------------------------
- # * Determine Usable Skills
- # skill_id : skill ID
- #--------------------------------------------------------------------------
- def skill_can_use?(skill_id)
- for skill in @skills
- if SkillTree::RANKS.has_key?(skill)
- if SkillTree::RANKS[skill].include?(skill_id)
- skill_id = skill
- break
- end
- end
- end
- return skilltree_game_actor_skill_can_use?(skill_id)
- end
- #--------------------------------------------------------------------------
- # * Check if actor used skill in tree
- # id : skill ID
- # tree : Tree
- #--------------------------------------------------------------------------
- def was_used?(id, tree)
- (@skills_used[tree].include?(skill_id))
- end
- #--------------------------------------------------------------------------
- # * Check if actor can increase skill rank
- # id : skill ID
- # tree : Tree
- #--------------------------------------------------------------------------
- def can_rank?(id, tree)
- rank_max = 1
- if SkillTree::RANKS.has_key?(id)
- rank_max = SkillTree::RANKS[id].size + 1
- end
- (@skills_used[tree].include?(id) && skill_learn?(id) && rank_max > 1)
- end
- #--------------------------------------------------------------------------
- # * Check if actor has enough points
- # id : skill ID
- # tree : Tree
- #--------------------------------------------------------------------------
- def enough_points?(id)
- (@skillpoints >= $data_skills[id].skill_points_cost)
- end
- #--------------------------------------------------------------------------
- # * Check if actor has spent enough points in tree
- # id : skill ID
- # tree : Tree
- #--------------------------------------------------------------------------
- def enough_points_spent?(id)
- $data_skills[id].spentpoints_needed <= @points_spent
- end
- end
- #==============================================================================
- # ** Window_Base
- #------------------------------------------------------------------------------
- # This class is for all in-game windows.
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # * Reset the font
- #--------------------------------------------------------------------------
- def reset_font
- self.contents.font.name = Font.default_name
- self.contents.font.size = Font.default_size
- self.contents.font.color = Font.default_color
- end
- end
- #==============================================================================
- # ** Window_Skill
- #------------------------------------------------------------------------------
- # This window displays usable skills on the skill and battle screens.
- #==============================================================================
- class Window_Skill < Window_Selectable
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- @data = []
- for i in 0...@actor.skills.size
- skill = $data_skills[@actor.skills[i]]
- if skill != nil
- # -- ( Changed Code Between Comment Set ) ---------------------------
- new_id = @actor.skill_id[skill.id]
- skill = $data_skills[new_id]
- # -- ( Changed Code Between Comment Set ) ---------------------------
- @data.push(skill)
- end
- end
- # If item count is not 0, make a bit map and draw all items
- @item_max = @data.size
- if @item_max > 0
- self.contents = Bitmap.new(width - 32, row_max * 32)
- for i in 0...@item_max
- draw_item(i)
- end
- end
- end
- end
- #==============================================================================
- # ** Window_SkillTreeName
- #------------------------------------------------------------------------------
- # This window class contains all skill tree choice display functions
- #==============================================================================
- class Window_SkillTreeName < Window_Selectable
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize(actor_index)
- super(SkillTree::SKILL_NAME_AREA[0], SkillTree::SKILL_NAME_AREA[1],
- SkillTree::SKILL_NAME_AREA[2], SkillTree::SKILL_NAME_AREA[3])
- width = SkillTree::SKILL_NAME_AREA[2] - 32
- height = SkillTree::SKILL_NAME_AREA[3] - 32
- self.contents = Bitmap.new(width, height)
- self.opacity = SkillTree::SKILL_NAME_AREA[4]
- self.back_opacity = SkillTree::SKILL_NAME_AREA[5]
- @actor = $game_party.actors[actor_index]
- refresh
- end
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_actor_name(@actor, 0, 0)
- end
- end
- #==============================================================================
- # ** Window_SkillTreeTabs
- #------------------------------------------------------------------------------
- # This window class contains all skill tree choice display functions
- #==============================================================================
- class Window_SkillTreeTabs < Window_Selectable
- #--------------------------------------------------------------------------
- # * Public Instance Values
- #--------------------------------------------------------------------------
- attr_reader :item_max
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize(actor_index)
- super(SkillTree::SKILL_TABS_AREA[0], SkillTree::SKILL_TABS_AREA[1],
- SkillTree::SKILL_TABS_AREA[2], SkillTree::SKILL_TABS_AREA[3])
- @actor = $game_party.actors[actor_index]
- @switch_id = (SkillTree::CLASS_TREE_START == true) ?
- @actor.class_id : @actor.id
- @item_max = SkillTree::SKILLS_ROWS[@switch_id].size
- @column_max = SkillTree::SKILLS_ROWS[@switch_id].size
- @row_max = 1
- self.index = 0
- width = SkillTree::SKILL_TABS_AREA[2] - 32
- height = SkillTree::SKILL_TABS_AREA[3] - 32
- self.contents = Bitmap.new(width, height)
- self.opacity = SkillTree::SKILL_TABS_AREA[4]
- self.back_opacity = SkillTree::SKILL_TABS_AREA[5]
- end
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- for i in 0...@item_max
- my_text = ''
- next if SkillTree::SKILLS_TABS[@switch_id].nil?
- my_text = SkillTree::SKILLS_TABS[@switch_id][i]
- next if my_text.nil?
- self.contents.draw_text( (self.width - 32) / @item_max * i, 0,
- (self.width - 32) / @item_max, 32, my_text, 1 )
- end
- end
- end
- #==============================================================================
- # ** Window_SkillTreeMain
- #------------------------------------------------------------------------------
- # This window class contains all skill tree display functions
- #==============================================================================
- class Window_SkillTreeMain < Window_Base
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :initialskills
- attr_accessor :tree
- attr_reader :index
- attr_reader :item_used
- attr_reader :line
- attr_reader :item_max
- #--------------------------------------------------------------------------
- # * Object Initialization
- # actor_index : actor_index
- #--------------------------------------------------------------------------
- def initialize(actor_index)
- super(SkillTree::SKILL_WINDOW_AREA[0], SkillTree::SKILL_WINDOW_AREA[1],
- SkillTree::SKILL_WINDOW_AREA[2], SkillTree::SKILL_WINDOW_AREA[3])
- @tree = 0
- @actor = $game_party.actors[actor_index]
- @switch_id = (SkillTree::CLASS_TREE_START == true) ?
- @actor.class_id : @actor.id
- # Discontinue if no skill tree for actor
- return if SkillTree::SKILLS_ROWS[@switch_id].nil?
- # Initialize Skills
- initialize_skills
- @column_max = SkillTree::SKILLS_ROWS[@switch_id][@tree][0].size
- @row_max = SkillTree::SKILLS_ROWS[@switch_id][@tree].keys.size
- @item_max = @item_used.size
- self.index = 0
- width = SkillTree::SKILL_WINDOW_AREA[2] - 32
- height = @row_max * ( SkillTree::SKILL_SPACING[1] + 24 ) +
- SkillTree::BORDER_SPACING[1]- 16
- self.contents = Bitmap.new(width, height)
- self.opacity = SkillTree::SKILL_WINDOW_AREA[4]
- self.back_opacity = SkillTree::SKILL_WINDOW_AREA[5]
- # Refresh
- refresh
- end
- #--------------------------------------------------------------------------
- # * Initialize Skills list and position
- #--------------------------------------------------------------------------
- def initialize_skills
- @initialskills = @actor.initialskills[@tree]
- @item_used = @actor.skills_used[@tree]
- @item_used.flatten!
- @item_used.delete(nil)
- for i in 0...@item_used.size
- skillid = @item_used[i]
- $data_skills[skillid].line(@actor.id, @tree)
- $data_skills[skillid].position(@actor.id, @tree)
- $data_skills[skillid].need_update = true
- end
- @prerequisites = []
- end
- #--------------------------------------------------------------------------
- # * Set Cursor Position
- #--------------------------------------------------------------------------
- def index=(index)
- @index = index
- update_cursor_rect
- end
- #--------------------------------------------------------------------------
- # * Update Cursor position
- #--------------------------------------------------------------------------
- def update_cursor_rect
- if self.active
- @line = $data_skills[@item_used[@index]].line(@switch_id, @tree)
- @position = $data_skills[@item_used[@index]].position(@switch_id, @tree)
- new_x = $data_skills[@item_used[@index]].x
- new_y = $data_skills[@item_used[@index]].y
- self.cursor_rect.set(new_x, new_y, 24, 30)
- else
- self.cursor_rect.empty
- end
- end
- #--------------------------------------------------------------------------
- # * Update Skill Tree Window content
- #--------------------------------------------------------------------------
- def update
- super
- # Update index
- @index = @item_used.size - 1 if @index > @item_used.size - 1
- if self.active and @item_max > 0 and @index >= 0
- @line = $data_skills[@item_used[@index]].line(@switch_id,@tree)
- @position = $data_skills[@item_used[@index]].position(@switch_id,@tree)
- # If directional button was pressed
- update_cursor_up if Input.repeat?(Input::UP)
- update_cursor_down if Input.repeat?(Input::DOWN)
- update_cursor_left if Input.repeat?(Input::LEFT)
- update_cursor_right if Input.repeat?(Input::RIGHT)
- end
- # Update cursor rectangle
- update_cursor_rect
- end
- #--------------------------------------------------------------------------
- # * Update Skill Tree Window cursor movement (UP)
- #--------------------------------------------------------------------------
- def update_cursor_up
- # Values Acquired
- curline = @line
- curpos = @position
- moving = checked = false
- #
- for i in 1..@line
- if @initialskills[curline - i].any? {|v| v.is_a?(Integer)}
- if @initialskills[curline - i].any? { |v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) == @position} &&
- !moving
- # Play Cancel SE
- $game_system.se_play($data_system.cursor_se)
- # Move Index
- moving = move_type_two(curpos, curline)
- elsif i == @line
- checked = true
- end
- if @initialskills[curline - i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) < @position} &&
- !@initialskills[curline - i].any? { |v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) == @position} &&
- !moving && checked
- # Play Decision SE
- $game_system.se_play($data_system.decision_se)
- # Garner Check Position
- checkpos = check_position(curpos)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) < curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) < curline &&
- !checkpos
- moving = true
- @index -= 1
- @newoy = false
- # Garner Check Position
- checkpos = check_position(curpos)
- end
- elsif @initialskills[curline - i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) > @position} &&
- !@initialskills[curline - i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) <= @position} &&
- !moving && checked
- # Play Cancel SE
- $game_system.se_play($data_system.cancel_se)
- # Garner Check Position
- checkpos = check_position(curpos)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) > curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) < curline &&
- !checkpos
- moving = true
- @index -= 1
- @newoy = false
- # Garner Check Position
- checkpos = check_position(curpos)
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Update Skill Tree Window cursor movement (DOWN)
- #--------------------------------------------------------------------------
- def update_cursor_down
- # Values Acquired
- curline = @line
- curpos = @position
- moving = checked = false
- # Sort through the tree
- for i in curline + 1...@initialskills.size
- if @initialskills[i].any? {|v| v.is_a?(Integer)}
- if @initialskills[i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) == @position} &&
- !moving
- # Play Cancel SE
- $game_system.se_play($data_system.cursor_se)
- # Move Index
- moving = move_type_one(curpos, curline)
- elsif i == @initialskills.size - 1
- checked = true
- end
- if @initialskills[i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) < @position} &&
- !@initialskills[i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) == @position} &&
- !moving && checked
- # Play Decision SE
- $game_system.se_play($data_system.decision_se)
- # Garner Check Position
- checkpos = check_position(curpos)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) < curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) > curline &&
- !checkpos
- moving = true
- @index += 1
- @newoy = false
- # Garner Check Position
- checkpos = check_position(curpos)
- end
- elsif @initialskills[i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) > @position} &&
- !@initialskills[i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) <= @position} &&
- !moving && checked
- # Play Cancel SE
- $game_system.se_play($data_system.cancel_se)
- # Garner Check Position
- checkpos = check_position(curpos)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) > curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) > curline &&
- !checkpos
- moving = true
- @index += 1
- @newoy = false
- # Garner Check Position
- checkpos = check_position(curpos)
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Update Skill Tree Window cursor movement (LEFT)
- #--------------------------------------------------------------------------
- def update_cursor_left
- if (@column_max >= 2 && @position > 0)
- # Values Acquired
- curline = @line
- curpos = @position
- moving = checked = false
- #
- if @initialskills[curline].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) < curpos}
- # Play Cursor SE
- $game_system.se_play($data_system.cursor_se)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) < curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) == curline
- moving = true
- @index -= 1
- end
- else
- checked = true
- end
- for i in 1..@line
- if @initialskills[curline - i] != nil &&
- @initialskills[curline - i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) < @position} &&
- !@initialskills[curline].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) < @position} &&
- !moving && checked
- # Play Decision SE
- $game_system.se_play($data_system.decision_se)
- # Move Index
- moving = move_type_four(curpos, curline)
- end
- end
- for i in curline + 1...@initialskills.size
- if @initialskills[i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) < @position} &&
- !@initialskills[curline].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) < @position} &&
- !moving && checked
- # Play Decision SE
- $game_system.se_play($data_system.decision_se)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) < curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) > curline
- moving = true
- @index += 1
- @newoy = false
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Update Skill Tree Window cursor movement (RIGHT)
- #--------------------------------------------------------------------------
- def update_cursor_right
- if (@column_max >= 2 && @position < @initialskills[@line].size)
- # Values Acquired
- curline = @line
- curpos = @position
- moving = checked = false
- #
- if @initialskills[curline].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) > curpos}
- $game_system.se_play($data_system.cursor_se)
- #
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) > curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) == curline
- moving = true
- @index += 1
- end
- else
- checked = true
- end
- for i in 1..@line
- if @initialskills[curline - i] != nil &&
- @initialskills[curline - i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) > @position} &&
- !@initialskills[curline].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) > @position} &&
- !moving && checked
- # Play Decision SE
- $game_system.se_play($data_system.decision_se)
- # Garner Check Position
- checkpos = check_position(curpos)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) > curpos &&
- $data_skills[@item_used[@index]].line(@switch_id,@tree) < curline &&
- !checkpos
- moving = true
- @index -= 1
- @newoy = false
- # Garner Check Position
- checkpos = check_position(curpos)
- end
- end
- end
- for i in curline + 1...@initialskills.size
- if @initialskills[i].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) > @position} &&
- !@initialskills[curline].any? {|v|
- v != nil &&
- $data_skills[v].position(@switch_id,@tree) > @position} &&
- !moving && checked
- # Play Decision SE
- $game_system.se_play($data_system.decision_se)
- # Move Index
- moving = move_type_three(curpos, curline)
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Get Checked Position
- #--------------------------------------------------------------------------
- def check_position(position)
- checkpos = @item_used.any? {|id|
- $data_skills[id].position(@switch_id, @tree) < position &&
- $data_skills[id].position(@switch_id, @tree) >
- $data_skills[@item_used[@index]].position(@switch_id, @tree) &&
- $data_skills[id].line(@switch_id, @tree) ==
- $data_skills[@item_used[@index]].line(@switch_id, @tree)}
- return checkpos
- end
- #--------------------------------------------------------------------------
- # * Move Index (One)
- #--------------------------------------------------------------------------
- def move_type_one(curpos, curline)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) == curpos &&
- $data_skills[@item_used[@index]].line(@switch_id, @tree) > curline
- @index += 1
- @newoy = false
- moving = true
- end
- return moving
- end
- #--------------------------------------------------------------------------
- # * Move Index (Two)
- #--------------------------------------------------------------------------
- def move_type_two(curpos, curline)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) == curpos &&
- $data_skills[@item_used[@index]].line(@switch_id, @tree) < curline
- @index -= 1
- @newoy = false
- moving = true
- end
- return moving
- end
- #--------------------------------------------------------------------------
- # * Move Index (Three
- #--------------------------------------------------------------------------
- def move_type_three(curpos, curline)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) > curpos &&
- $data_skills[@item_used[@index]].line(@switch_id, @tree) > curline
- moving = true
- @index += 1
- @newoy = false
- end
- return moving
- end
- #--------------------------------------------------------------------------
- # * Move Index (Four)
- #--------------------------------------------------------------------------
- def move_type_four(curpos, curline)
- until $data_skills[@item_used[@index]].position(@switch_id,
- @tree) < curpos &&
- $data_skills[@item_used[@index]].line(@switch_id, @tree) < curline
- moving = true
- @index -= 1
- @newoy = false
- end
- return moving
- end
- #--------------------------------------------------------------------------
- # * Refresh skills display
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- for i in 0...@item_used.size
- skillid = @item_used[i]
- $data_skills[skillid].line(@switch_id, @tree)
- $data_skills[skillid].position(@switch_id, @tree)
- draw_skill(skillid)
- #
- if SkillTree::PREREQUISITES[skillid] != nil
- arrowskillid = $data_skills[skillid]
- arrowskillpreid = SkillTree::PREREQUISITES[skillid]
- draw_arrow(arrowskillid, arrowskillpreid)
- end
- #
- draw_skill_rank(skillid)
- end
- end
- #--------------------------------------------------------------------------
- # * Draw Arrows for prerequisites
- # skill_id : Skill ID
- # preskill_id : prerequisite skill ID
- #--------------------------------------------------------------------------
- def draw_arrow(skill_id, preskill_id)
- # Set the draw arrow flag
- ret_flag = false
- if preskill_id.is_a?(Array)
- count = preskill_id.size
- counter = 0
- for j in preskill_id
- for i in @initialskills
- counter += 1 if i[1].include?(j)
- end
- end
- ret_flag = true if count == counter
- else
- for i in @initialskills
- ret_flag = true if i[1].include?(preskill_id)
- end
- end
- return unless ret_flag
- # Hide Arrows if Hide unavailable skills and arrows
- unless SkillTree::SHOW_ALL_TREE
- unless @actor.skills.include?(skill_id.id)
- return if !@actor.can_learn?(skill_id.id, @tree)
- end
- end
- #
- @prerequisites.clear
- prerequisites = []
- prerequisites << preskill_id
- @prerequisites = prerequisites.flatten
- for i in 0...@prerequisites.size
- preskill = $data_skills[@prerequisites[i]]
- skill_img = RPG::Cache.icon(skill_id.icon_name)
- preskill_img = RPG::Cache.icon(preskill.icon_name)
- # Make Horizontal Graphics
- @arrow_h, @arrow_h_src = skill_tree_object(SkillTree::LINE_ARRAY[0])
- # Make Vertical Graphics
- @arrow_v, @arrow_v_rect = skill_tree_object(SkillTree::LINE_ARRAY[1])
- # Make Corner Graphics
- if skill_id.y > preskill.y
- if skill_id.x < preskill.x
- @corner, @corner_rect = skill_tree_object(SkillTree::CORNER_ARRAY[0])
- end
- if skill_id.x > preskill.x
- @corner, @corner_rect = skill_tree_object(SkillTree::CORNER_ARRAY[1])
- end
- else
- if skill_id.x < preskill.x
- @corner, @corner_rect = skill_tree_object(SkillTree::CORNER_ARRAY[2])
- end
- if skill_id.x > preskill.x
- @corner, @corner_rect = skill_tree_object(SkillTree::CORNER_ARRAY[3])
- end
- end
- # If required skill is above target in tree
- if skill_id.y > preskill.y
- draw_arrow_pre_lesser(skill_id, preskill, skill_img, preskill_img)
- # If required skill is below target in tree
- elsif skill_id.y < preskill.y
- draw_arrow_pre_greater(skill_id, preskill, skill_img, preskill_img)
- # If Skill and preqrequisite are at same height
- elsif skill_id.y == preskill.y
- draw_arrow_pre_equal(skill_id, preskill, skill_img, preskill_img)
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Draw Arrows for prerequisites lesser prerequisites
- #--------------------------------------------------------------------------
- def draw_arrow_pre_lesser(skill_id, preskill, skill_img, preskill_img)
- # Make the Arrow Graphic
- arrow, arrow_rect = skill_tree_object(SkillTree::ARROW_ARRAY[0])
- # Draw the Arrow Graphic
- self.contents.blt(skill_id.x + skill_img.width / 2 - arrow.width / 2,
- skill_id.y - arrow.height, arrow, arrow_rect)
- if skill_id.x == preskill.x
- # Calculate Horizontal Space
- arrowspace = skill_id.y - preskill.y - preskill_img.height - arrow.height
- # Create Vertical Rect
- arrow_v_dest = Rect.new(
- skill_id.x + skill_img.width / 2 - @arrow_v.width / 2,
- preskill.y + preskill_img.height,@arrow_v.width, arrowspace)
- elsif skill_id.x != preskill.x
- # Calculate Horizontal Space
- arrowspace = skill_id.y - preskill.y - preskill_img.height /
- 2 - arrow.height - @corner.height / 2
- # Create Vertical Rect
- arrow_v_dest = Rect.new(skill_id.x + skill_img.width / 2 -
- @arrow_v.width / 2, preskill.y + preskill_img.height / 2 +
- @corner.height / 2, @arrow_v.width, arrowspace)
- end
- # Draw the Vertical Graphic
- self.contents.stretch_blt(arrow_v_dest, @arrow_v, @arrow_v_rect)
- #
- if skill_id.x != preskill.x
- # Draw the Corner Graphic
- self.contents.blt(skill_id.x + skill_img.width / 2 - @corner.width / 2,
- preskill.y + preskill_img.height / 2 - @corner.height / 2,
- @corner, @corner_rect)
- # Reset draw flag
- arrow_draw = false
- # If skill is to the right of the required skill
- if skill_id.x > preskill.x
- # Obtain the right corner graphic
- arrow_h_dest = corner_right(skill_id, skill_img, preskill, preskill_img)
- arrow_draw = true
- # If skill is to the keft of the required skill
- elsif skill_id.x < preskill.x
- # Obtain the left corner graphic
- arrow_h_dest = corner_left(skill_id, skill_img, preskill, preskill_img)
- arrow_draw = true
- end
- # Draw the Horizontal Graphic
- draw_arrow_stretch(arrow_h_dest, @arrow_h, @arrow_h_src, arrow_draw)
- end
- end
- #--------------------------------------------------------------------------
- # * Draw Arrows for prerequisites greater prerequisites
- #--------------------------------------------------------------------------
- def draw_arrow_pre_greater(skill_id, preskill, skill_img, preskill_img)
- # Make the Arrow Graphic
- arrow, arrow_rect = skill_tree_object(SkillTree::ARROW_ARRAY[1])
- # Draw the Arrow Graphic
- self.contents.blt(skill_id.x + skill_img.width / 2 - arrow.width / 2,
- skill_id.y + skill_img.height, arrow, arrow_rect)
- # Drawing the vertical
- if skill_id.x == preskill.x
- # Calculate Horizontal Space
- arrowspace = preskill.y - skill_id.y - skill_img.height - arrow.height
- # Create Vertical Rect
- arrow_v_dest = Rect.new(
- preskill.x + preskill_img.width / 2 - @arrow_v.width / 2,
- preskill.y - arrowspace, @arrow_v.width, arrowspace)
- elsif skill_id.x != preskill.x
- # Calculate Horizontal Space
- arrowspace = preskill.y - skill_id.y - (skill_img.height / 2) -
- arrow.height - @corner.height / 2
- # Create Vertical Rect
- arrow_v_dest = Rect.new(skill_id.x + skill_img.width / 2 -
- @arrow_v.width / 2,
- 2 + skill_id.y + skill_img.height + @corner.height,
- @arrow_v.width, arrowspace)
- end
- # Draw the Vertical Graphic
- self.contents.stretch_blt(arrow_v_dest, @arrow_v, @arrow_v_rect)
- # If the required skill is to the left or right of the skill
- if skill_id.x != preskill.x
- # Draw the Corner Graphic
- self.contents.blt(skill_id.x + skill_img.width / 2 - @corner.width / 2,
- preskill.y + preskill_img.height / 2 - @corner.height / 2,
- @corner, @corner_rect)
- # Reset draw flag
- arrow_draw = false
- # If skill is to the right of the required skill
- if skill_id.x > preskill.x
- # Obtain the right corner graphic
- arrow_h_dest = corner_right(skill_id, skill_img, preskill, preskill_img)
- arrow_draw = true
- # If skill is to the keft of the required skill
- elsif skill_id.x < preskill.x
- # Obtain the left corner graphic
- arrow_h_dest = corner_left(skill_id, skill_img, preskill, preskill_img)
- arrow_draw = true
- end
- # Draw the Horizontal Graphic
- draw_arrow_stretch(arrow_h_dest, @arrow_h, @arrow_h_src, arrow_draw)
- end
- end
- #--------------------------------------------------------------------------
- # * Draw Arrows for prerequisites equal prerequisites
- #--------------------------------------------------------------------------
- def draw_arrow_pre_equal(skill_id, preskill, skill_img, preskill_img)
- # Reset the draw flag
- arrow_draw = false
- # If skill is left of the required skill
- if skill_id.x < preskill.x
- # Make the arrow graphic
- arrow, arrow_rect = skill_tree_object(SkillTree::ARROW_ARRAY[2])
- # Draw the Arrow Graphic
- self.contents.blt(skill_id.x + skill_img.width, skill_id.y +
- skill_img.height / 2 - arrow.height / 2, arrow, arrow_rect)
- # Calculate Horizontal Space
- arrow_h_spc = preskill.x - skill_id.x - preskill_img.width - arrow.width
- # Create Horizontal Rect
- arrow_h_dest = Rect.new(
- skill_id.x + skill_img.width + arrow.width,
- preskill.y + preskill_img.height / 2 - @arrow_h.height / 2,
- arrow_h_spc, @arrow_h.height)
- # Set the draw-me flag
- arrow_draw = true
- # If skill is right of the required skill
- elsif skill_id.x > preskill.x
- # Make the Arrow Graphic
- arrow, arrow_rect = skill_tree_object(SkillTree::ARROW_ARRAY[3])
- # Draw the Arrow Graphic
- self.contents.blt(skill_id.x - arrow.width, skill_id.y +
- skill_img.height / 2 - arrow.height / 2, arrow, arrow_rect)
- # Calculate Horizontal Space
- arrow_h_spc = skill_id.x - preskill.x - skill_img.width - arrow.width
- # Create Horizontal Rect
- arrow_h_dest = Rect.new(
- preskill.x + preskill_img.width,
- preskill.y + preskill_img.height / 2 - @arrow_h.height / 2,
- arrow_h_spc, @arrow_h.height)
- # Set the draw-me flag
- arrow_draw = true
- end
- # Draw the Horizontal Graphic
- draw_arrow_stretch(arrow_h_dest, @arrow_h, @arrow_h_src, arrow_draw)
- end
- #--------------------------------------------------------------------------
- # * Draw stretched arrow body
- #--------------------------------------------------------------------------
- def draw_arrow_stretch(dest, img, source, flag)
- return unless flag == true
- self.contents.stretch_blt(dest, img, source)
- end
- #--------------------------------------------------------------------------
- # * Load Skill Tree Object Graphic
- # filename : filename
- #--------------------------------------------------------------------------
- def skill_tree_object(filename)
- temp = RPG::Cache.skilltree(filename)
- temp_rect = Rect.new(0,0,temp.width, temp.height)
- return [temp, temp_rect]
- end
- #--------------------------------------------------------------------------
- # * Load the left corner rectangle
- #--------------------------------------------------------------------------
- def corner_left(s_id,s_img, p_req, p_req_img)
- horiz, vert, corner = @arrow_h, @arrow_v, @corner
- h_space = p_req.x - s_id.x - p_req_img.width +
- (p_req_img.width / 2 - corner.width / 2)
- bodyhor_dest = Rect.new( s_id.x + s_img.width / 2 + vert.width / 2,
- p_req.y + p_req_img.height / 2 - horiz.height / 2, h_space, horiz.height)
- return bodyhor_dest
- end
- #--------------------------------------------------------------------------
- # * Load the right corner rectangle
- #--------------------------------------------------------------------------
- def corner_right(s_id,s_img, p_req, p_req_img)
- horiz, corner = @arrow_h, @corner
- # Calculate Horizontal Space
- h_space = s_id.x - p_req.x - s_img.width + (s_img.width/2 - corner.width/2)
- # Create Horizontal Rect
- bodyhor_dest = Rect.new(p_req.x + p_req_img.width, p_req.y +
- p_req_img.height / 2 - horiz.height / 2, h_space, horiz.height)
- return bodyhor_dest
- end
- #--------------------------------------------------------------------------
- # * Draw Skill Icon
- # skillid : Skill ID
- #--------------------------------------------------------------------------
- def draw_skill(skillid)
- line = $data_skills[skillid].line(@switch_id, @tree)
- position = $data_skills[skillid].position(@switch_id, @tree)
- new_id = @actor.skill_id[skillid]
- icon = RPG::Cache.icon($data_skills[new_id].icon_name)
- cw, ch = icon.width, icon.height
- src_rect = Rect.new(0, 0, cw, ch)
- if @actor.skill_learn?(skillid)
- opacity = SkillTree::SKILL_AVAILABLE[0]
- elsif @actor.can_learn?(skillid, @tree)
- opacity = SkillTree::SKILL_AVAILABLE[1]
- elsif !@actor.can_learn?(skillid, @tree)
- opacity = SkillTree::SKILL_AVAILABLE[2]
- end
- pos, linepos = $data_skills[skillid].x, $data_skills[skillid].y
- self.contents.blt(pos, linepos, icon, src_rect, opacity)
- # For the unavailable icon
- unless SkillTree::UNAVAILABLE_ICON == nil
- if @actor.skill_check(skillid)
- # 'nothing'
- elsif !@actor.can_learn?(skillid, @tree)
- icon = RPG::Cache.skilltree(SkillTree::UNAVAILABLE_ICON)
- opacity = SkillTree::SKILL_AVAILABLE[3]
- self.contents.blt(pos, linepos, icon, src_rect, opacity)
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Draw Skill Rank
- #--------------------------------------------------------------------------
- def draw_skill_rank(skillid)
- rank = @actor.skill_level[skillid]+1
- rank_max = 1
- if SkillTree::RANKS.has_key?(skillid)
- rank_max = SkillTree::RANKS[skillid].size + 1
- end
- return if rank_max == 1 && !SkillTree::RANK_SHOW_ALL
- return if !@actor.can_learn?(skillid, @tree) &&
- !SkillTree::SHOW_ALL_TREE
- self.contents.font.size = SkillTree::RANK_DISPLAY_SIZE
- pos, linepos = $data_skills[skillid].x, $data_skills[skillid].y
- icon = RPG::Cache.icon($data_skills[skillid].icon_name)
- cw, ch = icon.width, icon.height
- rankcheck = @actor.skill_check(skillid)
- rank = (rankcheck) ? (@actor.skill_level[skillid]+1).to_s : "0"
- return if rank == "0" and SkillTree::RANK_SHOW_ZERO == false
- rankmax = "/" + rank_max.to_s
- text_size = self.contents.text_size(rank + rankmax)
- rect_x = pos + cw - text_size.width
- rect_y = linepos + ch - text_size.height
- rect_width = text_size.width
- rect_height = text_size.height
- if SkillTree::RANK_DISPLAY_SHADOW
- self.contents.font.color = Color.new(0,0,0)
- text_rect = Rect.new(rect_x+1, rect_y+1, rect_width, rect_height)
- self.contents.draw_text(text_rect, rank + rankmax, 1)
- end
- self.contents.font.color = SkillTree::RANK_DISPLAY_COLOR
- text_rect = Rect.new(rect_x, rect_y, rect_width, rect_height)
- self.contents.draw_text(text_rect, rank + rankmax, 1)
- # Reset the font
- reset_font
- # Update skills
- $data_skills[skillid].need_update = false
- end
- end
- #==============================================================================
- # ** Window_SkillTreeInfo
- #------------------------------------------------------------------------------
- # This window displays information about the highlighted skill in the tree.
- #==============================================================================
- class Window_SkillTreeInfo < Window_Base
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :skill_id
- attr_accessor :actor
- attr_accessor :tree
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize
- super(SkillTree::SKILL_INFO_AREA[0], SkillTree::SKILL_INFO_AREA[1],
- SkillTree::SKILL_INFO_AREA[2], SkillTree::SKILL_INFO_AREA[3])
- @skill_id = nil
- @actor = nil
- @tree = 0
- width = SkillTree::SKILL_INFO_AREA[2] - 32
- height = SkillTree::SKILL_INFO_AREA[3] - 32
- self.contents = Bitmap.new(width, height)
- self.opacity = SkillTree::SKILL_INFO_AREA[4]
- self.back_opacity = SkillTree::SKILL_INFO_AREA[5]
- refresh if @skill_id != nil && @actor != nil
- end
- #--------------------------------------------------------------------------
- # * Refresh skill informations
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_skill_icon
- draw_skill_name
- draw_skill_currank
- draw_skill_description
- draw_skill_points_needed
- if $data_skills[@skill_id].spentpoints_needed > 0
- draw_skill_pointsintree_needed
- end
- draw_required_skills
- draw_unavailable
- end
- #--------------------------------------------------------------------------
- # * Draw skill's icon
- #--------------------------------------------------------------------------
- def draw_skill_icon
- @icon = RPG::Cache.icon(@actor.skill_icon_name[@skill_id])
- src_rect = Rect.new(0,0,@icon.width,@icon.height)
- self.contents.blt(SkillTree::TEXT_SKILLICON[0],SkillTree::TEXT_SKILLICON[1],
- @icon, src_rect, 255)
- end
- #--------------------------------------------------------------------------
- # * Draw skill text
- #--------------------------------------------------------------------------
- def draw_skill_text(text_array, text_string)
- self.contents.draw_text(text_array[0], text_array[1], text_array[2],
- text_array[3], text_string, text_array[4])
- end
- #--------------------------------------------------------------------------
- # * Draw skill's name
- #--------------------------------------------------------------------------
- def draw_skill_name
- # Reset the font
- reset_font
- id = @skill_id
- skill_id = @actor.skill_id[id]
- skill_name = $data_skills[skill_id].name.to_s
- draw_skill_text(SkillTree::TEXT_SKILLNAME, skill_name)
- end
- #--------------------------------------------------------------------------
- # * Draw skill's current rank
- #--------------------------------------------------------------------------
- def draw_skill_currank
- rank_max = 1
- if SkillTree::RANKS.has_key?(@skill_id)
- rank_max = SkillTree::RANKS[@skill_id].size + 1
- end
- # Reset the font
- reset_font
- # Draw Rank for levelable skills
- if @actor.skill_check(skill_id)
- msg = SkillTree::RANK_TEXT_1.dup
- begin
- msg[/{rank_score}/] = "#{@actor.skill_level[@skill_id]+1}"
- rescue
- end
- cur_rank = msg
- else
- cur_rank = " "
- if SkillTree::RANK_SHOW_ZERO == true
- cur_rank = SkillTree::RANK_TEXT_2
- end
- end
- # Erase if 1 level only...
- cur_rank = " " if rank_max == 1
- draw_skill_text(SkillTree::TEXT_SKILLRANK, cur_rank)
- end
- #--------------------------------------------------------------------------
- # * Draw skill's current rank's description
- #--------------------------------------------------------------------------
- def draw_skill_description
- # Reset the font
- reset_font
- # Get ID of new skill
- id = @skill_id
- skill_id = @actor.skill_id[id]
- # Obtain skill description and display
- skill_desc = $data_skills[skill_id].description.to_s
- draw_skill_text(SkillTree::TEXT_SKILLDESC, skill_desc)
- end
- #--------------------------------------------------------------------------
- # * Draw skill points needed to learn next rank
- #--------------------------------------------------------------------------
- def draw_skill_points_needed
- rank = @actor.skill_level[@skill_id]+1
- rank_max = 1
- if SkillTree::RANKS.has_key?(@skill_id)
- rank_max = SkillTree::RANKS[@skill_id].size + 1
- end
- # Reset the font
- reset_font
- return unless (rank < rank_max || (rank_max == 1 &&
- !@actor.skill_check(@skill_id)))
- if @actor.skillpoints < $data_skills[@skill_id].skill_points_cost
- self.contents.font.color = SkillTree::UNAVAILABLE_COLOR
- else
- self.contents.font.color = Font.default_color
- end
- # Obtain the points text (singular or plural)
- points = s_points($data_skills[@skill_id].skill_points_cost)
- # Generate the point cost message
- skill_cost = draw_skill_points_needed_message(points, rank_max)
- # Display Message
- draw_skill_text(SkillTree::TEXT_SKILLCOST, skill_cost)
- end
- #--------------------------------------------------------------------------
- # * Process skill points message type 1
- #--------------------------------------------------------------------------
- def draw_skill_points_needed_message(points, flag)
- msg = (flag=1) ? SkillTree::POINT_COST_1.dup : SkillTree::POINT_COST_2.dup
- begin
- msg[/{point_score}/] = "#{$data_skills[@skill_id].skill_points_cost}"
- rescue
- end
- begin
- msg[/{point_text}/] = "#{points}"
- rescue
- end
- return msg
- end
- #--------------------------------------------------------------------------
- # * Draw skill points needed in skill tree to learn next rank
- #--------------------------------------------------------------------------
- def draw_skill_pointsintree_needed
- # Reset the font
- reset_font
- if @actor.points_spent < $data_skills[@skill_id].spentpoints_needed
- self.contents.font.color = SkillTree::UNAVAILABLE_COLOR
- else
- self.contents.font.color = Font.default_color
- end
- # Obtain the points text (singular or plural)
- points = s_points($data_skills[@skill_id].spentpoints_needed)
- # Apply and display the point spend message
- msg = SkillTree::POINT_COST_3.dup
- begin
- msg[/{point_score}/] = "#{$data_skills[@skill_id].spentpoints_needed}"
- rescue
- end
- begin
- msg[/{point_text}/] = "#{points}"
- rescue
- end
- points_spent = msg
- draw_skill_text(SkillTree::TEXT_SKILLSPEND, points_spent)
- end
- #--------------------------------------------------------------------------
- # * Get the Spend Points string
- # spend_points : spend points
- #--------------------------------------------------------------------------
- def s_points(spend_points)
- point_return = SkillTree::SKILLPOINTS_NAME[0] if spend_points == 1
- point_return = SkillTree::SKILLPOINTS_NAME[1] if spend_points > 1
- return point_return
- end
- #--------------------------------------------------------------------------
- # * Draw if skill unavailable or already maxed out
- #--------------------------------------------------------------------------
- def draw_required_skills
- reset_font
- return if SkillTree::PREREQUISITES[@skill_id] == nil
- text = SkillTree::SKILLS_REQ #"Skills Required: "
- required_ids = SkillTree::PREREQUISITES[@skill_id]
- unless required_ids == nil
- if required_ids.is_a?(Array)
- for i in required_ids
- r_id = $data_skills[i].id
- rank = 0
- if SkillTree::RANKS.has_key?(i)
- rank = SkillTree::RANKS[i].size
- end
- text += $data_skills[r_id + rank].name + ", "
- end
- text.slice!(text.size-2, 2)
- else
- r_id = $data_skills[required_ids].id
- rank = 0
- if SkillTree::RANKS.has_key?(required_ids)
- rank = SkillTree::RANKS[required_ids].size
- end
- text += $data_skills[r_id + rank].name
- end
- end
- draw_skill_text(SkillTree::TEXT_SKILLREQUIRED, text)
- end
- #--------------------------------------------------------------------------
- # * Draw if skill unavailable or already maxed out
- #--------------------------------------------------------------------------
- def draw_unavailable
- rank = @actor.skill_level[@skill_id]+1
- rank_max = 1
- if SkillTree::RANKS.has_key?(@skill_id)
- rank_max = SkillTree::RANKS[@skill_id].size + 1
- end
- # Reset the font
- reset_font
- # Obtain the party index
- i = 0
- for j in $game_party.actors
- break if j == @actor
- i += 1
- end
- # Branch on activeness
- if $game_party.actors[i].skill_check(@skill_id)
- if rank_max == rank
- if rank_max == 1
- text = SkillTree::ACQUIRED_TXT
- else
- text = SkillTree::ACQUIRED_LEVEL
- end
- else
- return unless SkillTree::SHOW_NEXT_SKILL
- if rank_max != 1 && rank != rank_max
- skill_id = SkillTree::RANKS[@skill_id][rank-1]
- skill_name = $data_skills[skill_id].name.to_s
- text = SkillTree::NEXT_RANKING_SKILL + skill_name
- end
- end
- elsif $game_party.actors[i].can_learn?(@skill_id, @tree)
- return
- elsif !$game_party.actors[i].can_learn?(@skill_id, @tree)
- text = SkillTree::UNAVAILABLE
- end
- draw_skill_text(SkillTree::TEXT_SKILLGAIN, text)
- end
- end
- #==============================================================================
- # ** Window_SkillTreePoints
- #------------------------------------------------------------------------------
- # This window displays amount of skill tree points
- #==============================================================================
- class Window_SkillTreePoints < Window_Base
- #--------------------------------------------------------------------------
- # * Object Initialization
- # actor_index : actor index
- #--------------------------------------------------------------------------
- def initialize(actor_index)
- super(SkillTree::SKILL_POINT_AREA[0], SkillTree::SKILL_POINT_AREA[1],
- SkillTree::SKILL_POINT_AREA[2], SkillTree::SKILL_POINT_AREA[3])
- self.contents = Bitmap.new(width - 32, height - 32)
- self.opacity = SkillTree::SKILL_POINT_AREA[4]
- self.back_opacity = SkillTree::SKILL_POINT_AREA[5]
- @actor = $game_party.actors[actor_index]
- refresh
- end
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.draw_text(0, 0, SkillTree::SKILL_POINT_AREA[2] - 32, 32,
- @actor.skillpoints.to_s, 2)
- end
- end
- #==============================================================================
- # ** Interpreter
- #------------------------------------------------------------------------------
- # This interpreter runs event commands. This class is used within the
- # Game_System class and the Game_Event class.
- #==============================================================================
- class Interpreter
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias skilltree_interpreter_command_318 command_318
- #--------------------------------------------------------------------------
- # * Object Initialization
- # actor_index : actor index
- # from_map : from_map
- #--------------------------------------------------------------------------
- def skilltree(actor_index=0, from_map=false)
- $scene = Scene_SkillTree.new(actor_index, from_map)
- end
- #--------------------------------------------------------------------------
- # * Change Skills
- #--------------------------------------------------------------------------
- def command_318
- # Get actor
- actor = $game_actors[@parameters[0]]
- # Get Skill Data
- skill_id_value = @parameters[2]
- found_rank = false
- found_rank_skill = 0
- index_value = nil
- # Find index value and rank data
- for skill in $data_skills
- if SkillTree::RANKS.has_key?(skill.id)
- if SkillTree::RANKS[skill.id].include?(skill_id_value)
- found_rank = true
- found_rank_skill = skill.id
- test = SkillTree::RANKS[skill.id]
- index_value = test.index(skill_id_value)
- end
- end
- end
- # Perform only if a ranked skill and not at skill start
- if found_rank == true && index_value != nil
- # if forget skill type
- if @parameters[1] != 0
- # Exit as this ranked skill isn't in memory
- return true unless actor.skills.include?(found_rank_skill)
- # Actor's currently loaded skill at current level
- current_id = actor.skill_id[found_rank_skill]
- test_array = SkillTree::RANKS[found_rank_skill]
- current_idx = test_array.index(current_id)
- idx = (current_idx.nil?) ? 0 : current_idx + 1
- if idx == index_value+1
- # Reset to original and remove
- frs = found_rank_skill
- actor.skill_id[frs] = frs
- actor.skill_level[frs] = 0
- actor.skill_icon_name[frs] = $data_skills[frs].icon_name
- actor.forget_skill(frs)
- end
- # if learn skill type
- else
- # If actor has a skill to upgrade... based on ranked skill passed
- if actor.skills.include?(found_rank_skill)
- current_id = actor.skill_id[found_rank_skill]
- # Exit method if skill currently memorized
- return true if current_id == skill_id_value
- # Get Testing array
- test_array = SkillTree::RANKS[found_rank_skill]
- if index_value >= 0
- for skill in actor.skills
- found_flag = false
- current_id = actor.skill_id[skill]
- # If either BASE skill in actor's database
- if current_id == found_rank_skill
- original_skill_index = 0
- found_flag = true
- # Or a LEVELED skill in actor's database
- elsif test_array.include?(current_id)
- original_skill_index = test_array.index(current_id)+1
- found_flag = true
- end
- if found_flag == true
- new_skill_index = index_value+1
- if !(new_skill_index > original_skill_index)
- return true
- end
- actor.skill_id[found_rank_skill] = skill_id_value
- actor.skill_level[found_rank_skill] = new_skill_index
- return true
- end
- end
- end
- # Otherwise, add the skill
- else
- diff = 0
- test = SkillTree::RANKS[found_rank_skill]
- if test.include?(skill_id_value)
- diff = test.index(skill_id_value)
- end
- actor.learn_skill(found_rank_skill)
- actor.skill_id[found_rank_skill] = skill_id_value
- actor.skill_level[found_rank_skill] = diff+1
- return true
- end
- end
- end
- # Lest the original call
- return skilltree_interpreter_command_318
- end
- end
- #==============================================================================
- # ** Scene_SkillTree
- #------------------------------------------------------------------------------
- # This class performs SkillTree screen processing.
- #==============================================================================
- class Scene_SkillTree
- #--------------------------------------------------------------------------
- # * Object Initialization
- # actor_index : actor index
- # from_map : from_map
- # id : if ID used
- #--------------------------------------------------------------------------
- def initialize(actor_index=0, from_map=false)
- @actor_index = actor_index
- @from_map = from_map
- end
- #--------------------------------------------------------------------------
- # * Main Processing
- #--------------------------------------------------------------------------
- def main
- @actor = $game_party.actors[@actor_index]
- @switch_id = (SkillTree::CLASS_TREE_START == true) ?
- @actor.class_id : @actor.id
- main_windows
- main_update
- main_dispose
- end
- #--------------------------------------------------------------------------
- # * Main Processing of Window Display
- #--------------------------------------------------------------------------
- def main_windows
- if SkillTree::SHOW_NAME_WINDOW
- unless (SkillTree::HIDE_NAME_INACTIVE &&
- SkillTree::SKILLS_ROWS[@switch_id].nil?)
- @name_win = Window_SkillTreeName.new(@actor_index)
- end
- end
- unless SkillTree::SKILLS_ROWS[@switch_id].nil?
- @tabs_win = Window_SkillTreeTabs.new(@actor_index)
- @points_win = Window_SkillTreePoints.new(@actor_index)
- end
- @tree_win = Window_SkillTreeMain.new(@actor_index)
- @tree_win.active = false
- @tree_win.visible = false if SkillTree::SKILLS_ROWS[@switch_id].nil?
- @info_win = Window_SkillTreeInfo.new
- @info_win.z = @tree_win.z + 3
- @info_win.visible = false
- @info_pic = Sprite.new
- refresh_infopicture
- @info_pic.opacity = 255
- @info_pic.z = @tree_win.z + 2
- @info_pic.x = @info_win.x
- @info_pic.y = @info_win.y
- @info_pic.visible = false
- @rankchanged = false
- # Switch backgrounds
- refresh_background
- # Execute transition
- Graphics.transition
- end
- #--------------------------------------------------------------------------
- # * Main Processing of Update System
- #--------------------------------------------------------------------------
- def main_update
- loop do
- # Update game screen
- Graphics.update
- # Update input information
- Input.update
- # Frame update
- update
- # Abort loop if screen is changed
- break if $scene != self
- end
- end
- #--------------------------------------------------------------------------
- # * Main Processing of Window Disposal
- #--------------------------------------------------------------------------
- def main_dispose
- # Prepare for transition
- Graphics.freeze
- # Dispose of background
- if SkillTree::WINDOW_BACKGROUND != nil
- if SkillTree::WINDOW_BACKGROUND == -1
- @spriteset.dispose
- else
- @stback.dispose
- end
- end
- # Dispose of windows
- @info_pic.dispose
- @tree_win.dispose
- @info_win.dispose
- @name_win.dispose unless @name_win.nil?
- @tabs_win.dispose unless @tabs_win.nil?
- @points_win.dispose unless @points_win.nil?
- end
- #--------------------------------------------------------------------------
- # * Set or refresh the background
- #--------------------------------------------------------------------------
- def refresh_background
- # Prevent re-refreshes if not needed (They can stack!)
- return if (@oldactor == @switch_id) && (@oldtree == @tree_win.tree)
- @oldactor = @switch_id
- @oldtree = @tree_win.tree
- # If there is a window background
- return if SkillTree::WINDOW_BACKGROUND.nil?
- # If it is a spriteset
- if SkillTree::WINDOW_BACKGROUND == -1
- refresh_background_spriteset
- # Otherwise, an image
- else
- refresh_background_image
- end
- end
- #--------------------------------------------------------------------------
- # * Set or refresh the background (Spriteset)
- #--------------------------------------------------------------------------
- def refresh_background_spriteset
- @spriteset = Spriteset_Map.new
- end
- #--------------------------------------------------------------------------
- # * Set or refresh the background (Image)
- #--------------------------------------------------------------------------
- def refresh_background_image
- # Create the background plane if it doesn't exist
- @stback = Plane.new if @stback == nil
- # Set the default background image file & a clear area for the array image
- temp1 = RPG::Cache.skilltree(SkillTree::WINDOW_BACKGROUND)
- temp2 = nil
- # Load the array image file if one exists
- if SkillTree::BACKGROUND_LIST[@switch_id] != nil
- img = SkillTree::BACKGROUND_LIST[@switch_id][@tree_win.tree]
- temp2 = RPG::Cache.skilltree(img) if img != nil
- end
- # Load the array image file into the default background image if exists
- temp1 = temp2 if temp2 != nil
- # Set the background
- @stback.bitmap = temp1
- @stback.z = 1
- end
- #--------------------------------------------------------------------------
- # * Set or refresh the information window background
- #--------------------------------------------------------------------------
- def refresh_infopicture
- return if SkillTree::INFOBACKGROUND.nil?
- @info_pic.bitmap = RPG::Cache.skilltree(SkillTree::INFOBACKGROUND)
- return if SkillTree::INFOBACKGROUND_LIST[@switch_id].nil?
- img = SkillTree::INFOBACKGROUND_LIST[@switch_id][@tree_win.tree]
- @info_pic.bitmap = RPG::Cache.skilltree(img) if img != nil
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- # Update the windows
- update_tree_windows
- # Based on active/inactive system
- return frame_update_active if @tree_win.active
- frame_update_inactive
- end
- #--------------------------------------------------------------------------
- # * Frame Update (Handle windows update and refresh)
- #--------------------------------------------------------------------------
- def update_tree_windows
- # Skip if no tree for actor
- return if SkillTree::SKILLS_ROWS[@switch_id].nil?
- # Update and refresh
- @tabs_win.update
- @tabs_win.refresh
- @points_win.refresh
- if @tree_win.item_used.any? {|v| $data_skills[v].need_update}
- @tree_win.refresh
- end
- @tree_win.update
- @info_win.actor = @actor
- if @info_win.skill_id != @tree_win.item_used[@tree_win.index] ||
- @rankchanged
- @info_win.skill_id = @tree_win.item_used[@tree_win.index]
- @info_win.refresh
- @rankchanged = false
- end
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in active screen)
- #--------------------------------------------------------------------------
- def frame_update_active
- return update_perform_action if Input::trigger?(Input::C)
- return update_cancel_tree if Input::trigger?(Input::B)
- return update_cursor_selection if Input::repeat?(Input::LEFT)
- return update_cursor_selection if Input::repeat?(Input::RIGHT)
- return update_cursor_selection if Input::repeat?(Input::DOWN)
- return update_cursor_selection if Input::repeat?(Input::UP)
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in inactive screen)
- #--------------------------------------------------------------------------
- def frame_update_inactive
- return update_full_cancel if Input::trigger?(Input::B)
- return update_cycle_actor if Input::trigger?(Input::R)
- return update_cycle_actor(-1) if Input::trigger?(Input::L)
- # No further action if no valid skill tree
- return if SkillTree::SKILLS_ROWS[@switch_id].nil?
- return update_select_tree if Input::trigger?(Input::C)
- return update_cycle_tree_screen if Input::repeat?(Input::LEFT)
- return update_cycle_tree_screen if Input::repeat?(Input::RIGHT)
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in active screen - cancel current tree)
- #--------------------------------------------------------------------------
- def update_perform_action
- skill = @tree_win.item_used[@tree_win.index]
- rank = @actor.skill_level[skill]
- rank_max = 0
- if SkillTree::RANKS.has_key?(skill)
- rank_max = SkillTree::RANKS[skill].size
- end
- # Get skill checking and ranking values
- rank_checked = (rank < rank_max)
- skill_checked = @actor.skill_check(skill)
- # If a skill can be learned or upgraded
- if @actor.can_learn?(skill,@tree_win.tree)
- return update_add_skill(skill) if !skill_checked
- return update_increase_skill(skill) if (rank_checked && skill_checked)
- end
- $game_system.se_play($data_system.buzzer_se)
- @rankchanged = true
- end
- #--------------------------------------------------------------------------
- # * Frame Update (updating with new skill not learned)
- #--------------------------------------------------------------------------
- def update_add_skill(skill)
- $game_system.se_play($data_system.decision_se)
- @actor.learn_skill(skill)
- @rankchanged = true
- $data_skills[skill].need_update = true
- @actor.skillpoints -= $data_skills[skill].skill_points_cost
- @actor.points_spent += $data_skills[skill].skill_points_cost
- @actor.update_actor_tree_passive_effects(skill)
- end
- #--------------------------------------------------------------------------
- # * Frame Update (updating new skill that was learned)
- #--------------------------------------------------------------------------
- def update_increase_skill(skill)
- return unless SkillTree::RANKS.has_key?(skill)
- $game_system.se_play($data_system.decision_se)
- rank_max = SkillTree::RANKS[skill].size
- rank = @actor.skill_level[skill]
- @actor.skill_level[skill] += 1
- $data_skills[skill].need_update = true
- @rankchanged = true
- @actor.skillpoints -= $data_skills[skill].skill_points_cost
- @actor.points_spent += $data_skills[skill].skill_points_cost
- new_id = SkillTree::RANKS[skill][@actor.skill_level[skill]-1]
- @actor.update_skill(skill, new_id)
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in active screen - cancel current tree)
- #--------------------------------------------------------------------------
- def update_cancel_tree
- $game_system.se_play($data_system.cancel_se)
- @tree_win.oy = 0
- @tabs_win.active = true
- @tree_win.active = false
- @info_win.visible = false
- @info_pic.visible = false
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in active screen - move cursor into skill for selection)
- #--------------------------------------------------------------------------
- def update_cursor_selection
- testskill = @tree_win.item_used[@tree_win.index]
- return if (SkillTree::SHOW_ALL_TREE || SkillTree::INFO_SHOW_ALL)
- if !$game_party.actors[@actor_index].can_learn?(testskill, @tree_win.tree)
- @info_win.visible = false
- @info_pic.visible = false
- else
- @info_win.visible = true
- @info_pic.visible = true
- end
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in inactive screen - selection/choosing of tree in system)
- #--------------------------------------------------------------------------
- def update_select_tree
- $game_system.se_play($data_system.decision_se)
- @tree_win.index = 0
- @tabs_win.active = false
- @tree_win.active = true
- @info_win.visible = true
- @info_pic.visible = true
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in inactive screen - performing full cancel of tree system)
- #--------------------------------------------------------------------------
- def update_full_cancel
- $game_system.se_play($data_system.cancel_se)
- $scene = Scene_Map.new if @from_map == true
- $scene = Scene_Menu.new
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in inactive screen - performing cycle of tree in system)
- #--------------------------------------------------------------------------
- def update_cycle_tree_screen
- $game_system.se_play($data_system.cursor_se)
- @tree_win.tree = @tabs_win.index
- @info_win.tree = @tabs_win.index
- @tree_win.initialize_skills
- # Refresh when switching actors
- refresh_background
- refresh_infopicture
- @tree_win.refresh
- end
- #--------------------------------------------------------------------------
- # * Frame Update (in inactive screen - performing actor cycle)
- # direction : direction of cycle (1/-1) negative reverses cycle)
- #--------------------------------------------------------------------------
- def update_cycle_actor(direction=1)
- $game_system.se_play($data_system.cursor_se)
- @actor_index += direction
- @actor_index %= $game_party.actors.size
- $scene = Scene_SkillTree.new(@actor_index, @from_map)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement