ソースを参照

Support for monster transformations. Transformation icons and skill shown in the catalog.

Iñigo Valentin 6 年 前
コミット
d3d2f0e566

+ 62 - 35
application/entity/K_Unit.php

@@ -4,32 +4,32 @@
     require_once($path["entity"] . "K_Skill.php");
     require_once($path["entity"] . "K_Leader_Skill.php");
     require_once($path["entity"] . "K_Source.php");
-
+    require_once($path["entity"] . "K_Unit_Transformation.php");
 
     /**
-     * Monster.
+     * A unit.
      *
-     * Represents an object from the table 'monster'.
+     * Represents an object from the table 'k_unit'.
      */
     class K_Unit extends Entity{
 
         /**
-         * Monster identifier.
+         * Unit identifier.
          */
         public $id;
 
         /**
-         * Monster family id.
+         * Unit family id.
          */
         public $family;
 
         /**
-         * Monster name.
+         * Unit name.
          */
         public $name;
 
         /**
-         * Monster element.
+         * Unit element.
          */
         public $element;
 
@@ -39,7 +39,7 @@
         public $element_name;
 
         /**
-         * Monster archetype.
+         * Unit archetype.
          */
         public $archetype;
 
@@ -59,12 +59,12 @@
         public $natural_stars;
 
         /**
-         * Indicates if the monster is obtainable.
+         * Indicates if the unit is obtainable.
          */
         public $obtainable;
 
         /**
-         * Indicates if the monster can be awakened.
+         * Indicates if the unit can be awakened.
          */
         public $can_awaken;
 
@@ -79,7 +79,7 @@
         public $skill_ups_to_max;
 
         /**
-         * @{see K_Leader_Skill} of the monster.
+         * @{see K_Leader_Skill} of the unit.
          */
         public $leader_skill;
 
@@ -154,22 +154,22 @@
         public $max_lvl_defense;
 
         /**
-         * @{see Monster} it awakens from.
+         * @{see K_Unit} it awakens from.
          */
         public $awakens_from;
 
         /**
-         * @{see Monster} it awakens to.
+         * @{see K_Unit} it awakens to.
          */
         public $awakens_to;
 
         /**
-         * Indicates if the monster is a fusion ingredient.
+         * Indicates if the unit is a fusion ingredient.
          */
         public $fusion_food;
 
         /**
-         * Indicates if the monster is homunculus.
+         * Indicates if the unit is homunculus.
          */
         public $homunculus;
 
@@ -179,12 +179,12 @@
         public $craft_cost;
 
         /**
-         * All {@see K_Monster_Skill}s.
+         * All {@see K_Unit_Skill}s.
          */
         public $skill = [];
 
         /**
-         * Required essences to awaken the monster. Formed by arrays of:
+         * Required essences to awaken the unit. Formed by arrays of:
          * [
          *   "element" => "",
          *   "grade" => "",
@@ -194,7 +194,7 @@
         public $essences = [];
 
         /**
-         * {@see K_Source}s the monster can be get from.
+         * {@see K_Source}s the unit can be get from.
          */
         public $sources = [];
 
@@ -205,15 +205,20 @@
          */
         public $title;
 
+        /**
+         * The {@see K_Unit_Transformation} the unit can undergo, or null.
+         */
+        public $transformation;
+
         /**
          * Constructor.
          *
          * Searches the database and retrieves the information about the
-         * monster, populating it and it's items.
+         * unit, populating it and it's items.
          *
          * @param SQLite3 $db Connection to the database.
-         * @param int $id Monster identifier.
-         * @param complete If false, query only k_monster.
+         * @param int $id Unit identifier.
+         * @param complete If false, query only k_unit.
          */
         public function __construct($db, $id, $complete = true){
             global $path;
@@ -330,8 +335,9 @@
                 $this->load_essences();
                 $this->load_skills();
                 $this->load_sources();
+                $this->load_transformation();
             }
-            // No to, no from. Silver monster.
+            // No to, no from. Silver unit.
             if ($this->awakens_from == "" && $this->awakens_to == ""){
                 $this->title = $this->element_name . " " . $this->name;
             }
@@ -346,7 +352,7 @@
         }
 
         /**
-         * Loads the information about the essences to awake the monster. 
+         * Loads the information about the essences to awake the unit. 
          * It is autoatically called at construction time if the
          * $complete parameter is true (by default). No point in calling it
          * twice.
@@ -377,23 +383,44 @@
         }
 
         /**
-         * Loads the information about the monster skills. 
+         * Loads the unit transformation. 
+         * It is automatically called at construction time if the
+         * $complete parameter is true (by default). No point in calling it
+         * twice.
+         */
+        public function load_transformation(){
+            $this->transformation = null;
+            $s = "
+              SELECT id
+              FROM k_unit_transformation
+              WHERE  unit = " . $this->id . ";";
+            error_log("TRANSFORMATION: " . $s);
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                error_log("LOADING TRANSFORMATION");
+                $this->transformation = new K_Unit_Transformation($this->db, $r["id"]);
+            }
+        }
+
+        /**
+         * Loads the information about the unit skills. 
          * It is autoatically called at construction time if the
          * $complete parameter is true (by default). No point in calling it
          * twice.
          */
         public function load_skills(){
             $this->skill = [];
-            $s =
-              "SELECT " .
-              "  skill " .
-              "FROM " .
-              "  k_skill, " .
-              "  k_unit_skill " .
-              "WHERE " .
-              "  id = skill AND " .
-              "  unit = " . $this->id . " " .
-              "ORDER BY slot; ";
+            $s = "
+              SELECT skill
+              FROM
+                k_skill,
+                k_unit_skill
+              WHERE
+                id = skill AND
+                unit = " . $this->id . "
+              ORDER BY slot;
+            ";
             $q = $this->db->query($s);
             while ($r = $q->fetchArray(SQLITE3_ASSOC)){
                 array_push($this->skill, new K_Skill($this->db, $r["skill"]));
@@ -401,7 +428,7 @@
         }
 
         /**
-         * Loads the information about the monster sources. 
+         * Loads the information about the unit sources. 
          * It is autoatically called at construction time if the
          * $complete parameter is true (by default). No point in calling it
          * twice.

+ 109 - 0
application/entity/K_Unit_Transformation.php

@@ -0,0 +1,109 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+    require_once($path["entity"] . "K_Skill.php");
+    require_once($path["entity"] . "K_Leader_Skill.php");
+    require_once($path["entity"] . "K_Source.php");
+
+
+    /**
+     * Unit transformation.
+     *
+     * Represents an object from the table 'k_unit_transformation'.
+     */
+    class K_Unit_Transformation extends Entity{
+
+        /**
+         * Transformed unit identifier.
+         */
+        public $id;
+
+        /**
+         * Transformed unit family id.
+         */
+        public $family;
+
+        /**
+         * ID of the unit that transformes into this. Not a instance of K_Unit.
+         */
+        public $unit;
+
+        /**
+         * All {@see K_Monster_Skill}s in the transformed form.
+         */
+        public $skill = [];
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * trnsformed unit, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id TRansformed unit identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            global $ELEMENT;
+            global $ARCHETYPE;
+            parent::__construct($db);
+            $s = "
+              SELECT
+                id,
+                family,
+                unit
+              FROM k_unit_transformation
+              WHERE id = $id;
+            ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->family = $r["family"];
+                $this->unit = $r["unit"];
+                $this->load_skills();
+            }
+        }
+
+        /**
+         * Loads the information about the unit skills in the transformed form.
+         */
+        private function load_skills(){
+            $this->skill = [];
+            $s = "
+              SELECT skill
+              FROM
+                k_skill,
+                k_unit_skill
+              WHERE
+                id = skill AND
+                unit = " . $this->id . "
+              ORDER BY slot;
+            ";
+            $q = $this->db->query($s);
+            while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                array_push($this->skill, new K_Skill($this->db, $r["skill"]));
+            }
+        }
+
+        /**
+         * Gets the path to the unit image. The image must be in the
+         * img/unit/ directory, and it's name must be the unit id,
+         * padded with '0' to 8 digits, and the extension must be '.png'.
+         *
+         * @return Path to the image, or a path to a fixed unknown image if it
+         *         doesn't exist.
+         */
+        public function get_image(){
+            global $dir;
+            global $path;
+            if (file_exists($dir . "img/unit/" . str_pad($this->id, 8, '0', STR_PAD_LEFT) . ".png")){
+                return $path["img"]["unit"] . str_pad($this->id, 8, '0', STR_PAD_LEFT) . ".png";
+            }
+            else{
+                return $path["img"]["root"] . "unknown.png";
+            }
+        }
+
+    }
+?>

+ 27 - 0
application/helper/html.php

@@ -77,6 +77,33 @@
         return $html;
     }
 
+    /**
+     * Generates a transformed monster panel.
+     * 
+     * @param unit Unit/K_Unit Entity to get the info from.
+     * @return string HTML content for a monster panel. Empty on error.
+     */
+    function html_unit_transformation_panel($unit) {
+        global $path;
+        $html = "";
+        if ($unit instanceof Unit){
+            $k = $unit->unit;
+        }
+        elseif ($unit instanceof K_Unit){
+            $k = $unit;
+        }
+        else{
+            return "";
+        }
+        if ($k->transformation == null){
+            return "";
+        }
+        $html .= "<div class='monster_transformation_panel'>\n";
+        $html .= "<img title='" . $unit->title . " (transformed)' class='monster_transformation border_" . $k->element_name . "' src='" . $k->transformation->get_image() . "'/>\n";
+        $html .= "</div>\n";
+        return $html;
+    }
+
     /**
      * Generates a rune panel.
      * 

+ 62 - 33
application/view/monster_info.php

@@ -41,45 +41,13 @@
                 <section class='content'>
                     <h2>
                         <?=$page->monster[$i]->title?>
-                        <!-- TODO: REWORK
-                        <span class='family'>
-<?php
-                            //for ($f = 0; $f < 5; $f++){
-                            foreach (Array($ELEMENT["FIRE"], $ELEMENT["WATER"], $ELEMENT["WIND"], $ELEMENT["LIGHT"], $ELEMENT["DARK"]) as $element){
-                                //$element = array_keys($page->family)[$f];
-                                //$id = $page->family[$f];
-                                $id = $page->family[$element];
-                                $current = "";
-                                $disabled = "";
-                                if ($element == $page->monster[$i]->element){
-                                    $current = "current";
-                                }
-                                elseif ($id == null){
-                                    $disabled = "disabled";
-                                }
-                                $url = "/catalog/$id";
-                                if ($current == "" && $disabled == ""){
-?>
-                                    <a href='<?=$url?>'>
-<?php
-                                }
-?>
-                                <img class='family <?=$current?> <?=$disabled?>' src='<?=$path["img"]["element"] . "$element.png"?>'/>
-<?php
-                                if ($current == "" && $disabled == ""){
-?>
-                                    </a>
-<?php
-                                }
-                            }
-?>
-                        </span>  -->
                     </h2>
                     <article class='stage'>
                         <div class='profile'>
                             <div class='monster_panel'>
                                 <?=html_unit_panel($page->monster[$i])?>
                             </div>
+                            <?=html_unit_transformation_panel($page->monster[$i])?>
                         </div>
                         <table class='stats'>
                             <tr>
@@ -266,6 +234,67 @@
                             }
 ?>
                         </div> <!-- #skills -->
+<?php
+                        if ($page->monster[$i]->transformation != null){
+?>
+                            <div class='transformation_skills'>
+<?php
+                                foreach ($page->monster[$i]->transformation->skill as $skill){
+?>
+                                    <div class='skill'>
+                                        <img class='skill_img' src='<?=$skill->get_image()?>'/>
+                                        <span class='skill_name'>
+                                            <?=$skill->name?>
+                                        </span>
+                                        <span class='skill_description'>
+                                            <?=$skill->description?>
+                                        </span>
+<?php
+                                        if (count($skill->effect) > 0){
+?>
+                                            <span class='skill_effects'>
+<?php
+                                                foreach ($skill->effect as $effect){
+?>
+                                                    <img class='effect_img' title='<?=$effect->name?>' src='<?=$effect->get_image()?>'/>
+<?php
+                                                }
+?>
+                                            </span>
+<?php
+                                        }
+                                        if ($skill->max_level > 1){
+?>
+                                            <table class='skill_up'>
+<?php
+                                                foreach ($skill->level as $level){
+                                                    if ($level->level > 1){
+?>
+                                                        <tr>
+                                                            <td class='level'>
+                                                                Lv. <?=$level->level?>
+                                                            </td>
+                                                            <td class='description'>
+                                                                <?=$level->description?>
+                                                            </td>
+                                                        </tr>
+<?php
+                                                    }
+                                                }
+?>
+                                            </table>
+<?php
+                                        }
+?>
+                                    </div>
+<?php
+                                }
+?>
+                            </div> <!-- #transformation_skills -->
+<?php
+                        }
+?>
+
                     </article>
                 </section>
 <?php

+ 30 - 62
install_data/setup.sql

@@ -196,6 +196,11 @@ CREATE TABLE IF NOT EXISTS k_unit(
     homunculus INT NOT NULL CHECK(homunculus IN (1, 0)),
     craft_cost INT
 );
+CREATE TABLE IF NOT EXISTS k_unit_transformation(
+    id INT PRIMARY KEY NOT NULL,
+    family INT NOT NULL,
+    unit INT NOT NULL REFERENCES k_unit(id)
+);
 CREATE TABLE IF NOT EXISTS k_unit_skill(
     unit INT NOT NULL REFERENCES k_unit(id),
     skill INT NOT NULL REFERENCES k_skill(id),
@@ -17440,17 +17445,11 @@ INSERT INTO k_unit VALUES(21502,21500,'Unicorn',2,3,5,5,1,1,'New Skill: Transfor
 INSERT INTO k_unit VALUES(21503,21500,'Unicorn',3,3,5,5,1,1,'New Skill: Transformation',11,NULL,8595,460,420,99,15,50,15,0,71,57,52,11700,626,571,NULL,21513,0,0,NULL);
 INSERT INTO k_unit VALUES(21504,21500,'Unicorn',4,3,5,5,1,1,'New Skill: Transformation',12,NULL,8475,420,468,99,15,50,15,0,70,52,58,11535,571,637,NULL,21514,0,0,NULL);
 INSERT INTO k_unit VALUES(21505,21500,'Unicorn',5,3,5,5,1,1,'New Skill: Transformation',11,NULL,8355,476,420,99,15,50,15,0,69,59,52,11370,648,571,NULL,21515,0,0,NULL);
-INSERT INTO k_unit VALUES(21515,21500,'Alexandra',5,3,6,5,1,1,'New Skill: Transformation',11,NULL,12510,703,604,100,15,50,15,0,76,64,55,12510,703,604,21505,NULL,0,0,NULL);
-INSERT INTO k_unit VALUES(21512,21500,'Helena',2,3,6,5,1,1,'New Skill: Transformation',11,NULL,12510,692,615,100,15,50,15,0,76,63,56,12510,692,615,21502,NULL,0,0,NULL);
-INSERT INTO k_unit VALUES(21514,21500,'Eleanor',4,3,6,5,1,1,'New Skill: Transformation',12,NULL,12840,604,681,100,15,50,15,0,78,55,62,12840,604,681,21504,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(21511,21500,'Amelia',1,3,6,5,1,1,'New Skill: Transformation',12,NULL,12345,637,681,100,15,50,15,0,75,58,62,12345,637,681,21501,NULL,0,0,NULL);
+INSERT INTO k_unit VALUES(21512,21500,'Helena',2,3,6,5,1,1,'New Skill: Transformation',11,NULL,12510,692,615,100,15,50,15,0,76,63,56,12510,692,615,21502,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(21513,21500,'Diana',3,3,6,5,1,1,'New Skill: Transformation',11,NULL,12840,681,604,100,15,50,15,0,78,62,55,12840,681,604,21503,NULL,0,0,NULL);
--- Unicorn transformations
---INSERT INTO k_unit VALUES(21612,21600,'Helena',2,3,6,6,0,1,'',11,NULL,12510,692,615,100,15,50,15,0,76,63,56,12510,692,615,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(21611,21600,'Amelia',1,3,6,6,0,1,'',12,NULL,12345,637,681,100,15,50,15,0,75,58,62,12345,637,681,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(21613,21600,'Diana',3,3,6,6,0,1,'',11,NULL,12840,681,604,100,15,50,15,0,78,62,55,12840,681,604,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(21614,21600,'Eleanor',4,3,6,6,0,1,'',12,NULL,12840,604,681,100,15,50,15,0,78,55,62,12840,604,681,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(21615,21600,'Alexandra',5,3,6,6,0,1,'',11,NULL,12510,703,604,100,15,50,15,0,76,64,55,12510,703,604,NULL,NULL,0,0,NULL);
+INSERT INTO k_unit VALUES(21514,21500,'Eleanor',4,3,6,5,1,1,'New Skill: Transformation',12,NULL,12840,604,681,100,15,50,15,0,78,55,62,12840,604,681,21504,NULL,0,0,NULL);
+INSERT INTO k_unit VALUES(21515,21500,'Alexandra',5,3,6,5,1,1,'New Skill: Transformation',11,NULL,12510,703,604,100,15,50,15,0,76,64,55,12510,703,604,21505,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(1000204,1000200,'Homunculus(Support)',4,4,5,5,1,1,'New Skill: Magic Power Explosion II',12,NULL,8355,436,460,100,15,50,15,0,69,54,57,11370,593,626,NULL,1000214,0,1,100000);
 INSERT INTO k_unit VALUES(1000205,1000200,'Homunculus(Support)',5,4,5,5,1,1,'New Skill: Magic Power Explosion II',12,NULL,8235,468,436,100,15,50,15,0,68,58,54,11205,637,593,NULL,1000215,0,1,100000);
 INSERT INTO k_unit VALUES(1000214,1000200,'Homunculus(Support)',4,4,6,5,1,1,'New Skill: Magic Power Explosion II',12,NULL,12345,626,692,101,15,50,15,0,75,57,63,12345,626,692,1000204,NULL,0,1,NULL);
@@ -17611,13 +17610,7 @@ INSERT INTO k_unit VALUES(22211,22200,'Abellio',1,2,6,5,1,1,'',13,NULL,10545,692
 INSERT INTO k_unit VALUES(22212,22200,'Bellenus',2,2,6,5,1,1,'',14,NULL,10215,703,758,99,15,50,15,0,62,64,69,10215,703,758,22202,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(22213,22200,'Taranys',3,2,6,5,1,1,'',11,NULL,10215,626,834,99,15,50,15,0,62,57,76,10215,626,834,22203,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(22214,22200,'Valantis',4,3,6,5,1,1,'',12,NULL,11535,703,670,99,15,50,15,0,70,64,61,11535,703,670,22204,NULL,0,0,NULL);
--- Druid transformations
---INSERT INTO k_unit VALUES(22215,22200,'Pater',5,3,6,5,1,1,'',11,NULL,12015,681,659,99,15,50,15,0,73,62,60,12015,681,659,22205,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(22311,22300,'Abellio',1,2,6,6,0,1,'',13,NULL,10545,692,747,99,15,50,15,0,64,63,68,10545,692,747,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(22312,22300,'Bellenus',2,2,6,6,0,1,'',14,NULL,10215,703,758,99,15,50,15,0,62,64,69,10215,703,758,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(22313,22300,'Taranys',3,2,6,6,0,1,'',11,NULL,10215,626,834,99,15,50,15,0,62,57,76,10215,626,834,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(22314,22300,'Valantis',4,3,6,6,0,1,'',12,NULL,11535,703,670,99,15,50,15,0,70,64,61,11535,703,670,NULL,NULL,0,0,NULL);
---INSERT INTO k_unit VALUES(22315,22300,'Pater',5,3,6,6,0,1,'',11,NULL,12015,681,659,99,15,50,15,0,73,62,60,12015,681,659,NULL,NULL,0,0,NULL);
+INSERT INTO k_unit VALUES(22215,22200,'Pater',5,3,6,5,1,1,'',11,NULL,12015,681,659,99,15,50,15,0,73,62,60,12015,681,659,22205,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(46001,46000,'Tartarus',6,0,1,1,0,0,'',0,NULL,1200,80,80,100,30,50,15,30,40,40,40,6585,439,439,NULL,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(46101,46100,'Leos',1,0,1,1,0,0,'',0,NULL,1200,80,80,100,15,50,15,30,40,40,40,6585,439,439,NULL,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(46102,46100,'Kotos',2,0,1,1,0,0,'',0,NULL,1200,80,80,100,15,50,15,30,40,40,40,6585,439,439,NULL,NULL,0,0,NULL);
@@ -17758,6 +17751,27 @@ INSERT INTO k_unit VALUES(23612,23600,'Masha',2,1,6,5,0,1,'',10,NULL,10710,801,6
 INSERT INTO k_unit VALUES(23613,23600,'Savannah',3,1,6,5,0,1,'',10,NULL,10875,801,615,108,15,50,40,0,66,73,56,10875,801,615,23603,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(23614,23600,'Narsha',4,1,6,5,0,1,'',10,NULL,10215,834,626,108,15,50,15,25,62,76,57,10215,834,626,23604,NULL,0,0,NULL);
 INSERT INTO k_unit VALUES(23615,23600,'Xiana',5,1,6,5,0,1,'',10,NULL,10380,867,582,108,30,50,15,0,63,79,53,10380,867,582,23605,NULL,0,0,NULL);
+-- Unit transformations
+INSERT INTO k_unit_transformation VALUES(21611,21600,21511);
+INSERT INTO k_unit_transformation VALUES(21612,21600,21512);
+INSERT INTO k_unit_transformation VALUES(21613,21600,21513);
+INSERT INTO k_unit_transformation VALUES(21614,21600,21514);
+INSERT INTO k_unit_transformation VALUES(21615,21600,21515);
+INSERT INTO k_unit_transformation VALUES(22311,22300,22211);
+INSERT INTO k_unit_transformation VALUES(22312,22300,22212);
+INSERT INTO k_unit_transformation VALUES(22313,22300,22213);
+INSERT INTO k_unit_transformation VALUES(22314,22300,22214);
+INSERT INTO k_unit_transformation VALUES(22315,22300,22215);
+INSERT INTO k_unit_transformation VALUES(23601,23600,23501);
+INSERT INTO k_unit_transformation VALUES(23602,23600,23502);
+INSERT INTO k_unit_transformation VALUES(23603,23600,23503);
+INSERT INTO k_unit_transformation VALUES(23604,23600,23504);
+INSERT INTO k_unit_transformation VALUES(23605,23600,23505);
+INSERT INTO k_unit_transformation VALUES(23611,23600,23511);
+INSERT INTO k_unit_transformation VALUES(23612,23600,23512);
+INSERT INTO k_unit_transformation VALUES(23613,23600,23513);
+INSERT INTO k_unit_transformation VALUES(23614,23600,23514);
+INSERT INTO k_unit_transformation VALUES(23615,23600,23515);
 PRAGMA foreign_keys = ON;
 INSERT INTO k_unit_skill VALUES(12302,3602);
 INSERT INTO k_unit_skill VALUES(12702,3902);
@@ -20619,27 +20633,6 @@ INSERT INTO k_unit_skill VALUES(21513,12323);
 INSERT INTO k_unit_skill VALUES(21513,12328);
 INSERT INTO k_unit_skill VALUES(21513,12313);
 INSERT INTO k_unit_skill VALUES(21513,12318);
--- Unicorn transformations
---INSERT INTO k_unit_skill VALUES(21612,12402);
---INSERT INTO k_unit_skill VALUES(21612,12407);
---INSERT INTO k_unit_skill VALUES(21612,12412);
---INSERT INTO k_unit_skill VALUES(21612,12417);
---INSERT INTO k_unit_skill VALUES(21611,12401);
---INSERT INTO k_unit_skill VALUES(21611,12406);
---INSERT INTO k_unit_skill VALUES(21611,12411);
---INSERT INTO k_unit_skill VALUES(21611,12416);
---INSERT INTO k_unit_skill VALUES(21613,12403);
---INSERT INTO k_unit_skill VALUES(21613,12408);
---INSERT INTO k_unit_skill VALUES(21613,12413);
---INSERT INTO k_unit_skill VALUES(21613,12418);
---INSERT INTO k_unit_skill VALUES(21614,12404);
---INSERT INTO k_unit_skill VALUES(21614,12409);
---INSERT INTO k_unit_skill VALUES(21614,12414);
---INSERT INTO k_unit_skill VALUES(21614,12419);
---INSERT INTO k_unit_skill VALUES(21615,12405);
---INSERT INTO k_unit_skill VALUES(21615,12410);
---INSERT INTO k_unit_skill VALUES(21615,12415);
---INSERT INTO k_unit_skill VALUES(21615,12420);
 INSERT INTO k_unit_skill VALUES(1000204,10241000);
 INSERT INTO k_unit_skill VALUES(1000204,10242000);
 INSERT INTO k_unit_skill VALUES(1000204,10243000);
@@ -21102,31 +21095,6 @@ INSERT INTO k_unit_skill VALUES(22214,12904);
 INSERT INTO k_unit_skill VALUES(22214,12919);
 INSERT INTO k_unit_skill VALUES(22214,12924);
 INSERT INTO k_unit_skill VALUES(22214,12939);
---Druyd transformations
---INSERT INTO k_unit_skill VALUES(22215,12905);
---INSERT INTO k_unit_skill VALUES(22215,12920);
---INSERT INTO k_unit_skill VALUES(22215,12925);
---INSERT INTO k_unit_skill VALUES(22215,12940);
---INSERT INTO k_unit_skill VALUES(22311,12946);
---INSERT INTO k_unit_skill VALUES(22311,12926);
---INSERT INTO k_unit_skill VALUES(22311,12931);
---INSERT INTO k_unit_skill VALUES(22311,12941);
---INSERT INTO k_unit_skill VALUES(22312,12947);
---INSERT INTO k_unit_skill VALUES(22312,12927);
---INSERT INTO k_unit_skill VALUES(22312,12932);
---INSERT INTO k_unit_skill VALUES(22312,12942);
---INSERT INTO k_unit_skill VALUES(22313,12948);
---INSERT INTO k_unit_skill VALUES(22313,12928);
---INSERT INTO k_unit_skill VALUES(22313,12933);
---INSERT INTO k_unit_skill VALUES(22313,12943);
---INSERT INTO k_unit_skill VALUES(22314,12949);
---INSERT INTO k_unit_skill VALUES(22314,12929);
---INSERT INTO k_unit_skill VALUES(22314,12934);
---INSERT INTO k_unit_skill VALUES(22314,12944);
---INSERT INTO k_unit_skill VALUES(22315,12950);
---INSERT INTO k_unit_skill VALUES(22315,12930);
---INSERT INTO k_unit_skill VALUES(22315,12935);
---INSERT INTO k_unit_skill VALUES(22315,12945);
 INSERT INTO k_unit_skill VALUES(46001,103002);
 INSERT INTO k_unit_skill VALUES(46001,103001);
 INSERT INTO k_unit_skill VALUES(46001,103003);

+ 84 - 0
public/css/monster_info.css

@@ -196,3 +196,87 @@ article.stage div.skills div.skill table.skill_up td.level{
         font-size: 70%
     }
 }
+
+article.stage div.transformation_skills{
+    text-align: center;
+    margin: 0;
+    padding: 0;
+}
+
+article.stage div.transformation_skills div.skill{
+    display: inline-block;
+    vertical-align: top;
+    margin: 0.2em;
+    color: #ffffff;
+    text-align: center;
+    max-width: 20%;
+}
+
+article.stage div.transformation_skills div.skill img.skill_img{
+    width: 4em;
+    height: 4em;
+    border: 0.15em solid var(--ui-color-border);
+    border-radius: 0.5em;
+}
+
+article.stage div.transformation_skills div.skill span.skill_name{
+    text-shadow: 0 0 0.2em #000000, 0 0 0.2em #000000, 0 0 0.4em #000000;
+    display: block;
+    font-weight: bold;
+}
+
+article.stage div.transformation_skills div.skill span.skill_description{
+    font-size: 80%;
+    font-style: italic;
+    margin: 0;
+    padding: 0;
+    display: block;
+    line-height: 0.95em;
+}
+
+article.stage div.transformation_skills div.skill span.skill_effects{
+    display: block;
+    text-align: center;
+    margin-top: 1em;
+}
+
+article.stage div.transformation_skills div.skill span.skill_effects img.effect_img{
+    width: 1.5em;
+    height: 1.5em;
+    border: 0.1em solid #000000;
+    border-radius: 0.5em;
+}
+
+article.stage div.transformation_skills div.skill table.skill_up{
+    font-size: 70%;
+    margin: 0.5em auto 0 auto;
+    border-collapse: collapse;
+}
+
+
+article.stage div.transformation_skills div.skill table.skill_up td{
+    font-size: 90%;
+    padding: 0.2em;
+    border: 0 solid #000000;
+    line-height: 1em;
+}
+@media screen and (max-width : 990px){
+    article.stage div.transformation_skills div.skill table.skill_up td{
+        padding: 0;
+        border: 0.1em solid black;
+        line-height: 0.95em;
+        font-size: 70%;
+    }
+}
+
+article.stage div.transformation_skills div.skill table.skill_up td.level{
+    font-style: italic;
+    padding-right: 0.8em;
+    min-width: 2em;
+    font-size: 80%
+}
+@media screen and (max-width : 990px){
+    article.stage div.transformation_skills div.skill table.skill_up td.level{
+        font-size: 70%
+    }
+}

+ 39 - 0
public/css/ui.css

@@ -591,6 +591,45 @@ div.monster_panel span.badges img{
 /**
  * /Monster panel
  */
+
+
+/**
+ * Monster transformation panel
+ */
+div.monster_transformation_panel{
+    display: inline-block;
+    width: 4em;
+    height: 4em;
+    margin: 0.5em 0.5em 0.5em -0.5em;
+    position: relative;
+    border-radius: 15%;
+}
+
+@media screen and (max-width : 990px){
+    div.monster_transformation_panel{
+        height: 3em;
+        width: 3em;
+        margin: 0.2em 0.2em 0.2em -0.2em;
+    }
+}
+div.monster_transformation_panel img.monster_transformation{
+    width: 3.5em;
+    height: 3.5em;
+    border-style: solid;
+    border-width: 0.2em;
+    border-radius: 35%;
+}
+@media screen and (max-width : 990px){
+    div.monster_transformation_panel img.monster_transformation{
+        width: 2.6em;
+        height: 2.6em;
+        border-width: 0.1em;
+        border-radius: 20%;
+    }
+}
+/**
+ * /Monster transformation panel
+ */
  
  
  /**