Commits

featheredmelody committed 436fe17 Merge

Merged in Linux save fix

Comments (0)

Files changed (22)

Story of a Lost Sky/data/XML/hints.xml

     <hint name="Trait Types">
         <author>Hieda no Akyu</author>
         <location>Human Village, Human Village Region</location>
-        <hint_text>Support traits are abilities that assist in the background. For instance, they might enhance the attack or gradually recover the health of a character. Action traits on the other hand are abilities that actively change the flow of battle. They are generally more powerful and can do things like allow a character to fly over any terrain and survive a knockout attack.</hint_text>
+        <hint_text>Traits may be divided into three types: Support Traits, Proximity Traits, and Trait Skills. Support Traits passively strengthen a unit by increasing an offensive or defensive stat. Proximity Traits provide support to nearby allies or decrease the effectiveness of nearby enemies. Finally, Trait Skills are special actions a unit can take which may cost Spirit Charge.</hint_text>
     </hint>
     <hint name="Trait Branches">
         <author>Hieda no Akyu</author>
         <location>Human Village, Human Village Region</location>
-        <hint_text>As units gain in level, they will also receive Trait Points. These trait points are used to buy new traits for the characters. Remember to periodically check in on the trait learning to see if some new traits are available. Some traits will only be available to certain types of characters or if a character has reached a certain level.</hint_text>
+        <hint_text>As a unit gains experience, new traits will be available to them in their trait branches. Before each battle, be sure to check what trait branches might be best for the mission.</hint_text>
     </hint>
     <hint name="Treasures">
         <author>Hieda no Akyu</author>
         <location>Human Village, Human Village Region</location>
 		<prereq>CH1ST4</prereq>
-        <hint_text>Gensokyo is full of treasures and undiscovered artifacts sitting around waiting to be found. Be sure to check in odd places like roadside shrines or out of place trees.</hint_text>
+        <hint_text>Gensokyo is full of treasures and undiscovered artifacts sitting around waiting to be found. Be sure to check in odd places like roadside shrines or out of place trees. I hear that Rinnosuke of Kourindou is offering useful items for some of his lost artifacts.</hint_text>
     </hint>
     <hint name="Spell Synthesis">
         <author>Patchouli Knowledge</author>
         <location>Scarlet Devil Mansion, Misty Lake Region</location>
 		<prereq>CH1ST4</prereq>
-        <hint_text>I've recently discovered a new method of crafting spells. As any sorcerer knows, the basic five elements are Metal, Earth, Wood, Water, and Fire. From each crystal you can create a spells. My research is continuing into the ability to combine crystals for spells.</hint_text>
+        <hint_text>I've recently discovered a new method of crafting spells. As any sorcerer knows, the basic five elements are Metal, Earth, Wood, Water, and Fire. From these elements, spell actions can be created and more powerful spells are crafted by combining crystals.</hint_text>
     </hint>
     
         

Story of a Lost Sky/data/XML/npc_enemy_units.xml

 
     <unit name="Wolf Tengu">
         <sprite>enemy-wolftengu.png</sprite>
-        <portrait>av-placeholder.png</portrait>
+        <portrait>enemy-wolftengu-av.png</portrait>
         <moves>4</moves>>
         <stats>
             <HP>5</HP>
 
     </unit>
 
-    <unit name="Tengu Ascetic">
+    <unit name="Crow Tengu">
         <sprite>enemy-crowtengu.png</sprite>
-        <portrait>av-placeholder.png</portrait>
+        <portrait>enemy-crowtengu-av.png</portrait>
         <moves>5</moves>
         <stats>
             <HP>5</HP>
     <!--CH1ST2 Boss -->
     <unit name="Kodama Lord">
         <sprite>enemy-kodama.png</sprite>
-        <portrait>av-placeholder.png</portrait>
+        <portrait>enemy-kodama-av.png</portrait>
         <moves>4</moves>
         <stats>
             <HP>8</HP>
         <moves>0</moves>
         <stats>
             <HP>4</HP>
-            <STR>2</STR>
+            <STR>6</STR>
             <DEF>4</DEF>
             <MAG>6</MAG>
-            <MDEF>5</MDEF>
+            <MDEF>4</MDEF>
             <AGL>4</AGL>
             <ACC>7</ACC>
         </stats>

Story of a Lost Sky/data/XML/traits.xml

         <spirit_mod>0</spirit_mod>
     </trait>
 
+    <trait name="Fog Veil">
+        <!--Declare Support/Action-->
+        <type>Support</type>
+
+        <!--Description-->
+        <desc>Provides protection when this unit is covered by fog.</desc>
+
+        <!--Stat Modifiers (expects decimal values. Stat is multiplied by 1+x)-->
+        <stat_mods>
+            <STR>0</STR>
+            <DEF>0</DEF>
+            <MAG>0</MAG>
+            <MDEF>0</MDEF>
+            <ACC>0</ACC>
+            <AGL>0</AGL>
+        </stat_mods>
+
+        <hit_bonus>0</hit_bonus>
+        <evade_bonus>0</evade_bonus>
+
+        <!--Movement Modifier (Use add if no movement modifier desired)-->
+        <move_mod type="add">0</move_mod>
+
+        <!--EXP Multiplicative Mod-->
+        <exp_mod>0</exp_mod>
+
+        <trait_properties>
+            <property>Fog Veil</property>
+        </trait_properties>
+
+        <!--Spirit Charge Multiplicative Mod-->
+        <spirit_mod>0</spirit_mod>
+    </trait>
+
     <!-- Action traits start here-->
 
     <trait name="TS Test Trait">

Story of a Lost Sky/data/XML/worldmap.xml

         <entrance default="False" direction="up">Southern Village Path</entrance>    
         <entrance default="False" direction="down">Northern Village Path</entrance>   
         <portrait>Field</portrait>
-        <prereq>CH1ST4</prereq>
+        <prereq>CH1ST3</prereq>
 
         <active_image>village_select.png</active_image>
         <inactive_image>village_dim.png</inactive_image>
                 <inactive_image>village_west_dim.png</inactive_image>
                 <hidden_image>village_west_sil.png</hidden_image>
                 <image_pos>(25, 170)</image_pos>
-                <prereq>CH1ST4</prereq>
+                <prereq>CH1ST3</prereq>
 
                 <desc>This path leads to the Forest of Magic</desc>
                 <coords>(3,5)</coords>

Story of a Lost Sky/images/conversation_img/tutorial_predictor.png

Old
Old image
New
New image

Story of a Lost Sky/images/conversation_img/tutorial_spell_key.png

Old
Old image
New
New image

Story of a Lost Sky/images/conversation_img/tutorial_spell_type.png

Old
Old image
New
New image

Story of a Lost Sky/lostsky/__init__.py

     # OTHER CUSTOM SETTINGS GO HERE
     ##################################
 
-    engine.game_version = "0.9.0 Dev"
+    engine.game_version = "0.9.0 Alpha"
 
     # Debug Flags
-    engine.enable_prologue = False
-    engine.single_turn_win = True
+    engine.enable_prologue = True
+    engine.single_turn_win = False
     engine.enable_splash = False
     engine.enable_wm_tutorial = False
-    engine.unlock_wm = True
-    engine.unlock_shops = True
+    engine.unlock_wm = False
+    engine.unlock_shops = False
 
     ############################
     # Main Program

Story of a Lost Sky/lostsky/battle/ai_fsm.py

         # Purpose: Pre-action processing
         """
 
+        self.unit.get_moves_path()
+
         self.target_unit = None
         for unit in self.unit.map.team2:
             # Validates that healer unit has an equipped spell action and can be retreated to

Story of a Lost Sky/lostsky/battle/mapobj.py

                 if self.engine.status_effects_catalog[status_effect].show_change and effect != 0:
                     self.center_on(unit)
 
-                    text_status_effect = self.engine.bfont.render(status_effect, True, (0, 0, 0))
+                    text_status_effect = self.engine.section_font.render(status_effect, True, (0, 0, 0))
 
                     self.render_background()
                     self.render_all_units()
                     self.render_cursor()
                     self.engine.surface.blit(self.engine.map_spell_board, (175, 0))
-                    self.engine.surface.blit(text_status_effect, (420-text_status_effect.get_width()/2, 25))
+                    self.engine.surface.blit(text_status_effect, (420-text_status_effect.get_width()/2, 20))
                     self.engine.surface.blit(self.engine.menu_board, (0, 490))
                     unit.plot_stats()
                     self.engine.surface.blit(text_effect, ((unit.location_pixel.x+18-text_effect.get_width()/2, unit.location_pixel.y-25)-self.screen_shift*self.engine.tilesize))
 
                         # No unit is currently selected: Add
                         if not current_unit:
-                            if unit:
+                            if unit and self.all_units_by_name[unit].team == 1:
                                 current_unit = self.all_units_by_name[unit]
                                 current_unit.sprite.transparent_flag = True
 
 
         Landmark.__init__(self, name, location, (1,1), img_coords, can_pass)
         self.lit_tiles = self.generate_range()
-        print self.lit_tiles
 
     def generate_range(self):
         """

Story of a Lost Sky/lostsky/battle/trait_skills.py

                                     name_panel.get_height()/2 - text_name.get_height()/2))
 
         options_panel =  get_ui_panel((140, 35), border_color, panel_color)
-        disabled_panel = get_ui_panel((200, 35), border_color, disabled_color)
+        disabled_panel = get_ui_panel((140, 35), border_color, disabled_color)
 
         confirm_action = True
 
                     if event.key == K_z or event.key == K_RETURN:
                         # Can only confirm if targets are actually present
                         if target_list:
+                            unit.map.center_on(unit)
                             return confirm_action
                         elif not confirm_action:
+                            unit.map.center_on(unit)
                             return False
                         else:
                             pass
 
             # Update summoned doll location
             try:
-                unit.map.all_units_by_name[unit_name].update_location(*summon_pos)
+                doll.update_location(*summon_pos)
             except KeyError:
                 print "ERROR: Unit name mismatch in set unit pos subaction", unit_name
 
             # Update summoned doll skills
+
+            # Clears skills and traits
+            doll.spell_actions = [None, None, None, None, None]
+            doll.traits = [None, None, None, None, None]
+
             spell = "Fireball"
             try:
-                unit.map.all_units_by_name[unit_name].add_spell(unit.map.engine.spell_catalog[spell].construct_spell())
+                doll.add_spell(unit.map.engine.spell_catalog[spell].construct_spell())
             except KeyError:
                 print "ERROR: Unit name mismatch in assign_spell subaction", unit_name, spell
 
-            unit.map.all_units_by_name[unit_name].add_trait(unit.map.engine.trait_catalog['Self Destruct'])
+            doll.add_trait(unit.map.engine.trait_catalog['Self Destruct'])
 
             return True, 0
         else:

Story of a Lost Sky/lostsky/core/char.py

         targetthreshold -= self_hit_bonus
         targetthreshold += self.map.terrainmap[tuple(target.location_tile)][0].evade_mod
 
+        # Fog Protection Penalty
+        if self.map.enable_fog:
+
+            if target.has_trait_property('Fog Veil') and tuple(target.location_tile) not in self.map.lit_tiles:
+                targetthreshold += 66
+
         return targetthreshold
 
     def compute_hitpercent(self, target):
 
         # Initialization of all text surfaces
 
-        text_name = self.map.engine.speaker_font.render(self.name, True, (0, 0, 0))
 
         small_icon_panel = get_ui_panel((41, 41), border_color, panel_color)
         name_panel = get_ui_panel((150, 35), border_color, panel_color)
         level_panel = get_ui_panel((70, 35), border_color, panel_color)
         stat_panel = get_ui_panel((110, 35), border_color, panel_color)
 
+
+        text_name = self.map.engine.speaker_font.render(self.name, True, (0, 0, 0))
+
+        if text_name.get_width() > name_panel.get_width() - 20:
+            text_name =self.map.engine.small_speaker_font.render(self.name, True, (0, 0, 0))
+
+
         text_lv = self.map.engine.section_font.render('Lv.', True, (0, 0, 0))
         text_lv_value = self.map.engine.data_font.render('%d'%(self.level), True, (0, 0, 0))
         text_hp = self.map.engine.section_font.render('HP', True, (0, 0, 0))
             if crit_user != "N/A":
                 crit_user += "%"
 
+            draw_target = True
+
         elif self.spell_actions[self.equipped].type in ('healing', 'healingitem', 'support'):
 
             hit_user, hit_target = "100%", "N/A"
             crit_user, crit_target = "N/A", "N/A"
             effect_user, effect_target = self.predict_damage(target)
             relation = 'Neutral'
+            draw_target = False
 
         # Generates the text objects
         text_eff = self.map.engine.section_font.render("Effect", True, (0, 0, 0))
         self.map.engine.surface.blit(text_crit_user, (menu_x + 20 + stat_panel.get_width() - text_crit_user.get_width(),
                                                       200 + stat_panel.get_height()/2 - text_crit_user.get_height()/2))
 
+
         # Draws the target's name
         self.map.engine.surface.blit(name_panel, (menu_x + 10, 245))
-        self.map.engine.surface.blit(text_target_name, (menu_x + 10 + name_panel.get_width()/2 - text_target_name.get_width()/2,
+        if draw_target:
+            self.map.engine.surface.blit(text_target_name, (menu_x + 10 + name_panel.get_width()/2 - text_target_name.get_width()/2,
                                                       245 + name_panel.get_height()/2 - text_target_name.get_height()/2))
 
         # Draws effect value
         self.map.engine.surface.blit(stat_panel, (menu_x + 30, 285))
-        self.map.engine.surface.blit(text_eff, (menu_x + 60,
-                                                      287 + stat_panel.get_height()/2 - text_eff.get_height()/2))
-        self.map.engine.surface.blit(text_effect_target, (menu_x + 20 + stat_panel.get_width() - text_effect_target.get_width(),
-                                                      285 + stat_panel.get_height()/2 - text_effect_target.get_height()/2))
+        if draw_target:
+            self.map.engine.surface.blit(text_eff, (menu_x + 60,
+                                                          287 + stat_panel.get_height()/2 - text_eff.get_height()/2))
+            self.map.engine.surface.blit(text_effect_target, (menu_x + 20 + stat_panel.get_width() - text_effect_target.get_width(),
+                                                          285 + stat_panel.get_height()/2 - text_effect_target.get_height()/2))
 
         # Draws the hit rate
         self.map.engine.surface.blit(stat_panel, (menu_x + 30, 325))
-        self.map.engine.surface.blit(text_hit, (menu_x + 60,
-                                                      327 + stat_panel.get_height()/2 - text_hit.get_height()/2))
-        self.map.engine.surface.blit(text_hit_target, (menu_x + 20 + stat_panel.get_width() - text_hit_target.get_width(),
-                                                      325 + stat_panel.get_height()/2 - text_crit_user.get_height()/2))
+        if draw_target:
+            self.map.engine.surface.blit(text_hit, (menu_x + 60,
+                                                          327 + stat_panel.get_height()/2 - text_hit.get_height()/2))
+            self.map.engine.surface.blit(text_hit_target, (menu_x + 20 + stat_panel.get_width() - text_hit_target.get_width(),
+                                                          325 + stat_panel.get_height()/2 - text_crit_user.get_height()/2))
 
         # Draws the crit rate
         self.map.engine.surface.blit(stat_panel, (menu_x + 30, 365))
-        self.map.engine.surface.blit(text_crit, (menu_x + 60,
-                                                      367 + stat_panel.get_height()/2 - text_crit.get_height()/2))
-        self.map.engine.surface.blit(text_crit_target, (menu_x + 20 + stat_panel.get_width() - text_crit_target.get_width(),
-                                                      365 + stat_panel.get_height()/2 - text_crit_target.get_height()/2))
+        if draw_target:
+            self.map.engine.surface.blit(text_crit, (menu_x + 60,
+                                                          367 + stat_panel.get_height()/2 - text_crit.get_height()/2))
+            self.map.engine.surface.blit(text_crit_target, (menu_x + 20 + stat_panel.get_width() - text_crit_target.get_width(),
+                                                          365 + stat_panel.get_height()/2 - text_crit_target.get_height()/2))
 
 
         if relation == 'Neutral' or self.spell_actions[self.equipped].type in ('healing', 'healingitem', 'support'):
             self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 127))
             self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 207))
-            self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 292))
-            self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 372))
-
+            if draw_target:
+                self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 292))
+                self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 372))
 
         elif relation == 'Strong':
-            self.map.engine.surface.blit(self.map.engine.relation_arrows['up'], (170, 605))
+
             self.map.engine.surface.blit(self.map.engine.relation_arrows['up'], (menu_x + 37, 127))
             self.map.engine.surface.blit(self.map.engine.relation_arrows['up'], (menu_x + 37, 207))
 
+            self.map.engine.surface.blit(self.map.engine.relation_arrows['up'], (170, 605))
             self.map.engine.surface.blit(self.map.engine.relation_arrows['down'], (500, 605))
             if effect_target != "N/A":
                 self.map.engine.surface.blit(self.map.engine.relation_arrows['down'], (menu_x + 37, 292))
         if effect_target != "N/A" and target.spell_actions[target.equipped].affinity == target.spell_preference:
             self.map.engine.surface.blit(self.map.engine.relation_arrows['up'], (menu_x + 37, 332))
         else:
-            self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 332))
+            if draw_target:
+                self.map.engine.surface.blit(self.map.engine.relation_arrows['neutral'], (menu_x + 37, 332))
 
 
     def plot_results(self, target, self_exp_delta, self_level_up,
 
 
         # Shows this unit's SC change
-        max_frames = 60
+        max_frames = 30
 
         if self.alive and self_sc_meter_delta:
             for frame_num in xrange(0, max_frames):
         """
 
         # Generates name of the spell at the top
-        text_name = self.map.engine.bfont.render(action, True, (0, 0, 0))
+        text_name = self.map.engine.section_font.render(action, True, (0, 0, 0))
         half_width = text_name.get_width()/2
 
         spell_used = False
                 self.map.render_cursor()
                 self.map.engine.surface.blit(self.map.engine.menu_board, (0, 490))
                 self.map.engine.surface.blit(self.map.engine.map_spell_board, (175, 0))
-                self.map.engine.surface.blit(text_name, (420-half_width, 25))
+                self.map.engine.surface.blit(text_name, (420-half_width, 20))
                 self.plot_stats()
 
                 x = x_o+30*sin(i*pi/5)
             self.map.render_cursor()
             self.map.engine.surface.blit(self.map.engine.menu_board, (0, 490))
             self.map.engine.surface.blit(self.map.engine.map_spell_board, (175, 0))
-            self.map.engine.surface.blit(text_name, (420-half_width, 25))
+            self.map.engine.surface.blit(text_name, (420-half_width, 20))
             self.plot_stats()
 
         rhs_hp_before = target.HP
             self.map.render_cursor()
             self.map.engine.surface.blit(self.map.engine.menu_board, (0, 490))
             self.map.engine.surface.blit(self.map.engine.map_spell_board, (175, 0))
-            self.map.engine.surface.blit(text_name, (420-half_width, 25))
+            self.map.engine.surface.blit(text_name, (420-half_width, 20))
             self.plot_stats()
             self.map.engine.surface.blit(effect_text, ((target.location_pixel.x+18-effect_text.get_width()/2, target.location_pixel.y-25)-self.map.screen_shift*self.map.engine.tilesize))
 
 
         update_screen = True
 
+
         text_name = self.map.engine.title_font.render(self.name, True,  (0,0,0))
-        text_level1 = self.map.engine.section_font.render("LV", True, (0,0,0))
+        if text_name.get_width() > 160:
+            text_name = self.map.engine.section_font.render(self.name, True,  (0,0,0))
+
+
+
+        text_level1 = self.map.engine.section_font.render("Lv.", True, (0,0,0))
         text_level2 = self.map.engine.data_font.render("%d"%self.level, True, (0,0,0))
 
         text_hp = self.map.engine.section_font.render("HP", True, (0, 0, 0))
 
         meter_width = 265
 
+        name_panel = get_ui_panel((190, 50), border_color, panel_color)
         stat_panel = get_ui_panel((100, 35), border_color, panel_color)
         small_icon_panel = get_ui_panel((41, 41), border_color, panel_color)
         spell_name_panel = get_ui_panel((230, 35), border_color, panel_color)
             if update_screen:
                 self.map.engine.surface.blit(self.map.engine.stats_bg, (0, 0))
                 self.map.engine.surface.blit(self.av, (50, 50))
-                self.map.engine.surface.blit(text_name, (185, 45))
+                self.map.engine.surface.blit(name_panel, (185, 65))
+                self.map.engine.surface.blit(text_name, (185 + name_panel.get_width()/2 - text_name.get_width()/2,
+                                                         67 + name_panel.get_height()/2 - text_name.get_height()/2))
 
                 # Stats / Traits / Spells current page indicator
                 self.map.engine.surface.blit(stat_panel, (-10, 600))
 
 
                 # Level
-                self.map.engine.surface.blit(stat_panel, (185, 100))
-                self.map.engine.surface.blit(text_level1, (200, 105))
-                self.map.engine.surface.blit(text_level2, (170+stat_panel.get_width()-text_level2.get_width(),
-                                                           100+stat_panel.get_height()/2-text_level2.get_height()/2))
+                self.map.engine.surface.blit(stat_panel, (230, 120))
+                self.map.engine.surface.blit(text_level1, (245, 122 + stat_panel.get_height()/2 - text_level1.get_height()/2))
+                self.map.engine.surface.blit(text_level2, (215+stat_panel.get_width()-text_level2.get_width(),
+                                                           120+stat_panel.get_height()/2-text_level2.get_height()/2))
 
                 # HP meter
                 self.map.engine.surface.blit(text_hp, (50,  180 + 25/2 - text_hp.get_height()/2))

Story of a Lost Sky/lostsky/core/engine.py

         # Small Font, Big Font, Combat display font
         self.sfont = pygame.font.Font(os.path.join('fonts','ABeeZee-Regular.ttf'), 16)
         self.speaker_font = pygame.font.Font(os.path.join('fonts',"BPreplayBold.otf"), 22)
+        self.small_speaker_font = pygame.font.Font(os.path.join('fonts',"BPreplayBold.otf"), 20)
         self.message_font = pygame.font.Font(os.path.join('fonts', 'ABeeZee-Regular.ttf'), 20)
         self.bfont = pygame.font.Font("VeraSeBd.ttf", 14)
         self.cfont = pygame.font.Font("VeraSeBd.ttf", 24)

Story of a Lost Sky/lostsky/missions/ch0st1.py

                                 'unit_name': 'Firefly A',
                                     'level': 8
                                 }, {'template_name': 'Kodama Lord',
-                                'unit_name': 'Kodama A',
+                                'unit_name': 'Kodama Lord A',
                                     'level': 25
                                 }, {'template_name': 'Fairy',
                                 'unit_name': 'Fairy C',
                             ]
 
         initial_spells = {'Firefly A':['Poison Dust'],
-                          'Kodama A':['Fireball'],
+                          'Kodama Lord A':['Fireball'],
                           'Fairy C':['Fireball'],
 #                          'Fairy D':['Fireball'],
-                          #'Kodama A':['Healing Drop'],
+                          #'Kodama Lord A':['Healing Drop'],
 #                          'Fairy D':['Fireball'],
 #
                             }
-        initial_traits = {}
+        initial_traits = {'Fairy A':[]}
         initial_ai_states = {'Firefly A':'Attack',
-                             'Kodama A':'Attack',
+                             'Kodama Lord A':'Attack',
                              'Fairy C':'Attack',
 #                             'Fairy D':'Attack',
 
-                             #'Kodama A':'HealerStandby'
+                             #'Kodama Lord A':'HealerStandby'
 #                             'Fairy D':'Attack',
 #
                             }
         initial_locations = {'Firefly A':(6, 13),
-                             'Kodama A':(6, 3),
+                             'Kodama Lord A':(6, 3),
                              'Fairy C':(6, 8),
 #                             'Fairy D':(23, 7),
 #                             'Fairy D':(8, 11),
         # self.map.update_fog_map()
         # self.say('Light 1 off and 2 off', None, None)
         # lantern.switch_state(True)
-        # self.say('Light 1 on and 2 off', None, None)
-        # lantern2.switch_state(True)
-        # self.say('Light 1 on and 2 on', None, None)
-        # lantern.switch_state(False)
-        # self.say('Light 1 off and 2 on', None, None)
-        # lantern2.switch_state(False)
-        # self.say('Light 1 off and 2 off', None, None)
 
 
         self.set_spirit_charge('Youmu', 900)

Story of a Lost Sky/lostsky/missions/ch1st1.py

                     None)
 
             self.hide_image('tutorial_attack')
-            self.show_image('tutorial_spell_key', 'tutorial_spell_key.png', (250, 70))
+            self.show_image('tutorial_spell_key', 'tutorial_spell_key.png', (175, 70))
 
             self.say("There are symbols that will indicate the important properties of an equipped spell action.",
                     'Tutorial',
                 'Tutorial',
                 None)
 
-            self.show_image('tutorial_predictor', 'tutorial_predictor.png', (210, 210))
+            self.show_image('tutorial_predictor', 'tutorial_predictor.png', (235, 70))
 
             self.say("During this stage, a prediction of the battle will be shown on the predictor that includes the likeliness to hit, the damage, and the chance of a critical hit. A critical hit does 1.5x the damage of a normal attack.",
                 'Tutorial',
                                 'rhs_equip':0,
                                 'lhs_crit':False,
                                 'rhs_crit':False,
-                                })
+                                }, plot_results=True)
 
             self.say("Ran successfully attacked and gained Experience Points (EXP) and Spirit Charge (SC).",
                     'Tutorial',

Story of a Lost Sky/lostsky/missions/ch1st2.py

                           'Walking Tree B':'Attack',
                           'Walking Tree C':'Attack',
                           'Walking Tree D':'Attack',
-                          'Fairy A':'Attack',
-                          'Fairy B':'Attack',
-                          'Fairy C':'Attack',
-                          'Fairy D':'Attack',
-                          'Fairy E':'Attack',
-                          'Fairy F':'Attack',
+                          'Fairy A':'Defend',
+                          'Fairy B':'Defend',
+                          'Fairy C':'Defend',
+                          'Fairy D':'Defend',
+                          'Fairy E':'Defend',
+                          'Fairy F':'Defend',
                           'Kodama Lord':'Attack',
                           'Fuzzball A':'Attack',
                           'Fuzzball B':'Attack',
                     'Marisa')
 
             # Tutorial part 1 - Spell Relations
-            self.show_image('tutorial_spell_type', 'tutorial_spell_type.png', (490, 210))
+            self.show_image('tutorial_spell_type', 'tutorial_spell_type.png', (170, 70))
             self.say("Spell actions are divided up into four different schools, linked in a cycle that represents the natural flow of magic in the world:",
                     'Marisa',
                     'Marisa')

Story of a Lost Sky/lostsky/missions/ch2st5.py

 
         line = choice(possible_lines)
 
-        self.say(line,
-            'Lord Fuzzy',
+        for unit in self.map.team1:
+            if "Target" in unit.status.keys():
+
+                self.say(line,
+                     'Lord Fuzzy',
             'Lord Fuzzy')
 
         for unit in self.map.team1:

Story of a Lost Sky/lostsky/missions/ch3st1.py

                                  'level': 9},
 
 
-                         {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Tengu Ascetic A',
+                         {'template_name': 'Crow Tengu',
+                                'unit_name': 'Crow Tengu A',
                                     'level': 8},
-                         {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Tengu Ascetic B',
+                         {'template_name': 'Crow Tengu',
+                                'unit_name': 'Crow Tengu B',
                                     'level': 8},
-                         {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Tengu Ascetic C',
+                         {'template_name': 'Crow Tengu',
+                                'unit_name': 'Crow Tengu C',
                                     'level': 8},
 
                         {'template_name': 'Wolf Tengu',
                             'unit_name': 'Aya',
                             'level': 10},
 
-                        {'template_name': 'Tengu Ascetic',
-                            'unit_name': 'Tengu Ascetic E',
+                        {'template_name': 'Crow Tengu',
+                            'unit_name': 'Crow Tengu E',
                                 'level': 8},
-                        {'template_name': 'Tengu Ascetic',
-                            'unit_name': 'Tengu Ascetic F',
+                        {'template_name': 'Crow Tengu',
+                            'unit_name': 'Crow Tengu F',
                                 'level': 8},
 
 
 
         initial_spells = {'Momiji':['Dagger Throw'],
                           'Nitori':['Tanabata Festival'],
-                          'Tengu Ascetic A':['Weakening Amulet'],
-                          'Tengu Ascetic B':['Barrier Buster'],
-                          'Tengu Ascetic C':['Weakening Amulet'],
+                          'Crow Tengu A':['Weakening Amulet'],
+                          'Crow Tengu B':['Barrier Buster'],
+                          'Crow Tengu C':['Weakening Amulet'],
                           'Kappa A':['Illusion Veil', 'Fireball'],
                           'Kappa B':['Encourage', 'Fireball'],
                           'Kappa C':['Life Bless', 'Fireball'],
         }
 
         initial_traits = {'Momiji':['Attack+ Lv.1'],
-                          'Tengu Ascetic A':['Flight'],
-                          'Tengu Ascetic B':['Flight'],
-                          'Tengu Ascetic C':['Flight'],
+                          'Crow Tengu A':['Flight'],
+                          'Crow Tengu B':['Flight'],
+                          'Crow Tengu C':['Flight'],
                           'Kappa A':['Swimming'],
                           'Kappa B':['Swimming'],
                           'Kappa C':['Swimming'],
         }
         initial_ai_states = {'Momiji':'Attack',
                              'Nitori':'Attack',
-                             'Tengu Ascetic A':'Pursuit',
-                             'Tengu Ascetic B':'Pursuit',
-                             'Tengu Ascetic C':'Pursuit',
+                             'Crow Tengu A':'Pursuit',
+                             'Crow Tengu B':'Pursuit',
+                             'Crow Tengu C':'Pursuit',
                              'Kappa A':'Support',
                              'Kappa B':'Support',
                              'Kappa C':'Support',
                              # Forward scout party
                              'Wolf Tengu F':(9, 25),
                              'Wolf Tengu G':(8, 24),
-                             'Tengu Ascetic C':(6, 23),
+                             'Crow Tengu C':(6, 23),
                              'Kappa A':(7, 24),
                              'Kappa B':(14, 9),
                              'Kappa C':(15, 9),
                              'Wolf Tengu D':(20, 11),
                              'Wolf Tengu E':(21, 11),
 
-                             'Tengu Ascetic A':(20, 14),
-                             'Tengu Ascetic B':(21, 14),
+                             'Crow Tengu A':(20, 14),
+                             'Crow Tengu B':(21, 14),
 
                              'Kappa Medic':(18, 9)
 
                              }
-        reserve_units = ['Momiji', 'Nitori', 'Aya', 'Tengu Ascetic E', 'Tengu Ascetic F']#[list of unit names to deploy later in mission]
+        reserve_units = ['Momiji', 'Nitori', 'Aya', 'Crow Tengu E', 'Crow Tengu F']#[list of unit names to deploy later in mission]
         all_landmarks = [
                          {'name':'CB1',
                           'id_string':'cherryblossom_tree',
                  'Wolf Tengu B',
                  'Wolf Tengu')
 
-        self.move_unit('Tengu Ascetic A', (19, 13))
-        self.emote('Tengu Ascetic A', 'scribble')
+        self.move_unit('Crow Tengu A', (19, 13))
+        self.emote('Crow Tengu A', 'scribble')
         self.say("Please. You wolves are all brawn and no brains. A single curse like this Weakening Amulet and you'll barely have the strength of a puppy.",
-                 'Tengu Ascetic A',
+                 'Crow Tengu A',
                  'Crow Tengu')
 
         self.emote('Wolf Tengu A', 'annoyed')
                  'Wolf Tengu A',
                  'Wolf Tengu')
 
-        self.emote('Tengu Ascetic A', 'scribble')
+        self.emote('Crow Tengu A', 'scribble')
 
         self.say("That's right. We Crow Tengu rule the skies. With our curses, we'll stop any enemy in their tracks. Leave Fuyuhana's trees to us.",
-                 'Tengu Ascetic A',
+                 'Crow Tengu A',
                  'Crow Tengu')
 
-        self.startle('Tengu Ascetic B')
+        self.startle('Crow Tengu B')
         self.say("If we didn't have orders to help you from Lord Tenma we would be protecting this mountain on our own.",
-                 'Tengu Ascetic A',
+                 'Crow Tengu A',
                  'Crow Tengu')
 
         self.startle('Wolf Tengu B')
         # Tengu units form up
         self.move_unit('Wolf Tengu C', (21, 9))
         self.move_unit('Wolf Tengu D', (20, 10))
-        self.move_unit('Tengu Ascetic A', (20, 11))
-        self.startle('Tengu Ascetic A')
+        self.move_unit('Crow Tengu A', (20, 11))
+        self.startle('Crow Tengu A')
         self.move_unit('Wolf Tengu D', (19, 10))
-        self.move_unit('Tengu Ascetic A', (20, 10))
+        self.move_unit('Crow Tengu A', (20, 10))
         self.move_unit('Wolf Tengu E', (21, 10))
-        self.move_unit('Tengu Ascetic B', (21, 11))
+        self.move_unit('Crow Tengu B', (21, 11))
         self.move_unit('Kappa Medic', (19, 11))
 
         self.say("Listen up! We're to protect the waterworks that the Kappa are building from intruders. Anyone that trespasses on the mountain is an enemy!",
                  'Momiji',
                  'Momiji')
 
-        self.center_on('Tengu Ascetic C')
-        self.emote('Tengu Ascetic C', 'exclamation')
+        self.center_on('Crow Tengu C')
+        self.emote('Crow Tengu C', 'exclamation')
         self.say("Momiji, a bunch of humans are approaching from downstream!",
-                 'Tengu Ascetic C',
+                 'Crow Tengu C',
                  'Crow Tengu')
 
         self.play_music('battle02')
         self.fade_to_color('black', 0.5)
 
         # Forward two groups
-        self.set_unit_pos('Tengu Ascetic A', (6, 23))
-        self.set_unit_pos('Tengu Ascetic B', (16, 23))
-        self.set_unit_pos('Tengu Ascetic C', (17, 23))
+        self.set_unit_pos('Crow Tengu A', (6, 23))
+        self.set_unit_pos('Crow Tengu B', (16, 23))
+        self.set_unit_pos('Crow Tengu C', (17, 23))
         self.set_unit_pos('Wolf Tengu A', (9, 25))
         self.set_unit_pos('Wolf Tengu B', (8, 24))
         self.set_unit_pos('Wolf Tengu C', (20, 25))
         # Aya arrives with more Crow Tengu
         self.deploy_unit('Aya', (23, -1))
 
-        self.deploy_unit('Tengu Ascetic E', (19, -1))
-        self.deploy_unit('Tengu Ascetic F', (20, -1))
+        self.deploy_unit('Crow Tengu E', (19, -1))
+        self.deploy_unit('Crow Tengu F', (20, -1))
 
         self.move_unit('Aya', (21, 2))
         self.center_on('Aya')
                  'Aya',
                  'Aya')
 
-        self.move_unit('Tengu Ascetic E', (19, 6))
-        self.move_unit('Tengu Ascetic F', (20, 7))
+        self.move_unit('Crow Tengu E', (19, 6))
+        self.move_unit('Crow Tengu F', (20, 7))
 
         # Aya circles around and takes pictures
         self.move_unit('Aya', (21, 12))
 
         self.kill_unit('Momiji')
         self.kill_unit('Aya')
-        self.kill_unit('Tengu Ascetic E')
-        self.kill_unit('Tengu Ascetic F')
+        self.kill_unit('Crow Tengu E')
+        self.kill_unit('Crow Tengu F')
         self.kill_unit('Wolf Tengu A')
 
         # Nitori and Marisa have a chat alone

Story of a Lost Sky/lostsky/missions/ch3st3.py

                             {'template_name': 'Aya',
                                 'unit_name': 'Aya',
                                 'level': 11},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Newspaper Corps A',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Reporter A',
                                 'level': 11},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Newspaper Corps B',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Reporter B',
                                 'level': 11},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Newspaper Corps C',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Reporter C',
                                 'level': 11},
 
 
                              {'template_name': 'Tsubaki',
                                     'unit_name': 'Tsubaki',
                                         'level': 15},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Red Feathers A',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Red Feather A',
                                 'level': 13},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Red Feathers B',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Red Feather B',
                                 'level': 13},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Red Feathers C',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Red Feather C',
                                 'level': 13},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Red Feathers D',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Red Feather D',
                                 'level': 13},
-                            {'template_name': 'Tengu Ascetic',
-                                'unit_name': 'Red Feathers E',
+                            {'template_name': 'Crow Tengu',
+                                'unit_name': 'Red Feather E',
                                 'level': 13},
 #
 #
                           'Kappa D':['Tanabata Festival'],
 
                           'Aya':['Holy Amulet'],
-                          'Newspaper Corps A':['Shimmering Stars'],
-                          'Newspaper Corps B':['Feather Pin'],
-                          'Newspaper Corps C':['Spirit Break'],
+                          'Reporter A':['Shimmering Stars'],
+                          'Reporter B':['Feather Pin'],
+                          'Reporter C':['Spirit Break'],
 
                           'Tsubaki':['Holy Amulet'],
-                          'Red Feathers A':['Spirit Break'],
-                          'Red Feathers B':['Fireball'],
-                          'Red Feathers C':['Spirit Break'],
-                          'Red Feathers D':['Fireball'],
-                          'Red Feathers E':['Spirit Break'],
+                          'Red Feather A':['Spirit Break'],
+                          'Red Feather B':['Fireball'],
+                          'Red Feather C':['Spirit Break'],
+                          'Red Feather D':['Fireball'],
+                          'Red Feather E':['Spirit Break'],
 
                             }
         initial_traits = {'Aya':['Flight', 'Mirage'],
-                          'Newspaper Corps A':['Flight'],
-                          'Newspaper Corps B':['Flight'],
-                          'Newspaper Corps C':['Flight'],
+                          'Reporter A':['Flight'],
+                          'Reporter B':['Flight'],
+                          'Reporter C':['Flight'],
                           'Nitori':['Danmaku Sniper', 'Swimming'],
                           'Kappa A':['Swimming'],
                           'Kappa B':['Swimming'],
                           'Kappa C':['Swimming'],
                           'Kappa D':['Swimming'],
                           'Tsubaki':['Flight'],
-                          'Red Feathers A':['Flight'],
-                          'Red Feathers B':['Flight'],
-                          'Red Feathers C':['Flight'],
-                          'Red Feathers D':['Flight'],
-                          'Red Feathers E':['Flight'],
+                          'Red Feather A':['Flight'],
+                          'Red Feather B':['Flight'],
+                          'Red Feather C':['Flight'],
+                          'Red Feather D':['Flight'],
+                          'Red Feather E':['Flight'],
 
 
                           }
                              'Kappa D':'Attack',
 
                              'Aya':'Pursuit',
-                             'Newspaper Corps A':'Pursuit',
-                             'Newspaper Corps B':'Pursuit',
-                             'Newspaper Corps C':'Pursuit',
+                             'Reporter A':'Pursuit',
+                             'Reporter B':'Pursuit',
+                             'Reporter C':'Pursuit',
 
 
                              'Tsubaki':'Defend',
-                             'Red Feathers A':'Defend',
-                             'Red Feathers B':'Defend',
-                             'Red Feathers C':'Defend',
-                             'Red Feathers D':'Defend',
-                             'Red Feathers E':'Defend',
+                             'Red Feather A':'Defend',
+                             'Red Feather B':'Defend',
+                             'Red Feather C':'Defend',
+                             'Red Feather D':'Defend',
+                             'Red Feather E':'Defend',
 
 
                             }
                              'Kappa D': (20, 30),
 
                              'Aya': (13, 19),
-                             'Newspaper Corps A': (8, 18),
-                             'Newspaper Corps B': (7, 20),
-                             'Newspaper Corps C': (5, 22),
+                             'Reporter A': (8, 18),
+                             'Reporter B': (7, 20),
+                             'Reporter C': (5, 22),
 
                              'Tsubaki': (25, 4),
-                             'Red Feathers A':(2, 6),
-                             'Red Feathers B':(9, 3),
-                             'Red Feathers C':(19, 4),
-                             'Red Feathers D':(24, 8),
-                             'Red Feathers E':(32, 10),
+                             'Red Feather A':(2, 6),
+                             'Red Feather B':(9, 3),
+                             'Red Feather C':(19, 4),
+                             'Red Feather D':(24, 8),
+                             'Red Feather E':(32, 10),
                              }
         reserve_units = ['Wolf Tengu E']
         all_landmarks = [{'name':'Tengu Shrine 1',
         self.say("Of course.",
                  'Tsubaki',
                  'Tsubaki')
-        self.say('The Kappa and I are ready! Your newspaper corps friends better be up to the task, Aya!',
+        self.say('The Kappa and I are ready! Your Reporter friends better be up to the task, Aya!',
                  'Momiji',
                  'Momiji')
         self.say("Ah, so they got the Kappa to help with this too? This will be fun!",
         self.say("Right. Right. Ready, everyone?",
                   'Aya',
                   'Aya')
-        self.center_on('Newspaper Corps A')
+        self.center_on('Reporter A')
         self.say("Ready to go!",
-                  'Newspaper Corps A',
+                  'Reporter A',
                   'Crow Tengu')
 
         self.center_on('Nitori')
         self.center_on('Tsubaki')
         self.say('How about you give it a shot, Red Feathers?', 'Tsubaki', 'Tsubaki')
 
-        switch_list = ['Red Feathers A', 'Red Feathers B', 'Red Feathers C', 'Red Feathers D',
-                       'Red Feathers E']
+        switch_list = ['Red Feather A', 'Red Feather B', 'Red Feather C', 'Red Feather D',
+                       'Red Feather E']
         for unit in self.map.team2:
             if unit.name in switch_list:
                 self.set_ai_state(unit.name, "Pursuit")

Story of a Lost Sky/lostsky/missions/ch3st5.py

 
         initial_spells = {'Misaki':["Iwanaga's Flames", "Withering Fall"],
                           'Hitodama A':['Fireball'],
-                          'Hitodama B':['Fireball'],
-                          'Hitodama C':['Fireball'],
-                          'Hitodama D':['Fireball'],
+                          'Hitodama B':['Holy Amulet'],
+                          'Hitodama C':['Leaf Crystal'],
+                          'Hitodama D':['Dagger Throw'],
 
 
                           'Hitodama E':['Fireball'],
-                          'Hitodama F':['Fireball'],
-                          'Hitodama G':['Fireball'],
-                          'Hitodama H':['Fireball'],
+                          'Hitodama F':['Holy Amulet'],
+                          'Hitodama G':['Leaf Crystal'],
+                          'Hitodama H':['Dagger Throw'],
 
                           'Kodama Lord':['Leaf Crystal']
 

Story of a Lost Sky/lostsky/worldmap/worldmap.py

                     return
 
         self.update_wm_player_data()
-        if not load_player and self.engine.enable_wm_tutorial:
-            self.tutorial()
-
         self.render_updated_map(fade_from=True)
 
         while menu_flag:
             pygame.display.update(rects)
             self.engine.clock.tick(60)
 
-    def tutorial(self):
-        """
-        # function name: Tutorial
-        # Purpose: Provides the player with a first time tutorial of the game
-        """
-
-        reply_1 = self.choice("Would you like to see a tutorial on the world map?", ["Yes", "No"])
-        if reply_1 == "Yes":
-            self.say("Welcome to the world map!")
-            self.say("The world map has two levels, this region level and a closer in location level.")
-            self.say("At the location level, you can visit specific places.")
-            self.say("If a location has a blue event bubble over it, then there is some mission or other event there.")
-            self.say("You can also access the main menu from the world map.")
-            reply_2 = self.choice("Which part would you like to hear about?", ["Party Management", "Missions", "Save/Load", "Finish Tutorial"])
-            while reply_2 != "Finish Tutorial":
-                if reply_2 == "Party Management":
-                    self.conv_images['pm_menu'] = [pygame.image.load(os.path.join('images', 'worldmaptutorial', 'party_menu.png')).convert(), (228, 70)]
-                    self.say("This is the Party Management screen.")
-                    self.say("You can use this to check the stats of each character")
-                    del(self.conv_images['pm_menu'])
-                    self.conv_images['si_menu'] = [pygame.image.load(os.path.join('images', 'worldmaptutorial', 'spell_inventory.png')).convert(), (228, 70)]
-                    self.say("You can also modify what spell actions and items each character can carry.")
-                    self.say("Whenever you unequip spells or get new ones, they are automatically sorted in the categories of Attack Sorcery, Healing Sorcery, Spellcards, Healing Items.")
-                    del(self.conv_images['si_menu'])
-                    self.conv_images['tr_menu'] = [pygame.image.load(os.path.join('images', 'worldmaptutorial', 'equipped_traits.png')).convert(), (228, 70)]
-                    self.say("Another option is the traits menu.")
-                    self.say("From here, you can change what traits start out active and which ones stay on standby.")
-                    del(self.conv_images['tr_menu'])
-                    self.say("As you gain more levels, you'll want to return here to learn new traits.")
-                    self.conv_images['tr_menu2'] = [pygame.image.load(os.path.join('images', 'worldmaptutorial', 'unit_swap_traits.png')).convert(), (228, 70)]
-                    self.say("Newly learned traits will be placed into a unit's reserve traits and need to be swapped into standby or active to use them.")
-                    del(self.conv_images['tr_menu2'])
-                    self.say("That's all for the party management system!")
-                elif reply_2 == "Missions":
-                    self.say("The Missions menu handles all the events in the game.")
-                    self.conv_images['mi_menu'] = [pygame.image.load(os.path.join('images', 'worldmaptutorial', 'mission_menu.png')).convert(), (228, 70)]
-                    self.say("From here, you will be able to view, sign up, and cancel currently available missions.")
-                    self.say("This menu also has an archive of all the previous missions and helpful hints that appear over the course of the game.")
-                    del(self.conv_images['mi_menu'])
-
-                elif reply_2 == "Save/Load":
-                    self.say("The Save/Load menu allows you to record the progress of the game.")
-                    self.say("Remember to save often, especially before a big battle.")
-
-                reply_2 = self.choice("Which one would you like to hear about?", ["Party Management", "Missions", "Save/Load", "Finish Tutorial"])
-
     def wm_menu(self):
 
         """
 
                 if event.key == K_x:
                     return 'jump2wm'
-                    self.engine.fade_to('black', 0.5)
 
         self.render_updated_map()
         return False

Story of a Lost Sky/tools/mission_launcher.py

 ###########################
 
 # Make sure your mission is loaded in the mission_catalog.py file.
-mission_name =  'CH3ST5'
+mission_name =  'CH1ST1'
 print "Launching Mission: %s"%mission_name
 
 # Add all characters. If the character is added during
               'Ran':{'level':20,
                         'spells':['Fireball','Princess Tenko','Mystic Wall','Mystic Barrier','Fried Tofu'],
                         'traits':[] },
-                                 
+
               'Chen':{'level':20,
                         'spells':['Leaf Crystal','Pentagram Flight'],
                          'traits':[]},
-
-              'Marisa':{'level':20,
-                         'spells':['Fireball','Master Spark','Rice Cake'],
-                         'traits':[]},
-
-              'Reimu':{'level':20,
-                         'spells':['Holy Amulet','Fantasy Seal','Barrier Buster','Weakening Amulet'],
-                         'traits':[] },
-              'Keine':{'level':20,
-                         'spells':['Healing Drop','Medicinal Drop','Sunbeam Mirror','Encourage','Tracking Shot'],
-                         'traits':[] },
-
-              'Mokou':{'level':20,
-                        'spells':['Dagger Throw','Flying Phoenix','Rice Cake'],
-                         'traits':[] },
-              'Aya':{'level':20,
-                        'spells':['Holy Amulet','Tengu Wind Path', 'Rice Cake'],
-                        'traits':[] },
+              #
+              # 'Marisa':{'level':20,
+              #            'spells':['Fireball','Master Spark','Rice Cake'],
+              #            'traits':[]},
+              #
+              # 'Reimu':{'level':20,
+              #            'spells':['Holy Amulet','Fantasy Seal','Barrier Buster','Weakening Amulet'],
+              #            'traits':[] },
+              # 'Keine':{'level':20,
+              #            'spells':['Healing Drop','Medicinal Drop','Sunbeam Mirror','Encourage','Tracking Shot'],
+              #            'traits':[] },
+              #
+              # 'Mokou':{'level':20,
+              #           'spells':['Dagger Throw','Flying Phoenix','Rice Cake'],
+              #            'traits':[] },
+              # # 'Aya':{'level':20,
+              #           'spells':['Holy Amulet','Tengu Wind Path', 'Rice Cake'],
+              #           'traits':[] },
               #
               # 'Alice':{'level':20,
               #           'spells':['Fireball','Artful Sacrifice','Rice Cake'],