diff --git a/aghanim_singleplayer/addon_schinese.txt b/aghanim_singleplayer/addon_schinese.txt deleted file mode 100755 index 36aabcf..0000000 --- a/aghanim_singleplayer/addon_schinese.txt +++ /dev/null @@ -1,1014 +0,0 @@ -"lang" -{ - "Language" "schinese" - "Tokens" - { - "addon_game_name" "阿哈利姆的天地迷宫" - "DOTA_GameMode_15" "阿哈利姆的天地迷宫" - "DOTA_GameMode_19" "阿哈利姆的天地迷宫" - - "aghanim_bonus_round_time_left" "剩余时间" - "aghanim_bonus_round_total_gold" "总金钱" - "DOTA_Defeated" "你的队伍已经消亡!" - - "dota_game_end_victory_title_radiant" "已通过阿哈利姆的天地迷宫" - "dota_game_end_victory_title_dire" "阿哈利姆的天地迷宫让你们全军覆没" - - // UI - "DOTA_HUD_EnemiesRemaining" "剩余敌人:" - "DOTA_HUD_TimeRemaining" "剩余时间:" - "DOTA_HUD_Victory" "胜利!" - "DOTA_HUD_Defeat" "失败!" - "DOTA_HUD_Kills" "击杀" - "DOTA_HUD_Deaths" "死亡" - "DOTA_HUD_Saves" "复活" - "DOTA_HUD_Bags" "金袋" - "DOTA_HUD_Mute" "屏蔽" - "DOTA_HUD_PlayAgain" "再玩一次?" - "DOTA_HUD_Yes" "好的" - "DOTA_HUD_No" "不用" - "DOTA_HUD_Score" "得分" - "DOTA_HUD_GoldBags" "收集的金袋" - "DOTA_HUD_GoldBagsMissed" "错过的金袋" - "DOTA_HUD_TeamDeaths" "全队死亡" - "DOTA_HUD_Rewards" "神杖碎片" - "DOTA_HUD_Blessings" "福佑" - "DOTA_HUD_RoomRewards" "房间奖励" - "DOTA_HUD_ShowBlessings" "显示福佑" - "DOTA_HUD_HideBlessings" "隐藏福佑" - - "DOTA_HUD_Reward_Header" "选择你的奖励" - "DOTA_HUD_Reward_Gold" "额外金钱" - "DOTA_HUD_Reward_Gold_desc" "{d:quantity}金钱" - "DOTA_HUD_Reward_ExtraLives" "额外生命" - "DOTA_HUD_Reward_ExtraLives_desc" "{d:quantity}次额外生命" - "DOTA_HUD_Reward_Item" "中立物品" - "DOTA_HUD_Reward_TempBuff" "临时状态" - "DOTA_HUD_Reward_Aura" "光环" - "DOTA_HUD_Reward_AbilityUpgrade" "阿哈利姆福佑" - "DOTA_HUD_Reward_MinotrAbilityUpgrade" "技能升级" - "DOTA_HUD_Reward_AdditionalRewards" "已获得额外奖励" - "DOTA_HUD_Game_Mode_Header" "欢迎来到阿哈利姆的天地迷宫!" - "DOTA_HUD_Rewards_AscensionLevel" "难度等级:{d:ascension_level}" - - "DOTA_HUD_TopBar_Difficulty" "{s:difficulty_name}" - - "boss_shop" "钢背饰品店" - "DOTA_Subshop_1" "基础" - "DOTA_Subshop_2" "饰物" - - "DOTA_HUD_BattleRoyaleDamageStarting" "快加入战斗,懦夫!" - - "DOTA_Tooltip_Ability_item_battle_points" "勇士积分" - "DOTA_Tooltip_Ability_item_arcane_fragments" "奥术碎片" - "DOTA_RewardTooltip_Gold" "金钱" - "DOTA_RewardTooltip_XP" "经验" - - "DOTA_HUD_Rewards_ShowRewards" "神杖碎片可用" - "DOTA_HUD_Rewards_Info" "查看计分板中已选择升级效果" - - "DOTA_HUD_REWARD_TIER1_Desc" "第1级" - "DOTA_HUD_REWARD_TIER2_Desc" "第2级" - "DOTA_HUD_REWARD_TIER3_Desc" "第3级" - "DOTA_HUD_REWARD_TIER4_Desc" "第4阶" - "DOTA_HUD_REWARD_TIER5_Desc" "第5阶" - - "DOTA_Hud_EncounterDepth" "第{s:encounter_depth}层" - "DOTA_Hud_AscenionAbilitiesTitle" "额外效果" - "DOTA_Hud_Elite_Encounter_Discover" "菁英遭遇战 - 2倍奖励" - "DOTA_Hud_Elite_Encounter" "菁英遭遇战" - "DOTA_HUD_Reward_Rarity_Common" "选择普通神杖碎片" - "DOTA_HUD_Reward_Rarity_Elite" "选择精英神杖碎片" - "DOTA_HUD_Reward_Rarity_Epic" "选择传奇神杖碎片" - - "DOTA_HUD_REWARD_TYPE_GOLD_Toast" "{s:player_name}选择了{d:int_value} " - "DOTA_HUD_REWARD_TYPE_ITEM_Toast" "{s:player_name}选择了{s:locstring_value}" - "DOTA_HUD_REWARD_TYPE_ABILITY_UPGRADE_Toast" "{s:player_name}选择了{s:locstring_value}" - "DOTA_HUD_REWARD_TYPE_EXTRA_LIVES_Toast" "{s:player_name}选择了{d:int_value}" - "DOTA_HUD_REWARD_TYPE_MINOR_ABILITY_UPGRADE_Toast" "{s:player_name}选择了%s1" - "DOTA_HUD_REWARD_TYPE_MINOR_STATS_UPGRADE_Toast" "{s:player_name}选择了%s1" - - "DOTA_HUD_REWARD_TYPE_GOLD_Desc" "黄金" - "DOTA_HUD_REWARD_TYPE_TREASURE_Desc" "宝箱" - "DOTA_HUD_REWARD_TYPE_EXTRA_LIVES_Desc" "额外生命" - - "DOTA_HUD_Claimed_Rewards_Header" "领取奖励" - - "DOTA_Hud_Tooltip_Outpost_Title" "战斗" - "DOTA_Hud_Tooltip_Outpost_EliteTitle" "菁英战斗" - "DOTA_Hud_Tooltip_Outpost_TrapTitle" "陷阱" - "DOTA_Hud_Tooltip_Outpost_BossTitle" "首领" - "DOTA_Hud_Tooltip_Outpost_BonusTitle" "奖励" - "DOTA_Hud_Tooltip_Outpost_TransitionTitle" "休息" - - "DOTA_Hud_Outpost_ChannelBar_Title" "正在选择战斗" - "DOTA_Hud_Outpost_ChannelBar_EliteTitle" "正在选择菁英战斗" - "DOTA_Hud_Outpost_ChannelBar_TrapTitle" "正在选择陷阱" - "DOTA_Hud_Outpost_ChannelBar_BossTitle" "正在选择首领" - "DOTA_Hud_Outpost_ChannelBar_BonusTitle" "正在选择奖励" - "DOTA_Hud_Outpost_ChannelBar_RestTitle" "正在选择休整" - - // Objectives - "defeat_all_enemies" "击败所有敌人" - "survive_waves" "在大波敌人中存活" - "destroy_spawning_portals" "摧毁黑暗传送门" - "navigate_the_traps" "通过陷阱并到达目的地" - "kill_scarab_priests" "击败圣甲虫牧师" - "defeat_the_alchemists" "击败炼金术士" - "defeat_boss_npc_dota_boss_void_spirit" "击败无玄的阴影" - "defeat_boss_npc_dota_creature_temple_guardian" "击败神庙守卫" - "defeat_boss_npc_dota_creature_storegga" "击败石托瑞嘉" - "defeat_boss_npc_dota_boss_aghanim" "击败阿哈利姆" - "defeat_boss_npc_dota_boss_visage" "Defeat the Warden of the Narrow Maze" - "defeat_boss_npc_dota_boss_timbersaw" "击败剃锯机瑞兹瑞克" - "kill_waveblasters" "击败爆破蝙蝠" - "kill_wildwings" "击败愤怒的小鸟" - "kill_tinies" "击败友谊" - "defeat_shadow_demons" "击败暗影恶魔" - "rescue_sheep" "拯救绵羊" - "save_gary" "拯救盖瑞" - "destroy_all_mines" "击败水底炸弹" - "defeat_shadow_shamans" "击败沼泽枷锁恶徒" - "defeat_boss_npc_dota_boss_visage" "击败狭窄迷宫的守望者" - "kill_shroom_giants" "击败蘑菇巨人" - "objective_select_ascension_level" "选择难度级别" - "objective_stand_on_buttons" "站在初始按钮上" - "objective_select_aghanims_fragmants" "选择阿哈利姆神杖碎片" - "objective_saddle_up_on_morty" "骑上小莫迪" - "objective_jump_to_collect_gold" "跳跃收集黄金!" - "objective_saddle_up_on_penguin" "骑上一头鹅儿" - "objective_sled_to_collect_gold" "乘雪橇收集黄金!" - "defeat_blazhan" "击败熔山山" - "defeat_frozhan" "击败寒山山" - "defeat_portly" "击败珀特里!" - - // Hints - "hint_ride_morty" "按{s:keybind}键或{s:alternate_keybind}键骑乘!" - "hint_hop_with_morty" "瞄准你的蜥蜴,再按下{s:keybind}键获得力量,然后跳跃!" - "hint_ride_penguin" "按{s:keybind}键或{s:alternate_keybind}键骑乘!" - - "DOTA_Tooltip_modifier_aghsfort_firefly_burn" "纵火狂人" - "DOTA_Tooltip_modifier_aghsfort_firefly_burn_Description" "你着火了。" - - // End UI - - "npc_dota_creature_brewmaster_boss" "熊猫大兄弟" - "npc_dota_brewmaster_earth_unit" "大地老三" - "npc_dota_brewmaster_storm_unit" "风暴老三" - "npc_dota_brewmaster_fire_unit" "灰烬老三" - "npc_dota_creature_dire_hound" "夜魇幼犬" - "npc_dota_creature_dire_hound_boss" "夜魇猎犬" - "npc_dota_creature_huskar" "虚无战士" - "npc_dota_creature_ogre_tank" "骨末肉盾" - "npc_dota_creature_ogre_magi" "骨末法师" - "npc_dota_creature_baby_ogre_tank" "骨末肉盾宝宝" - "npc_dota_creature_baby_ogre_magi" "骨末法师宝宝" - "npc_dota_creature_small_hellbear" "林地地狱熊怪" - "npc_dota_creature_hellbear" "地狱熊怪战士" - "npc_dota_pinecone_champion" "松果卫士" - "npc_dota_pinecone_warrior" "松果战士" - "npc_dota_creature_small_ogre_seal" "食人魔海豹宝宝" - "npc_dota_creature_large_ogre_seal" "暴躁食人魔海豹" - "npc_dota_creature_wandering_ogre_seal" "徜徉食人魔海豹" - "npc_dota_creature_dazzle" "德尊侍僧" - "npc_dota_creature_wildwing_laborer" "温顺枭兽" - "npc_dota_creature_tusk_skeleton" "海象步兵" - "npc_dota_creature_spectral_tusk_mage" "海象冰霜法师" - "npc_dota_holdout_tower" "瞭望塔" - "npc_dota_undead_tusk_tombstone" "海象墓碑" - "npc_dota_creature_friendly_baby_ogre_tank" "布拉格" - "npc_dota_creature_friendly_ogre_seal" "盖瑞" - "npc_dota_creature_sand_king" "莱兹克" - "npc_dota_sand_king_sandstorm" "莱兹克的沙尘暴" - "npc_dota_creature_big_exploding_burrower" "砂虫爆破王" - "npc_dota_creature_healing_burrower" "砂虫祭品" - "npc_dota_creature_storegga" "石托瑞嘉" - "npc_dota_creature_small_storegga" "小石头" - "npc_dota_creature_temple_guardian" "神庙守卫" - "npc_dota_creature_morphling_big" "激流元素人" - "npc_dota_creature_tiny_crab" "小钳蟹" - "npc_dota_creature_warlock" "恶魔术师" - "npc_dota_creature_grimstroke" "不被理解的画家" - "npc_dota_creature_life_stealer" "尖牙怪" - "npc_dota_creature_gauntlet_skeleton" "冰骨骷髅" - "npc_dota_creature_demon_golem" "迷醉傀儡" - "npc_dota_creature_bomber" "投弹手" - "npc_dota_creature_gyrocopter" "无畏飞行员" - "npc_dota_creature_gyrocopter_homing_missile" "追踪导弹" - "npc_dota_creature_zealot_scarab" "圣甲虫狂热者" - "npc_dota_creature_zealot_mound" "钻地单位" - "npc_dota_creature_scarab_priest" "圣甲虫牧师" - "npc_dota_creature_rock_golem_a" "巨大岩石傀儡" - "npc_dota_creature_rock_golem_b" "岩石傀儡" - "npc_dota_creature_rock_golem_c" "岩石傀儡碎片" - "npc_dota_creature_luna_mini" "小暗月骑士" - "npc_dota_creature_mirana" "银夜潜行者" - "npc_dota_creature_alchemist" "术士,炼金" - "npc_dota_creature_broodmother" "沼泞毒蛛" - "npc_dota_creature_huge_broodmother" "庞然饕餮" - "npc_dota_creature_newborn_spider" "沼泞群蛛" - "npc_dota_creature_broodmother_baby" "微型蜘蛛" - "npc_dota_creature_broodmother_baby_b" "小小蜘蛛" - "npc_dota_creature_broodmother_baby_c" "小蜘蛛" - "npc_dota_creature_broodmother_baby_d" "毛毛小蜘蛛" - "npc_dota_creature_kidnap_spider" "沼泞猛蛛" - "npc_dota_creature_lina" "燃烧女巫师" - "npc_dota_creature_puck" "幻梦" - "npc_dota_creature_wolf" "红狼" - "npc_dota_creature_large_elder_titan" "世界终结者" - "npc_dota_creature_spectre" "超然之魂" - "npc_dota_creature_dragon_knight" "霜害领主" - "npc_dota_creature_underlord" "黑曜恶魔" - "npc_dota_creature_pudge_miniboss" "珀特里" - "npc_dota_creature_pudge_miniboss_minion" "行尸" - "npc_dota_creature_friendly_ogre_tank" "格兰奇" - "npc_aghsfort_morty" "马迪" - "npc_dota_sled_penguin" "鹅儿" - "npc_dota_creature_bonus_chicken" "金鹅" - "npc_dota_creature_bonus_greevil" "贪婪贪魔" - "npc_dota_breathe_fire_trap" "炽烈吐息" - "npc_dota_arrow_trap" "猎心装置" - "npc_dota_vase" "古董花瓶" - "npc_dota_crate" "木箱子" - "npc_treasure_chest" "宝箱" - "npc_dota_explosive_barrel" "易爆木桶" - "npc_aghsfort_dark_portal" "阿哈利姆的传送门" - "npc_dota_creature_ice_roshan" "寒山山" - "npc_dota_creature_fire_roshan" "熔山山" - "npc_dota_creature_baby_roshan" "小肉山" - "npc_dota_creature_ogre_tank_boss" "波格达格" - "npc_dota_creature_ogre_seer" "骨末先知" - "npc_dota_creature_phoenix" "幸运之阳" - "npc_dota_creature_ember_spirit" "焰手" - "npc_dota_creature_bandit" "荒漠盗贼" - "npc_dota_creature_bandit_archer" "荒漠射手" - "npc_dota_creature_bandit_captain" "荒漠队长" - "npc_dota_pendulum_trap" "斩首装置" - "npc_dota_creature_wave_blaster" "爆破蝙蝠" - "npc_aghsfort_creature_wave_blaster_ghost" "寒冰幽灵" - "npc_dota_creature_frost_kobold" "冰霜狗头人" - "npc_dota_creature_lich" "古老寒冰领主" - "npc_dota_creature_dark_seer" "堕落贤者" - "npc_dota_undead_woods_skeleton_king" "白骨之王" - "npc_dota_creature_upheaval_urn" "邪恶之瓮" - "npc_dota_creature_shadow_demon" "恶魔驱逐者" - "npc_dota_creature_doom" "恶魔暴徒" - "npc_dota_creature_necro_warrior" "地狱奉承者" - "npc_dota_creature_drow_ranger_miniboss" "神射手" - "npc_dota_creature_drow_ranger_skeleton_archer" "骷髅弓兵" - "npc_dota_creature_drow_ranger_skeleton_warrior" "骷髅战士" - "npc_dota_creature_beastmaster_boss" "毛皮商人" - "npc_dota_creature_beastmaster_boar" "毛皮贡献者" - "npc_dota_creature_troll_warlord_melee" "交易站暴徒" - "npc_dota_creature_troll_warlord_ranged" "交易站暴徒" - "npc_dota_cage" "动物牢笼" - "npc_dota_creature_sheep_hostage" "绵羊" - "npc_dota_creature_gladiator_creep" "业余" - "npc_dota_creature_skywrath_mage" "菜鸟" - "npc_dota_creature_legion_commander" "全明星" - "npc_dota_creature_shadow_shaman" "沼泽枷锁恶徒" - "npc_dota_creature_shroomling" "昏睡蘑菇" - "npc_dota_creature_shroom_giant" "蘑菇巨人" - "npc_dota_creature_slark_peon" "滑腻斯拉克" - "npc_dota_creature_naga_siren_boss" "头号人物" - "npc_dota_creature_naga_siren_illusion" "序幕" - "npc_dota_underwater_mine" "咬苹果" - "npc_dota_creature_elemental_tiny" "元素小小" - "npc_dota_creature_elemental_io" "元素精灵" - "npc_dota_assault_bad_melee_creep" "攻城近战兵" - "npc_dota_assault_bad_ranged_creep" "攻城远程兵" - "npc_dota_creature_catapult" "攻城投石车" - "npc_aghsfort_creature_dire_assault_captain" "攻城队长" - "npc_dota_creature_tidehunter_mini" "海滩碎浪" - "npc_dota_creature_tidehunter_medium" "海龟巡逻" - "npc_dota_creature_tidehunter_large" "海洋向导" - "npc_dota_creature_kunkka_medium" "能量掌握者" - "npc_dota_shop_keeper" "旅行商人" - "npc_dota_boss_aghanim" "巅峰法师阿哈利姆" - "npc_dota_creature_aghanim_minion" "碎土傀儡" - "npc_dota_boss_aghanim_crystal" "法术碎晶" - "npc_dota_story_crystal" "阿哈利姆的心智虹吸" - "npc_dota_dummy_caster" "阿哈利姆的助手亨利" - - "npc_aghsfort_creature_bomb_squad" "炸弹小队" - "npc_aghsfort_creature_bomb_squad_landmine" "炸弹小队炸弹" - "npc_aghsfort_creature_bomb_squad_stasis_trap" "炸弹小队静滞炸弹" - "npc_aghsfort_creature_enraged_wildwing" "愤怒的小鸟" - "npc_aghsfort_creature_tornado_harpy" "飓风鹰身女妖" - - "npc_dota_boss_timbersaw" "瑞兹瑞克" - "npc_dota_creature_timbersaw_treant" "小恩特" - "npc_dota_boss_void_spirit" "无玄的影子" - "npc_dota_earth_spirit_statue" "考林的足球雕塑" - "npc_dota_earth_spirit_boss" "考林卫士" - "npc_dota_boss_visage" "狭窄迷宫的守望者" - "npc_dota_boss_visage_familiar" "迷失幽魂" - "npc_dota_boss_visage_familiar_state" "迷宫观察者" - - "npc_dota_aghsfort_watch_tower_option_1" "出口选择" - "npc_dota_aghsfort_watch_tower_option_2" "出口选择" - - "DOTA_Tooltip_Ability_item_health_potion" "生命药水" - "DOTA_Tooltip_Ability_item_mana_potion" "魔法药水" - "DOTA_Tooltip_ability_item_bag_of_gold" "金袋" - "DOTA_Tooltip_Ability_item_life_rune" "生命符文" - "DOTA_Tooltip_Ability_item_life_rune_Description" "+1次生命,阵亡10秒后可以复活。" - "DOTA_Tooltip_Ability_item_small_scepter_fragment" "小神杖碎片" - "DOTA_Tooltip_Ability_item_small_scepter_fragment_Description" "消耗后可以选择3项小幅技能升级。" - "DOTA_Tooltip_ability_item_tombstone" "复活队友" - "DOTA_Chat_Tombstone_Pinged" "有队友在这里阵亡了。" - "Aghanim_FoundChestItem" "{s:player_name}找到了一个宝藏,内有:{s:locstring_value}" - "Aghanim_FoundChestGold" "{s:player_name}找到了一个宝藏,内有:{s:value}" - "Aghanim_FoundChestTrap" "{s:player_name}找到了一个宝藏,内有:{s:locstring_value}!" - "Aghanim_FoundLifeRune" "{s:player_name}找到了{s:locstring_value}!" - "Aghanim_FoundItem" "{s:player_name}找到了新物品:{s:locstring_value}!" - "Aghanim_FoundConsumableItem" "{s:player_name}找到了新的消耗品:{s:locstring_value}!" - "Aghanim_KilledByCreature" "{s:player_name}被{s:locstring_value}杀死!" - "Aghanim_BattlePointsFound" "{s:player_name}为全队找到了{d:int_value}点勇士积分!" - "Aghanim_ArcaneFragmentsFound" "{s:player_name}为全队找到了{d:int_value}块奥术碎片!" - - "DOTA_Tooltip_ability_item_bottle_Description" "

主动:回复

消耗一点能量,在%restore_time%秒哪回复%health_restore_pct%%%最大生命和%mana_restore_pct%%%最大魔法。每场遭遇战结束时将恢复一点能量。" - "DOTA_Tooltip_ability_item_bottle_max_charges" "最大能量:" - - "DOTA_Tooltip_ability_item_shadow_amulet_Description" "

主动:渐隐

让自己或友方单位静止不动的情况下获得隐身效果。

拥有%fade_time%秒渐隐时间,如果移动将立刻打破隐身。对友军施法距离:%abilitycastrange%" - "DOTA_Tooltip_ability_item_shadow_amulet_fade_duration" "最大渐隐时间:" - - "DOTA_Tooltip_ability_item_vladmir_Description" "

被动:弗拉迪米尔光环

向周围队友提供%lifesteal_aura%%%吸血,%damage_aura%%%攻击力加成和%mana_regen_aura%点/秒魔法恢复。

作用范围:%aura_radius%" - "DOTA_Tooltip_ability_item_vladmir_Lore" "一副怪异的面具,纠缠着死去吸血鬼的怨念。" - - "DOTA_Tooltip_modifier_item_vladmir_aura" "弗拉迪米尔光环" - "DOTA_Tooltip_modifier_item_vladmir_aura_Description" "获得%dMODIFIER_PROPERTY_TOOLTIP%%%吸血效果,还有%fMODIFIER_PROPERTY_MANA_REGEN_CONSTANT%点/秒魔法恢复和%dMODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS%点护甲。" - - "DOTA_Tooltip_ability_item_satanic_Description" "

主动:不洁狂热

吸血效果提升至%unholy_lifesteal_total_tooltip%%%,持续%unholy_duration%秒。\n

被动:吸血

攻击者每次攻击都将根据造成的伤害回复%lifesteal_percent%%%的生命值。" - "DOTA_Tooltip_ability_item_satanic_Lore" "无穷的力量,需要你付出灵魂作为代价。" - "DOTA_Tooltip_ability_item_satanic_bonus_strength" "+$str" - "DOTA_Tooltip_ability_item_satanic_bonus_damage" "+$damage" - "DOTA_Tooltip_ability_item_satanic_status_resistance" "%+状态抗性" - - "DOTA_Tooltip_modifier_item_satanic_unholy" "不洁狂热" - "DOTA_Tooltip_modifier_item_satanic_unholy_Description" "吸血效果提升%dMODIFIER_PROPERTY_TOOLTIP%%%。" - - "DOTA_Tooltip_modifier_creature_pudge_miniboss_armor_corruption_debuff" "腐蚀" - "DOTA_Tooltip_modifier_creature_pudge_miniboss_armor_corruption_debuff_Description" "失去%dMODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS%点护甲。" - - "DOTA_Tooltip_Ability_aghanim_empty_spell1" "技能被锁定" - "DOTA_Tooltip_Ability_aghanim_empty_spell1_Description" "阿哈利姆锁定了你的技能 - 快摧毁碎片夺回来!" - "DOTA_Tooltip_Ability_aghanim_empty_spell2" "技能被锁定" - "DOTA_Tooltip_Ability_aghanim_empty_spell2_Description" "阿哈利姆锁定了你的技能 - 快摧毁碎片夺回来!" - "DOTA_Tooltip_Ability_aghanim_empty_spell3" "技能被锁定" - "DOTA_Tooltip_Ability_aghanim_empty_spell3_Description" "阿哈利姆锁定了你的技能 - 快摧毁碎片夺回来!" - "DOTA_Tooltip_Ability_aghanim_empty_spell4" "技能被锁定" - "DOTA_Tooltip_Ability_aghanim_empty_spell4_Description" "阿哈利姆锁定了你的技能 - 快摧毁碎片夺回来!" - "DOTA_Tooltip_modifier_aghanim_spell_swap" "技能被锁定" - "DOTA_Tooltip_modifier_aghanim_spell_swap_Description" "阿哈利姆锁定了你的技能 - 快摧毁碎片夺回来!" - "DOTA_Tooltip_modifier_aghanim_crystal_attack_debuff" "晶莹寒气" - "DOTA_Tooltip_modifier_aghanim_crystal_attack_debuff_Description" "所有治疗、恢复和吸血效果降低%dMODIFIER_PROPERTY_HEAL_AMPLIFY_PERCENTAGE_TARGET%%%" - - "DOTA_Tooltip_ability_creature_brewmaster_fire_permanent_immolation" "永久献祭" - "DOTA_Tooltip_ability_creature_brewmaster_fire_permanent_immolation_Lore" "" - "DOTA_Tooltip_ability_creature_brewmaster_fire_permanent_immolation_Description" "烧灼附近的敌方单位。" - "DOTA_Tooltip_ability_creature_brewmaster_fire_permanent_immolation_damage" "每秒伤害:" - "DOTA_Tooltip_ability_creature_brewmaster_fire_permanent_immolation_radius" "作用范围:" - - "DOTA_Tooltip_Ability_item_greater_salve" "高级治疗药膏" - "DOTA_Tooltip_ability_item_greater_salve_Description" "

使用:药膏

向目标提供%hp_per_tick%点/秒生命恢复,持续%buff_duration%秒。

受到敌方英雄或肉山攻击时效果会被驱散。

对友军施放距离:%abilitycastrange%" - "DOTA_Tooltip_ability_item_greater_salve_Lore" "即使最严重的伤口也能快速治愈的魔法药膏。" - - "DOTA_Tooltip_modifier_item_greater_salve" "高级治疗药膏" - "DOTA_Tooltip_modifier_item_greater_salve_Description" "这个单位正在回复生命。" - - "DOTA_Tooltip_Ability_item_greater_clarity" "高级净化药水" - "DOTA_Tooltip_ability_item_greater_clarity_Description" "

使用:回魔

向目标提供%mana_per_tick%点魔法恢复,持续%buff_duration%秒。

施法距离:%abilitycastrange%" - "DOTA_Tooltip_ability_item_greater_clarity_Lore" "能增强冥想能力的清水。" - - "DOTA_Tooltip_modifier_item_greater_clarity" "高级净化药水" - "DOTA_Tooltip_modifier_item_greater_clarity_Description" "这个单位正在回复魔法。" - - "DOTA_Tooltip_Ability_item_double_damage_potion" "双倍伤害药水" - "DOTA_Tooltip_Ability_item_double_damage_potion_Description" "获得双倍伤害效果,持续%buff_duration%秒。" - - "DOTA_Tooltip_modifier_item_double_damage_potion" "双倍伤害药水" - "DOTA_Tooltip_modifier_item_double_damage_potion_Description" "这个单位拥有双倍伤害。" - - "DOTA_Tooltip_Ability_item_spell_amp_potion" "技能增强药水" - "DOTA_Tooltip_Ability_item_spell_amp_potion_Description" "获得%spell_amp_bonus_pct%%%技能伤害加成,持续%buff_duration%秒。" - - "DOTA_Tooltip_modifier_item_spell_amp_potion" "技能增强药水" - "DOTA_Tooltip_modifier_item_spell_amp_potion_Description" "这个单位拥有100%技能增强。" - - "DOTA_Tooltip_Ability_item_evasion_potion" "闪避药水" - "DOTA_Tooltip_Ability_item_evasion_potion_Description" "获得%evasion_bonus_pct%%%闪避加成,持续%buff_duration%秒。" - - "DOTA_Tooltip_modifier_item_evasion_potion" "闪避药水" - "DOTA_Tooltip_modifier_item_evasion_potion_Description" "这个单位拥有100%闪避加成。" - - "DOTA_Tooltip_Ability_item_tome_of_greater_knowledge" "高级学识之书" - "DOTA_Tooltip_Ability_item_tome_of_greater_knowledge_Description" "所有友方英雄获得升至下一级所需的半数经验。" - - "DOTA_Tooltip_Ability_item_purification_potion" "洗礼药水" - "DOTA_Tooltip_Ability_item_purification_potion_Description" "

使用:高级洗礼

立刻回复自身%heal%点生命,对附近敌人造成%heal%点伤害。" - "DOTA_Tooltip_ability_item_purification_potion_heal" "治疗/伤害:" - "DOTA_Tooltip_ability_item_purification_potion_radius" "伤害作用范围:" - - "DOTA_Tooltip_Ability_item_ravage_potion" "毁灭药水" - "DOTA_Tooltip_Ability_item_ravage_potion_Description" "

使用:高级毁灭

猛击地面,触手向各个方向穿出,伤害并眩晕附近所有敌方单位。" - "DOTA_Tooltip_Ability_item_ravage_potion_Note0" "毁灭能伤害隐身单位。" - "DOTA_Tooltip_Ability_item_ravage_potion_Note1" "毁灭以%speed%的速度向外扩散。" - "DOTA_Tooltip_ability_item_ravage_potion_radius" "作用范围:" - "DOTA_Tooltip_ability_item_ravage_potion_duration" "持续时间:" - - "DOTA_Tooltip_ability_item_dragon_potion" "古龙药水" - "DOTA_Tooltip_ability_item_dragon_potion_Description" "

使用:古龙形态

变成一头古龙,拥有腐蚀吐息,溅射伤害/减速和魔法抗性提升。" - "DOTA_Tooltip_ability_item_dragon_potion_duration" "持续时间:" - "DOTA_Tooltip_ability_item_dragon_potion_bonus_movement_speed" "移动速度加成:" - "DOTA_Tooltip_ability_item_dragon_potion_bonus_attack_range" "攻击距离加成:" - "DOTA_Tooltip_ability_item_dragon_potion_bonus_attack_damage" "攻击力加成:" - "DOTA_Tooltip_ability_item_dragon_potion_magic_resistance" "魔法抗性:" - "DOTA_Tooltip_ability_item_dragon_potion_splash_radius" "溅射范围:" - "DOTA_Tooltip_ability_item_dragon_potion_splash_damage_percent" "溅射伤害百分比:" - - "DOTA_Tooltip_ability_item_arcanist_potion" "秘士药水" - "DOTA_Tooltip_ability_item_arcanist_potion_Description" "

使用:强化秘法

降低技能冷却时间和魔法消耗。" - "DOTA_Tooltip_ability_item_arcanist_potion_duration" "持续时间:" - "DOTA_Tooltip_ability_item_arcanist_potion_cooldown_reduction_pct" "%冷却时间减少:" - "DOTA_Tooltip_ability_item_arcanist_potion_manacost_reduction_pct" "%魔法消耗降低:" - - "DOTA_Tooltip_modifier_aghsfort_arcanist_potion" "秘士药水" - "DOTA_Tooltip_modifier_aghsfort_arcanist_potion_Description" "降低技能冷却时间和魔法消耗。" - - "DOTA_Tooltip_Ability_item_echo_slam_potion" "回音击药水" - "DOTA_Tooltip_Ability_item_echo_slam_potion_Description" "

使用:高级回音击

穿过地面的冲击波,伤害敌方单位。每个受到攻击的敌人都会引起伤害附近单位的反射波。英雄本体将引起两次反射。" - "DOTA_Tooltip_ability_item_echo_slam_potion_echo_slam_echo_damage" "回音伤害:" - "DOTA_Tooltip_ability_item_echo_slam_potion_echo_slam_damage_range" "作用范围:" - "DOTA_Tooltip_ability_item_echo_slam_potion_echo_slam_initial_damage" "初始伤害:" - - "DOTA_Tooltip_Ability_item_torrent_effect_potion" "洪流反射" - "DOTA_Tooltip_Ability_item_torrent_effect_potion_Description" "

使用:获得永久效果。

每次受到攻击时有%proc_chance%%%几率召唤涨起的洪流,在短时间延迟后将敌方单位抛向空中。受到洪流作用的单位将被眩晕和减速,并受到伤害。" - "DOTA_Tooltip_ability_item_torrent_effect_potion_proc_chance" "%触发几率:" - "DOTA_Tooltip_ability_item_torrent_effect_potion_torrent_damage" "洪流伤害:" - "DOTA_Tooltip_ability_item_torrent_effect_potion_stun_duration" "眩晕时间:" - - "DOTA_Tooltip_modifier_item_torrent_effect_potion" "洪流反射" - "DOTA_Tooltip_modifier_item_torrent_effect_potion_Description" "该单位被攻击时有几率触发洪流。" - - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion" "暗影波反射" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_Description" "

使用:获得永久效果。

每次受到攻击时有%proc_chance%%%几率放出在友军身上跳跃的能量弧,对其治疗的同时对附近的所有单位造成伤害。自身总会受到暗影波的治疗效果。" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_Note0" "优先治疗友方英雄" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_Note1" "如果敌军附近有多个我方单位,那么他将受到多重暗影波的伤害。" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_proc_chance" "触发几率:" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_cast_range" "距离:" - //"DOTA_Tooltip_ability_item_shadow_wave_effect_potion_bounce_radius" "HEAL ARC RADIUS:" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_tooltip_max_targets_inc_dazzle" "最大治疗目标数:" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_damage_radius" "伤害作用范围:" - "DOTA_Tooltip_ability_item_shadow_wave_effect_potion_damage" "治疗/伤害:" - - "DOTA_Tooltip_modifier_aghsfort_shadow_wave_effect_potion" "暗影波反射" - "DOTA_Tooltip_modifier_aghsfort_shadow_wave_effect_potion_Description" "该单位被攻击时有几率触发暗影波。" - - "DOTA_Tooltip_modifier_bonus_room_start" "额外房间" - "DOTA_Tooltip_modifier_bonus_room_start_Description" "被沉默和锁闭。前往奖励!" - - "DOTA_Tooltip_Ability_item_aghsfort_refresher_shard" "刷新球碎片" - - "DOTA_Tooltip_Ability_item_aghsfort_refresher_shard_Description" "

主动:完全重置

重置所有物品和技能的冷却时间。" - "DOTA_Tooltip_Ability_item_aghsfort_refresher_shard_lore" "无尽之战时代的前前后后,不朽者的求胜之志始终从未动摇。" - "DOTA_Tooltip_ability_item_aghsfort_refresher_shard_Note0" "刷新球碎片可以共享。" - - "DOTA_Tooltip_modifier_aghsfort_firefly" "纵火狂人" - "DOTA_Tooltip_modifier_aghsfort_firefly_Description" "这个单位的足迹是火焰路径。" - - "DOTA_Tooltip_modifier_ascension_crit" "幸运一击" - "DOTA_Tooltip_modifier_ascension_crit_Description" "有%dMODIFIER_PROPERTY_TOOLTIP%%%几率造成%dMODIFIER_PROPERTY_TOOLTIP2%%%伤害。" - - "DOTA_Tooltip_modifier_ascension_magic_resist" "魔法刚毅" - "DOTA_Tooltip_modifier_ascension_magic_resist_Description" "这个单位拥有%dMODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS%%%额外魔法抗性。" - - "DOTA_Tooltip_modifier_ascension_plasma_field_display" "触电式告别" - "DOTA_Tooltip_modifier_ascension_plasma_field_display_Description" "单位在死亡时会施放等离子场。" - - "DOTA_Tooltip_modifier_ascension_flicker_display" "闪灵" - "DOTA_Tooltip_modifier_ascension_flicker_display_Description" "单位随机传送,净化自身的负面状态。" - - "DOTA_Tooltip_modifier_ascension_armor_sapping_display" "死亡诅咒" - "DOTA_Tooltip_modifier_ascension_armor_sapping_display_Description" "该单位削弱其击杀者的护甲" - - "DOTA_Tooltip_modifier_aghsfort_ascension_silence" "请安静!" - "DOTA_Tooltip_modifier_aghsfort_ascension_silence_Description" "无法施放技能" - - "DOTA_Tooltip_modifier_aghsfort_ascension_silence_display" "请安静!" - "DOTA_Tooltip_modifier_aghsfort_ascension_silence_display_Description" "单位偶尔会沉默附近玩家。" - - "DOTA_Tooltip_modifier_aghsfort_ascension_magnetic_field_evasion" "泡泡中的生活" - "DOTA_Tooltip_modifier_aghsfort_ascension_magnetic_field_evasion_Description" "躲避来自泡泡之外的物理攻击。" - - "DOTA_Tooltip_modifier_ascension_drunken_display" "醉酒" - "DOTA_Tooltip_modifier_ascension_drunken_display_Description" "单位偶尔会进入醉酒状态,获得移动速度、闪避加成和致命一击。" - - "DOTA_Tooltip_modifier_ascension_damage" "极其致命" - "DOTA_Tooltip_modifier_ascension_damage_Description" "单位造成的伤害增加%dMODIFIER_PROPERTY_TOTALDAMAGEOUTGOING_PERCENTAGE%%%。" - - "DOTA_Tooltip_modifier_ascension_attack_speed" "屹立不倒" - "DOTA_Tooltip_modifier_ascension_attack_speed_Description" "低血量时攻击速度提升%dMODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT%。" - - "DOTA_Tooltip_modifier_ascension_magic_immunity" "天神下凡" - "DOTA_Tooltip_modifier_ascension_magic_immunity_Description" "受到魔法伤害时短暂获得技能免疫状态。" - - "DOTA_Tooltip_modifier_ascension_armor" "皮糙肉厚" - "DOTA_Tooltip_modifier_ascension_armor_Description" "护甲提升%dMODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS%点。" - - "DOTA_Tooltip_modifier_ascension_armor_sapping" "死亡诅咒" - "DOTA_Tooltip_modifier_ascension_armor_sapping_Description" "由于击杀敌方单位,护甲降低%dMODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS%点。" - - "DOTA_Tooltip_modifier_ascension_heal_suppression_aura" "恶化力场" - "DOTA_Tooltip_modifier_ascension_heal_suppression_aura_Description" "减少附近单位%dMODIFIER_PROPERTY_TOOLTIP%%%治疗效果。" - - "DOTA_Tooltip_modifier_ascension_heal_suppression" "恶化力场" - "DOTA_Tooltip_modifier_ascension_heal_suppression_Description" "治疗效果降低%dMODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS%。" - - "DOTA_Tooltip_modifier_ascension_extra_fast" "奔腾不息" - "DOTA_Tooltip_modifier_ascension_extra_fast_Description" "移动速度提升%dMODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE%%%,并且无法被减速。" - - "DOTA_Tooltip_modifier_ascension_vampiric" "吸血鬼化" - "DOTA_Tooltip_modifier_ascension_vampiric_Description" "%dMODIFIER_PROPERTY_TOOLTIP%%%吸血。" - - "DOTA_Tooltip_modifier_ascension_chilling_touch" "极寒之触" - "DOTA_Tooltip_modifier_ascension_chilling_touch_Description" "这个生物造成伤害时将减缓目标%dMODIFIER_PROPERTY_TOOLTIP%%%移动速度,持续%fMODIFIER_PROPERTY_TOOLTIP%秒。多个负面效果将会叠加。" - - "DOTA_Tooltip_modifier_ogre_magi_channelled_bloodlust" "魔法师的嗜血术" - "DOTA_Tooltip_modifier_ogre_magi_channelled_bloodlust_Description" "移动和攻击速度更快。" - - "DOTA_Tooltip_modifier_battle_royale_damage" "阿哈利姆的失望" - "DOTA_Tooltip_modifier_battle_royale_damage_Description" "进入当前房间的战斗,不然他不高兴了你就难受了!" - - "DOTA_Tooltip_modifier_sand_king_boss_caustic_finale" "腐尸毒" - "DOTA_Tooltip_modifier_sand_king_boss_caustic_finale_Description" "每次叠加减少10%%护甲。" - - "DOTA_Tooltip_modifier_lifestealer_damage_counter" "酝酿狂暴" - "DOTA_Tooltip_modifier_lifestealer_damage_counter_Description" "短时间内受到大量伤害时将会进入狂暴状态。" - - "DOTA_Tooltip_modifier_lifestealer_enraged" "狂暴" - "DOTA_Tooltip_modifier_lifestealer_enraged_Description" "移动速度和攻击速度得到极大提升。" - - "DOTA_Tooltip_ability_morty_hop" "喂食饼干" - "DOTA_Tooltip_ability_morty_hop_Description" "给马迪喂一块饼干。持续施法的时间越长,能跳得也越快。" - - "DOTA_Tooltip_modifier_urn_upheaval" "灵龛的掌控" - "DOTA_Tooltip_modifier_urn_upheaval_Description" "移动速度大幅下降。" - - - "DOTA_Tooltip_ability_aghsfort_luna_lucent_beam" "月光" - "DOTA_Tooltip_ability_aghsfort_luna_lucent_beam_Description" "召唤一道月能的光束打击目标附近%radius%范围的敌人,造成伤害并短暂眩晕目标。" - "DOTA_Tooltip_ability_aghsfort_luna_lucent_beam_Lore" "那些侵犯银夜森林的家伙会受到赛莉蒙妮的毁灭打击。" - "DOTA_Tooltip_ability_aghsfort_luna_lucent_beam_stun_duration" "眩晕时间:" - "DOTA_Tooltip_ability_aghsfort_luna_lucent_beam_beam_damage" "月光伤害:" - "DOTA_Tooltip_ability_aghsfort_luna_lucent_beam_radius" "作用范围:" - - "DOTA_Tooltip_ability_aghsfort_luna_eclipse" "月蚀" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_Lore" "在急需其帮助的时候,赛莉蒙妮亲自降临世间,遮蔽照向敌人的光芒,以及他们的希望。" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_Description" "召唤一次月蚀,以她当前技能等级的月光随机打击附近敌人。月光只有伤害效果,不会造成眩晕,而且单一目标只能受到有限次数的打击。月蚀会暂时将白天变为黑夜,持续10秒。\n\n可用神杖升级。" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_Note0" "如果露娜没有升级月光,月蚀将无法造成伤害,但是变为黑夜效果有效。" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_Note1" "露娜阵亡后月光马上中止。" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_Note2" "月蚀不会造成眩晕。" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_Note3" "不能伤害隐身单位。" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_Note4" "每道月光之间都有0.6秒的间隔。神杖升级后间隔为0.3秒。" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_beams" "月光数量:" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_hit_count" "最大单体打击次数:" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_radius" "作用范围:" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_duration_tooltip" "月蚀持续时间:" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_beams_scepter" "神杖升级月光数量:" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_duration_tooltip_scepter" "神杖升级持续时间:" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_cast_range_tooltip_scepter" "神杖升级施法距离:" - "DOTA_Tooltip_ability_aghsfort_luna_eclipse_aghanim_description" "露娜可以对友方单位或自身施放月蚀,使月蚀的效果跟随他,或者在一片区域上施放。同时增加月光数量,延长月蚀持续时间,并且移除单体打击次数上限,月光的产生间隔缩短一半。" - - "DOTA_Tooltip_ability_monkey_king_jingu_mastery_aghsfort" "如意棒法" - "DOTA_Tooltip_ability_monkey_king_jingu_mastery_aghsfort_Description" "主动技能。 齐天大圣获得4次增强后的攻击,拥有额外攻击力和吸血效果。" - - "DOTA_Tooltip_Ability_rock_golem_split_a" "碎裂" - "DOTA_Tooltip_ability_rock_golem_split_a_Description" "傀儡的灵魂转移至破裂身躯的碎片中。" - "DOTA_Tooltip_Ability_rock_golem_split_b" "碎裂" - "DOTA_Tooltip_ability_rock_golem_split_b_Description" "傀儡的灵魂转移至破裂身躯的碎片中。" - - "DOTA_Tooltip_modifier_aghsfort_player_transform" "已变身" - "DOTA_Tooltip_modifier_aghsfort_player_transform_Description" "你的内在自我已向所有人暴露。无法治疗、施法或使用物品。" - - "DOTA_Tooltip_modifier_bandit_archer_arrow_debuff" "荒漠射手神箭" - "DOTA_Tooltip_modifier_bandit_archer_arrow_debuff_Description" "这个单位正处于破坏作用下。" - - // Artifacts - "DOTA_Tooltip_Ability_item_life_rune" "Life Rune" - - "DOTA_Tooltip_ability_item_book_of_strength" "力量之书" - "DOTA_Tooltip_ability_item_book_of_strength_Description" "消耗后永久获得3点力量。" - "DOTA_Tooltip_ability_item_book_of_agility" "敏捷之书" - "DOTA_Tooltip_ability_item_book_of_agility_Description" "消耗后永久获得3点敏捷。" - "DOTA_Tooltip_ability_item_book_of_intelligence" "智力之书" - "DOTA_Tooltip_ability_item_book_of_intelligence_Description" "消耗后永久获得3点智力。" - - "DOTA_Tooltip_ability_item_book_of_greater_strength" "刚毅之书" - "DOTA_Tooltip_ability_item_book_of_greater_strength_Description" "消耗后永久获得5点力量。" - "DOTA_Tooltip_ability_item_book_of_greater_agility" "迅捷之书" - "DOTA_Tooltip_ability_item_book_of_greater_agility_Description" "消耗后永久获得5点敏捷。" - "DOTA_Tooltip_ability_item_book_of_greater_intelligence" "洞察之书" - "DOTA_Tooltip_ability_item_book_of_greater_intelligence_Description" "消耗后永久获得5点智力。" - - "DOTA_Tooltip_ability_item_creed_of_omniscience" "全能信条" - "DOTA_Tooltip_ability_item_creed_of_omniscience_Description" "

被动:研习

获得额外经验。\n" - "DOTA_Tooltip_ability_item_creed_of_omniscience_bonus_xp" "%额外经验:" - "DOTA_Tooltip_ability_item_creed_of_omniscience_Lore" "全能之神赐我荣耀!" - - "DOTA_Tooltip_ability_item_oblivions_locket" "湮灭挂件" - "DOTA_Tooltip_ability_item_oblivions_locket_Description" "

主动:闹鬼

持续施法 - 变成虚无状态,对物理伤害免疫,但承受%extra_spell_damage_percent%%%额外魔法伤害,最多持续1秒。\n" - "DOTA_Tooltip_ability_item_oblivions_locket_bonus_all_stats" "全属性加成:" - "DOTA_Tooltip_ability_item_oblivions_locket_Lore" "一具骷髅的护符。用来防止日子难过。" - - "DOTA_Tooltip_ability_item_pelt_of_the_old_wolf" "暮狼毛皮" - "DOTA_Tooltip_ability_item_pelt_of_the_old_wolf_Description" "" - "DOTA_Tooltip_ability_item_pelt_of_the_old_wolf_Lore" "野外充满着勾心斗角;别放松警惕。" - "DOTA_Tooltip_ability_item_pelt_of_the_old_wolf_bonus_armor" "护甲加成:" - "DOTA_Tooltip_ability_item_pelt_of_the_old_wolf_bonus_move_speed" "移动速度加成:" - "DOTA_Tooltip_ability_item_pelt_of_the_old_wolf_bonus_evasion" "%额外闪避:" - - "DOTA_Tooltip_Ability_item_keen_optic" "基恩镜片" - - "DOTA_Tooltip_ability_item_paw_of_lucius" "卢修兕之爪" - "DOTA_Tooltip_ability_item_paw_of_lucius_Description" "

被动:利爪

普通攻击有%rupture_chance%%%几率触发割裂。\n" - "DOTA_Tooltip_ability_item_paw_of_lucius_Lore" "这一爪会深深插入。" - "DOTA_Tooltip_ability_item_paw_of_lucius_bonus_strength" "力量加成:" - "DOTA_Tooltip_ability_item_paw_of_lucius_bonus_attack_speed" "攻击速度加成:" - - "DOTA_Tooltip_ability_item_longclaws_amulet" "长爪护符" - "DOTA_Tooltip_ability_item_longclaws_amulet_Description" "" - "DOTA_Tooltip_ability_item_longclaws_amulet_Lore" "在维尔德,魔法有点不寻常,它的秘密正被严密守护。" - "DOTA_Tooltip_ability_item_longclaws_amulet_spell_lifesteal_pct" "%技能吸血:" - "DOTA_Tooltip_ability_item_longclaws_amulet_cooldown_reduction_pct" "%冷却时间减少:" - "DOTA_Tooltip_ability_item_longclaws_amulet_mana_cost_reduction_pct" "%魔法消耗降低:" - - "DOTA_Tooltip_ability_item_bogduggs_cudgel" "波格达格的巨棍" - "DOTA_Tooltip_ability_item_bogduggs_cudgel_Description" "

被动:粉碎

仅近战 - 所有攻击速度减半,但是攻击在目标%damage_radius%范围内造成溅射伤害,并且眩晕%stun_duration%秒。\n" - "DOTA_Tooltip_ability_item_bogduggs_cudgel_Lore" "波格达格提着最大的棍子来骨末山脊称王。" - "DOTA_Tooltip_ability_item_bogduggs_cudgel_bonus_strength" "力量加成:" - "DOTA_Tooltip_ability_item_bogduggs_cudgel_bonus_damage" "攻击力加成:" - - "DOTA_Tooltip_ability_item_bogduggs_baldric" "波格达格的肩带" - "DOTA_Tooltip_ability_item_bogduggs_baldric_Description" "" - "DOTA_Tooltip_ability_item_bogduggs_baldric_Lore" "跑来跑去可没有打人爽。太无聊了。" - "DOTA_Tooltip_ability_item_bogduggs_baldric_bonus_armor" "护甲加成:" - "DOTA_Tooltip_ability_item_bogduggs_baldric_disable_resist_pct" "%眩晕时间减少:" - "DOTA_Tooltip_ability_item_bogduggs_baldric_move_speed_penalty" "移动速度减少:" - - "DOTA_Tooltip_ability_item_bogduggs_lucky_femur" "波格达格的幸运股骨" - "DOTA_Tooltip_ability_item_bogduggs_lucky_femur_Description" "

被动:好运连连

在施放一个技能后,有%refresh_pct%%%的几率马上刷新该技能,被刷新的技能进入冷却后,幸运股骨也将进入冷却时间。\n" - "DOTA_Tooltip_ability_item_bogduggs_lucky_femur_Lore" "再来一次!" - "DOTA_Tooltip_ability_item_bogduggs_lucky_femur_max_mana_penalty" "最大魔法值降低:" - "DOTA_Tooltip_ability_item_bogduggs_lucky_femur_intelligence_penalty" "智力减少:" - "DOTA_Tooltip_ability_item_bogduggs_lucky_femur_mana_regen_sec" "额外魔法恢复:" - - "DOTA_Tooltip_ability_item_sign_of_the_arachnid" "蛛形印记" - "DOTA_Tooltip_ability_item_sign_of_the_arachnid_Description" "

被动:蛛形光环

友军获得额外移动速度和攻击速度。" - "DOTA_Tooltip_ability_item_sign_of_the_arachnid_Lore" "一个授予蛛丝之路追随者的不祥标志。" - "DOTA_Tooltip_ability_item_sign_of_the_arachnid_bonus_agility" "敏捷加成:" - "DOTA_Tooltip_ability_item_sign_of_the_arachnid_bonus_move_speed_pct" "%光环移动速度加成:" - "DOTA_Tooltip_ability_item_sign_of_the_arachnid_attack_speed" "光环攻击速度加成:" - - "DOTA_Tooltip_modifier_item_sign_of_the_arachnid_effect" "蛛形光环" - "DOTA_Tooltip_modifier_item_sign_of_the_arachnid_effect_Description" "获得移动速度和攻击速度加成。" - - "DOTA_Tooltip_ability_item_unhallowed_icon" "不洁之像" - "DOTA_Tooltip_ability_item_unhallowed_icon_Description" "

被动:血缘光环

友军获得额外的生命恢复速率。攻击任何单位后,造成伤害的%lifesteal_pct%%%将会变成吸取的生命值均摊给光环作用下的所有单位。" - "DOTA_Tooltip_ability_item_unhallowed_icon_Lore" "由地下世界的守护者佩戴的画像。" - "DOTA_Tooltip_ability_item_unhallowed_icon_bonus_strength" "力量加成:" - "DOTA_Tooltip_ability_item_unhallowed_icon_lifesteal_pct" "%光环均摊吸血:" - "DOTA_Tooltip_ability_item_unhallowed_icon_hp_regen" "光环生命恢复:" - - "DOTA_Tooltip_modifier_item_unhallowed_icon_effect" "血缘光环" - "DOTA_Tooltip_modifier_item_unhallowed_icon_effect_Description" "获得额外的生命恢复速率。物理攻击可以吸血,并均摊给血缘光环作用下的所有单位。" - - "DOTA_Tooltip_ability_item_preserved_skull" "坚韧之颅" - "DOTA_Tooltip_ability_item_preserved_skull_Description" "

被动:祈灵光环

友军获得额外的魔法恢复速率和冷却时间减少。" - "DOTA_Tooltip_ability_item_preserved_skull_Lore" "你再嘲笑啊?" - "DOTA_Tooltip_ability_item_preserved_skull_bonus_intelligence" "智力加成:" - "DOTA_Tooltip_ability_item_preserved_skull_cooldown_reduction_pct" "%光环冷却时间减少:" - "DOTA_Tooltip_ability_item_preserved_skull_aura_mana_regen" "光环魔法恢复:" - - "DOTA_Tooltip_modifier_item_preserved_skull_effect" "祈灵光环" - "DOTA_Tooltip_modifier_item_preserved_skull_effect_Description" "获得魔法恢复和冷却时间减少加成。" - - "DOTA_Tooltip_ability_item_treads_of_ermacor" "艾莫克之鞋" - "DOTA_Tooltip_ability_item_treads_of_ermacor_Description" "多个鞋类物品提供的移动速度加成不叠加。" - "DOTA_Tooltip_ability_item_treads_of_ermacor_Lore" "获得额外魔法恢复速率和冷却时间减少。" - "DOTA_Tooltip_ability_item_treads_of_ermacor_bonus_movement_speed" "移动速度加成:" - "DOTA_Tooltip_ability_item_treads_of_ermacor_bonus_attack_speed" "攻击速度加成:" - "DOTA_Tooltip_ability_item_treads_of_ermacor_bonus_all_stats" "全属性加成:" - - "DOTA_Tooltip_ability_item_rhyziks_eye" "莱兹克之眼" - "DOTA_Tooltip_ability_item_rhyziks_eye_Description" "" - "DOTA_Tooltip_ability_item_rhyziks_eye_Lore" "腐化者的眼中存在着力量。" - "DOTA_Tooltip_ability_item_rhyziks_eye_bonus_all_stats" "全属性加成:" - "DOTA_Tooltip_ability_item_rhyziks_eye_bonus_damage_pct" "%攻击力加成:" - "DOTA_Tooltip_ability_item_rhyziks_eye_damage_reduction" "%受到伤害降低:" - "DOTA_Tooltip_ability_item_rhyziks_eye_mana_regen_sec" "额外魔法恢复:" - "DOTA_Tooltip_ability_item_rhyziks_eye_hp_regen_sec" "额外生命恢复:" - - "DOTA_Tooltip_ability_item_guardian_shell" "卫士之壳" - "DOTA_Tooltip_ability_item_guardian_shell_Description" "

被动:坚定不移

不受减速和缠绕效果影响。" - "DOTA_Tooltip_ability_item_guardian_shell_Lore" "一往无前,没有尘世的牵挂。" - "DOTA_Tooltip_ability_item_guardian_shell_bonus_armor" "护甲加成:" - "DOTA_Tooltip_ability_item_guardian_shell_magic_resistance" "%魔法抗性加成:" - - "DOTA_Tooltip_ability_item_watchers_gaze" "守卫之眼" - "DOTA_Tooltip_ability_item_watchers_gaze_Description" "

主动:石化凝视

前方锥形区域内的敌人将变成石头,并承受额外的物理伤害。\n" - "DOTA_Tooltip_ability_item_watchers_gaze_Lore" "看着你的敌人,亲见他们在你面前石化。" - "DOTA_Tooltip_ability_item_watchers_gaze_bonus_stats" "全属性加成:" - - "DOTA_Tooltip_ability_item_carapace_of_qaldin" "卡尔丁甲壳" - "DOTA_Tooltip_ability_item_carapace_of_qaldin_Description" "

被动:酸性恢复

所有获得的魔法和生命恢复效果加倍,而且所有受到的伤害会有一部分反弹给攻击者。\n" - "DOTA_Tooltip_ability_item_carapace_of_qaldin_Lore" "让他们攻击,每次都会有鲜血的代价。" - "DOTA_Tooltip_ability_item_carapace_of_qaldin_bonus_hp" "生命加成:" - "DOTA_Tooltip_ability_item_carapace_of_qaldin_bonus_mana" "额外魔法:" - "DOTA_Tooltip_ability_item_carapace_of_qaldin_bonus_restore_pct" "%额外回复:" - "DOTA_Tooltip_ability_item_carapace_of_qaldin_damage_return_pct" "%反弹伤害:" - - "DOTA_Tooltip_ability_item_the_caustic_finale" "腐蚀剧毒" - "DOTA_Tooltip_ability_item_the_caustic_finale_Description" "

被动:腐蚀毒素

普通攻击会降低目标一定百分比的护甲。效果可以叠加至%max_stack_count%次。如果目标在这个效果下死亡将会爆炸,对范围内敌人造成伤害。\n" - "DOTA_Tooltip_ability_item_the_caustic_finale_Lore" "腐蚀的天赋总是能被重用。" - "DOTA_Tooltip_ability_item_the_caustic_finale_bonus_damage" "攻击力加成:" - "DOTA_Tooltip_ability_item_the_caustic_finale_bonus_attack_speed" "攻击速度提升:" - "DOTA_Tooltip_ability_item_the_caustic_finale_caustic_armor_reduction_pct" "%每次叠加削弱护甲:" - "DOTA_Tooltip_ability_item_the_caustic_finale_caustic_radius" "剧毒作用范围:" - "DOTA_Tooltip_ability_item_the_caustic_finale_caustic_damage" "剧毒伤害:" - "DOTA_Tooltip_ability_item_the_caustic_finale_max_stack_count" "最大叠加次数:" - - "DOTA_Tooltip_ability_item_winter_embrace" "寒冬之拥" - "DOTA_Tooltip_ability_item_winter_embrace_Description" "

被动:寒冰外壳

受到物理攻击时,攻击者的攻击和移动速度被降低,持续%slow_duration%秒。\n" - "DOTA_Tooltip_ability_item_winter_embrace_Lore" "现在是谁麻了?" - "DOTA_Tooltip_ability_item_winter_embrace_bonus_intelligence" "智力加成:" - "DOTA_Tooltip_ability_item_winter_embrace_bonus_armor" "护甲加成:" - - "DOTA_Tooltip_ability_item_ice_dragon_maw" "冰龙之喉" - "DOTA_Tooltip_ability_item_ice_dragon_maw_Description" "

被动:极寒撕咬

每次攻击有%chance_to_freeze%%%几率冻结目标,持续%freeze_duration%秒。\n" - "DOTA_Tooltip_ability_item_ice_dragon_maw_Lore" "你的眼里满是冰霜!" - "DOTA_Tooltip_ability_item_ice_dragon_maw_bonus_attack_range" "攻击距离加成(仅远程):" - "DOTA_Tooltip_ability_item_ice_dragon_maw_bonus_damage" "攻击力加成:" - - "DOTA_Tooltip_ability_item_precious_egg" "珍稀龙蛋" - "DOTA_Tooltip_ability_item_precious_egg_Description" "

被动:最后机会

受到致死伤害时有%chance_to_resist_death%%%几率使佩戴者以1点生命生还。\n" - "DOTA_Tooltip_ability_item_precious_egg_Lore" "在探索学识的研习之际,古龙掌握了延缓生命之息流失的诀窍。" - "DOTA_Tooltip_ability_item_precious_egg_bonus_all_stats" "全属性加成:" - - "DOTA_Tooltip_ability_item_stony_coat" "岩石外衣" - "DOTA_Tooltip_ability_item_stony_coat_Description" "

被动:阻塞

佩戴者受到伤害时有%boulder_chance%%%几率反击,扔出一块巨石,造成%boulder_damage%点伤害,并眩晕%boulder_stun_duration%秒。\n" - "DOTA_Tooltip_ability_item_stony_coat_Lore" "只是一石之遥。" - "DOTA_Tooltip_ability_item_stony_coat_bonus_strength" "力量加成:" - "DOTA_Tooltip_ability_item_stony_coat_bonus_armor" "护甲加成:" - - "DOTA_Tooltip_ability_item_stonework_pendant" "石制坠饰" - "DOTA_Tooltip_ability_item_stonework_pendant_Description" "

被动:石头里还是能榨出血的。

现在施放技能时消耗生命,数值为所需魔法的%hp_cost_multiplier%倍,并且佩戴者获得额外的生命值和生命恢复,数值分别等于魔法值和魔法恢复。\n" - "DOTA_Tooltip_ability_item_stonework_pendant_Lore" "石头里还是能榨出血的。" - "DOTA_Tooltip_ability_item_stonework_pendant_spell_lifesteal" "%技能吸血:" - - "DOTA_Tooltip_ability_item_gravel_foot" "砂砾之足" - "DOTA_Tooltip_ability_item_gravel_foot_Description" "" - "DOTA_Tooltip_ability_item_gravel_foot_Lore" "在任何地方都能站稳脚跟。" - "DOTA_Tooltip_ability_item_gravel_foot_bonus_movement_speed" "移动速度加成:" - "DOTA_Tooltip_ability_item_gravel_foot_bonus_all_stats" "全属性加成:" - "DOTA_Tooltip_ability_item_gravel_foot_bonus_hp_regen" "额外生命恢复:" - "DOTA_Tooltip_ability_item_gravel_foot_damage_block" "伤害格挡:" - - - "DOTA_Tooltip_modifier_book_of_strength" "力量之书" - "DOTA_Tooltip_modifier_book_of_strength_Description" "消耗后获得了力量。" - "DOTA_Tooltip_modifier_book_of_agility" "敏捷之书" - "DOTA_Tooltip_modifier_book_of_agility_Description" "消耗后获得了敏捷。" - "DOTA_Tooltip_modifier_book_of_intelligence" "智力之书" - "DOTA_Tooltip_modifier_book_of_intelligence_Description" "消耗后获得了智力。" - - "DOTA_Tooltip_Ability_item_wand_of_the_brine" "苍洋魔杖" - "DOTA_Tooltip_Ability_item_wand_of_the_brine_Lore" "要不是这把尊崇的魔杖,教团在石鱼门一役就全军覆没。" - "DOTA_Tooltip_Ability_item_wand_of_the_brine_Description" "

主动:苍洋泡沫

使一个友方单位进入具有防护效果的疗伤泡泡,持续%bubble_duration%秒,每%heal_tick_interval%秒治疗%bubble_heal_per_tick%点生命。" - "DOTA_Tooltip_Ability_item_wand_of_the_brine_bonus_intelligence" "+$int" - "DOTA_Tooltip_Ability_item_wand_of_the_brine_bonus_mana_regen_pct" "%+$mana_regen" - - "DOTA_Tooltip_modifier_item_wand_of_the_brine_bubble" "苍洋泡沫" - "DOTA_Tooltip_modifier_item_wand_of_the_brine_bubble_Description" "这个单位正受到苍洋泡沫的保护。每秒恢复300点生命。" - - "DOTA_Tooltip_Ability_item_slippers_of_the_abyss" "深渊便鞋" - "DOTA_Tooltip_Ability_item_slippers_of_the_abyss_Lore" "在浩瀚的深海,动得不够快就会死得非常快。" - "DOTA_Tooltip_Ability_item_slippers_of_the_abyss_Description" "

主动:水性冲刺

移动速度提升%sprint_bonus_ms%,持续%sprint_duration%秒。" - "DOTA_Tooltip_Ability_item_slippers_of_the_abyss_bonus_movement_speed" "移动速度加成:" - "DOTA_Tooltip_Ability_item_slippers_of_the_abyss_bonus_atk_speed" "攻击速度加成:" - "DOTA_Tooltip_Ability_item_slippers_of_the_abyss_bonus_strength" "+$str" - "DOTA_Tooltip_Ability_item_slippers_of_the_abyss_bonus_agility" "+$agi" - - "DOTA_Tooltip_modifier_item_slippers_of_the_abyss_sprint" "水性冲刺" - "DOTA_Tooltip_modifier_item_slippers_of_the_abyss_sprint_Description" "这个单位的移动速度得到极大提升。" - //"DOTA_Tooltip_modifier_item_slippers_of_the_abyss_sprint_sprint_bonus_ms" "%BONUS MOVEMENT SPEED:" - //"DOTA_Tooltip_modifier_item_slippers_of_the_abyss_sprint_sprint_bonus_dmg" "%BONUS MOVEMENT SPEED:" - - "DOTA_Tooltip_Ability_item_glimmerdark_shield" "荧光护盾" - "DOTA_Tooltip_Ability_item_glimmerdark_shield_Lore" "这面盾牌的首位拥有者觉得自己在战场上已经所向无敌。直到第二位拥有者的魔法出现。" - "DOTA_Tooltip_Ability_item_glimmerdark_shield_Description" "

主动:闪光

对物理伤害免疫,但是受到的魔法伤害增加%tooltip_prism_bonus_magic_dmg%%。持续%prism_duration%秒。" - "DOTA_Tooltip_Ability_item_glimmerdark_shield_bonus_strength" "+$str" - "DOTA_Tooltip_Ability_item_glimmerdark_shield_bonus_agility" "+$agi" - "DOTA_Tooltip_Ability_item_glimmerdark_shield_bonus_intellect" "+$int" - "DOTA_Tooltip_Ability_item_glimmerdark_shield_bonus_armor" "护甲加成:" - "DOTA_Tooltip_Ability_item_glimmerdark_shield_bonus_health_regen" "生命恢复加成:" - - "DOTA_Tooltip_modifier_item_glimmerdark_shield_prism" "闪光" - "DOTA_Tooltip_modifier_item_glimmerdark_shield_prism_Description" "这个单位对物理伤害免疫,但是受到的魔法伤害大幅增加。" - - "DOTA_Tooltip_Ability_item_dredged_trident" "破泞之主的疏浚三叉戟" - "DOTA_Tooltip_Ability_item_dredged_trident_Description" "

被动:致命一击

每次攻击有%crit_chance%%几率造成%crit_multiplier%%%额外伤害。" - "DOTA_Tooltip_ability_item_dredged_trident_Lore" "很久以前从深海中拔出后,破泞之主就将这把毁灭性的武器据为己有。" - "DOTA_Tooltip_Ability_item_dredged_trident_bonus_damage" "+$damage" - //"DOTA_Tooltip_Ability_item_dredged_trident_crit_chance" "CRIT CHANCE:" - //"DOTA_Tooltip_Ability_item_dredged_trident_crit_multiplier" "CRIT MULTIPLIER:" - - "DOTA_Tooltip_Ability_item_ambient_sorcery" "环域巫术" - "DOTA_Tooltip_Ability_item_ambient_sorcery_Description" "

被动:环域巫术

使周围单位的魔法抗性降低%aura_magic_reduction%%。" - "DOTA_Tooltip_ability_item_ambient_sorcery_Lore" "一个闪光的宝珠,盗自一座奥术师高塔。" - "DOTA_Tooltip_Ability_item_ambient_sorcery_bonus_intelligence" "+$int" - - "DOTA_Tooltip_modifier_item_ambient_sorcery_effect" "环域巫术" - "DOTA_Tooltip_modifier_item_ambient_sorcery_effect_Description" "这个单位受到的魔法伤害增加。" - - "DOTA_Tooltip_Ability_item_ogre_seal_totem" "食人魔海豹图腾" - "DOTA_Tooltip_Ability_item_ogre_seal_totem_Description" "

主动:食人魔海豹扑打

像食人魔海豹一样扑打,每次造成%damage%点伤害并眩晕%stun_duration%秒。" - "DOTA_Tooltip_ability_item_ogre_seal_totem_Lore" "从食人魔海豹的牙齿雕刻而来的图腾。" - "DOTA_Tooltip_Ability_item_ogre_seal_totem_bonus_strength" "力量加成:" - "DOTA_Tooltip_Ability_item_ogre_seal_totem_bonus_hp" "生命加成:" - - "DOTA_Tooltip_Ability_item_bear_cloak" "熊皮斗篷" - "DOTA_Tooltip_Ability_item_bear_cloak_Description" "

光环:毛糙熊皮

向周围友方单位提供%aura_bonus_magic_resist%%%魔法抗性加成。" - "DOTA_Tooltip_ability_item_bear_cloak_Lore" "野兽的天然护甲并没有缺点。" - "DOTA_Tooltip_Ability_item_bear_cloak_bonus_magic_resist" "自身魔法抗性加成:" - - "DOTA_Tooltip_modifier_item_bear_cloak_effect" "毛糙熊皮" - "DOTA_Tooltip_modifier_item_bear_cloak_effect_Description" "这个单位拥有额外魔法抗性。" - - "DOTA_Tooltip_Ability_item_lifestone" "生命之石" - "DOTA_Tooltip_Ability_item_lifestone_Description" "

主动:生命之契

每0.5秒将%pact_hp_cost%点生命值转化为%pact_mana_gained%点魔法。" - "DOTA_Tooltip_ability_item_lifestone_Lore" "灵石渴求鲜血。" - "DOTA_Tooltip_Ability_item_lifestone_hp_regen" "生命恢复:" - - "DOTA_Tooltip_modifier_item_lifestone_pact" "生命之契" - "DOTA_Tooltip_modifier_item_lifestone_pact_Description" "这个单位正将生命转化为魔法。" - - "DOTA_Tooltip_Ability_item_corrupting_blade" "紫罗兰战刃" - "DOTA_Tooltip_Ability_item_corrupting_blade_Description" "

被动:黯寂

每次攻击将降低目标%corruption_armor%点护甲,持续%corruption_duration%秒。" - "DOTA_Tooltip_ability_item_corrupting_blade_Lore" "一件可怕的武器,其铸造图纸早已遗失在紫罗兰档案馆。" - "DOTA_Tooltip_Ability_item_corrupting_blade_bonus_damage" "+$damage" - - "DOTA_Tooltip_modifier_item_corrupting_blade_buff" "黯寂" - "DOTA_Tooltip_modifier_item_corrupting_blade_buff_Description" "紫罗兰战刃的攻击降低该单位14点护甲。" - - "DOTA_Tooltip_Ability_item_amorphotic_shell" "变形之壳" - "DOTA_Tooltip_Ability_item_amorphotic_shell_Description" "

被动:分裂

受到的攻击超过25点时有%amoeba_chance%%%几率产生一只变形虫为自己作战,持续%amoeba_duration%秒。" - "DOTA_Tooltip_ability_item_amorphotic_shell_Lore" "它的形状无法准确把握。" - "DOTA_Tooltip_Ability_item_amorphotic_shell_bonus_strength" "力量加成:" - "DOTA_Tooltip_Ability_item_amorphotic_shell_bonus_intelligence" "智力加成:" - "DOTA_Tooltip_Ability_item_amorphotic_shell_bonus_agility" "敏捷加成:" - - //-------------------------------------------------------------------------------------------------------------- - // AURAS - //-------------------------------------------------------------------------------------------------------------- - "DOTA_Tooltip_ability_aghsfort_aura_reward_hp" "磐石光环" - "DOTA_Tooltip_ability_aghsfort_aura_reward_hp_Description" "提高周围单位的生命值上限。" - "DOTA_Tooltip_ability_aghsfort_aura_reward_hp_bonus_hp" "%生命加成:" - - "DOTA_Tooltip_ability_aghsfort_aura_reward_armor" "穿山甲光环" - "DOTA_Tooltip_ability_aghsfort_aura_reward_armor_Description" "友军的外皮更为坚韧,对物理伤害的抗性提升。" - "DOTA_Tooltip_ability_aghsfort_aura_reward_armor_bonus_armor" "护甲加成:" - - "DOTA_Tooltip_modifier_aghsfort_aura_reward_armor_bonus" "穿山甲光环" - "DOTA_Tooltip_modifier_aghsfort_aura_reward_armor_bonus_Description" "提供%dMODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS%点额外护甲。" - - "DOTA_Tooltip_ability_aghsfort_aura_reward_magic_resist" "魔法斗篷" - "DOTA_Tooltip_ability_aghsfort_aura_reward_magic_resist_Description" "一件具有魔力的斗篷,提升了魔法抗性。" - "DOTA_Tooltip_ability_aghsfort_aura_reward_magic_resist_bonus_magical_armor" "魔法抗性:" - - "DOTA_Tooltip_modifier_aghsfort_aura_reward_magic_resist_bonus" "魔法斗篷" - "DOTA_Tooltip_modifier_aghsfort_aura_reward_magic_resist_bonus_Description" "额外提供%dMODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS%魔法抗性。" - - "DOTA_Tooltip_ability_aghsfort_aura_reward_crit_chance" "剑圣现世" - "DOTA_Tooltip_ability_aghsfort_aura_reward_crit_chance_Description" "友军获得%crit_chance%%%几率造成%crit_multiplier%%%致命一击伤害。" - "DOTA_Tooltip_ability_aghsfort_aura_reward_crit_chance_crit_chance" "%致命一击概率:" - "DOTA_Tooltip_ability_aghsfort_aura_reward_crit_chance_crit_multiplier" "致命一击伤害:" - - "DOTA_Tooltip_modifier_aghsfort_reward_crit_aura_bonus" "剑圣现世" - "DOTA_Tooltip_modifier_aghsfort_reward_crit_aura_bonus_Description" "拥有几率使每次攻击造成致命一击。" - - //-------------------------------------------------------------------------------------------------------------- - // TEMP BUFFS - //-------------------------------------------------------------------------------------------------------------- - "DOTA_Tooltip_ability_aghsfort_tempbuff_corpse_explosion" "尸爆" - "DOTA_Tooltip_ability_aghsfort_tempbuff_corpse_explosion_aura_Description" "敌方单位有几率爆裂成一团血肉,对周围单位造成其25%%最大生命值的魔法伤害。" - "DOTA_Tooltip_ability_aghsfort_tempbuff_corpse_explosion_corpse_explosion_radius" "爆炸范围:" - "DOTA_Tooltip_ability_aghsfort_tempbuff_corpse_explosion_corpse_explosion_damage_pct" "%最大生命值伤害百分比:" - "DOTA_Tooltip_ability_aghsfort_tempbuff_corpse_explosion_corpse_explosion_chance_pct" "%爆炸作用几率:" - - "DOTA_Tooltip_modifier_aghsfort_tempbuff_corpse_explosion_aura" "尸爆" - "DOTA_Tooltip_modifier_aghsfort_tempbuff_corpse_explosion_aura_Description" "敌方单位有几率爆裂成一团血肉,对周围单位造成其25%%最大生命值的魔法伤害。" - - "DOTA_Tooltip_modifier_aghsfort_tempbuff_corpse_explosion_debuff" "膨胀轰动" - "DOTA_Tooltip_modifier_aghsfort_tempbuff_corpse_explosion_debuff_Description" "这个单位死亡时有几率爆炸,对周围单位造成其25%%最大生命值的魔法伤害。" - - //-------------------------------------------------------------------------------------------------------------- - // BLESSING MODIFIERS START - //-------------------------------------------------------------------------------------------------------------- - - "DOTA_Tooltip_modifier_blessing_armor" "护甲祝福" - "DOTA_Tooltip_modifier_blessing_armor_Description" "提供%dMODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS%点额外护甲。" - - "DOTA_Tooltip_modifier_blessing_attack_speed" "攻击速度祝福" - "DOTA_Tooltip_modifier_blessing_attack_speed_Description" "获得%dMODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT%攻击速度。" - - "DOTA_Tooltip_modifier_blessing_evasion" "闪避祝福" - "DOTA_Tooltip_modifier_blessing_evasion_Description" "获得%dMODIFIER_PROPERTY_EVASION_CONSTANT%%%闪避。" - - "DOTA_Tooltip_modifier_blessing_mana_boost" "最大魔法祝福" - "DOTA_Tooltip_modifier_blessing_mana_boost_Description" "获得%dMODIFIER_PROPERTY_EXTRA_MANA_PERCENTAGE%%%最大魔法。" - - "DOTA_Tooltip_modifier_blessing_health_boost" "最大生命祝福" - "DOTA_Tooltip_modifier_blessing_health_boost_Description" "获得%dMODIFIER_PROPERTY_EXTRA_HEALTH_PERCENTAGE%%%点最大生命。" - - "DOTA_Tooltip_modifier_blessing_magic_resist" "魔法抗性祝福" - "DOTA_Tooltip_modifier_blessing_magic_resist_Description" "额外提供%dMODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS%%%魔法抗性。" - - "DOTA_Tooltip_modifier_blessing_magic_damage_bonus" "技能增强福佑" - "DOTA_Tooltip_modifier_blessing_magic_damage_bonus_Description" "获得%dMODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE%%%技能增强。" - - "DOTA_Tooltip_modifier_blessing_damage_bonus" "攻击力加成福佑" - "DOTA_Tooltip_modifier_blessing_damage_bonus_Description" "获得%dMODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE%点攻击力(每级+%dMODIFIER_PROPERTY_TOOLTIP%点)" - - "DOTA_Tooltip_modifier_blessing_movement_speed" "移动速度福佑" - "DOTA_Tooltip_modifier_blessing_movement_speed_Description" "获得%dMODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE%%%移动速度加成。" - - "DOTA_Tooltip_modifier_blessing_damage_reflect" "伤害反弹" - "DOTA_Tooltip_modifier_blessing_damage_reflect_Description" "%dMODIFIER_PROPERTY_TOOLTIP%%%伤害反弹给攻击者。" - - "DOTA_Tooltip_modifier_blessing_spell_life_steal" "法术吸血福佑" - "DOTA_Tooltip_modifier_blessing_spell_life_steal_Description" "%dMODIFIER_PROPERTY_TOOLTIP%%%法术伤害将以生命形式返还。" - - "DOTA_Tooltip_modifier_blessing_life_steal" "吸血福佑" - "DOTA_Tooltip_modifier_blessing_life_steal_Description" "%dMODIFIER_PROPERTY_TOOLTIP%%%攻击伤害将以生命形式返还。" - - "DOTA_Tooltip_modifier_blessing_potion_dragon" "古龙药水福佑" - "DOTA_Tooltip_modifier_blessing_potion_dragon_Description" "古龙药水现在把你变成一头黑龙,攻击力额外提升%dMODIFIER_PROPERTY_TOOLTIP2%点,溅射伤害额外提升%dMODIFIER_PROPERTY_TOOLTIP%%%。" - - "DOTA_Tooltip_modifier_blessing_potion_echo_slam" "回音击药水福佑" - "DOTA_Tooltip_modifier_blessing_potion_echo_slam_Description" "回音击药水额外造成%dMODIFIER_PROPERTY_TOOLTIP%点回音伤害。" - - "DOTA_Tooltip_modifier_blessing_potion_torrent" "洪流药水福佑" - "DOTA_Tooltip_modifier_blessing_potion_torrent_Description" "洪流药水额外拥有%dMODIFIER_PROPERTY_TOOLTIP%%%几率在受到攻击时产生洪流。" - - "DOTA_Tooltip_modifier_blessing_potion_ravage" "毁灭药水福佑" - "DOTA_Tooltip_modifier_blessing_potion_ravage_Description" "毁灭药水击中敌人的范围额外增加%dMODIFIER_PROPERTY_TOOLTIP%。" - - "DOTA_Tooltip_modifier_blessing_potion_shadow_wave" "暗影波药水福佑" - "DOTA_Tooltip_modifier_blessing_potion_shadow_wave_Description" "暗影波药水额外治疗友军和伤害敌人%dMODIFIER_PROPERTY_TOOLTIP%点。" - - "DOTA_Tooltip_modifier_blessing_potion_purification" "洗礼药水福佑" - "DOTA_Tooltip_modifier_blessing_potion_purification_Description" "洗礼药水额外伤害%dMODIFIER_PROPERTY_TOOLTIP%范围内敌人。" - - "DOTA_Tooltip_modifier_blessing_respawn_time_reduction" "复活时间减少福佑" - "DOTA_Tooltip_modifier_blessing_respawn_time_reduction_Description" "复活时间减少%dMODIFIER_PROPERTY_TOOLTIP%%%。" - - "DOTA_Tooltip_modifier_blessing_death_detonation" "死亡引爆" - "DOTA_Tooltip_modifier_blessing_death_detonation_Description" "死亡时产生爆炸,对%dMODIFIER_PROPERTY_TOOLTIP2%范围内造成每级%dMODIFIER_PROPERTY_TOOLTIP%点伤害。" - - "DOTA_Tooltip_modifier_blessing_strength" "力量加成" - "DOTA_Tooltip_modifier_blessing_strength_Description" "提供%dMODIFIER_PROPERTY_STATS_STRENGTH_BONUS%点额外力量。" - - "DOTA_Tooltip_modifier_blessing_agility" "敏捷加成" - "DOTA_Tooltip_modifier_blessing_agility_Description" "提供%dMODIFIER_PROPERTY_STATS_AGILITY_BONUS%点额外敏捷。" - - "DOTA_Tooltip_modifier_blessing_intelligence" "智力奖赏" - "DOTA_Tooltip_modifier_blessing_intelligence_Description" "获得%dMODIFIER_PROPERTY_STATS_INTELLECT_BONUS%点额外敏捷" - - "DOTA_Tooltip_modifier_blessing_potion_health" "生命药水拾取福佑" - "DOTA_Tooltip_modifier_blessing_potion_health_Description" "生命药水治疗你时额外回复%dMODIFIER_PROPERTY_TOOLTIP%%%最大生命值。" - - "DOTA_Tooltip_modifier_blessing_potion_mana" "魔法药水拾取福佑" - "DOTA_Tooltip_modifier_blessing_potion_mana_Description" "生命药水治疗你时额外回复%dMODIFIER_PROPERTY_TOOLTIP%%%最大魔法值。" - - "DOTA_Tooltip_modifier_blessing_restore_mana" "击杀魔法福佑" - "DOTA_Tooltip_modifier_blessing_restore_mana_Description" "每次击杀一名敌人都将回复%dMODIFIER_PROPERTY_TOOLTIP%点魔法。" - - "DOTA_Tooltip_modifier_blessing_respawn_invulnerability" "复活后一段时间内暂时无敌。" - "DOTA_Tooltip_modifier_blessing_respawn_invulnerability_Description" "复活后的武器时间延长%dMODIFIER_PROPERTY_TOOLTIP%秒。" - - "DOTA_Tooltip_modifier_blessing_book_strength" "力量之书福佑" - "DOTA_Tooltip_modifier_blessing_book_strength_Description" "使用力量之书时额外获得%dMODIFIER_PROPERTY_TOOLTIP%点力量。" - - "DOTA_Tooltip_modifier_blessing_book_agility" "敏捷之书福佑" - "DOTA_Tooltip_modifier_blessing_book_agility_Description" "使用敏捷之书时额外获得%dMODIFIER_PROPERTY_TOOLTIP%点敏捷。" - - "DOTA_Tooltip_modifier_blessing_book_intelligence" "智力之书福佑" - "DOTA_Tooltip_modifier_blessing_book_intelligence_Description" "使用智力之书时额外获得%dMODIFIER_PROPERTY_TOOLTIP%点智力。" - - //-------------------------------------------------------------------------------------------------------------- - // BLESSING MODIFIERS END - //-------------------------------------------------------------------------------------------------------------- - - } -} diff --git a/aghanim_singleplayer/scripts/custom.gameevents b/aghanim_singleplayer/scripts/custom.gameevents deleted file mode 100755 index 85138a0..0000000 --- a/aghanim_singleplayer/scripts/custom.gameevents +++ /dev/null @@ -1,53 +0,0 @@ -// No spaces in event names, max length 32 -// All strings are case sensitive -// -// valid data key types are: -// string : a zero terminated string -// bool : unsigned int, 1 bit -// byte : unsigned int, 8 bit -// short : signed int, 16 bit -// long : signed int, 32 bit -// float : float, 32 bit -// uint64 : unsigned int 64 bit -// local : any data, but not networked to clients -// -// following key names are reserved: -// local : if set to 1, event is not networked to clients -// unreliable : networked, but unreliable -// suppress : never fire this event -// time : firing server time -// eventid : holds the event ID - -"CustomEvents" -{ - "trigger_start_touch" - { - "trigger_name" "string" - "activator_entindex" "short" - "caller_entindex" "short" - } - "trigger_end_touch" - { - "trigger_name" "string" - "activator_entindex" "short" - "caller_entindex" "short" - } - "aghsfort_ascension_level_selected" - { - "level" "short" - } - "aghsfort_path_selected" - { - "selected_room" "string" - } - "bullet" - { - "player_id" "short" - "text" "string" - "target" "string" - "item" "string" - "item_level" "short" - "ban" "string" - } -} - diff --git a/aghanim_singleplayer/scripts/custom_net_tables.txt b/aghanim_singleplayer/scripts/custom_net_tables.txt deleted file mode 100755 index 635eac5..0000000 --- a/aghanim_singleplayer/scripts/custom_net_tables.txt +++ /dev/null @@ -1,22 +0,0 @@ - -{ - custom_net_tables = - [ - "aghanim_scores", - "game_global", - "special_ability_upgrades", - "respawns_remaining", - "revive_state", - - "room_data", - - "reward_options", - "reward_choices", - "minor_ability_upgrades", - - "boss_net_table", - "currency_rewards", - - "encounter_state", - ] -} diff --git a/aghanim_singleplayer/scripts/npc/herolist.txt b/aghanim_singleplayer/scripts/npc/herolist.txt deleted file mode 100755 index 856e09d..0000000 --- a/aghanim_singleplayer/scripts/npc/herolist.txt +++ /dev/null @@ -1,72 +0,0 @@ -// -// -// Hero currently on/off, will be # of instances (-1 = infinite) -// - -"CustomHeroList" -{ - //--------------- ENABLED ----------------- - - "npc_dota_hero_disruptor" "1" - "npc_dota_hero_magnataur" "1" - "npc_dota_hero_mars" "1" - "npc_dota_hero_snapfire" "1" - "npc_dota_hero_sniper" "1" - "npc_dota_hero_tusk" "1" - "npc_dota_hero_ursa" "1" - "npc_dota_hero_viper" "1" - "npc_dota_hero_weaver" "1" - "npc_dota_hero_winter_wyvern" "1" - - // Next - "npc_dota_hero_omniknight" "1" - "npc_dota_hero_witch_doctor" "1" - "npc_dota_hero_phantom_assassin" "1" - - - //---------------- DISABLED ----------------- - - // Top candidates - "npc_dota_hero_axe" "0" - "npc_dota_hero_centaur" "0" // aghs Stampede allows phasing through obstructions - "npc_dota_hero_legion_commander" "0" - "npc_dota_hero_phantom_assassin" "0" - "npc_dota_hero_pangolier" "0" - - // Tanky - "npc_dota_hero_bristleback" "0" - "npc_dota_hero_dragon_knight" "0" - "npc_dota_hero_sven" "0" - "npc_dota_hero_tidehunter" "0" - "npc_dota_hero_tiny" "0" - "npc_dota_hero_treant" "0" - - // Fighter - "npc_dota_hero_juggernaut" "0" - "npc_dota_hero_kunkka" "0" - "npc_dota_hero_templar_assassin" "0" - "npc_dota_hero_troll_warlord" "0" - - // Archer - "npc_dota_hero_clinkz" "0" - "npc_dota_hero_drow_ranger" "0" - "npc_dota_hero_medusa" "0" - - // Wizard - "npc_dota_hero_crystal_maiden" "0" - "npc_dota_hero_dazzle" "0" - "npc_dota_hero_invoker" "0" - "npc_dota_hero_jakiro" "0" - "npc_dota_hero_keeper_of_the_light" "0" - "npc_dota_hero_leshrac" "0" - "npc_dota_hero_lina" "0" - "npc_dota_hero_necrolyte" "0" - "npc_dota_hero_shadow_shaman" "0" - "npc_dota_hero_venomancer" "0" - "npc_dota_hero_weaver" "0" - "npc_dota_hero_zuus" "0" - - // Rogue - "npc_dota_hero_bounty" "0" - "npc_dota_hero_riki" "0" -} diff --git a/aghanim_singleplayer/scripts/npc/npc_abilities_custom.txt b/aghanim_singleplayer/scripts/npc/npc_abilities_custom.txt deleted file mode 100755 index f3f17c3..0000000 --- a/aghanim_singleplayer/scripts/npc/npc_abilities_custom.txt +++ /dev/null @@ -1,23552 +0,0 @@ -// Dota Heroes File -"DOTAAbilities" -{ - "Version" "1" - - - //================================================================================================================= - // Ability: Ability Capture - //================================================================================================================= - "ability_aghsfort_capture" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityCastAnimation" "ACT_DOTA_GENERIC_CHANNEL_1" - "MaxLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "300" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "base_capture_time" "6.0" - } - } - } - - //================================================================================================================= - // Phased - //================================================================================================================= - "phased" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/phased" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - } - - //================================================================================================================= - // Story Crystal - //================================================================================================================= - "story_crystal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/story_crystal" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - } - - //================================================================================================================= - // Unselectable - //================================================================================================================= - "ability_unselectable" - { - "BaseClass" "ability_datadriven" - "AbilityName" "ability_unselectable" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - "Modifiers" - { - "modifier_unselectable" - { - "IsHidden" "1" - "Passive" "1" - - "States" - { - "MODIFIER_STATE_UNSELECTABLE" "MODIFIER_STATE_VALUE_ENABLED" - } - } - } - } - - //================================================================================================================= - // No Vision - //================================================================================================================= - "no_vision" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "BaseClass" "ability_datadriven" - "IsOnCastBar" "0" - "Modifiers" - { - "modifier_no_vision" - { - "Passive" "1" - "States" - { - "MODIFIER_STATE_BLIND" "MODIFIER_STATE_VALUE_ENABLED" - } - } - } - } - - //================================================================================================================= - // Creature: Announcer Passive - //================================================================================================================= - "aghanim_announcer_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/aghanim_announcer_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - } - - //================================================================================================================= - // Creature: Dummy Caster Passive - //================================================================================================================= - "dummy_caster_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/dummy_caster_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - } - - //================================================================================================================= - // Creature: Dummy Target Passive - //================================================================================================================= - "dummy_target_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/dummy_target_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - } - - //================================================================================================================= - // No health bar - //================================================================================================================= - "no_health_bar" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - - "BaseClass" "ability_datadriven" - - "IsOnCastBar" "0" - - "Modifiers" - { - "modifier_no_health_bar" - { - "Passive" "1" - "IsHidden" "1" - "States" - { - "MODIFIER_STATE_NO_HEALTH_BAR" "MODIFIER_STATE_VALUE_ENABLED" - } - } - } - } - - //================================================================================================================= - // Provides FOW Position - //================================================================================================================= - "provides_fow_position" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "terrorblade_reflection" - "ScriptFile" "abilities/provides_fow_position" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Explosive Barrel - //================================================================================================================= - "aghsfort_explosive_barrel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityType" "DOTA_ABILITY_TYPE_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "MaxLevel" "19" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "0 150 240 330 420 510 600 690 780 870 960 1050 1140 1230 1320 1410 1500 1590 1680" //"150 400 850 1500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "425" - } - "03" - { - "var_type" "FIELD_INTEGER" - "vision_radius" "500" - } - "04" - { - "var_type" "FIELD_FLOAT" - "vision_duration" "3.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "model_scale" "0 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108" //"0 30 60 90" // Percentage over model scale - } - "06" - { - "var_type" "FIELD_FLOAT" - "detonate_delay" "1.5" - } - } - } - - //================================================================================================================= - // Aggro On Damage - //================================================================================================================= - "aggro_on_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/aggro_on_damage" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Absolute No CC - //================================================================================================================= - "ability_absolute_no_cc" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "terrorblade_reflection" - "ScriptFile" "abilities/ability_absolute_no_cc" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Attack rate is unslowable - //================================================================================================================= - "ability_attack_speed_unslowable" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "terrorblade_reflection" - "ScriptFile" "abilities/ability_attack_speed_unslowable" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "attack_speed_reduction_pct" "0" - } - } - } - - //================================================================================================================= - // Move speed is unslowable - //================================================================================================================= - "ability_move_speed_unslowable" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "terrorblade_reflection" - "ScriptFile" "abilities/ability_move_speed_unslowable" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "move_speed_reduction_pct" "20" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ability_ascension" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ability_ascension" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_magic_resist" "0" //"0 5 10 15 20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "min_bonus_armor" "0" //"0 1 1 2 2" - } - "03" - { - "var_type" "FIELD_FLOAT" - "max_bonus_armor" "0" //"0 8 16 24 32" - } - "04" - { - "var_type" "FIELD_FLOAT" - "crit_chance" "0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "crit_multiplier" "0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "bonus_attack_speed" "0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "bonus_hp" "0 15 30 45 60" - } - "08" - { - "var_type" "FIELD_FLOAT" - "bonus_cooldown" "0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "bonus_outgoing_damage" "0 20 40 60 80" //"0 10 20 30 40" - } - "10" - { - "var_type" "FIELD_FLOAT" - "attack_speed_reduction_pct" "50" - } - "11" - { - "var_type" "FIELD_FLOAT" - "move_speed_reduction_pct" "50" - } - - "12" - { - "var_type" "FIELD_FLOAT" - "act_1_modifier" "-10 -10 0 0 0" - } - "13" - { - "var_type" "FIELD_FLOAT" - "act_2_modifier" "-5 -5 0 0 0" - } - - } - } - - //================================================================================================================= - // Ascension: Flicker - //================================================================================================================= - "ascension_flicker" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_flicker" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "MaxLevel" "1" - "IsOnCastBar" "0" - "AbilityTextureName" "antimage_blink" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "7.0" - "AbilityManaCost" "0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "range" "600" - } - } - } - - - //================================================================================================================= - // Ability: Used to increase difficulty of enemies - //================================================================================================================= - "ascension_magic_resist" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_magic_resist" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "mudgolem_cloak_aura" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_magic_resist" "25" - } - } - } - - - //================================================================================================================= - // Ability: Used to increase difficulty of enemies - //================================================================================================================= - "ascension_magic_immunity" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_magic_immunity" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "MaxLevel" "5" - "AbilityCooldown" "25" - "IsOnCastBar" "0" - "AbilityTextureName" "modifier_magicimmune" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - } - "02" - { - "var_type" "FIELD_FLOAT" - "model_scale" "40" - } - } - } - - //================================================================================================================= - // Ability: Used to increase difficulty of enemies - //================================================================================================================= - "ascension_armor_sapping" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_armor_sapping" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_UNRESTRICTED" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "phantom_assassin_armor_corruption_debuff" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "6" - } - "02" - { - "var_type" "FIELD_FLOAT" - "armor_reduction_per_stack" "1 1.5 2 3 4" - } - "03" - { - "var_type" "FIELD_FLOAT" - "model_scale_per_stack" "8" - } - } - } - - //================================================================================================================= - // Ability: Used to increase difficulty of enemies - //================================================================================================================= - "ascension_crit" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_crit" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "phantom_assassin_coup_de_grace" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "crit_chance" "25" - } - "02" - { - "var_type" "FIELD_FLOAT" - "crit_multiplier" "200" - } - } - } - - //================================================================================================================= - // Ability: Used to increase difficulty of enemies - //================================================================================================================= - "ascension_drunken" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_drunken" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "brewmaster_drunken_brawler" - "AbilityCooldown" "20" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "dodge_chance" "33" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "75" - } - "03" - { - "var_type" "FIELD_INTEGER" - "crit_multiplier" "250" - } - "04" - { - "var_type" "FIELD_INTEGER" - "min_movement" "-30" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_movement" "30" - } - "06" - { - "var_type" "FIELD_FLOAT" - "duration" "5" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ascension_armor" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_armor" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "hoplite_bull_rush" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "min_bonus_armor" "5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "max_bonus_armor" "15" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ascension_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_damage" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "ember_spirit_sleight_of_fist" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_outgoing_damage" "30" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ascension_heal_suppression" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_heal_suppression" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "necrolyte_heartstopper_aura" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "heal_suppression_pct" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ascension_chilling_touch" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_chilling_touch" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "ancient_apparition_chilling_touch" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "slow" "8" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "0.5" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ascension_extra_fast" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_extra_fast" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "clinkz_wind_walk" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_move_speed" "25" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ascension_vampiric" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_vampiric" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "life_stealer_feast" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "lifesteal_pct" "200" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "3.5" - } - } - } - - //================================================================================================================= - // Ability: Ascenion. Used to increase difficulty of enemies - //================================================================================================================= - "ascension_attack_speed" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_attack_speed" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "clinkz_strafe" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "150" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "8" - } - } - } - - //================================================================================================================= - // Ascension Ability: Firefly - //================================================================================================================= - "aghsfort_ascension_firefly" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "batrider_firefly" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_pct_per_second" "12" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "100" - } - "04" - { - "var_type" "FIELD_FLOAT" - "pool_duration" "12" - } - "05" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "0.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "tree_radius" "100" - } - "07" - { - "var_type" "FIELD_FLOAT" - "trail_placement_duration" "5" - } - "08" - { - "var_type" "FIELD_FLOAT" - "burn_linger_duration" "0.5" - } - } - } - - //================================================================================================================= - // Ascension ability: Silence - //================================================================================================================= - "aghsfort_ascension_silence" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_DeathProphet.Silence" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "IsOnCastBar" "0" - "AbilityTextureName" "death_prophet_silence" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - "AbilityDuration" "4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "375" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "3.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "windup_time" "2.0" - } - } - } - - - //================================================================================================================= - // Temple Guardian: Wrath - //================================================================================================================= - "ascension_temple_guardian_wrath" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/temple_guardian_wrath" - "AbilityTextureName" "omniknight_guardian_angel" - "MaxLevel" "5" - "IsOnCastBar" "0" - - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25" - "AbilityChannelTime" "3.0" - "AbilityCastPoint" "1.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "effect_radius" "2500" - } - "02" - { - "var_type" "FIELD_FLOAT" - "delay" "1.25" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - } - "04" - { - "var_type" "FIELD_INTEGER" - "blast_damage" "400" //"600" - } - "05" - { - "var_type" "FIELD_FLOAT" - "channel_duration" "3.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "interval" "0.2" - } - "07" - { - "var_type" "FIELD_FLOAT" - "block_cooldown" "0.001" - } - } - } - - //================================================================================================================= - // Ascension: Chakram Dance - //================================================================================================================= - "ascension_timbersaw_chakram_dance" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "shredder_chakram" - "ScriptFile" "abilities/creatures/boss_timbersaw_chakram_dance" - "MaxLevel" "5" - "IsOnCastBar" "0" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityCastPoint" "2.0" - - "IsOnCastBar" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - "AbilityChannelTime" "13" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "num_chakrams" "2" - } - "02" - { - "var_type" "FIELD_FLOAT" - "interval" "8.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "short_range" "1500" - } - "04" - { - "var_type" "FIELD_INTEGER" - "long_range" "2500" - } - "05" - { - "var_type" "FIELD_INTEGER" - "spawn_interval" "1.2" - } - "06" - { - "var_type" "FIELD_INTEGER" - "spawn_count" "4" - } - "07" - { - "var_type" "FIELD_FLOAT" - "radius" "200" - } - "08" - { - "var_type" "FIELD_INTEGER" - "pass_damage" "6" - } - "09" - { - "var_type" "FIELD_FLOAT" - "pass_slow_duration" "1.2" - } - "10" - { - "var_type" "FIELD_INTEGER" - "slow_health_percentage" "0" - } - "11" - { - "var_type" "FIELD_INTEGER" - "slow" "30" - } - } - } - - //================================================================================================================= - // Ascension: Plasma Field - //================================================================================================================= - "ascension_plasma_field" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_UNRESTRICTED" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Ability.PlasmaField" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "razor_plasma_field" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "0" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_min" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_max" "17" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed" "420" // 1.5 second to reach radius - } - "05" - { - "var_type" "FIELD_INTEGER" - "slow_min" "5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "slow_max" "15" - } - "07" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "1.0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "windup_time" "1.0" - } - } - } - - //================================================================================================================= - // Ability: Ascension Bulwark - //================================================================================================================= - "ascension_bulwark" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "mars_bulwark" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "physical_damage_reduction" "25" - } - "02" - { - "var_type" "FIELD_INTEGER" - "forward_angle" "120" - } - "03" - { - "var_type" "FIELD_INTEGER" - "physical_damage_reduction_side" "0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "side_angle" "120" - } - } - } - - //================================================================================================================= - // Ascension: Bomb - //================================================================================================================= - "ascension_bomb" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/ascension_bomb" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_UNRESTRICTED" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "MaxLevel" "5" - "IsOnCastBar" "0" - "AbilityTextureName" "techies_land_mines" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "450" - } - "03" - { - "var_type" "FIELD_FLOAT" - "min_delay_time" "2.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "max_delay_time" "2.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "is_ascension_ability" "1" - } - } - } - - - //================================================================================================================= - // Arc Warden: Magnetic Field - //================================================================================================================= - "aghsfort_ascension_magnetic_field" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_ArcWarden.MagneticField.Cast" - "AbilityTextureName" "arc_warden_magnetic_field" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_AW_MAGNETIC_FIELD" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastPoint" "0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "evasion_chance" "75" - } - } - } - - //================================================================================================================= - // Treasure Chest - //================================================================================================================= - "treasure_chest" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/treasure_chest" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - } - - //================================================================================================================= - // Generic: Gold Bag Fountain 1000g - //================================================================================================================= - "generic_gold_bag_fountain_1000" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "BaseClass" "ability_datadriven" - "AbilityTextureName" "item_hand_of_midas" - - "IsOnCastBar" "0" - - "OnOwnerDied" - { - "CreateThinker" - { - "ModifierName" "gold_bag_thinker" - "Target" - { - "Center" "CASTER" - "Flags" "DOTA_UNIT_TARGET_FLAG_DEAD" - } - } - - } - - "Modifiers" - { - "gold_bag_thinker" - { - "Duration" "3" - "ThinkInterval" ".075" - "OnIntervalThink" - { - "CreateItem" - { - "Target" - { - "Center" "TARGET" - } - "ItemName" "item_bag_of_gold" - "ItemCount" "1" - "SpawnRadius" "25" - "ItemChargeCount" "%gold_value" - "AutoUse" "1" - "LaunchHeight" "300" - "LaunchDistance" "?50 350" - "LaunchDuration" "0.75" - } - } - } - } - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "gold_value" "25" - } - } - } - - //================================================================================================================= - // Generic: Gold Bag Fountain 2000g - //================================================================================================================= - "generic_gold_bag_fountain_2000" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "BaseClass" "ability_datadriven" - "AbilityTextureName" "item_hand_of_midas" - - "IsOnCastBar" "0" - - "OnOwnerDied" - { - "CreateThinker" - { - "ModifierName" "gold_bag_thinker" - "Target" - { - "Center" "CASTER" - "Flags" "DOTA_UNIT_TARGET_FLAG_DEAD" - } - } - - } - - "Modifiers" - { - "gold_bag_thinker" - { - "Duration" "3" - "ThinkInterval" ".075" - "OnIntervalThink" - { - "CreateItem" - { - "Target" - { - "Center" "TARGET" - } - "ItemName" "item_bag_of_gold" - "ItemCount" "1" - "SpawnRadius" "25" - "ItemChargeCount" "%gold_value" - "AutoUse" "1" - "LaunchHeight" "300" - "LaunchDistance" "?50 350" - "LaunchDuration" "0.75" - } - } - } - } - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "gold_value" "50" - } - } - } - - //================================================================================================================= - // Generic: Gold Bag Fountain 4000g - //================================================================================================================= - "generic_gold_bag_fountain_4000" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "BaseClass" "ability_datadriven" - "AbilityTextureName" "item_hand_of_midas" - - "IsOnCastBar" "0" - - "OnOwnerDied" - { - "CreateThinker" - { - "ModifierName" "gold_bag_thinker" - "Target" - { - "Center" "CASTER" - "Flags" "DOTA_UNIT_TARGET_FLAG_DEAD" - } - } - - } - - "Modifiers" - { - "gold_bag_thinker" - { - "Duration" "3" - "ThinkInterval" ".075" - "OnIntervalThink" - { - "CreateItem" - { - "Target" - { - "Center" "TARGET" - } - "ItemName" "item_bag_of_gold" - "ItemCount" "1" - "SpawnRadius" "25" - "ItemChargeCount" "%gold_value" - "AutoUse" "1" - "LaunchHeight" "300" - "LaunchDistance" "?50 350" - "LaunchDuration" "0.75" - } - } - } - } - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "gold_value" "100" - } - } - } - - //================================================================================================================= - // Generic: Gold Bag Fountain 8000g - //================================================================================================================= - "generic_gold_bag_fountain_8000" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "BaseClass" "ability_datadriven" - "AbilityTextureName" "item_hand_of_midas" - - "IsOnCastBar" "0" - - "OnOwnerDied" - { - "CreateThinker" - { - "ModifierName" "gold_bag_thinker" - "Target" - { - "Center" "CASTER" - "Flags" "DOTA_UNIT_TARGET_FLAG_DEAD" - } - } - - } - - "Modifiers" - { - "gold_bag_thinker" - { - "Duration" "3" - "ThinkInterval" ".075" - "OnIntervalThink" - { - "CreateItem" - { - "Target" - { - "Center" "CASTER" - "Flags" "DOTA_UNIT_TARGET_FLAG_DEAD" - } - "ItemName" "item_bag_of_gold" - "ItemCount" "1" - "SpawnRadius" "25" - "ItemChargeCount" "%gold_value" - "AutoUse" "1" - "LaunchHeight" "300" - "LaunchDistance" "?50 350" - "LaunchDuration" "0.75" - } - } - } - } - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "gold_value" "200" - } - } - } - - //================================================================================= - // Not On Minimap - //================================================================================= - "modifier_no_minimap" - { - // General - //------------------------------------------------------------------------------------- - "BaseClass" "ability_datadriven" - "AbilityName" "modifier_no_minimap" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - "Modifiers" - { - "modifier_no_minimap" - { - "Passive" "1" - "States" - { - "MODIFIER_STATE_NOT_ON_MINIMAP" "MODIFIER_STATE_VALUE_ENABLED" - } - } - } - } - - //================================================================================= - // Invulnerable - //================================================================================= - "modifier_invulnerable" - { - // General - //------------------------------------------------------------------------------------- - "BaseClass" "ability_datadriven" - "AbilityName" "modifier_invulnerable" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - "Modifiers" - { - "modifier_invulnerable" - { - "Passive" "1" - "States" - { - "MODIFIER_STATE_INVULNERABLE" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_NO_HEALTH_BAR" "MODIFIER_STATE_VALUE_ENABLED" - } - } - } - } - - //================================================================================= - // Pudge Miniboss Passive - //================================================================================= - "creature_pudge_miniboss_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/creature_pudge_miniboss_passive" - "AbilityTextureName" "phantom_assassin_armor_corruption_debuff" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "IsOnCastBar" "0" - } - - - //================================================================================= - // 75% status resistance passive - //================================================================================= - "creature_generic_high_status_resist_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/creature_generic_high_status_resist_passive" - - "IsOnCastBar" "0" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - } - - //================================================================================================================= - // Trap Unselectable - //================================================================================================================= - "trap_unselectable" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - - "BaseClass" "ability_datadriven" - - "IsOnCastBar" "0" - - "Modifiers" - { - "modifier_unselectable" - { - "Passive" "1" - "States" - { - "MODIFIER_STATE_UNSELECTABLE" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_NO_UNIT_COLLISION" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_NOT_ON_MINIMAP" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_PROVIDES_VISION" "MODIFIER_STATE_VALUE_DISABLED" - "MODIFIER_STATE_ROOTED" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_DISARMED" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_INVULNERABLE" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_LOW_ATTACK_PRIORITY" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_BLOCK_DISABLED" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_NO_HEALTH_BAR" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_OUT_OF_GAME" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_BLIND" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_FLYING_FOR_PATHING_PURPOSES_ONLY" "MODIFIER_STATE_VALUE_ENABLED" - } - } - } - } - - //================================================================================================================= - // Spike Trap - //================================================================================================================= - "spike_trap" - { - "BaseClass" "ability_lua" - "ScriptFile" "abilities/traps/spike_trap" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityCastAnimation" "ACT_DOTA_ATTACK" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "0.45" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "150" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "light_strike_array_aoe" "160" - } - - "02" - { - "var_type" "FIELD_FLOAT" - "light_strike_array_delay_time" "0.65" - } - - "03" - { - "var_type" "FIELD_FLOAT" - "light_strike_array_stun_duration" "1.6" - } - "04" - { - "var_type" "FIELD_INTEGER" - "cast_animation" "12" - } - "05" - { - "var_type" "FIELD_INTEGER" - "light_strike_array_damage" "600" - } - } - } - - //================================================================================================================= - // Fire Trap: Breathe Fire - //================================================================================================================= - "breathe_fire" - { - "BaseClass" "ability_lua" - "ScriptFile" "abilities/traps/breathe_fire" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "9999" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "start_radius" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "end_radius" "60" - } - "03" - { - "var_type" "FIELD_INTEGER" - "range" "9999" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed" "1050" - } - "05" - { - "var_type" "FIELD_FLOAT" - "max_hp_pct_damage" "25.0 34.0 50.0 100.0" // set by ascension level in breathe_fire.lua - } - } - } - - //================================================================================================================= - // Arrow Trap: Arrow - //================================================================================================================= - "arrow" - { - "BaseClass" "ability_lua" - "ScriptFile" "abilities/traps/arrow" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityCastAnimation" "ACT_DOTA_ATTACK" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "9999" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Damage - //------------------------------------------------------------------------------------------------------------- - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "start_radius" "70" - } - "02" - { - "var_type" "FIELD_INTEGER" - "end_radius" "70" - } - "03" - { - "var_type" "FIELD_INTEGER" - "range" "9999" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed" "850 950 950 1050" // scales with ascension level - } - "05" - { - "var_type" "FIELD_FLOAT" - "max_hp_pct_damage" "50.0 50.0 100.0 100.0" // scales with ascension level - } - } - } - - //================================================================================================================= - // Treasure Trap: Land Mine - //================================================================================================================= - "creature_techies_land_mine" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/creature_techies_land_mine" - "AbilityTextureName" "techies_land_mines" - "MaxLevel" "10" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "210" - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "30" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "proximity_threshold" "1.6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "400 500 600 700 800 900 1000 1100 1200 1300" - } - "04" - { - "var_type" "FIELD_FLOAT" - "burn_duration" "0.5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "building_damage_pct" "25" - } - "06" - { - "var_type" "FIELD_FLOAT" - "activation_delay" "1.75" - } - } - } - - //================================================================================================================= - // Treasure Trap: Sun Strike - //================================================================================================================= - "trap_sun_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "invoker_sun_strike" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "MaxLevel" "10" - "HotKeyOverride" "T" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Invoker.SunStrike.Charge" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.05" - "AbilityCooldown" "0" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "delay" "1.7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "area_of_effect" "175" - } - "03" - { - "var_type" "FIELD_FLOAT" - "damage" "300 400 500 600 700 800 900 1000 1100 1200" - "levelkey" "exortlevel" - } - "04" - { - "var_type" "FIELD_INTEGER" - "vision_distance" "400" - } - "05" - { - "var_type" "FIELD_FLOAT" - "vision_duration" "4.0" - } - } - } - - //================================================================================================================= - // Pendulum Swing - //================================================================================================================= - "pendulum_swing" - { - "BaseClass" "ability_lua" - "ScriptFile" "abilities/traps/pendulum_swing" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityCastAnimation" "ACT_DOTA_IDLE" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "60000" - "AbilityCastPoint" "0" - "AbilityChannelTime" "999999" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.0" // Modifier just delays damage - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "max_hp_pct_damage" "25.0 34.0 50.0 100.0" // scales with ascension level - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "60" - } - } - } - - //================================================================================================================= - // Creature: Shadow Wave - //================================================================================================================= - "creature_shadow_wave" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "dazzle_shadow_wave" - "ScriptFile" "abilities/creatures/creature_shadow_wave" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - - "IsOnCastBar" "0" - - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "1.8" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "100" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bounce_radius" "475" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "max_targets" "4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage" "150" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Dazzle: Poison Touch - //================================================================================================================= - "creature_poison_touch" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "dazzle_poison_touch" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Dazzle.Poison_Touch" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "400" - "AbilityCastPoint" "0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.35" // Can apply multiple modifiers - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "start_radius" "200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "end_radius" "200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "end_distance" "900" - } - "04" - { - "var_type" "FIELD_INTEGER" - "targets" "2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage" "20" - } - "06" - { - "var_type" "FIELD_INTEGER" - "slow" "-33" - } - "07" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "800" - } - "08" - { - "var_type" "FIELD_FLOAT" - "duration" "5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Creature: Shallow Grave - //================================================================================================================= - "creature_shallow_grave" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "dazzle_shallow_grave" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Dazzle.Shallow_Grave" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_SHALLOW_GRAVE" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "700" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "3.0" - } - } - } - - //================================================================================================================= - // Creature: Inner Fire - //================================================================================================================= - "creature_inner_fire" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "huskar_inner_fire" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilitySound" "Hero_Huskar.Inner_Vitality" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "500" - "AbilityCastPoint" "0.2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.0" // already gets credit for the healing - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "03" - { - "var_type" "FIELD_FLOAT" - "disarm_duration" "2.5" - } - "04" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "550" - } - "05" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.6" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Creature: Burning Spears - //================================================================================================================= - "creature_burning_spears" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "huskar_burning_spear" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AUTOCAST | DOTA_ABILITY_BEHAVIOR_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilitySound" "Hero_Huskar.Burning_Spear" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "0.0 0.0 0.0 0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0 0.0 0.0 0.0" - "AbilityDuration" "5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0 0 0 0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "health_cost" "5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "burn_damage" "5 10 15 20" - "LinkedSpecialBonus" "special_bonus_unique_huskar_2" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Creature: Berserker's Blood - //================================================================================================================= - "creature_berserkers_blood" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "huskar_berserkers_blood" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "maximum_attack_speed" "100" - } - "02" - { - "var_type" "FIELD_INTEGER" - "maximum_health_regen" "37.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hp_threshold_max" "20" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Creature: Life Break - //================================================================================================================= - "creature_life_break" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "huskar_life_break" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Huskar.Life_Break" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0 0 0" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "350" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityDuration" "3" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "health_cost_percent" "0.40" - } - "02" - { - "var_type" "FIELD_FLOAT" - "health_damage" "0.40" - } - "03" - { - "var_type" "FIELD_INTEGER" - "charge_speed" "900" - } - "04" - { - "var_type" "FIELD_INTEGER" - "tooltip_health_damage" "20 20 20" - } - "05" - { - "var_type" "FIELD_INTEGER" - "tooltip_health_cost_percent" "25 30 35" - "CalculateSpellDamageTooltip" "1" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movespeed" "-60" - } - "07" - { - "var_type" "FIELD_FLOAT" - "slow_durtion_tooltip" "3" - } - "08" - { - "var_type" "FIELD_FLOAT" - "taunt_duration" "2.5" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Hellbear Smash - //================================================================================================================= - "hellbear_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/hellbear_smash" - "AbilityTextureName" "polar_furbolg_ursa_warrior_thunder_clap" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "MaxLevel" "2" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.25" - "AbilityCooldown" "6.0" - "AbilityDamage" "250" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "255" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-20" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "3.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage" "250" - } - } - } - - - //================================================================================================================= - // Creature: Ogre Tank Melee Smash - //================================================================================================================= - "ogre_tank_melee_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ogre_tank_melee_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "500" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" // Activity - "AnimationPlaybackRate" "1.0" // Animation speed multiplier - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2.5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "225" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.75" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "1800" - } - "04" - { - "var_type" "FIELD_FLOAT" - "base_swing_speed" "1.0" - } - } - } - - //================================================================================================================= - // Creature: Ogre Tank Jump Smash - //================================================================================================================= - "ogre_tank_jump_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ogre_tank_jump_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "150" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "290" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "1800" - } - "04" - { - "var_type" "FIELD_FLOAT" - "jump_speed" "1.8" - } - } - } - - //================================================================================================================= - // Ability: Ogre Magi Bloodlust - //================================================================================================================= - "ogre_magi_channelled_bloodlust" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ogre_magi_channelled_bloodlust" - "AbilityTextureName" "ogre_magi_bloodlust" - - "AbilityCastAnimation" "ACT_DOTA_VICTORY" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CREEP | DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "0.56" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "3.0" // was 4.0 - "AbilityChannelTime" "10.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "8" - } - - "02" - { - "var_type" "FIELD_FLOAT" - "modelscale" "10" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "interrupted_cooldown" "4" - } - } - } - - //================================================================================================================= - // Ogre Magi Area Ignite - //================================================================================================================= - "ogre_magi_area_ignite" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ogre_magi_area_ignite" - "AbilityTextureName" "ogre_magi_ignite" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - "IsOnCastBar" "0" - - "MaxLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.45" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "linger_duration" "1.0" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "burn_damage" "250" - } - - "03" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed_pct" "-30" - } - - "04" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "700" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "275" - } - "06" - { - "var_type" "FIELD_FLOAT" - "area_duration" "2.0" - } - } - } - - //================================================================================================================= - // Creature: Baby Ogre Tank Melee Smash - //================================================================================================================= - "baby_ogre_tank_melee_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/baby_ogre_tank_melee_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "350" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" // Activity - "AnimationPlaybackRate" "1.0" // Animation speed multiplier - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2.5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "150" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.75" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "600" - } - "04" - { - "var_type" "FIELD_FLOAT" - "base_swing_speed" "1.0" - } - } - } - - //================================================================================================================= - // Creature: Baby Ogre Tank Jump Smash - //================================================================================================================= - "baby_ogre_tank_jump_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/baby_ogre_tank_jump_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "150" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "225" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "600" - } - "04" - { - "var_type" "FIELD_FLOAT" - "jump_speed" "1.8" - } - } - } - - //================================================================================================================= - // Creature: Baby Ogre Magi Area Ignite - //================================================================================================================= - "baby_ogre_magi_area_ignite" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/baby_ogre_magi_area_ignite" - "AbilityTextureName" "ogre_magi_ignite" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - "IsOnCastBar" "0" - - "MaxLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.45" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "2" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "burn_damage" "175" - } - - "03" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed_pct" "-30" - } - - "04" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "700" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "275" - } - "06" - { - "var_type" "FIELD_FLOAT" - "area_duration" "2.0" - } - } - } - - //================================================================================================================= - // Ability: Ogre Tank Boss Melee Smash - //================================================================================================================= - "ogre_tank_boss_melee_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ogre_tank_boss_melee_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "570" //"583" // regular version: 500 - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" // Activity - "AnimationPlaybackRate" "1.0" // Animation speed multiplier - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "242" //"250" // regular version: 200 - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0" // regular version: 1.0 - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "2000" // regular version: 750 - } - "04" - { - "var_type" "FIELD_FLOAT" - "base_swing_speed" "1.0" - } - } - } - - //================================================================================================================= - // Ability: Ogre Tank Boss Jump Smash - //================================================================================================================= - "ogre_tank_boss_jump_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ogre_tank_boss_jump_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "150" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" // Activity - "AnimationIgnoresModelScale" "1" - //"AnimationPlaybackRate" "1.0" // default 1.0 - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "3.75" // regular: 5.25 - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "4.0" // regular: 4.0 - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "3000" - } - "04" - { - "var_type" "FIELD_FLOAT" - "jump_speed" "1.5" // regular: 1.8 - } - } - } - - //================================================================================================================= - // Ogre Seer Area Ignite - //================================================================================================================= - "ogre_seer_area_ignite" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "ogre_magi_ignite" - "ScriptFile" "abilities/creatures/ogre_seer_area_ignite" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - "IsOnCastBar" "0" - - "MaxLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.45" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "linger_duration" "1.0" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "burn_damage" "300" - } - - "03" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed_pct" "-30" - } - - "04" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "700" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "275" // magi's: 275 - } - "06" - { - "var_type" "FIELD_FLOAT" - "area_duration" "5.0" // magi's: 2.0 - } - } - } - - //================================================================================================================= - // Lina Creature: Flamestrike - //================================================================================================================= - "creature_flamestrike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" // | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "MaxLevel" "1" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - "AbilitySound" "Creature.Flamestrike.Charge" - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" - "AbilityCastPoint" "1.0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "AbilityCooldown" "7" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "delay" "2.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "225" - } - "03" - { - "var_type" "FIELD_FLOAT" - "damage" "450" - } - "04" - { - "var_type" "FIELD_INTEGER" - "vision_distance" "400" - } - "05" - { - "var_type" "FIELD_FLOAT" - "vision_duration" "4.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "ground_burn_duration" "4.0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "0.5" - } - "08" - { - "var_type" "FIELD_INTEGER" - "burn_dps" "100" - } - "09" - { - "var_type" "FIELD_INTEGER" - "burn_radius" "275" - } - } - } - - //================================================================================================================= - // Pine Cone: Shield Bash - //================================================================================================================= - "pine_cone_shield_bash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN | DOTA_ABILITY_BEHAVIOR_DONT_CANCEL_CHANNEL" - - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Mars.Shield.Cast" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityCastRange" "350" - "AbilityCastPoint" "1.25" - //"AbilityChannelTime" "1.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "7" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_mult" "500 600" - "LinkedSpecialBonus" "special_bonus_unique_mars_gods_rebuke_extra_crit" - } - "02" - { - "var_type" "FIELD_INTEGER" - "angle" "90" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "04" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.3" - } - "05" - { - "var_type" "FIELD_FLOAT" - "knockback_distance" "300" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_slow" "25" - } - "07" - { - "var_type" "FIELD_FLOAT" - "knockback_slow_duration" "3" - } - "08" - { - "var_type" "FIELD_FLOAT" - "activity_duration" "2" - } - "09" - { - "var_type" "FIELD_FLOAT" - "scepter_cooldown" "3.5" - "RequiresScepter" "1" - } - "10" - { - "var_type" "FIELD_FLOAT" - "anim_playback_speed" "0.5" - } - } - } - - //================================================================================================================= - // Assault Captain Sun Ray - //================================================================================================================= - "assault_captain_sun_ray" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "phoenix_sun_ray" - "AbilityTextureName" "phoenix_sun_ray" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Phoenix.SunRay.Cast" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1300" - "AbilityCastPoint" "0.01" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15.0" - "AbilityDuration" "5.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "hp_cost_perc_per_second" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "base_damage" "250" - } - "03" - { - "var_type" "FIELD_FLOAT" - "hp_perc_damage" "6.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "base_heal" "200" - } - "05" - { - "var_type" "FIELD_FLOAT" - "hp_perc_heal" "5.0" - } - - "06" - { - "var_type" "FIELD_INTEGER" - "radius" "130" - } - "07" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "0.2" - } - "08" - { - "var_type" "FIELD_FLOAT" - "forward_move_speed" "250" // 250 - } - "09" - { - "var_type" "FIELD_INTEGER" - "beam_range" "1300" - } - "10" - { - "var_type" "FIELD_FLOAT" - "turn_rate_initial" "250" - } - "11" - { - "var_type" "FIELD_FLOAT" - "turn_rate" "25" - } - "12" - { - "var_type" "FIELD_INTEGER" - "tooltip_duration" "6" - } - } - } - - //================================================================================================================= - // Assault Captain: Searing Chains - //================================================================================================================= - "assault_captain_searing_chains" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ember_spirit_searing_chains" - "AbilityTextureName" "ember_spirit_searing_chains" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_EmberSpirit.SearingChains.Target" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "400" - "AbilityCastPoint" "1.0" - - //"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AnimationPlaybackRate" "1.0" - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "18.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "2.0" - "LinkedSpecialBonus" "special_bonus_unique_ember_spirit_2" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "03" - { - "var_type" "FIELD_INTEGER" - "chains_damage" "300" - } - "04" - { - "var_type" "FIELD_INTEGER" - "total_damage_tooltip" "600" - } - "05" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "1.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "unit_count" "10" - } - } - } - - //================================================================================================================= - // Catapult: Attack - //================================================================================================================= - "catapult_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "BaseClass" "ability_datadriven" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - //"AbilityCastMinimumRange" "500" // Not hooked up? Added hook in vscript to check min range. - "AbilityCastPoint" "0.7" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4.5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "1.0" - - "OnSpellStart" - { - "LinearProjectile" - { - "EffectName" "particles/creatures/catapult/catapult_projectile.vpcf" - //"EffectName" "particles/dev/library/base_linear_projectile_model.vpcf" - "MoveSpeed" "%speed" - "StartPosition" "attach_attack1" - "StartRadius" "%collision_radius" - "EndRadius" "%collision_radius" - "TargetTeams" "DOTA_UNIT_TARGET_TEAM_NONE" - "TargetTypes" "DOTA_UNIT_TARGET_NONE" - "TargetFlags" "DOTA_UNIT_TARGET_FLAG_NONE" - "HasFrontalCone" "0" - "ProvidesVision" "1" - "VisionRadius" "300" - } - "CreateThinker" - { - "ModifierName" "target_effect_thinker" - "Target" "POINT" - } - "FireSound" - { - "EffectName" "Creep_Bad_Engine.Attack" - "Target" "CASTER" - } - "FireSound" - { - "EffectName" "Hero_Batrider.Flamebreak" - "Target" "CASTER" - } - } - - "OnProjectileFinish" - { - "FireSound" - { - "EffectName" "Catapult.Impact" - "Target" "POINT" - } - "Damage" - { - "Target" - { - "Center" "PROJECTILE" - "Teams" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "Radius" "%explosion_radius" - } - "Type" "DAMAGE_TYPE_MAGICAL" - "Damage" "%damage" - } - "Knockback" - { - "Target" - { - "Center" "PROJECTILE" - "Teams" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "Radius" "%explosion_radius" - } - "Center" "PROJECTILE" - "Distance" "%knockback_max_distance" - "IsFixedDistance" "1" - "Height" "%knockback_height" - "Duration" "%knockback_duration" - } - } - - "Modifiers" - { - "target_effect_thinker" - { - "Duration" "3" - - "OnCreated" - { - "AttachEffect" - { - "EffectName" "particles/econ/events/darkmoon_2017/darkmoon_generic_aoe.vpcf" - "EffectAttachType" "follow_origin" - "Target" "TARGET" - "ControlPoints" - { - "00" "0 0 0" - "01" "%explosion_radius 0 0" - "02" "6 0 1" - "03" "200 0 0" - "04" "0 0 0" - } - } - } - } - } - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "1000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "explosion_radius" "300" - } - "03" - { - "var_type" "FIELD_INTEGER" - "collision_radius" "100" - } - "04" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "speed" "600" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_max_distance" "500" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "100" - } - "08" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.5" - } - "09" - { - "var_type" "FIELD_INTEGER" - "mindistance" "500" - } - - } - } - - //================================================================================================================= - // Ability: Urn Upheaval - //================================================================================================================= - "urn_upheaval" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_AOE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_Warlock.Upheaval" - "AbilityCastAnimation" "ACT_INVALID" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0" - "AbilityChannelTime" "8.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0 0 0 0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "aoe" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "slow_rate_duration" "3.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "0.5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "max_slow" "84" - } - } - } - - //================================================================================================================= - // Upheaval Urn Reincarnation - //================================================================================================================= - "upheaval_urn_reincarnation" - { - // General - //------------------------------------------------------------------------------------------------------------- - "IsOnCastBar" "0" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - "AbilitySound" "Hero_SkeletonKing.Reincarnate" - - //"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.5" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.2" // Slow isn't the main function of this ability. - - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "reincarnate_time" "9.0" - } - } - } - - //================================================================================================================= - // Upheaval Urn: Incoming Damage Rules - //================================================================================================================= - "upheaval_urn_incoming_damage_rules" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/upheaval_urn_incoming_damage_rules" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "IsOnCastBar" "0" - } - - //================================================================================================================= - // Gyrocopter: Multi Homing Missile - //================================================================================================================= - "gyrocopter_multi_homing_missile" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "850" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "200" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "hits_to_kill_tooltip" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "tower_hits_to_kill_tooltip" "2" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5" - "LinkedSpecialBonus" "special_bonus_unique_gyrocopter_6" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attack_speed_bonus_pct" "400" - } - "05" - { - "var_type" "FIELD_INTEGER" - "min_damage" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "max_distance" "1500" - } - "07" - { - "var_type" "FIELD_INTEGER" - "pre_flight_time" "6" - } - "08" - { - "var_type" "FIELD_INTEGER" - "hero_damage" "100" - } - "09" - { - "var_type" "FIELD_FLOAT" - "speed" "550" - } - "10" - { - "var_type" "FIELD_INTEGER" - "acceleration" "20" - } - "11" - { - "var_type" "FIELD_INTEGER" - "enemy_vision_time" "4" - } - "12" - { - "var_type" "FIELD_INTEGER" - "AbilityCharges" "" - "LinkedSpecialBonus" "special_bonus_unique_gyrocopter_1" - } - "13" - { - "var_type" "FIELD_INTEGER" - "multi_search_radius" "350" - } - "14" - { - "var_type" "FIELD_INTEGER" - "max_rockets" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Pangolier: Gyroshell - //================================================================================================================= - "aghsfort_pangolier_gyroshell" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "pangolier_gyroshell" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "FightRecapLevel" "1" - "IsCastableWhileHidden" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "1.2" - "AbilityCastAnimation" "ACT_DOTA_GENERIC_CHANNEL_1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "70" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "200 275 350" - - "precache" - { - "model" "models/heroes/pangolier/pangolier_gyroshell.vmdl" - "model" "models/heroes/pangolier/pangolier_gyroshell2.vmdl" - } - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "cast_time_tooltip" "1.2" - } - "02" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "0.05" - } - "03" - { - "var_type" "FIELD_FLOAT" - "forward_move_speed" "400" - } - "04" - { - "var_type" "FIELD_FLOAT" // used after any break in the roll (start/jump/bounce) - "turn_rate_boosted" "165" - } - "05" - { - "var_type" "FIELD_FLOAT" - "turn_rate" "120" - } - "06" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "07" - { - "var_type" "FIELD_INTEGER" - "hit_radius" "150" - } - "08" - { - "var_type" "FIELD_FLOAT" - "bounce_duration" "0.4" - } - "09" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0 1.25 1.5" - } - "10" - { - "var_type" "FIELD_INTEGER" - "knockback_radius" "150" - } - "11" - { - "var_type" "FIELD_FLOAT" - "duration" "40.0" - "LinkedSpecialBonus" "special_bonus_unique_pangolier_6" - } - "12" - { - "var_type" "FIELD_FLOAT" - "jump_recover_time" "0.25" - } - } - } - - //================================================================================================================= - // Evil Greevil Passive - //================================================================================================================= - "evil_greevil_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/evil_greevil_passive" - - "IsOnCastBar" "0" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - } - - //================================================================================================================= - // Ability: Drow Ranger: Multishot - //================================================================================================================= - "aghsfort_drow_ranger_multishot" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "drow_ranger_multishot" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_DIRECTIONAL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - "AbilityChannelTime" "3.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "arrow_count" "18" - } - "02" - { - "var_type" "FIELD_INTEGER" - "arrow_damage_pct" "125" - "LinkedSpecialBonus" "special_bonus_unique_drow_ranger_1" - } - "03" - { - "var_type" "FIELD_FLOAT" - "arrow_slow_duration" "1.25" - } - "04" - { - "var_type" "FIELD_INTEGER" - "arrow_width" "90" - } - "05" - { - "var_type" "FIELD_INTEGER" - "arrow_speed" "750" - } - "06" - { - "var_type" "FIELD_FLOAT" - "arrow_range_multiplier" "1.75" - } - "07" - { - "var_type" "FIELD_INTEGER" - "arrow_angle" "90" - } - "08" - { - "var_type" "FIELD_INTEGER" - "effective_range" "1000" - } - } - "AbilityCastAnimation" "ACT_DOTA_CHANNEL_ABILITY_3" - } - - //================================================================================================================= - // Ability: Drow Ranger Wave of Silence - //================================================================================================================= - "aghsfort_drow_ranger_wave_of_silence" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "drow_ranger_wave_of_silence" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_DrowRanger.Silence" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" - "AbilityCastPoint" "0.25" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "13" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "wave_speed" "800.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "wave_width" "250" - } - "03" - { - "var_type" "FIELD_FLOAT" - "silence_duration" "5" - "LinkedSpecialBonus" "special_bonus_unique_drow_ranger_4" - } - "04" - { - "var_type" "FIELD_FLOAT" - "knockback_distance_max" "600" - } - "05" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Aghsfort Shadow Demon Shadow Poison - //================================================================================================================= - "aghsfort_shadow_demon_shadow_poison" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_ShadowDemon.ShadowPoison" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityDuration" "7" - "AbilityCooldown" "3.0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1050" - "AbilityCastPoint" "0.25" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.0" // modifier is damage only. - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "stack_damage" "75" - } - "02" - { - "var_type" "FIELD_INTEGER" - "max_multiply_stacks" "10" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_stack_damage" "75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "200" - } - "05" - { - "var_type" "FIELD_INTEGER" - "speed" "400" - } - "06" //Damage that is applied every time shadow poison is applied. - { - "var_type" "FIELD_FLOAT" - "hit_damage" "50" - } - "07" - { - "var_type" "FIELD_INTEGER" - "release_at_max_stacks" "20" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Aghsfort Shadow Demon: Shadow Demon Disruption - //================================================================================================================= - "aghsfort_shadow_demon_disruption" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "shadow_demon_disruption" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY | DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_ShadowDemon.Disruption" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityDuration" "2.0" - "AbilityCooldown" "15.0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1050" - "AbilityCastPoint" "0.3" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "disruption_duration" "2.0" - "LinkedSpecialBonus" "special_bonus_unique_shadow_demon_5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "illusion_duration" "5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "illusion_outgoing_damage" "-70.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "illusion_outgoing_tooltip" "30.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "illusion_incoming_damage" "250" - } - "06" - { - "var_type" "FIELD_FLOAT" - "tooltip_total_illusion_incoming_damage" "350" - } - "07" - { - "var_type" "FIELD_INTEGER" - "AbilityCharges" "" - "LinkedSpecialBonus" "special_bonus_unique_shadow_demon_7" - } - "08" - { - "var_type" "FIELD_INTEGER" - "illusion_bounty_base" "0" - } - "09" - { - "var_type" "FIELD_INTEGER" - "illusion_bounty_growth" "0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Doom Bringer: Infernal Blade - //================================================================================================================= - "creature_doom_infernal_blade" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "doom_bringer_infernal_blade" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AUTOCAST | DOTA_ABILITY_BEHAVIOR_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_DoomBringer.InfernalBlade.Target" - "HasScepterUpgrade" "1" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - "AbilityManaCost" "0" - "AbilityCastRange" "175" - "AbilityCastPoint" "0.0 0.0 0.0 0.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "burn_damage" "20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "burn_damage_pct" "4" - "LinkedSpecialBonus" "special_bonus_unique_doom_1" - } - "03" - { - "var_type" "FIELD_FLOAT" - "burn_duration" "5.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "ministun_duration" "1.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "ministun_duration_scepter" "1.75" - "RequiresScepter" "1" - } - "06" - { - "var_type" "FIELD_FLOAT" - "burn_duration_scepter" "6.0" - "RequiresScepter" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Doom Bringer: Doom - //================================================================================================================= - "creature_doom_bringer_doom" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "doom_bringer_doom" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "FightRecapLevel" "2" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.5" - "AbilityCastRange" "550" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "60.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "6.0" - "LinkedSpecialBonus" "special_bonus_unique_doom_7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "50" - "LinkedSpecialBonus" "special_bonus_unique_doom_5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "deniable_pct" "0" - } - } - } - - //================================================================================================================= - // AghsFort Shadow Shaman: Shackles - //================================================================================================================= - "aghsfort_shadow_shaman_shackles" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityChannelTime" "3" - "AbilityCooldown" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "0.1" - } - "02" - { - "var_type" "FIELD_FLOAT" - "total_damage" "500" - } - "03" - { - "var_type" "FIELD_FLOAT" - "channel_time" "3" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Mushroom Split - based on the rock golem's split ability - //================================================================================================================= - "mushroom_split" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/mushroom_split" - - "IsOnCastBar" "0" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityTextureName" "dark_seer_wall_of_replica" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "unit_count" "4" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spawn_radius" "10" - } - "03" - { - "var_type" "FIELD_FLOAT" - "knockback_duration_min" "1.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "knockback_duration_max" "1.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "knockback_distance_min" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance_max" "300" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height_min" "100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "knockback_height_max" "200" - } - } - } - - //================================================================================================================= - // Pugna: Nether Ward - //================================================================================================================= - "aghsfort_pugna_nether_ward" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilitySound" "Hero_Pugna.NetherWard" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.2" - "AbilityCastRange" "150" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35.0 35.0 35.0 35.0" - "AbilityDuration" "18 22 26 30" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "80 80 80 80" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "1600" - } - "02" - { - "var_type" "FIELD_INTEGER" - "base_damage" "50" - } - "03" - { - "var_type" "FIELD_FLOAT" - "mana_multiplier" "1.0 1.25 1.50 1.75" - "LinkedSpecialBonus" "special_bonus_unique_pugna_3" - } - "04" - { - "var_type" "FIELD_FLOAT" - "mana_regen" "-0.6 -0.8 -1.0 -1.2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attacks_to_destroy_tooltip" "4 4 4 4" - "LinkedSpecialBonus" "special_bonus_unique_pugna_6" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Ranged Quill Attack - //================================================================================================================= - "ranged_quill_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "BaseClass" "ability_lua" - "AbilityTextureName" "ranged_quill_attack" - "ScriptFile" "abilities/creatures/ranged_quill_attack" - "MaxLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_ATTACK" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1500" - "AbilityCastPoint" "0.75" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "700" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "attack_width_initial" "75" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attack_width_end" "75" - } - - "04" - { - "var_type" "FIELD_INTEGER" - "attack_distance" "1500" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attack_damage" "300" - } - } - } - - //================================================================================= - // Boss Visage: Passive - //================================================================================= - "boss_visage_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/boss_visage_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "stone_threshold" "4500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "soul_assumption_count" "8" - } - "03" - { - "var_type" "FIELD_INTEGER" - "soul_assumption_damage" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "soul_assumption_speed" "600" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stone_duration" "7.5" - } - - "06" - { - "var_type" "FIELD_INTEGER" - "soul_assumption_radius" "100" - } - - "07" - { - "var_type" "FIELD_FLOAT" - "familiar_wake_interval" "6.0" - } - } - } - - //================================================================================================================= - // Boss Visage: Ranged Attack - //================================================================================================================= - "boss_visage_ranged_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "BaseClass" "ability_lua" - "AbilityTextureName" "boss_visage_ranged_attack" - "ScriptFile" "abilities/creatures/boss_visage_ranged_attack" - "MaxLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_ATTACK" - - "IsOnCastBar" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "0.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "650" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "attack_width_initial" "75" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attack_width_end" "75" - } - - "04" - { - "var_type" "FIELD_INTEGER" - "attack_distance" "3000" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attack_damage" "700" - } - } - } - - //================================================================================================================= - // Boss Visage: Grave Chill - //================================================================================================================= - "boss_visage_grave_chill" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "BaseClass" "ability_lua" - "AbilityTextureName" "boss_visage_grave_chill" - "ScriptFile" "abilities/creatures/boss_visage_grave_chill" - "MaxLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_ATTACK" - - "IsOnCastBar" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "0.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "chill_speed" "500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "chill_radius" "100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "chill_count" "10" - } - "04" - { - "var_type" "FIELD_FLOAT" - "chill_duration" "5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "chill_damage" "400" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movespeed_bonus" "25" - } - "07" - { - "var_type" "FIELD_INTEGER" - "attackspeed_bonus" "50" - } - - } - } - - //================================================================================================================= - // Boss Visage: Familiar stone Form - //================================================================================================================= - "boss_visage_familiar_stone_form" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "boss_visage_familiar_stone_form" - "ScriptFile" "abilities/creatures/boss_visage_familiar_stone_form" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "AbilityCastRange" "160" - "AbilityCastPoint" "0.0" - "MaxLevel" "1" - "AbilitySound" "Visage_Familiar.StoneForm.Cast" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "200" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_delay" "1.00" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "200" - } - "04" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.75" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - - //================================================================================================================= - // Monkey King: Jingu Mastery Active (Aghanim's Fortress) - //================================================================================================================= - "monkey_king_jingu_mastery_aghsfort" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/heroes/monkey_king_jingu_mastery_aghsfort" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_MonkeyKing.IronCudgel" - "AbilityTextureName" "monkey_king_jingu_mastery_aghsfort" - "AbilityCastAnimation" "ACT_INVALID" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "26 22 18 14" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "80 90 100 110" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_hits" "4" - } - "02" - { - "var_type" "FIELD_INTEGER" - "counter_duration" "10" - } - "03" - { - "var_type" "FIELD_INTEGER" - "charges" "4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "60 90 120 150" - "LinkedSpecialBonus" "special_bonus_unique_monkey_king_2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "lifesteal" "15 30 45 60" - } - "06" - { - "var_type" "FIELD_INTEGER" - "max_duration" "10" - } - } - } - - //================================================================================================================= - // Brewmaster Thunderclap - //================================================================================================================= - "aghsfort_brewmaster_thunderclap" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/aghsfort_brewmaster_thunderclap" - "AbilityTextureName" "polar_furbolg_ursa_warrior_thunder_clap" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "MaxLevel" "2" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.3" - "AbilityCooldown" "11.0" - "AbilityDamage" "250" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-20" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "3.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage" "250" - } - "06" - { - "var_type" "FIELD_FLOAT" - "speed" "0.5" - } - } - } - - //================================================================================================================= - // Brewmaster: Primal Split - //================================================================================================================= - "aghsfort_brewmaster_primal_split" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/aghsfort_brewmaster_primal_split" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Brewmaster.PrimalSplit.Spawn" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "HasScepterUpgrade" "1" - - "IsOnCastBar" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "2.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "16 18 20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "split_duration" "0.6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "scepter_movementspeed" "100" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Brewmaster Fire: Permanent Immolation - //================================================================================================================= - "creature_brewmaster_fire_permanent_immolation" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "brewmaster_fire_permanent_immolation" - "AbilityTextureName" "brewmaster_fire_permanent_immolation" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "25" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "220" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Brewmaster Unit Passive - //================================================================================================================= - "brewmaster_unit_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/brewmaster_unit_passive" - - "IsOnCastBar" "0" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - } - - - //================================================================================================================= - // Naga Siren: Mirror Image - //================================================================================================================= - "aghsfort_naga_siren_mirror_image" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/aghsfort_naga_siren_mirror_image" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilitySound" "Hero_NagaSiren.MirrorImage" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.65" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "illusion_duration" "26" - } - "02" - { - "var_type" "FIELD_INTEGER" - "outgoing_damage" "-75 -70 -65 -60" - "LinkedSpecialBonus" "special_bonus_unique_naga_siren_4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "outgoing_damage_tooltip" "25 30 35 40" - "LinkedSpecialBonus" "special_bonus_unique_naga_siren_4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "incoming_damage" "250" - } - "05" - { - "var_type" "FIELD_INTEGER" - "tooltip_incoming_damage_total_pct" "350" - } - "06" - { - "var_type" "FIELD_INTEGER" - "images_count" "3 3 3 3" - "LinkedSpecialBonus" "special_bonus_unique_naga_siren" - } - "07" - { - "var_type" "FIELD_FLOAT" - "invuln_duration" "0.3" - } - } - } - - //================================================================================================================= - // Tidehunter Passive - //================================================================================================================= - "tidehunter_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/tidehunter_passive" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "damage_counter_duration" "5.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_threshold" "3000" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_counter_tiers" "6" - } - "04" - { - "var_type" "FIELD_FLOAT" - "time_before_reduction" "1.5" - } - } - } - - //================================================================================================================= - // Tidehunter: Mini Ravage - //================================================================================================================= - "tidehunter_mini_ravage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "tidehunter_ravage" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "2" - "AbilitySound" "Ability.Ravage" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "1000" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "1200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "725" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "1.0" - } - } - } - - //================================================================================================================= - // Luna: Lucent Beam (Aghanim's Fortress) - //================================================================================================================= - "aghsfort_luna_lucent_beam" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "aghsfort_luna_lucent_beam" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Luna.LucentBeam.Target" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "6.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "90 100 110 120" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // Mostly about the damage - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.8" - } - "02" - { - "var_type" "FIELD_INTEGER" - "beam_damage" "75 150 225 300" - "LinkedSpecialBonus" "special_bonus_unique_luna_1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "225" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Luna: Eclipse (Aghanim's Fortress) - //================================================================================================================= - "aghsfort_luna_eclipse" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "luna_eclipse" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Luna.Eclipse.Cast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.6 0.6 0.6" - "AbilityCastRange" "0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "140.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "150 200 250" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "beams" "8 11 14" - } - "02" - { - "var_type" "FIELD_INTEGER" - "hit_count" "5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "beam_interval" "0.6 0.6 0.6" - } - "04" - { - "var_type" "FIELD_FLOAT" - "beam_interval_scepter" "0.3" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration_tooltip" "2.4 4.2 6.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "radius" "675 675 675" - } - "07" - { - "var_type" "FIELD_INTEGER" - "beams_scepter" "10 15 20" - } - "08" - { - "var_type" "FIELD_INTEGER" - "hit_count_scepter" "10 15 20" - } - "09" - { - "var_type" "FIELD_FLOAT" - "duration_tooltip_scepter" "1.8 3.6 5.4" - } - "10" - { - "var_type" "FIELD_INTEGER" - "cast_range_tooltip_scepter" "2500" - } - "11" - { - "var_type" "FIELD_INTEGER" - "lucent_beam_radius" "225" - } - } - } - - //================================================================================================================= - // Omniknight: Regen Aura - //================================================================================================================= - "aghsfort_omniknight_degen_aura" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_AURA" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityTextureName" "omniknight_degen_aura" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "400 500 600 700" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "move_speed_bonus" "16 20 24 28" - "LinkedSpecialBonus" "special_bonus_unique_omniknight_2" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_speed_bonus" "40 60 80 100" - "LinkedSpecialBonus" "special_bonus_unique_omniknight_2" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "450" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - //================================================================================================================= - // Omniknight: Repel - //================================================================================================================= - "aghsfort_omniknight_repel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "omniknight_repel" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Omniknight.Repel" - - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "500" - "AbilityCastPoint" "0.25" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "24 22 20 18" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "55 60 65 70" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "3.0" // Value much higher than cost. - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "15" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "-10 -15 -20 -25" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_str" "10 20 30 40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "hp_regen" "6 12 18 24" - "LinkedSpecialBonus" "special_bonus_unique_omniknight_5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // START REWARD AURAS - //================================================================================================================= - - "aghsfort_aura_reward_hp" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "granite_golem_hp_aura" - "MaxLevel" "5" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_hp" "10 25 40 60 100" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "5000" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - "aghsfort_aura_reward_armor" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "pangolier_shield_crash" - "MaxLevel" "5" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "3 6 12 24 32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "5000" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - "aghsfort_aura_reward_crit_chance" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "juggernaut_blade_dance" - "MaxLevel" "5" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "15" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_multiplier" "140 175 225 325 450" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - - "aghsfort_aura_reward_magic_resist" - { - // General - //------------------------------------------------------------------------------------------------------------- - "MaxLevel" "5" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityTextureName" "mudgolem_cloak_aura" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_magical_armor" "15 25 35 55 75" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_magical_armor_creeps" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "5000" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // END REWARD AURAS - //================================================================================================================= - - - //================================================================================================================= - // START REWARD TEMP BUFFS - //================================================================================================================= - - "aghsfort_tempbuff_corpse_explosion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityTextureName" "pudge_flesh_heap" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "5000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "corpse_explosion_chance_pct" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "corpse_explosion_damage_pct" "25" - } - "04" - { - "var_type" "FIELD_INTEGER" - "corpse_explosion_radius" "400" - } - - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // END REWARD TEMP BUFFS - //================================================================================================================= - - //================================================================================================================= - // Undead Tusk Mage Tombstone - //================================================================================================================= - "undead_tusk_mage_tombstone" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "undead_tusk_mage_tombstone" - "ScriptFile" "abilities/creatures/undead_tusk_mage_tombstone" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "FightRecapLevel" "1" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilitySound" "Hero_Undying.Tombstone" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - "AnimationPlaybackRate" "0.5" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "2.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "30.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "600" - } - "03" - { - "var_type" "FIELD_FLOAT" - "skeleton_interval" "3.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "skeletons_per_tick" "1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_skeletons" "8" - } - } - } - - //================================================================================================================= - // Creature Dark Seer: Vacuum - //================================================================================================================= - "creature_dark_seer_vacuum" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "dark_seer_vacuum" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Dark_Seer.Vacuum" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "550" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "0.6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "300" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius_tree" "275" - } - "05" - { - "var_type" "FIELD_INTEGER" - "scepter_cooldown" "12" - "RequiresScepter" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - - //================================================================================================================= - // Creature Dark Seer: Wall of Replica - //================================================================================================================= - "creature_dark_seer_wall_of_replica" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "dark_seer_wall_of_replica" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_VECTOR_TARGETING" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Dark_Seer.Wall_of_Replica_Start" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.2" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "15.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "replica_damage_outgoing" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "tooltip_outgoing" "70 85 100" - } - "04" - { - "var_type" "FIELD_INTEGER" - "replica_damage_incoming" "100" - } - "05" - { - "var_type" "FIELD_INTEGER" - "tooltip_replica_total_damage_incoming" "200" - "CalculateSpellDamageTooltip" "0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "width" "1300" - } - "07" - { - "var_type" "FIELD_INTEGER" - "replica_scale" "0" - } - "08" - { - "var_type" "FIELD_INTEGER" - "movement_slow" "50" - } - "09" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0.75" - } - "10" - { - "var_type" "FIELD_FLOAT" - "scepter_length_multiplier" "2" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Lich: Sinister Gaze - //================================================================================================================= - "creature_lich_sinister_gaze" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "lich_sinister_gaze" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_CANCEL_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "HasScepterUpgrade" "1" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityChannelTime" "2.5" - "AbilityCooldown" "16" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "2.5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "destination" "65" - } - "03" - { - "var_type" "FIELD_INTEGER" - "mana_drain" "0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "cast_range" "600" - } - "05" - { - "var_type" "FIELD_INTEGER" - "aoe_scepter" "400" - "RequiresScepter" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Creature Lich: Chain Frost - //================================================================================================================= - "creature_lich_chain_frost" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "lich_chain_frost" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Lich.ChainFrost" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "750" - "AbilityCastPoint" "0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.0" // Primarily about the damage - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "1000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "jumps" "10" - } - "03" - { - "var_type" "FIELD_INTEGER" - "jump_range" "600" - } - "04" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed" "-65" - } - "05" - { - "var_type" "FIELD_INTEGER" - "slow_attack_speed" "-65" - } - "06" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "2.5" - } - "07" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "600" - } - "08" - { - "var_type" "FIELD_INTEGER" - "vision_radius" "800" - } - "09" - { - "var_type" "FIELD_INTEGER" - "bonus_jump_damage" "0" - } - } - } - - //================================================================================================================= - // Tusk Mage Freezing Blast - //================================================================================================================= - "aghsfort_tusk_mage_freezing_blast" - { - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/tusk_mage_freezing_blast" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - //"AbilitySound" "Hero_Crystal.frostbite" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "750" - "AbilityCastPoint" "1.2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // Applies multiple modifiers - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "impact_damage" "125" - } - "02" - { - "var_type" "FIELD_FLOAT" - "projectile_speed" "500" - } - "03" - { - "var_type" "FIELD_FLOAT" - "projectile_radius" "100" - } - "04" - { - "var_type" "FIELD_FLOAT" - "projectile_distance" "1000" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-15" - } - "06" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-125" - } - "07" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "1.3" - } - } - } - - //================================================================================================================= - // Ogreseal Flop - //================================================================================================================= - "ogreseal_flop" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ogreseal_flop" - "AbilityTextureName" "ogreseal_flop" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "IsOnCastBar" "0" - - "MaxLevel" "2" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "6" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "550" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0" - } - } - } - - //================================================================================================================= - // Friendly Ogre Seal Flop - //================================================================================================================= - "friendly_ogreseal_flop" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/friendly_ogreseal_flop" - "AbilityTextureName" "ogreseal_flop" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "IsOnCastBar" "0" - - "MaxLevel" "2" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "6" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "275" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "130" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.5" - } - } - } - - //================================================================================================================= - // Bomber: Death Explosion - //================================================================================================================= - "bomber_death_explosion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bomber_death_explosion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "03" - { - "var_type" "FIELD_FLOAT" - "min_delay_time" "2.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "max_delay_time" "2.25" - } - "05" - { - "var_type" "FIELD_FLOAT" - "is_ascension_ability" "0" - } - } - } - - //================================================================================================================= - // Bomber: Suicide On Attack - //================================================================================================================= - "bomber_suicide_on_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bomber_suicide_on_attack" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "suicide_chance" "15" - } - } - } - - //================================================================================================================= - // Pudge Miniboss: Hateful Strike - //================================================================================================================= - "creature_pudge_miniboss_hateful_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilitySound" "Hero_PhantomAssassin.CoupDeGrace" - - "IsOnCastBar" "0" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "maxhp_percent_damage" "70" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "every_n_attacks" "3" - } - } - } - - //================================================================================================================= - // Creature Pudge Dismember - //================================================================================================================= - "creature_pudge_dismember" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "pudge_dismember" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "2" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - "AbilityDraftUltScepterAbility" "pudge_eject" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityChannelAnimation" "ACT_DOTA_CHANNEL_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityChannelTime" "2.5" - "AbilityCooldown" "18" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "dismember_damage" "250" - "LinkedSpecialBonus" "special_bonus_unique_pudge_3" - "LinkedSpecialBonusField" "value" - } - "02" - { - "var_type" "FIELD_FLOAT" - "strength_damage" "0" - "LinkedSpecialBonus" "special_bonus_unique_pudge_3" - "LinkedSpecialBonusField" "value2" - "CalculateSpellDamageTooltip" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "ticks" "3.0" - "LinkedSpecialBonus" "special_bonus_unique_pudge_6" - "LinkedSpecialBonusField" "value2" - } - "04" - { - "var_type" "FIELD_INTEGER" - "pull_units_per_second" "125" - } - "05" - { - "var_type" "FIELD_INTEGER" - "pull_distance_limit" "350" - } - "06" - { - "var_type" "FIELD_FLOAT" - "animation_rate" "1.5" - } - "07" - { - "var_type" "FIELD_INTEGER" - "abilitychanneltime" "" - "LinkedSpecialBonus" "special_bonus_unique_pudge_6" - } - "08" - { - "var_type" "FIELD_INTEGER" - "creep_dismember_duration_tooltip" "6.0 6.0 6.0" - } - "09" - { - "var_type" "FIELD_INTEGER" - "scepter_regen_pct" "4" - "RequiresScepter" "1" - } - "10" - { - "var_type" "FIELD_FLOAT" - "order_lock_duration" "3" - "RequiresScepter" "1" - } - "11" - { - "var_type" "FIELD_INTEGER" - "scepter_cooldown" "11" - "RequiresScepter" "1" - } - } - } - - - //================================================================================================================= - // Pudge Miniboss: Flesh Heap - //================================================================================================================= - "creature_pudge_miniboss_flesh_heap" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "pudge_flesh_heap" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "health_regen" "0 8 16 32" - } - "02" - { - "var_type" "FIELD_FLOAT" - "flesh_heap_strength_buff_amount" "0 0 0 0" - "LinkedSpecialBonus" "special_bonus_unique_pudge_1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "flesh_heap_range" "1200" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - - //================================================================================================================= - // Pudge Miniboss: Armor Corruption - //================================================================================================================= - "creature_pudge_miniboss_armor_corruption" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - - "IsOnCastBar" "0" - - "AbilityCooldown" "3" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "armor_reduction_per_stack" "1.0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stack_duration" "10" - } - } - } - - //================================================================================================================= - // Wave Blast - //================================================================================================================= - "aghsfort_wave_blast" - { - // General - //------------------------------------------------------------------------------------------------------------- - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - "IsOnCastBar" "0" - - "AbilitySound" "Hero_Invoker.DeafeningBlast" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - "AbilityCastPoint" "0.7" - "AbilityCastAnimation" "ACT_INVALID" - - - "AbilityManaCost" "0" - "AbilityCooldown" "0" - "AbilityCharges" "1" - "AbilityChargeRestoreTime" "4" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "travel_distance" "1200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "travel_speed" "600" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius_start" "120" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius_end" "120" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage" "400" - } - "06" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.2" - } - "07" - { - "var_type" "FIELD_FLOAT" - "disarm_duration" "0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "wave_cooldown" "5.75" - } - "09" - { - "var_type" "FIELD_FLOAT" - "animation_fade_in" "0.0" - } - "10" - { - "var_type" "FIELD_FLOAT" - "playback_rate" "0.75" - } - - - } - //"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Ability: Waveblaster Leap Leap - //================================================================================================================= - "aghsfort_waveblaster_leap" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Ability.Leap" - "AbilityTextureName" "sandking_caustic_finale" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8.0" - "AbilityCharges" "1" - "AbilityChargeRestoreTime" "8.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "min_range" "1300" - } - "02" - { - "var_type" "FIELD_INTEGER" - "range" "2000" - } - "03" - { - "var_type" "FIELD_FLOAT" - "leap_speed" "1300.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "leap_acceleration" "6000.0" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Waveblaster: Summon Ghost - //================================================================================================================= - "aghsfort_waveblaster_summon_ghost" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "kunkka_torrent" - "ScriptFile" "abilities/creatures/aghsfort_waveblaster_summon_ghost" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // applies 2 modifiers - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "spawn_count" "3" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spawn_distance" "150" - } - "03" - { - "var_type" "FIELD_FLOAT" - "spawn_delay" "1.5" - } - } - } - - //================================================================================================================= - // Kunkka: Torrent Dark Moon - //================================================================================================================= - "kunkka_torrent_dm" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "kunkka_torrent" - "ScriptFile" "abilities/creatures/kunkka_torrent_dm" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1500" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "600" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // applies 2 modifiers - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "225" - "LinkedSpecialBonus" "special_bonus_unique_kunkka" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movespeed_bonus" "-35" - } - "03" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "1.75 2.5 3.25 4.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.6" - } - "05" - { - "var_type" "FIELD_FLOAT" - "delay" "1.6 1.6 1.6 1.6" - } - } - } - - //================================================================================================================= - // Creature: Kraken Shell - //================================================================================================================= - "creature_kraken_shell" - { - "BaseClass" "tidehunter_kraken_shell" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_cleanse" "200" - } - "03" - { - "var_type" "FIELD_FLOAT" - "damage_reset_interval" "6.0 6.0 6.0 6.0" - } - } - } - - //================================================================================================================= - // Creature Tidehunter: Gush - //================================================================================================================= - "creature_tidehunter_gush" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_datadriven" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "HasScepterUpgrade" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.6" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - "AbilityDuration" "2.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "800" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Actions - //------------------------------------------------------------------------------------------------------------- - "OnSpellStart" - { - "LinearProjectile" - { - "Target" "POINT" - "EffectName" "particles/units/heroes/hero_tidehunter/tidehunter_gush_upgrade.vpcf" - "MoveSpeed" "%projectile_speed" - "StartPosition" "attach_attack2" - "StartRadius" "%aoe_scepter" - "EndRadius" "%aoe_scepter" - "TargetTeams" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "TargetTypes" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "TargetFlags" "DOTA_UNIT_TARGET_FLAG_NONE" - "HasFrontalCone" "0" - "ProvidesVision" "0" - "VisionRadius" "300" - } - "FireSound" - { - "EffectName" "Ability.GushCast" - } - } - - "OnProjectileHitUnit" - { - "DeleteOnHit" "false" - - "Damage" - { - "Type" "DAMAGE_TYPE_MAGICAL" - "Damage" "%damage" - "Target" "TARGET" - } - - "ApplyModifier" - { - "ModifierName" "modifier_tidehunter_gush" - "Duration" "%duration" - "Target" "TARGET" - } - - "Knockback" - { - "Target" "TARGET" - "Center" "PROJECTILE" //"CASTER" - "Duration" "0.5" //"%knockback_duration" - "Distance" "200" //"%knockback_max_distance" - "IsFixedDistance" "1" - "Height" "10" - } - } - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "-25" - } - "03" - { - "var_type" "FIELD_FLOAT" - "negative_armor" "10" - "LinkedSpecialBonus" "special_bonus_unique_tidehunter" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed_scepter" "200" - } - "05" - { - "var_type" "FIELD_INTEGER" - "aoe_scepter" "240" - } - "06" - { - "var_type" "FIELD_INTEGER" - "cooldown_scepter" "20" - } - "07" - { - "var_type" "FIELD_INTEGER" - "cast_range_scepter" "800" - } - "08" - { - "var_type" "FIELD_INTEGER" - "knockback_duration" "0.25" - } - "09" - { - "var_type" "FIELD_INTEGER" - "knockback_max_distance" "200" - } - "10" - { - "var_type" "FIELD_INTEGER" - "duration" "2" - } - "11" - { - "var_type" "FIELD_INTEGER" - "damage" "1000" - } - } - } - - //================================================================================================================= - // Bandit: Blink Strike - //================================================================================================================= - "creature_blink_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "riki_blink_strike" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilitySound" "Hero_Riki.Blink_Strike" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "tooltip_range" "700" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "400" - } - } - } - - //================================================================================================================= - // Bandit Captain: Stifling Dagger - //================================================================================================================= - "bandit_stifling_dagger" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bandit_stifling_dagger" - "AbilityTextureName" "phantom_assassin_stifling_dagger" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "10000" - "AbilityCastPoint" "1.1" - "AbilityChannelTime" "0.9" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityDuration" "4" - "AbilityCooldown" "14" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "move_slow" "-50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "dagger_speed" "550" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "base_damage" "0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attack_factor" "-30" - } - "06" - { - "var_type" "FIELD_INTEGER" - "attack_factor_tooltip" "70" - } - "07" - { - "var_type" "FIELD_INTEGER" - "dagger_count" "12" - } - "08" - { - "var_type" "FIELD_INTEGER" - "dagger_offset" "50" // 100 - } - "09" - { - "var_type" "FIELD_FLOAT" - "dagger_rate" "0.14" - } - "10" - { - "var_type" "FIELD_INTEGER" - "dagger_range" "1200" - } - } - } - - //================================================================================================================= - // Bandit Archer Arrow - //================================================================================================================= - "bandit_archer_arrow" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bandit_archer_arrow" - "AbilityTextureName" "mirana_arrow" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "MaxLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_ATTACK" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "4000" - "AbilityCastPoint" "1.2" // "1.334" - "AnimationPlaybackRate" "0.7" - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "700" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_width_initial" "100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attack_width_end" "100" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attack_distance" "4000" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attack_damage" "1000" - } - "06" - { - "var_type" "FIELD_FLOAT" - "duration" "3.0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "break_duration" "3.0" - } - } - } - - //================================================================================================================= - // Creature: Juggernaut Blade Fury - //================================================================================================================= - "creature_juggernaut_blade_fury" - { - "BaseClass" "juggernaut_blade_fury" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "17" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "blade_fury_damage_tick" "0.2" - "CalculateSpellDamageTooltip" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "blade_fury_radius" "250" - } - "03" - { - "var_type" "FIELD_INTEGER" - "blade_fury_damage" "300" - "LinkedSpecialBonus" "special_bonus_unique_juggernaut_3" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "5.0" - "LinkedSpecialBonus" "special_bonus_unique_juggernaut" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Creature: Juggernaut Omnislash - //================================================================================================================= - "creature_juggernaut_omnislash" - { - "BaseClass" "juggernaut_omni_slash" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "350" - "AbilityCastPoint" "0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.0" // damage only - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "attack_rate_multiplier" "1.7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "250" - "CalculateSpellDamageTooltip" "0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "3" - } - "04" - { - "var_type" "FIELD_INTEGER" - "omni_slash_radius" "425" - } - } - } - - //================================================================================================================= - // Sand King Boss Passive - //================================================================================================================= - "sand_king_boss_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "sandking_caustic_finale" - "ScriptFile" "abilities/creatures/sand_king_boss_passive" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "caustic_armor_reduction_pct" "20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "caustic_duration" "4.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "caustic_radius" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "caustic_damage" "1500" - } - "05" - { - "var_type" "FIELD_INTEGER" - "accuracy_pct" "50" - } - } - } - - //================================================================================================================= - // Sand King: Claw Attack - //================================================================================================================= - "sand_king_claw_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_claw_attack" - "AbilityCastAnimation" "ACT_DOTA_ATTACK" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "1.1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1.00" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "2500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "110" - } - "03" - { - "var_type" "FIELD_FLOAT" - "animation_time" "1.00" - } - "04" - { - "var_type" "FIELD_FLOAT" - "initial_delay" "0.85" - } - "05" - { - "var_type" "FIELD_INTEGER" - "forward_movement" "60" - } - } - } - - //================================================================================================================= - // Sand King: Tail Swipe Left - //================================================================================================================= - "sand_king_tail_swipe_left" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_tail_swipe_left" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "1.98" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "3500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "110" - } - "03" - { - "var_type" "FIELD_FLOAT" - "animation_time" "1.98" - } - "04" - { - "var_type" "FIELD_FLOAT" - "initial_delay" "1.5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "600" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-100" - } - "09" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-100" - } - "10" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "4.0" - } - } - } - - //================================================================================================================= - // Sand King: Tail Swipe Right - //================================================================================================================= - "sand_king_tail_swipe_right" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_tail_swipe_right" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "1.98" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "3500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "110" - } - "03" - { - "var_type" "FIELD_FLOAT" - "animation_time" "1.98" - } - "04" - { - "var_type" "FIELD_FLOAT" - "initial_delay" "1.5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "800" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-100" - } - "09" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-100" - } - "10" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "4.0" - } - } - } - - //================================================================================================================= - // Sand King: Burrowed Forward Tail - //================================================================================================================= - "sand_king_burrowed_forward_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_burrowed_forward_strike" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_7" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "2.75" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "4000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "125" - } - "03" - { - "var_type" "FIELD_FLOAT" - "animation_time" "3.5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "initial_delay" "2.4" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "4.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "0" - } - } - } - - //================================================================================================================= - // Sand King: Burrowed Backward Tail - //================================================================================================================= - "sand_king_burrowed_backward_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_burrowed_backward_strike" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_ROT" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "2.75" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "3500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "125" - } - "03" - { - "var_type" "FIELD_FLOAT" - "animation_time" "3.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "initial_delay" "2.4" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "2.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "0" - } - } - } - - //================================================================================================================= - // Sand King Boss: Burrow - //================================================================================================================= - "sand_king_boss_burrow" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/sand_king_boss_burrow" - "AbilityTextureName" "nyx_assassin_burrow" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "MaxLevel" "1" - "FightRecapLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_RAZE_1" - - "IsOnCastBar" "0" - - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "2.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Sand King Boss: Burrow strike - //================================================================================================================= - "sand_king_boss_burrowstrike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "sandking_burrowstrike" - "ScriptFile" "abilities/creatures/sand_king_boss_burrowstrike" - - "AbilityCastAnimation" "ACT_DOTA_SAND_KING_BURROW_IN" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityCastPoint" "0.8" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "speed" "1000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "1500" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "04" - { - "var_type" "FIELD_FLOAT" - "delay" "1.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "500" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "150" - } - "08" - { - "var_type" "FIELD_INTEGER" - "scaling_speed" "900" - } - } - } - - //================================================================================================================= - // Sand King Boss: Sand Storm - //================================================================================================================= - "sand_king_boss_sandstorm" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "sandking_sand_storm" - "ScriptFile" "abilities/creatures/sand_king_boss_sandstorm" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Ability.SandKing_SandStorm.start" - "AbilityCastAnimation" "ACT_DOTA_SPAWN" - "AbilityCastPoint" "2.0" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityDuration" "50" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "34" - "AbilityChannelTime" "15" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "500" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "60 50 40 30" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "sand_storm_invis_delay" "0.5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "sand_storm_radius" "700" - } - "03" - { - "var_type" "FIELD_FLOAT" - "channel_time" "15.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "storm_count_per_player" "1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "storm_angle_step" "30" - } - "06" - { - "var_type" "FIELD_INTEGER" - "storm_speed" "375" - } - "07" - { - "var_type" "FIELD_INTEGER" - "storm_speed_step" "40" - } - "08" - { - "var_type" "FIELD_INTEGER" - "spiral_storm_count" "12" - } - } - } - - //================================================================================================================= - // Sand King Boss: Sand Storm Passive - //================================================================================================================= - "sand_king_boss_sandstorm_storm_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "sandking_sand_storm" - "ScriptFile" "abilities/creatures/sand_king_boss_sandstorm_storm_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "sand_storm_radius" "165" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "800" - } - "03" - { - "var_type" "FIELD_INTEGER" - "movespeed_pct" "33" - } - "04" - { - "var_type" "FIELD_INTEGER" - "storm_move_speed" "325" - } - "05" - { - "var_type" "FIELD_FLOAT" - "blind_duration" "5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "storm_decreased_turn_rate" "150" - } - } - } - - //================================================================================================================= - // Sand King Boss: Epicenter - //================================================================================================================= - "sand_king_boss_epicenter" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "sandking_epicenter" - "ScriptFile" "abilities/creatures/sand_king_boss_epicenter" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityCastPoint" "2.0" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "34" - "AbilityChannelTime" "15" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "60" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "900" - } - "02" - { - "var_type" "FIELD_FLOAT" - "interval" "1.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "pulse_width" "110" - } - "04" - { - "var_type" "FIELD_INTEGER" - "pulse_distance" "5000" - } - "05" - { - "var_type" "FIELD_INTEGER" - "min_pulse_speed" "500" - } - "06" - { - "var_type" "FIELD_INTEGER" - "blocker_radius" "225" - } - "07" - { - "var_type" "FIELD_INTEGER" - "min_random_pulses" "7" - } - "08" - { - "var_type" "FIELD_INTEGER" - "max_random_pulses" "15" - } - "09" - { - "var_type" "FIELD_INTEGER" - "max_pulse_speed" "1000" - } - "10" - { - "var_type" "FIELD_INTEGER" - "speed_step" "100" - } - "11" - { - "var_type" "FIELD_INTEGER" - "pulse_end_width" "110" - } - "12" - { - "var_type" "FIELD_INTEGER" - "random_pulses_step" "3" - } - } - } - - //================================================================================================================= - // Sand King Boss: Unburrow - //================================================================================================================= - "sand_king_boss_unburrow" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/sand_king_boss_unburrow" - "AbilityTextureName" "nyx_assassin_unburrow" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "MaxLevel" "1" - "FightRecapLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_RAZE_2" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "2.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - } - - //================================================================================================================= - // Sand King Strafe Move Left - //================================================================================================================= - "sand_king_boss_move_left" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_boss_move_left" - "AbilityCastAnimation" "ACT_DOTA_RUN" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "550" - "AbilityCastPoint" "10" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "speed" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "minimum_duration" "0.75" - } - "03" - { - "var_type" "FIELD_FLOAT" - "maximum_duration" "1.0" - } - } - } - - //================================================================================================================= - // Sand King Strafe Move Right - //================================================================================================================= - "sand_king_boss_move_right" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_boss_move_right" - "AbilityCastAnimation" "ACT_DOTA_RUN" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "550" - "AbilityCastPoint" "10" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "speed" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "minimum_duration" "0.75" - } - "03" - { - "var_type" "FIELD_FLOAT" - "maximum_duration" "1.0" - } - } - } - - //================================================================================================================= - // Sand King Strafe Move Back - //================================================================================================================= - "sand_king_boss_move_back" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/sand_king_boss_move_back" - "AbilityCastAnimation" "ACT_DOTA_RUN" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "300" - "AbilityCastPoint" "10" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "speed" "350" - } - "02" - { - "var_type" "FIELD_FLOAT" - "minimum_duration" "0.75" - } - "03" - { - "var_type" "FIELD_FLOAT" - "maximum_duration" "1.0" - } - } - } - - //================================================================================================================= - // Nyx Suicide Heal - //================================================================================================================= - "nyx_suicide_heal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/nyx_suicide_heal" - "AbilityTextureName" "nyx_assassin_unburrow" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "200" - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "heal" "400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "350" - } - } - } - - //================================================================================================================= - // Burrower Big Explosion - //================================================================================================================= - "burrower_big_explosion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/burrower_big_explosion" - "AbilityTextureName" "polar_furbolg_ursa_warrior_thunder_clap" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.67" - "AbilityCooldown" "10" - "AbilityDamage" "400" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "3.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "1250" - } - } - } - - //================================================================================================================= - // Rock Unit - //================================================================================================================= - "ability_storegga_rock" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - - "BaseClass" "ability_datadriven" - - "IsOnCastBar" "0" - - "Modifiers" - { - "modifier_ability_storegga_rock" - { - "Passive" "1" - "States" - { - "MODIFIER_STATE_ROOTED" "MODIFIER_STATE_VALUE_ENABLED" - "MODIFIER_STATE_ATTACK_IMMUNE" "MODIFIER_STATE_VALUE_ENABLED" - } - } - } - } - - //================================================================================================================= - // Storegga Arm Slam - //================================================================================================================= - "storegga_arm_slam" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/storegga_arm_slam" - "AbilityTextureName" "bloodseeker_bloodrage" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_7" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - //"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" // dev test - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AnimationIgnoresModelScale" "1" - "MaxLevel" "4" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "2.20 2.05 1.90 1.75" - "AnimationPlaybackRate" "1.0 1.0732 1.1579 1.2571" // 1.0 corresponds to cast point of 2.2 - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2.2" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "2700 3000 3300 3600" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "200 210 220 230" - } - "03" - { - "var_type" "FIELD_FLOAT" - "animation_time" "2.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "initial_delay" "1.2" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5 1.75 2.0 2.25" - } - } - } - - //================================================================================================================= - // Storegga Grab - //================================================================================================================= - "storegga_grab" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "bloodseeker_bloodrage" - "ScriptFile" "abilities/creatures/storegga_grab" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_ALL" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "MaxLevel" "4" - - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "450" - "AbilityCastPoint" "2.0" - "AnimationPlaybackRate" "0.35" // 0.35 (supposedly) corresponds to cast point of 1.25 - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "grab_radius" "200" - } - "02" - { - "var_type" "FIELD_FLOAT" - "animation_time" "2.00" - } - "03" - { - "var_type" "FIELD_FLOAT" - "initial_delay" "1.2" - } - "04" - { - "var_type" "FIELD_FLOAT" - "min_hold_time" "1.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "max_hold_time" "4.0" - } - } - } - - //================================================================================================================= - // Storegga Grab Throw - //================================================================================================================= - "storegga_grab_throw" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "storegga_grab_throw" - "ScriptFile" "abilities/creatures/storegga_grab_throw" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - "IsOnCastBar" "0" - - "MaxLevel" "4" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "2000" - "AbilityCastPoint" "1.25" - "AnimationPlaybackRate" "0.7" // 0.7 (supposedly) corresponds to cast point of 1.25 - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "throw_speed" "1600" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "235 240 245 250" - } - - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "2.0 2.2 2.4 2.6" - } - - "04" - { - "var_type" "FIELD_INTEGER" - "knockback_duration" "1.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "275" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_damage" "2600 2800 3000 3360" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "150" - } - } - } - - //================================================================================================================= - // Storegga: Ground Pound - //================================================================================================================= - "storegga_ground_pound" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/storegga_ground_pound" - "AbilityTextureName" "omniknight_guardian_angel" - - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - "MaxLevel" "4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16 15 14 13" - "AbilityChannelTime" "2.8" // anim 2 (2.5) + anim 2 end (1.2) with most of end anim clipped off - "AbilityCastPoint" "1.6 1.45 1.3 1.15" - //"AnimationPlaybackRate" "1.5625 1.7241 1.9231 2.1739" // 1.0 corresponds to cast point of 2.5 - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "pound_interval" "1.1161" // based on storegga_avalanche_channel anim (hit intervals are at 1.4) but adjusted due to channel_playback_rate - } - "02" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0.3 0.6 0.9 1.2" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "2000 2200 2400 2600" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-75" - } - "06" - { - "var_type" "FIELD_FLOAT" - "cast_point_playback_rate" "1.5625 1.7241 1.9231 2.1739" // doing it here since we need to adjust it in ability once channel starts - } - "07" - { - "var_type" "FIELD_FLOAT" - "channel_playback_rate" "0.8929" // our channel anim would take 2.5s at 1.0 rate, we need ours slowed since our channel time is 2.8 - } - } - } - - //================================================================================================================= - // Storegga: Avalanche - //================================================================================================================= - "storegga_avalanche" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/storegga_avalanche" - "AbilityTextureName" "omniknight_guardian_angel" - - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - "MaxLevel" "4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30 29 28 27" - "AbilityChannelTime" "10.0" - "AbilityCastPoint" "2.0 1.75 1.5 1.25" - "AnimationPlaybackRate" "1.0 1.1429 1.3333 1.6000" // 1.0 corresponds to 2.0 cast point - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "interval" "0.33" - } - "02" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "600 700 800 900" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "225" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movement" "340 360 380 400" - } - } - } - - //================================================================================================================= - // Storegga Passive - //================================================================================================================= - "storegga_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/storegga_passive" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Temple Guardian: Hammer Smash - //================================================================================================================= - "temple_guardian_hammer_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/temple_guardian_hammer_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "350" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - "AnimationIgnoresModelScale" "1" - "AbilityCastPoint" "1.15 1.10 1.05 1.00" //"1.0" // must be kept inversely proportional to playback_rate - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1.6 1.5 1.4 1.3" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "playback_rate" "0.4238 0.4450 0.4684 0.4944" // must be kept inversely proportional to cast point - } - "02" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "220 228 236 244" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.6 0.6 0.6 0.6" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage" "900 1060 1220 1380" - } - } - } - - //================================================================================================================= - // Temple Guardian: Rage Hammer Smash - //================================================================================================================= - "temple_guardian_rage_hammer_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/temple_guardian_rage_hammer_smash" - "AbilityTextureName" "centaur_double_edge" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "350" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - "AnimationIgnoresModelScale" "1" - "AbilityCastPoint" "0.65 0.6 0.55 0.5" // must be kept inversely proportional to playback_rate - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1.30 1.25 1.20 1.15" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "playback_rate" "0.6840 0.7410 0.8084 0.8892" // must be kept inversely proportional to cast point - } - "02" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "230 238 246 254" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.8 0.8 0.8 0.8" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage" "900 1080 1260 1440" - } - } - } - - //================================================================================================================= - // Temple Guardian: Purification - //================================================================================================================= - "temple_guardian_purification" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/temple_guardian_purification" - "AbilityTextureName" "omniknight_purification" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_NO" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "1.5" // must be kept inversely proportional to playback_rate - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "14" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "playback_rate" "0.4000 0.4364 0.4800 0.5333" // must be kept inversely proportional to cast point - } - "02" - { - "var_type" "FIELD_INTEGER" - "heal" "800 850 900 950" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - } - } - } - - //================================================================================================================= - // Temple Guardian: Wrath - //================================================================================================================= - "temple_guardian_wrath" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/temple_guardian_wrath" - "AbilityTextureName" "omniknight_guardian_angel" - - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25" - "AbilityChannelTime" "5.0" - "AbilityCastPoint" "1.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "effect_radius" "2000" - } - "02" - { - "var_type" "FIELD_FLOAT" - "delay" "1.5 1.45 1.4 1.35" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "04" - { - "var_type" "FIELD_INTEGER" - "blast_damage" "450 500 550 600" - } - "05" - { - "var_type" "FIELD_FLOAT" - "channel_duration" "7.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "interval" "0.1" - } - "07" - { - "var_type" "FIELD_FLOAT" - "block_cooldown" "0.001" - } - } - } - - //================================================================================================================= - // Temple Guardian: Hammer Throw - //================================================================================================================= - "temple_guardian_hammer_throw" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/temple_guardian_hammer_throw" - "AbilityTextureName" "sven_storm_bolt" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_CAST_REFRACTION" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1600" - "AbilityCastPoint" "1.3 1.2 1.1 1.0" // must be kept inversely proportional to playback_rate - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "playback_rate" "0.4615 0.5000 0.5455 0.6000" // must be kept inversely proportional to cast point - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "200 210 220 230" - } - "03" - { - "var_type" "FIELD_FLOAT" - "throw_duration" "2.3 2.1 1.9 1.7" //"2.3 2.2 2.1 2.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "hammer_damage" "900 1000 1100 1200" - } - } - } - - //================================================================================================================= - // Temple Guardian Passive - //================================================================================================================= - "temple_guardian_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/temple_guardian_passive" - "AbilityTextureName" "temple_guardian_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "nonrage_status_resistance" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "rage_move_speed_bonus" "40" - } - "03" - { - "var_type" "FIELD_INTEGER" - "rage_model_scale_bonus" "0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "rage_turn_rate_bonus_pct" "50" - } - } - } - - //================================================================================================================= - // Warlock: Shadow Word - //================================================================================================================= - "creature_warlock_shadow_word" - { - // General - //------------------------------------------------------------------------------------------------------------ - "BaseClass" "warlock_shadow_word" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "30" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.0" // Modifier just does damage/healing - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "8.0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "1.0" - } - } - } - - //================================================================================================================= - // Warlock: HP Aura - //================================================================================================================= - "warlock_hp_aura" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/warlock_hp_aura" - "AbilityTextureName" "granite_golem_hp_aura" - "MaxLevel" "1" - - "IsOnCastBar" "0" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CREEP" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_hp_multiplier" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - } - } - - //================================================================================================================= - // Creature: Flamestrike - //================================================================================================================= - "creature_flamestrike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "MaxLevel" "1" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - "AbilitySound" "Creature.Flamestrike.Charge" - "IsOnCastBar" "1" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.05" - "AbilityCastAnimation" "ACT_INVALID" - - "AbilityCooldown" "9" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "delay" "1.7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "175" - } - "03" - { - "var_type" "FIELD_FLOAT" - "damage" "500" - } - "04" - { - "var_type" "FIELD_INTEGER" - "vision_distance" "400" - } - "05" - { - "var_type" "FIELD_FLOAT" - "vision_duration" "5.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "ground_burn_duration" "5.0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "0.5" - } - "08" - { - "var_type" "FIELD_INTEGER" - "burn_dps" "100" - } - "09" - { - "var_type" "FIELD_INTEGER" - "burn_radius" "275" - } - } - } - - //================================================================================================================= - // Lifestealer Passive - //================================================================================================================= - "lifestealer_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/lifestealer_passive" - "AbilityTextureName" "life_stealer_rage" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "damage_counter_duration" "5.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_threshold" "900" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_counter_tiers" "6" - } - "04" - { - "var_type" "FIELD_FLOAT" - "enrage_duration" "6.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "enrage_movespeed_bonus" "300" - } - "06" - { - "var_type" "FIELD_INTEGER" - "enrage_attack_speed_bonus" "100" - } - "07" - { - "var_type" "FIELD_INTEGER" - "enrage_model_scale_bonus" "40" - } - "08" - { - "var_type" "FIELD_FLOAT" - "time_before_reduction" "1.0" - } - } - } - - //================================================================================================================= - // Lifestealer Enraged Pulse - //================================================================================================================= - "aghsfort_lifestealer_enraged_pulse" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "range" "350" - } - "02" - { - "var_type" "FIELD_INTEGER" - "slow" "25" - } - "03" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "2" - } - "04" - { - "var_type" "FIELD_INTEGER" - "angle" "360" - } - "05" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.3" - } - "06" - { - "var_type" "FIELD_FLOAT" - "knockback_distance" "250" - } - "07" - { - "var_type" "FIELD_INTEGER" - "damage" "350" - } - } - } - - //================================================================================================================= - // Grimstroke: Ink Swell - //================================================================================================================= - "aghsfort_grimstroke_spirit_walk" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "grimstroke_spirit_walk" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilitySound" "Hero_ObsidianDestroyer.AstralImprisonment" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.15" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "buff_duration" "3.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movespeed_bonus_pct" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_damage" "400" - } - "05" - { - "var_type" "FIELD_FLOAT" - "max_stun" "1.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "damage_per_tick" "10" - } - "07" - { - "var_type" "FIELD_FLOAT" - "tick_rate" "0.2" - } - "08" - { - "var_type" "FIELD_INTEGER" - "tick_dps_tooltip" "50" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityCastGestureSlot" "DEFAULT" - } - - - //================================================================================================================= - // Creature Spectre: Active Dispersion - //================================================================================================================= - "aghsfort_spectre_active_dispersion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16" - "AbilityCastPoint" "1.5" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_reflection_pct" "200" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "650" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed" "500" //"636" - } - } - } - - - //================================================================================================================= - // Building Tower Blast Wave: Blast Wave - //================================================================================================================= - "aghsfort_tower_blast_wave" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "14" - "AbilityCastPoint" "1.2" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "1200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "speed" "250" - } - } - } - - //================================================================================================================= - // Morphling: Waveform - //================================================================================================================= - "aghsfort_morphling_waveform" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Morphling.Waveform" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - "AbilityCastPoint" "1.0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "350" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "speed" "800" - } - "02" - { - "var_type" "FIELD_INTEGER" - "width" "200" - } - } - } - - //================================================================================================================= - // Nyx Assassin Creature: Impale - //================================================================================================================= - "aghsfort_creature_impale" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "1.0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "250" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "width" "125" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "0.6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "length" "3000" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed" "350" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cooldown_upgrade" "7" - } - } - } - - //================================================================================================================= - // Nyx Assassin: Spiked Carapce - //================================================================================================================= - "aghsfort_creature_spiked_carapace" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityTextureName" "nyx_assassin_spiked_carapace" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - "AbilityCastPoint" "0.4" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "reflect_duration" "2.0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "150" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "burrow_aoe" "300" - } - "07" - { - "var_type" "FIELD_INTEGER" - "damage_reflect_pct" "0" - } - } - } - - //================================================================================================================= - // Scarab Priest Summon Zealots - //================================================================================================================= - "scarab_priest_summon_zealots" - { - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/scarab_priest_summon_zealots" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.69" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8.0" - "AbilityDuration" "14" - - // Damage - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "mound_duration" "5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spawn_count" "1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "spawn_distance" "350" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attack_count" "2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_summons" "2" - } - } - } - - //================================================================================================================= - // Phoenix: Passive - //================================================================================================================= - "phoenix_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/phoenix_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Creature Phoenix: Icarus Dive - //================================================================================================================= - "aghsfort_phoenix_icarus_dive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "phoenix_icarus_dive" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Phoenix.IcarusDive.Cast" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "17" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "hp_cost_perc" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "dash_length" "1400" - } - "03" - { - "var_type" "FIELD_INTEGER" - "dash_width" "500" - } - "04" - { - "var_type" "FIELD_INTEGER" - "hit_radius" "230" - } - "05" - { - "var_type" "FIELD_FLOAT" - "burn_duration" "4" - } - "06" - { - "var_type" "FIELD_INTEGER" - "damage_per_second" "350" - } - "07" - { - "var_type" "FIELD_FLOAT" - "burn_tick_interval" "1.0" - } - "08" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed_pct" "30" - } - "09" - { - "var_type" "FIELD_FLOAT" - "dive_duration" "4.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Creature Phoenix: Icarus Dive Stop - //================================================================================================================= - "aghsfort_phoenix_icarus_dive_stop" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "phoenix_icarus_dive_stop" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - "AbilityCastAnimation" "ACT_INVALID" - } - - //================================================================================================================= - // Phoenix: Fire Spirits - //================================================================================================================= - "aghsfort_phoenix_fire_spirits" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Phoenix.FireSpirits.Cast" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "1400" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "hp_cost_perc" "0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "spirit_duration" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "spirit_speed" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "150" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-200" - } - "07" - { - "var_type" "FIELD_INTEGER" - "damage_per_second" "300" - "LinkedSpecialBonus" "special_bonus_unique_phoenix_3" - } - "08" - { - "var_type" "FIELD_INTEGER" - "spirit_count" "1" - } - "09" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "1.0" - } - } - } - - //================================================================================================================= - // Phoenix: Launch Fire Spirit - //================================================================================================================= - "aghsfort_phoenix_launch_fire_spirit" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityType" "DOTA_ABILITY_TYPE_BASIC" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilitySound" "Hero_Phoenix.FireSpirits.Launch" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1400" - "AbilityCastAnimation" "ACT_INVALID" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "hp_cost_perc" "0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "spirit_duration" "20.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "spirit_speed" "600" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "175" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-100" - } - "07" - { - "var_type" "FIELD_INTEGER" - "damage_per_second" "110" - "LinkedSpecialBonus" "special_bonus_unique_phoenix_3" - } - "08" - { - "var_type" "FIELD_INTEGER" - "spirit_count" "2" - } - "09" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "1.0" - } - } - } - - //================================================================================================================= - // Creature Phoenix: Supernova - //================================================================================================================= - "aghsfort_phoenix_supernova" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"BaseClass" "aghsfort_phoenix_supernova" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Phoenix.SuperNova.Begin" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "3.0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - "AbilityDuration" "6.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1300" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_per_sec" "350" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "3.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_hero_attacks" "13" - } - "05" - { - "var_type" "FIELD_FLOAT" - "caster_life_pct" "50.0" - } - } - } - - //================================================================================================================= - // Ember Spirit Fireball - //================================================================================================================= - "ember_spirit_fireball" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/ember_spirit_fireball" - "AbilityTextureName" "item_heavens_halberd" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - "MaxLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - "AbilityCastPoint" "1.0" - "AnimationIgnoresModelScale" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "700" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "projectile_width_initial" "125" - } - "03" - { - "var_type" "FIELD_INTEGER" - "projectile_width_end" "125" - } - - "04" - { - "var_type" "FIELD_INTEGER" - "projectile_distance" "1500" - } - "05" - { - "var_type" "FIELD_FLOAT" - "disarm_duration" "4.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "impact_damage" "1200" - } - "07" - { - "var_type" "FIELD_INTEGER" - "preview_fx_radius" "50" - } - } - } - - //================================================================================================================= - // Creature Dragon Knight: Breathe Fire - //================================================================================================================= - "aghsfort_dragon_knight_breathe_fire" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "1" - "AbilitySound" "Hero_DragonKnight.BreathFire" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "1.2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "500" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "start_radius" "150" - } - "02" - { - "var_type" "FIELD_INTEGER" - "end_radius" "250" - } - "03" - { - "var_type" "FIELD_INTEGER" - "range" "750" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed" "800" //"1050" - } - "05" - { - "var_type" "FIELD_FLOAT" - "debuff_duration" "3.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "anim_playback_speed" "0.5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Dragon Knight: Dragon Tail - //================================================================================================================= - "aghsfort_dragon_knight_dragon_tail" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "dragon_knight_dragon_tail" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_DragonKnight.DragonTail.Target" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "150" - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "250" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5" - "LinkedSpecialBonus" "special_bonus_unique_dragon_knight_2" - } - "02" - { - "var_type" "FIELD_INTEGER" - "dragon_cast_range" "400" - } - "03" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "800" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Creature Dragon Knight: Elder Dragon Form - //================================================================================================================= - "aghsfort_dragon_knight_elder_dragon_form" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "dragon_knight_elder_dragon_form" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES_ENEMIES_NO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_DragonKnight.ElderDragonForm" - "HasScepterUpgrade" "1" - "MaxLevel" "3" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_INVALID" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "115" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.35" // Attacks are primarily about the damage - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "-1.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "25" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_range" "350" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_damage" "100" - } - "05" - { - "var_type" "FIELD_INTEGER" - "corrosive_breath_damage" "30" - } - "06" - { - "var_type" "FIELD_FLOAT" - "corrosive_breath_duration" "5.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "splash_radius" "300" - } - "08" - { - "var_type" "FIELD_INTEGER" - "splash_damage_percent" "70" - } - "09" - { - "var_type" "FIELD_INTEGER" - "frost_bonus_movement_speed" "-30" - } - "10" - { - "var_type" "FIELD_INTEGER" - "frost_bonus_attack_speed" "-30" - } - "11" - { - "var_type" "FIELD_FLOAT" - "frost_duration" "2.0" - } - "12" - { - "var_type" "FIELD_FLOAT" - "frost_aoe" "300" - } - "13" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "20" - } - "14" - { - "var_type" "FIELD_INTEGER" - "model_scale" "5" - } - } - } - - //================================================================================================================= - // Ability: Underlord Channelled Buff - //================================================================================================================= - "underlord_channelled_buff" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/underlord_channelled_buff" - "AbilityTextureName" "ogre_magi_bloodlust" - - "AbilityCastAnimation" "ACT_DOTA_VICTORY" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CREEP | DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "0.56" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1.0" - "AbilityChannelTime" "10.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "8" - } - "02" - { - "var_type" "FIELD_FLOAT" - "modelscale" "10" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "20" - } - "05" - { - "var_type" "FIELD_INTEGER" - "interrupted_cooldown" "4" - } - } - } - - //================================================================================================================= - // Creature Underlord: Firestorm - //================================================================================================================= - "aghsfort_underlord_firestorm" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "abyssal_underlord_firestorm" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "IsOnCastBar" "0" - - "AbilityCastRange" "750" - "AbilityCastPoint" "0.6" - "FightRecapLevel" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "wave_duration" "3.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "wave_count" "3" - } - "04" - { - "var_type" "FIELD_INTEGER" - "wave_damage" "240" - } - "05" - { - "var_type" "FIELD_FLOAT" - "wave_interval" "1.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "burn_damage" "0.0" - "CalculateSpellDamageTooltip" "0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "1.0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "burn_duration" "2.0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "first_wave_delay" "0.0" - } - "10" - { - "var_type" "FIELD_FLOAT" - "building_damage" "33" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Spider Egg Sack - //================================================================================================================= - "spider_egg_sack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/spider_egg_sack" - "AbilityTextureName" "venomancer_venomous_gale" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "275" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "400" - } - "03" - { - "var_type" "FIELD_INTEGER" - "spider_min" "4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "spider_max" "5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "trigger_radius" "100" - } - "06" - { - "var_type" "FIELD_FLOAT" - "duration" "3.0" - } - } - } - - //================================================================================================================= - // Mini Spider Slow Attack - //================================================================================================================= - "mini_spider_slow_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/mini_spider_slow_attack" - "AbilityTextureName" "broodmother_poison_sting" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportBonus" "15" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "movement_speed_slow" "-3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "1.5" - } - } - } - - //================================================================================================================= - // Creature: Broodmother Accrue Children - //================================================================================================================= - "broodmother_accrue_children" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/broodmother_accrue_children" - "AbilityTextureName" "broodmother_spawn_spiderlings" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "babies_to_spawn" "4" - } - } - } - - //================================================================================================================= - // Hug Brood Passive - //================================================================================================================= - "huge_brood_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/huge_brood_passive" - //"AbilityTextureName" "huge_brood_passive" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "97" - } - } - } - - //================================================================================================================= - // Creature: Huge Broodmother Accrue Children - //================================================================================================================= - "huge_broodmother_accrue_children" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/huge_broodmother_accrue_children" - "AbilityTextureName" "broodmother_spawn_spiderlings" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "babies_to_spawn" "8" - } - } - } - - //================================================================================================================= - // Creature: Broodmother Generate Children - //================================================================================================================= - "broodmother_generate_children" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/broodmother_generate_children" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.69" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5.0" - "AbilityDuration" "14" - - // Damage - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "totem_damage_percentage" "100 200 300 400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "tooltip_duration" "14.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "distance_scepter" "1100" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "0.75" - } - "05" - { - "var_type" "FIELD_INTEGER" - "aftershock_range" "300" - } - "06" - { - "var_type" "FIELD_FLOAT" - "spawn_interval" "0.09" - } - } - } - - //================================================================================================================= - // Creature: Huge Broodmother Generate Children - //================================================================================================================= - "huge_broodmother_generate_children" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/huge_broodmother_generate_children" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.69" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5.0" - "AbilityDuration" "14" - - // Damage - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "totem_damage_percentage" "100 200 300 400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "tooltip_duration" "14.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "distance_scepter" "1100" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "0.75" - } - "05" - { - "var_type" "FIELD_INTEGER" - "aftershock_range" "300" - } - "06" - { - "var_type" "FIELD_FLOAT" - "spawn_interval" "0.075" - } - } - } - - //================================================================================================================= - // Huge Brood: Summon Eggs - //================================================================================================================= - "huge_brood_summon_eggs" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/huge_brood_summon_eggs" - "AbilityTextureName" "broodmother_spawn_spiderlings" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "egg_spawns" "2" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spider_spawns" "3" - } - "03" - { - "var_type" "FIELD_INTEGER" - "max_summoned_units" "12" - } - "04" - { - "var_type" "FIELD_INTEGER" - "summon_radius" "475" - } - } - } - - //================================================================================================================= - // Kidnap Spider: Summon Eggs - //================================================================================================================= - "kidnap_spider_summon_eggs" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/kidnap_spider_summon_eggs" - "AbilityTextureName" "broodmother_spawn_spiderlings" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.75" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "egg_spawns" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spider_spawns" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "max_summoned_units" "6" - } - "04" - { - "var_type" "FIELD_INTEGER" - "summon_radius" "200" - } - } - } - - //================================================================================================================= - // Broodmother: Web - //================================================================================================================= - "broodmother_web" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/broodmother_web" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" - "AbilityCastPoint" "1.0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "1200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "projectile_distance" "1600" - } - "03" - { - "var_type" "FIELD_INTEGER" - "projectile_radius" "125" - } - "04" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "500" - } - "05" - { - "var_type" "FIELD_FLOAT" - "root_duration" "1.75" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "500" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "65" - } - "08" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.38" - } - } - } - - //================================================================================================================= - // Creature: Baby Broodmother Passive - //================================================================================================================= - "baby_broodmother_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/baby_broodmother_passive" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "-15" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "8" - } - "05" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "2000" - } - "06" - { - "var_type" "FIELD_INTEGER" - "landing_damage" "300" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "150" - } - "08" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "37" - } - "09" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.37" - } - "10" - { - "var_type" "FIELD_FLOAT" - "launch_duration" "0.75" // hacky: must match enchant totem leap duration in broodmother_generate_children - } - } - } - - //================================================================================================================= - // Kidnap Spider: Kidnap - //================================================================================================================= - "aghsfort_batrider_flaming_lasso" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "batrider_flaming_lasso" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Batrider.FlamingLasso.Cast" - "AbilityCastAnimation" "ACT_INVALID" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "160" //"170" - "AbilityCooldown" "40" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - } - "02" - { - "var_type" "FIELD_INTEGER" - "drag_distance" "180" //"200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "break_distance" "425" - } - "04" - { - "var_type" "FIELD_INTEGER" - "grab_radius" "400" - } - "05" - { - "var_type" "FIELD_INTEGER" - "grab_radius_scepter" "400" - } - "06" - { - "var_type" "FIELD_FLOAT" - "damage_scepter" "100" - } - } - } - - - //================================================================================================================= - // Puck: Flying Bomb - //================================================================================================================= - "puck_flying_bomb" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/puck_flying_bomb" - "AbilityTextureName" "sven_storm_bolt" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - - "AbilityCastAnimation" "ACT_DOTA_CAST_REFRACTION" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - "AbilityCastPoint" "0.75" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "6" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "explosion_radius" "220" - } - "02" - { - "var_type" "FIELD_FLOAT" - "flight_duration" "2.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5" - } - "04" - { - "var_type" "FIELD_INTEGER" - "explosion_damage" "800" - } - "05" - { - "var_type" "FIELD_INTEGER" - "flight_speed" "600" - } - } - } - - //================================================================================================================= - // Creature Elder Titan: Echo Stomp - //================================================================================================================= - "creature_elder_titan_echo_stomp" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "elder_titan_echo_stomp" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_ElderTitan.EchoStomp" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_INVALID" - "AbilityCastPoint" "0.4" - "AbilityCastRange" "500" - "AbilityChannelTime" "1.3" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "cast_time" "1.7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "550" - } - "03" - { - "var_type" "FIELD_FLOAT" - "sleep_duration" "3.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "stomp_damage" "500" - } - "05" - { - "var_type" "FIELD_FLOAT" - "initial_stun_duration" "0.2" - } - "06" - { - "var_type" "FIELD_FLOAT" - "animation_rate" "0.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "wake_damage_limit" "100" - } - } - } - - //================================================================================================================= - // Creature Elder Titan: Earth Splitter - //================================================================================================================= - "creature_elder_titan_earth_splitter" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "elder_titan_earth_splitter" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "2" - "AbilitySound" "Hero_ElderTitan.EarthSplitter.Cast" - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "2000" - "AbilityCastPoint" "0.4" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "14.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "crack_time" "3.14" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crack_width" "315" - } - "03" - { - "var_type" "FIELD_INTEGER" - "crack_distance" "3000" - } - "04" - { - "var_type" "FIELD_INTEGER" - "slow_pct" "40" - } - "05" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "4.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "speed" "910" - } - "07" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "80" - } - "08" - { - "var_type" "FIELD_INTEGER" - "vision_width" "500" - } - "09" - { - "var_type" "FIELD_FLOAT" - "vision_interval" "0.22" - } - "10" - { - "var_type" "FIELD_FLOAT" - "vision_duration" "4.0" - } - "11" - { - "var_type" "FIELD_INTEGER" - "vision_step" "200" - } - "12" - { - "var_type" "FIELD_INTEGER" - "total_steps" "12" - } - "13" - { - "var_type" "FIELD_FLOAT" - "slow_duration_scepter" "5.0" - } - } - } - - //================================================================================================================= - // Boss Timbersaw: Whirling Death - //================================================================================================================= - "boss_timbersaw_whirling_death" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/boss_timbersaw_whirling_death" - "AbilityTextureName" "shredder_whirling_death" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Shredder.WhirlingDeath.Cast" - - "IsOnCastBar" "0" - "MaxLevel" "4" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "500" - "AbilityCastPoint" "1.55 1.5 1.45 1.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "6" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "whirling_radius" "450" - } - "02" - { - "var_type" "FIELD_INTEGER" - "whirling_damage" "400 450 500 550" - } - "03" - { - "var_type" "FIELD_INTEGER" - "tree_damage_scale" "15 20 25 30" - } - "04" - { - "var_type" "FIELD_FLOAT" - "whirling_tick" "0.3" - } - "05" - { - "var_type" "FIELD_INTEGER" - "stat_loss_pct" "20 25 30 35" - } - "06" - { - "var_type" "FIELD_FLOAT" - "duration" "10.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_GENERIC_CHANNEL_1" - } - - //================================================================================================================= - // Boss Timbersaw: Timber Chain - //================================================================================================================= - "boss_timbersaw_timber_chain" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/boss_timbersaw_timber_chain" - "AbilityTextureName" "shredder_timber_chain" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Shredder.TimberChain.Cast" - - "IsOnCastBar" "0" - "MaxLevel" "4" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3" - "AbilityCastRange" "4800" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "chain_radius" "90 90 90 90" - } - "02" - { - "var_type" "FIELD_INTEGER" - "range" "4800" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "200 200 200 200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "speed" "2100 2200 2300 2400" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage" "400 450 500 550" - } - "06" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5 1.75 2.0 2.25" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Boss Timbersaw: Reactive Armor - //================================================================================================================= - "boss_timbersaw_reactive_armor" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/boss_timbersaw_reactive_armor" - "AbilityTextureName" "shredder_reactive_armor" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - "MaxLevel" "4" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "max_stacks" "20 22 24 26" - } - "02" - { - "var_type" "FIELD_INTEGER" - "armor_per_stack" "1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "magic_resist_per_stack" "1" - } - "04" - { - "var_type" "FIELD_INTEGER" - "regen_per_stack" "0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "status_resist" "50 55 60 65" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Boss Timbersaw: Chakram Dance - //================================================================================================================= - "boss_timbersaw_chakram_dance" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "shredder_chakram" - "ScriptFile" "abilities/creatures/boss_timbersaw_chakram_dance" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityCastPoint" "2.0 1.9 1.8 1.7" - - "IsOnCastBar" "0" - "MaxLevel" "4" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "33 33 33 33" - "AbilityChannelTime" "9.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "num_chakrams" "12" - } - "02" - { - "var_type" "FIELD_FLOAT" - "interval" "3.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "short_range" "1800" - } - "04" - { - "var_type" "FIELD_INTEGER" - "long_range" "3000" - } - } - } - - //================================================================================================================= - // Creature: Void Spirit Boss Passive - //================================================================================================================= - "aghsfort_void_spirit_boss_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Void Spirit Boss: Aether Remnant - //================================================================================================================= - "aghsfort_void_spirit_boss_aether_remnant" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"BaseClass" "void_spirit_aether_remnant" - "AbilityTextureName" "void_spirit_aether_remnant" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT | DOTA_ABILITY_BEHAVIOR_VECTOR_TARGETING" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_VoidSpirit.AetherRemnant.Cast" - "MaxLevel" "4" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.0 0.9 0.8 0.7" - "AnimationPlaybackRate" "0.2500 0.2778 0.3125 0.3571" // 0.25 corresponds to 1.0 cast point - "AbilityCastRange" "1200" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12 11 10 9" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "start_radius" "135" //"90" - } - "02" - { - "var_type" "FIELD_INTEGER" - "end_radius" "135" //"90" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "450" //"300" - } - "04" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "650 700 750 800" - } - "05" - { - "var_type" "FIELD_INTEGER" - "remnant_watch_distance" "600 600 600 600" //"450" - } - "06" - { - "var_type" "FIELD_INTEGER" - "remnant_watch_radius" "130" - } - "07" - { - "var_type" "FIELD_INTEGER" - "watch_path_vision_radius" "200" - } - "08" - { - "var_type" "FIELD_FLOAT" - "activation_delay" "0.6" - } - "09" - { - "var_type" "FIELD_INTEGER" - "impact_damage" "900 1000 1100 1200" - } - "10" - { - "var_type" "FIELD_FLOAT" - "pull_duration" "2.0 2.0 2.0 2.0" //"1.8" - } - "11" - { - "var_type" "FIELD_INTEGER" - "pull_destination" "93" //"62" - } - "12" - { - "var_type" "FIELD_FLOAT" - "duration" "12.0" - } - "13" - { - "var_type" "FIELD_FLOAT" - "think_interval" "0.1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - //"AbilityCastGestureSlot" "DEFAULT" - } - - //================================================================================================================= - // Void Spirit Boss: Dissimilate - //================================================================================================================= - "aghsfort_void_spirit_boss_dissimilate" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"BaseClass" "void_spirit_dissimilate" - "AbilityTextureName" "void_spirit_dissimilate" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - //"SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_VoidSpirit.Dissimilate.Cast" - "MaxLevel" "4" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.5 0.45 0.4 0.35" - "AnimationPlaybackRate" "0.2000 0.2222 0.2500 0.2857" // 0.2 corresponds to 0.5 cast point - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Damage - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "1500 1600 1700 1800" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "phase_duration" "1.8 1.7 1.6 1.5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "destination_fx_radius" "274" //"183" // proportional to distance_offset - } - "03" - { - "var_type" "FIELD_INTEGER" - "portals_per_ring" "6" - } - "04" - { - "var_type" "FIELD_INTEGER" - "angle_per_ring_portal" "60" - } - "05" - { - "var_type" "FIELD_INTEGER" - "first_ring_distance_offset" "780" //"520" - } - "06" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "412" //"275" // proportional to distance_offset - } - "07" - { - "var_type" "FIELD_FLOAT" - "pct_of_phase_for_selection" "40" - } - "08" - { - "var_type" "FIELD_INTEGER" - "search_range_reduction" "200" - } - //"09" - //{ - //"var_type" "FIELD_INTEGER" - //"second_ring_distance_offset" "1040" - //} - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Void Spirit Boss: Astral Step - //================================================================================================================= - "aghsfort_void_spirit_boss_astral_step" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "void_spirit_astral_step" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "FightRecapLevel" "1" - "AbilitySound" "Hero_VoidSpirit.AstralStep.Start" - "MaxLevel" "4" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.5 1.4 1.3 1.2" - "AnimationPlaybackRate" "0.2300 0.2464 0.2654 0.2875" // 1.0 corresponds to cast point of 0.3 - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - "AbilityCharges" "2" - "AbilityChargeRestoreTime" "13 12 11 10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "170 180 190 200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "AbilityCharges" "" - "LinkedSpecialBonus" "special_bonus_unique_void_spirit_9" - } - "03" - { - "var_type" "FIELD_INTEGER" - "AbilityChargeRestoreTime" "" - "LinkedSpecialBonus" "special_bonus_unique_void_spirit_1" - } - "04" - { - "var_type" "FIELD_INTEGER" - "min_travel_distance" "200" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_travel_distance" "2000 2100 2200 2300" - } - "06" - { - "var_type" "FIELD_FLOAT" - "pop_damage_delay" "1.25" - } - "07" - { - "var_type" "FIELD_INTEGER" - "pop_damage" "800 900 1000 1100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "movement_slow_pct" "80" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Void Spirit Boss: Resonant Pulse - //================================================================================================================= - "aghsfort_void_spirit_boss_resonant_pulse" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"BaseClass" "void_spirit_resonant_pulse" - "AbilityTextureName" "void_spirit_resonant_pulse" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_VoidSpirit.Pulse.Cast" - "HasScepterUpgrade" "1" - "MaxLevel" "4" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "1.8 1.7 1.6 1.5" - "AnimationPlaybackRate" "0.3650 0.3982 0.4380 0.4867" // 0.365 corresponds to 1.2 cast point - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - //"AbilityCastGestureSlot" "DEFAULT" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15 14 13 12" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "600" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "1000" //"800 900 1000 1100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "900 1000 1100 1200" - "LinkedSpecialBonus" "special_bonus_unique_void_spirit_4" - } - "04" - { - "var_type" "FIELD_FLOAT" - "buff_duration" "10.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "base_absorb_amount" "900 1000 1100 1200" - } - "06" - { - "var_type" "FIELD_INTEGER" - "absorb_per_hero_hit" "200 220 240 260" - } - "07" - { - "var_type" "FIELD_INTEGER" - "return_projectile_speed" "800" - } - "08" - { - "var_type" "FIELD_INTEGER" - "max_charges" "1" // don't want ai double casting it - "RequiresScepter" "1" - } - "09" - { - "var_type" "FIELD_INTEGER" - "charge_restore_time" "10" - "RequiresScepter" "1" - } - "10" - { - "var_type" "FIELD_FLOAT" - "silence_duration_scepter" "1.6 1.8 2.0 2.2" - } - } - } - - //================================================================================================================= - // Void Spirit Boss: Activate Earth Spirits - //================================================================================================================= - "void_spirit_boss_activate_earth_spirits" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/void_spirit_boss_activate_earth_spirits" - "AbilityTextureName" "omniknight_guardian_angel" - "MaxLevel" "5" - "IsOnCastBar" "0" - - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30 30 30 30" - "AbilityChannelTime" "8.0" - "AbilityCastPoint" "1.5" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "channel_duration" "9.0" - } - } - } - - - //================================================================================================================= - // Creature: Earth Spirit Statue Passive - //================================================================================================================= - "earth_spirit_statue_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/earth_spirit_statue_passive" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Earth Spirit: Boulder Smash - //================================================================================================================= - "aghsfort_earth_spirit_boss_boulder_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitTargetFlag" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_EarthSpirit.BoulderSmash.Target" - "MaxLevel" "4" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "150" - "AbilityCastPoint" "0.01" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "150" // NOTE: This radius must match the radius for geomagnetic grip - } - "02" - { - "var_type" "FIELD_INTEGER" - "rock_search_aoe" "200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "rock_damage" "750 850 950 1050" - } - "04" - { - "var_type" "FIELD_INTEGER" - "move_slow" "30" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "2.5" // slow duration? - } - "06" - { - "var_type" "FIELD_INTEGER" - "speed" "800" - } - "07" - { - "var_type" "FIELD_FLOAT" - "unit_distance" "1500.0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "rock_distance" "3000.0" - } - "09" - { - "var_type" "FIELD_INTEGER" - "remnant_smash_radius_tooltip" "200" - } - } - } - - //================================================================================================================= - // Earth Spirit: Rolling Boulder - //================================================================================================================= - "aghsfort_earth_spirit_boss_rolling_boulder" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilitySound" "Hero_EarthSpirit.RollingBoulder.Cast" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "0.01" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "150" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "1200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "rock_speed" "1600" - } - "04" - { - "var_type" "FIELD_FLOAT" - "distance" "1500.0" - "LinkedSpecialBonus" "special_bonus_unique_earth_spirit_4" - } - "05" - { - "var_type" "FIELD_FLOAT" - "rock_distance" "3000.0" - "LinkedSpecialBonus" "special_bonus_unique_earth_spirit_4" - "LinkedSpecialBonusField" "value2" - } - "06" - { - "var_type" "FIELD_FLOAT" - "delay" "0.6" - } - "07" - { - "var_type" "FIELD_INTEGER" - "damage" "700" - "LinkedSpecialBonus" "special_bonus_unique_earth_spirit" - } - "08" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0" - "LinkedSpecialBonus" "special_bonus_unique_earth_spirit_3" - } - "09" - { - "var_type" "FIELD_FLOAT" - "rock_bonus_duration" "1.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - - //================================================================================================================= - // Earth Spirit: Geomagnetic Grip - //================================================================================================================= - "aghsfort_earth_spirit_boss_geomagnetic_grip" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_EarthSpirit.GeomagneticGrip.Target" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "1100" - "AbilityCastPoint" "0.01" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "180" // NOTE: This radius must match the radius for boulder smash - } - "02" - { - "var_type" "FIELD_INTEGER" - "rock_damage" "400" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "3" - "LinkedSpecialBonus" "special_bonus_unique_earth_spirit_5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "pull_units_per_second_heroes" "600" - } - "05" - { - "var_type" "FIELD_FLOAT" - "pull_units_per_second" "1000" - } - "06" - { - "var_type" "FIELD_INTEGER" - "speed" "800" - } - "07" - { - "var_type" "FIELD_FLOAT" - "total_pull_distance" "2000" - } - } - } - - //================================================================================================================= - // Earth Spirit: Stone Caller - //================================================================================================================= - "aghsfort_earth_spirit_boss_stone_caller" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_SHOW_IN_GUIDES" - "AbilityType" "DOTA_ABILITY_TYPE_BASIC" - "MaxLevel" "1" - "AbilitySound" "Hero_EarthSpirit.StoneRemnant.Impact" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_ES_STONE_CALLER" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "1100" - "AbilityCastPoint" "0.0" - "HasScepterUpgrade" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - "AbilityCharges" "7" - "AbilityChargeRestoreTime" "1" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "10.0" - } - } - } - - //================================================================================================================= - // Earth Spirit: Petrify ( scepter ability ) - //================================================================================================================= - "aghsfort_earth_spirit_boss_petrify" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_SHOW_IN_GUIDES" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "MaxLevel" "1" - "FightRecapLevel" "1" - "IsGrantedByScepter" "1" - "AbilitySound" "Hero_EarthSpirit.Petrify" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "125" - "AbilityCastPoint" "0.2" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "3" - "RequiresScepter" "1" - } - - "02" - { - "var_type" "FIELD_FLOAT" - "damage" "300" - "RequiresScepter" "1" - } - - "03" - { - "var_type" "FIELD_FLOAT" - "aoe" "300" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Earth Spirit: Magnetize - //================================================================================================================= - "aghsfort_earth_spirit_boss_magnetize" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "2" - "AbilitySound" "Hero_EarthSpirit.Magnetize.Cast" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "350" - "AbilityCastPoint" "0.01" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "45" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "cast_radius" "450" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_per_second" "250" - } - "03" - { - "var_type" "FIELD_FLOAT" - "damage_duration" "6.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "rock_search_radius" "400" - } - "05" - { - "var_type" "FIELD_INTEGER" - "rock_explosion_radius" "600" - } - "06" - { - "var_type" "FIELD_FLOAT" - "damage_interval" "1.0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "rock_explosion_delay" "8.0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "silence_duration" "5.0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "2.0" - } - } - } - - //================================================================================================================= - // Creature: Fire Breath - //================================================================================================================= - "creature_fire_breath" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityName" "creature_fire_breath" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityTextureName" "ogre_magi_fireblast" - "MaxLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - "IsOnCastBar" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - "AbilityChannelTime" "3.0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - "AbilityCastPoint" "2.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "radius" "200.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "1200" - } - "03" - { - "var_type" "FIELD_FLOAT" - "damage" "1000" - } - "04" - { - "var_type" "FIELD_FLOAT" - "rotation_angle" "90.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "projectile_count" "12" - } - } - } - - //================================================================================================================= - // Creature Ice Slam - //================================================================================================================= - "creature_ice_slam" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - "IsOnCastBar" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "7.0" - "AbilityCastPoint" "1.5" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "02" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed" "-25" - } - "03" - { - "var_type" "FIELD_INTEGER" - "slow_attack_speed" "0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "frozen_path_duration" "10" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage" "1250" - } - "06" - { - "var_type" "FIELD_FLOAT" - "freeze_duration" "2.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Creature: Skeleton King Run passive - //================================================================================================================= - "skeleton_king_run_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/skeleton_king_run_passive" - - "IsOnCastBar" "0" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "IsOnCastBar" "0" - } - - //================================================================================================================= - // Ability: Undead Woods Skeleton King Hellfire Blast - //================================================================================================================= - "undead_woods_skeleton_king_hellfire_blast" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "skeleton_king_hellfire_blast" - "IsOnCastBar" "0" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_SkeletonKing.Hellfire_Blast" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "425" - "AbilityCastPoint" "0.35" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "13" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "1000" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // Applies two modifiers - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "blast_speed" "800" - } - "02" - { - "var_type" "FIELD_FLOAT" - "blast_stun_duration" "2.0" - - } - "03" - { - "var_type" "FIELD_FLOAT" - "blast_dot_duration" "4.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "blast_slow" "-50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "blast_dot_damage" "125" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Ability: Undead Woods Skeleton King Vampiric Aura - //================================================================================================================= - "aghsfort_skeleton_king_vampiric_aura" - { - // General - //------------------------------------------------------------------------------------------------------------- - "IsOnCastBar" "0" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_AURA" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "IsOnCastBar" "0" - - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "vampiric_aura_radius" "5000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "vampiric_aura" "20" - "LinkedSpecialBonus" "special_bonus_unique_wraith_king_2" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "50" - } - "04" - { - "var_type" "FIELD_FLOAT" - "self_bonus" "1.5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Ability: Undead Woods Skeleton King Mortal Strike - //================================================================================================================= - "undead_woods_skeleton_king_mortal_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "IsOnCastBar" "0" - "BaseClass" "skeleton_king_mortal_strike" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilitySound" "Hero_SkeletonKing.CriticalStrike" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_mult" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "15" - } - "03" - { - "var_type" "FIELD_FLOAT" - "skeleton_duration" "60" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_skeleton_charges" "10" - } - "05" - { - "var_type" "FIELD_FLOAT" - "spawn_interval" "0.25" - } - "06" - { - "var_type" "FIELD_FLOAT" - "reincarnate_time" "3" - } - "07" - { - "var_type" "FIELD_INTEGER" - "gold_bounty" "0" - } - "08" - { - "var_type" "FIELD_INTEGER" - "xp_bounty" "0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Ability: Skeleton King Reincarnation - //================================================================================================================= - "undead_woods_skeleton_king_reincarnation" - { - // General - //------------------------------------------------------------------------------------------------------------- - "IsOnCastBar" "0" - "BaseClass" "skeleton_king_reincarnation" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "2" - - "IsOnCastBar" "0" - - "HasScepterUpgrade" "1" - "AbilitySound" "Hero_SkeletonKing.Reincarnate" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "9999" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.2" // Slow isn't the main function of this ability. - - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "reincarnate_time" "3.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "slow_radius" "900" - } - "03" - { - "var_type" "FIELD_INTEGER" - "movespeed" "-75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attackslow" "-75" - } - "05" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "5.0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "scepter_duration" "7" - "RequiresScepter" "1" - } - "08" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "09" - { - "var_type" "FIELD_INTEGER" - "aura_radius_tooltip_scepter" "1200" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Sled Penguin Passive - //================================================================================================================= - "sled_penguin_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/sled_penguin_passive" - - //"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "max_sled_speed" "700" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed_step" "7" - } - "03" - { - "var_type" "FIELD_INTEGER" - "tree_destroy_radius" "200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "reset_pos_offset" "100" - } - "05" - { - "var_type" "FIELD_FLOAT" - "penguin_lifetime" "100.0" // unused? - } - "06" - { - "var_type" "FIELD_INTEGER" - "collision_radius" "75" - } - "07" - { - "var_type" "FIELD_FLOAT" - "impaired_duration" "3.0" - } - } - } - - //================================================================================================================= - // Wandering Ogre Seal Passive - //================================================================================================================= - "wandering_ogre_seal_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/wandering_ogre_seal_passive" - - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "max_wander_range" "300" - } - "02" - { - "var_type" "FIELD_INTEGER" - "min_wander_range" "200" - } - "03" - { - "var_type" "FIELD_FLOAT" - "move_interval" "5.0" - } - } - } - - //================================================================================================================= - // Creature: Bonus Chicken passive - //================================================================================================================= - "creature_bonus_chicken" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "alchemist_goblins_greed" - "ScriptFile" "abilities/creatures/creature_bonus_chicken" - - "IsOnCastBar" "0" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "total_gold" "10000" - } - "02" - { - "var_type" "FIELD_FLOAT" - "time_limit" "40.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "gold_bag_duration" "8.0" - } - } - } - - //================================================================================================================= - // Creature: Bonus Greevil passive - //================================================================================================================= - "creature_bonus_greevil" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "alchemist_goblins_greed" - "ScriptFile" "abilities/creatures/creature_bonus_greevil" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "total_gold" "10000" - } - "02" - { - "var_type" "FIELD_FLOAT" - "time_limit" "40.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "gold_bag_duration" "8.0" - } - } - } - - //================================================================================================================= - // Ability: Morty Hop - //================================================================================================================= - "morty_hop" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityTextureName" "snapfire_firesnap_cookie" - "FightRecapLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.2" - "AbilityCastRange" "1000" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1.1" - "AbilityChannelTime" "1.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "375" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "0.75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_distance" "1000" - } - "05" - { - "var_type" "FIELD_INTEGER" - "height" "200" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Ability: Hop Launch - //================================================================================================================= - "morty_hop_launch" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL | DOTA_ABILITY_BEHAVIOR_HIDDEN" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0 0 0 0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Rock Smash - //================================================================================================================= - "aghsfort_rock_golem_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "tiny_avalanche" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "MaxLevel" "1" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.4" // must be kept in inverse proportion to anim_playback_rate; 1.7 cast point corresponds to 1.0 playback rate - "AbilityCooldown" "16.0" - "AbilityCastRange" "400" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "tick_interval" "0.2" - } - "03" - { - "var_type" "FIELD_FLOAT" - "total_duration" "1.4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "tick_count" "5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.2" - } - "06" - { - "var_type" "FIELD_FLOAT" - "projectile_duration" "0.5" - } - "07" - { - "var_type" "FIELD_INTEGER" - "avalanche_damage" "1400" - } - "08" - { - "var_type" "FIELD_FLOAT" - "anim_playback_rate" "1.2143" // must be kept in inverse proportion to cast point - } - } - } - - //================================================================================================================= - // Rock Golem: Splitter A - //================================================================================================================= - "rock_golem_split_a" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/rock_golem_split_a" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityTextureName" "dark_seer_wall_of_replica" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "unit_count" "3" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spawn_radius" "50" - } - "03" - { - "var_type" "FIELD_FLOAT" - "knockback_duration_min" "0.75" - } - "04" - { - "var_type" "FIELD_FLOAT" - "knockback_duration_max" "0.75" - } - "05" - { - "var_type" "FIELD_INTEGER" - "knockback_distance_min" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance_max" "275" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height_min" "100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "knockback_height_max" "200" - } - } - } - - //================================================================================================================= - // Rock Golem: Splitter B - //================================================================================================================= - "rock_golem_split_b" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/rock_golem_split_b" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityTextureName" "dark_seer_wall_of_replica" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "unit_count" "4" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spawn_radius" "25" - } - "03" - { - "var_type" "FIELD_FLOAT" - "knockback_duration_min" "0.6" - } - "04" - { - "var_type" "FIELD_FLOAT" - "knockback_duration_max" "0.6" - } - "05" - { - "var_type" "FIELD_INTEGER" - "knockback_distance_min" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_distance_max" "275" - } - "07" - { - "var_type" "FIELD_INTEGER" - "knockback_height_min" "100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "knockback_height_max" "200" - } - - } - } - //================================================================================================================= - // Ability: Bomb Squad - //================================================================================================================= - "bomb_squad_self_cast" - { - - // General - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bomb_squad_self_cast" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0 0 0 0" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "max_active_mines" "3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "mine_spawn_interval" "0.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "max_launch_distance" "100" - } - } - } - - //================================================================================================================= - // Ability: Bomb Squad Mine Charge - //================================================================================================================= - "bomb_squad_mine_charge" - { - - // General - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bomb_squad_mine_charge" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "IsOnCastBar" "0" - - "AbilityCastRange" "3000" - "AbilityCooldown" "12" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.5" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "max_active_mines" "3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "mine_spawn_interval" "0.3" - } - "03" - { - "var_type" "FIELD_FLOAT" - "max_launch_distance" "10" - } - "04" - { - "var_type" "FIELD_FLOAT" - "speed" "350" - } - - } - } - - //================================================================================================================= - // Ability: Bomb Squad - //================================================================================================================= - "bomb_squad_landmine_detonate" - { - // General - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bomb_squad_landmine_detonate" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0 0 0 0" - - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "1.8" - } - "02" - { - "var_type" "FIELD_INTEGER" - "detonate_radius" "375" - } - "03" - { - "var_type" "FIELD_INTEGER" - "detonate_damage" "1200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "chain_radius" "200" - } - "05" - { - "var_type" "FIELD_FLOAT" - "chain_duration" "0.5" - } - - } - } - - //================================================================================================================= - // Ability: Bomb Squad Stasis Launch - //================================================================================================================= - "bomb_squad_stasis_launch" - { - // General - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/bomb_squad_stasis_launch" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityCastRange" "750" - "AbilityCooldown" "2.5" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "detonate_radius" "300" - } - "02" - { - "var_type" "FIELD_FLOAT" - "activation_delay" "1.3" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "2.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage" "380" - } - "05" - { - "var_type" "FIELD_FLOAT" - "mine_lifetime" "3.0" - } - } - } - - //================================================================================================================= - // Ability: Walrus Pudge Harpoon - //================================================================================================================= - "aghsfort_walrus_pudge_harpoon" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Pudge.AttackHookExtend" - "AbilityTextureName" "pudge_meat_hook" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1300" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "1050" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "hook_speed" "1200.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "hook_width" "120" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hook_distance" "2700" - } - "04" - { - "var_type" "FIELD_INTEGER" - "vision_radius" "500 500 500 500" - } - "05" - { - "var_type" "FIELD_FLOAT" - "vision_duration" "4.0 4.0 4.0 4.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - - //================================================================================================================= - // Enraged Wildkin: Tornado - //================================================================================================================= - "enraged_wildwing_create_tornado" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/enraged_wildwing_create_tornado" - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "500" - "AbilityCastPoint" "0.4" - "AbilityCooldown" "0.0" - "AbilityChannelTime" "140.0" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "350" - } - "02" - { - "var_type" "FIELD_INTEGER" - "tornado_radius" "250" - } - "03" - { - "var_type" "FIELD_FLOAT" - "movespeed_pct" "40.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "harpy_spawn_interval" "4.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "harpy_spawn_amount" "2" - } - "06" - { - "var_type" "FIELD_INTEGER" - "max_total_harpies" "14" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Enraged Wildkin: Tornado Passive - //================================================================================================================= - "enraged_wildkin_tornado_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/enraged_wildkin_tornado_passive" - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "tornado_radius" "250" - } - "03" - { - "var_type" "FIELD_FLOAT" - "movespeed_pct" "20.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "harpy_spawn_interval" "4.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "harpy_spawn_amount" "2" - } - "06" - { - "var_type" "FIELD_INTEGER" - "max_total_harpies" "14" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Wildwing: Tornado Blast - //================================================================================================================= - "aghsfort_enraged_wildwing_tornado_blast" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/aghsfort_enraged_wildwing_tornado_blast" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilitySound" "Hero_Invoker.Tornado" - - "IsOnCastBar" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "0.8" - "AbilityCastAnimation" "ACT_INVALID" - - "AbilityCooldown" "7" - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "travel_distance" "1500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "travel_speed" "750" - } - "03" - { - "var_type" "FIELD_INTEGER" - "area_of_effect" "220" - } - "04" - { - "var_type" "FIELD_FLOAT" - "disable_duration" "2.5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "damage" "1000" - } - "06" - { - "var_type" "FIELD_INTEGER" - "spawns_per_blast" "3" - } - "07" - { - "var_type" "FIELD_INTEGER" - "harpy_spawn_amount" "2" - } - } - } - - //================================================================================================================= - // Tornado Harpy - //================================================================================================================= - "tornado_harpy_intrinsic" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/tornado_harpy_intrinsic" - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "2.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed_boost" "250" - } - - } - } - - //================================================================================================================= - // Debug: Preview Intrinsic ability (may come in useful) - //================================================================================================================= - "preview_intrinsic" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/preview_intrinsic" - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Aghanim Empty1 - //================================================================================================================= - "aghanim_empty_spell1" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "doom_bringer_empty1" - "AbilityTextureName" "aghanim_spell_swap" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "1" - } - - //================================================================================================================= - // Aghanim Empty2 - //================================================================================================================= - "aghanim_empty_spell2" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "doom_bringer_empty1" - "AbilityTextureName" "aghanim_spell_swap" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "1" - } - - //================================================================================================================= - // Aghanim Empty3 - //================================================================================================================= - "aghanim_empty_spell3" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "doom_bringer_empty1" - "AbilityTextureName" "aghanim_spell_swap" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "1" - } - - //================================================================================================================= - // Aghanim Empty4 - //================================================================================================================= - "aghanim_empty_spell4" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "doom_bringer_empty1" - "AbilityTextureName" "aghanim_spell_swap" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "MaxLevel" "1" - } - - //================================================================================================================= - // Aghanim Passive - //================================================================================================================= - "aghanim_passive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "aghanim_passive" - "ScriptFile" "abilities/creatures/aghanim_passive" - - "MaxLevel" "5" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "status_resist" "10 20 30 40 50" - } - } - } - - //================================================================================================================= - // Aghanim: Portal Spear - //================================================================================================================= - "aghanim_spear" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "aghanim_spear" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_DIRECTIONAL" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Mars.Spear.Cast" - "MaxLevel" "5" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "2200 2640 3080 3520 3960" - } - "02" - { - "var_type" "FIELD_FLOAT" - "spear_speed" "1200 1200 1200 1200 1200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "spear_width" "75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "spear_vision" "300" - } - "05" - { - "var_type" "FIELD_INTEGER" - "spear_range" "10000" - } - "06" - { - "var_type" "FIELD_FLOAT" - "activity_duration" "2.0" - } - "07" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.25 1.5 1.75 2.0 2.25" - } - "08" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.25" - } - "09" - { - "var_type" "FIELD_FLOAT" - "knockback_distance" "75" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - "AbilityCastGestureSlot" "DEFAULT" - } - - //================================================================================================================= - // Aghanim Crystal Attack - //================================================================================================================= - "aghanim_crystal_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICALs" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "BaseClass" "ability_lua" - "AbilityTextureName" "ancient_apparition_ice_blast" - "ScriptFile" "abilities/creatures/aghanim_crystal_attack" - "MaxLevel" "5" - - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AnimationIgnoresModelScale" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "10000" - "AbilityCastPoint" "0.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.5 0.4 0.3 0.2 0.1" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "attack_time" "1.5 1.4 1.3 1.2 1.1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "explosion_radius" "175" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attack_damage" "1000 1100 1200 1300 1400" - } - "04" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.5 0.55 0.6 0.65 0.7" - } - "05" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "200 220 240 260 280" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_height" "80 90 100 110 120" - } - "07" - { - "var_type" "FIELD_INTEGER" - "heal_suppression_pct" "25 25 30 30 35" - } - "08" - { - "var_type" "FIELD_FLOAT" - "debuff_duration" "8.0" - } - "09" - { - "var_type" "FIELD_INTEGER" - "armor_reduction_pct" "18 26 34 42 50" - } - "10" - { - "var_type" "FIELD_INTEGER" - "pulse_radius" "400" - } - "11" - { - "var_type" "FIELD_INTEGER" - "pulse_damage" "0" - } - "12" - { - "var_type" "FIELD_INTEGER" - "pulse_damage_pct" "15 20 25 30 35" - } - } - } - - //================================================================================================================= - // Aghanim: Staff Beams - //================================================================================================================= - "aghanim_staff_beams" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "aghanim_staff_beams" - "ScriptFile" "abilities/creatures/aghanim_staff_beams" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - "AbilityChannelAnimation" "ACT_DOTA_CHANNEL_ABILITY_2" - "AnimationIgnoresModelScale" "1" - "AbilityCastPoint" "2.0" - - "MaxLevel" "5" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "10000" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5" - "AbilityChannelTime" "6.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "beam_speed" "380 380 380 380 380" - } - "02" - { - "var_type" "FIELD_INTEGER" - "beam_radius" "175" - } - "03" - { - "var_type" "FIELD_INTEGER" - "beam_dps" "0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "linger_time" "8.0 8.5 9.0 9.5 10.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "linger_create_interval" "0.33" - } - "06" - { - "var_type" "FIELD_FLOAT" - "damage_interval" "0.1" - } - "07" - { - "var_type" "FIELD_INTEGER" - "beam_dps_pct" "30 33 36 39 42" - } - } - } - - //================================================================================================================= - // Aghanim: Summon Portals - //================================================================================================================= - "aghanim_summon_portals" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "aghanim_summon_portals" - "ScriptFile" "abilities/creatures/aghanim_summon_portals" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityChannelAnimation" "ACT_DOTA_CHANNEL_ABILITY_4" - "AnimationIgnoresModelScale" "1" - "AbilityCastPoint" "1.4" - "AnimationPlaybackRate" "1.0" - "MaxLevel" "5" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "10000" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5" - "AbilityChannelTime" "5.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "base_portals" "6 6 7 7 8" - } - "02" - { - "var_type" "FIELD_INTEGER" - "portal_health_pct" "20 18 16 14" - } - "03" - { - "var_type" "FIELD_INTEGER" - "min_portal_offset" "600" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_portal_offset" "600" - } - "05" - { - "var_type" "FIELD_FLOAT" - "portal_time" "2.0 2.0 2.0 2.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "total_portal_depth" "20 24 28 32" - } - "07" - { - "var_type" "FIELD_INTEGER" - "staff_crush_radius" "400" - } - "08" - { - "var_type" "FIELD_INTEGER" - "staff_crush_damage" "3400 4250 5100 5950 6800" - } - "09" - { - "var_type" "FIELD_FLOAT" - "staff_crush_stun_duration" "2.0 3.0 4.0 5.0 6.0" - } - - "10" - { - "var_type" "FIELD_FLOAT" - "staff_crush_delay" "1.0" - } - } - } - - //================================================================================================================= - // Aghanim: Blink - //================================================================================================================= - "aghanim_blink" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "aghanim_blink" - "ScriptFile" "abilities/creatures/aghanim_blink" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilitySound" "Hero_QueenOfPain.Blink_in" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - "AbilityCastRange" "99999" - "AbilityCastPoint" "0.5" - "MaxLevel" "5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "travel_speed" "2500" - } - } - } - - //================================================================================================================= - // Aghanim: Spell Swap - //================================================================================================================= - "aghanim_spell_swap" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "aghanim_spell_swap" - "ScriptFile" "abilities/creatures/aghanim_spell_swap" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - "AbilityChannelAnimation" "ACT_DOTA_CHANNEL_ABILITY_5" - "AnimationIgnoresModelScale" "1" - "AbilityCastPoint" "2.0" - "MaxLevel" "5" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "10000" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "7.5" - "AbilityChannelTime" "7.5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "animation_rate" "0.1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "move_speed_slow_pct" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "num_crystal_hits" "9 10 11 12 13" - } - } - } - - //================================================================================================================= - // Aghanim: Shard Attack - //================================================================================================================= - "aghanim_shard_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "aghanim_shard_attack" - "ScriptFile" "abilities/creatures/aghanim_shard_attack" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - "AbilityChannelAnimation" "ACT_DOTA_CHANNEL_ABILITY_6" - "AnimationIgnoresModelScale" "1" - "AbilityCastPoint" "2.0" - "MaxLevel" "5" - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "10000" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30.0" - "AbilityChannelTime" "15.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "spiral_projectiles" "15 15 15 15 15" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spiral_projectile_waves" "6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "spiral_projectile_width" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "spiral_projectile_damage" "2250 2250 2500 2750 3000" - } - "05" - { - "var_type" "FIELD_INTEGER" - "spiral_projectile_speed" "650 650 650 650 650" - } - "06" - { - "var_type" "FIELD_FLOAT" - "spiral_projectile_rotation_speed" "1.2" - } - "07" - { - "var_type" "FIELD_FLOAT" - "spiral_projectile_speed_change_interval" "0.75" - } - - } - } - - - //================================================================================================================= - // Elemental Tiny: Toss - //================================================================================================================= - "aghsfort_elemental_tiny_toss" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "AbilityTextureName" "tiny_toss" - "ScriptFile" "abilities/creatures/aghsfort_elemental_tiny_toss" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "1" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3200" - "AbilityCastPoint" "0.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5.5" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.25" // generally used for damage only - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "1.3" - } - "02" - { - "var_type" "FIELD_INTEGER" - "grab_radius" "300" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_pct" "30" - } - "05" - { - "var_type" "FIELD_INTEGER" - "toss_damage" "900" - } - "06" - { - "var_type" "FIELD_INTEGER" - "AbilityCharges" "" - "LinkedSpecialBonus" "special_bonus_unique_tiny_2" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Elemental Tiny Create Io - //================================================================================================================= - "aghsfort_elemental_tiny_create_io" - { - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/aghsfort_elemental_tiny_create_io" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET| DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8.0" - - // Damage - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "spawn_count" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spawn_distance" "400" - } - "03" - { - "var_type" "FIELD_INTEGER" - "max_summons" "3" - } - } - } - - //================================================================================================================= - // Wisp: Tether - //================================================================================================================= - "aghsfort_wisp_tether" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "wisp_tether" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - - "IsOnCastBar" "0" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0" - "AbilityCastAnimation" "ACT_INVALID" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "900 900 900 900" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movespeed" "5 8 11 14" - } - "03" - { - "var_type" "FIELD_INTEGER" - "latch_distance" "300" - } - "04" - { - "var_type" "FIELD_INTEGER" - "latch_speed" "1000 1000 1000 1000" - } - "05" - { - "var_type" "FIELD_FLOAT" - "tether_heal_amp" "1.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "self_bonus" "0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "slow" "25" - } - "08" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "5.5" - } - "09" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "15" - } - "10" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "15" - } - "11" - { - "var_type" "FIELD_INTEGER" - "health_regen" "200" - } - "12" - { - "var_type" "FIELD_INTEGER" - "status_resist" "20" - } - } - } - - //================================================================================================================= - // Tiny: Tree Grab - //================================================================================================================= - "elemental_tiny_tree_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/elemental_tiny_tree_attack" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - "IsOnCastBar" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "0" - "CalculateSpellDamageTooltip" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_buildings" "0" - "CalculateSpellDamageTooltip" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attack_range" "170" - } - "04" - { - "var_type" "FIELD_INTEGER" - "splash_width" "200" - } - "05" - { - "var_type" "FIELD_INTEGER" - "splash_range" "250" - } - "06" - { - "var_type" "FIELD_INTEGER" - "splash_pct" "50" - } - "07" - { - "var_type" "FIELD_INTEGER" - "throw_splash_pct" "150" - } - "08" - { - "var_type" "FIELD_FLOAT" - "bat_increase" "0.0" - } - "09" - { - "var_type" "FIELD_INTEGER" - "speed_reduction" "0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_wisp_autoattack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "ability_lua" - "ScriptFile" "abilities/creatures/aghsfort_wisp_autoattack" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "wisp_tether" - - "IsOnCastBar" "0" - - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "attack_interval" "0.9" - } - } - } - - //================================================================================================================= - // HERO ABILITY UPGRADES START - //================================================================================================================= - //================================================================================================================= - // Omniknight: START - //================================================================================================================= - - //================================================================================================================= - // Omniknight: Purification - //================================================================================================================= - "aghsfort_omniknight_purification" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_CAN_SELF_CAST" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Omniknight.Purification" - "AbilityTextureName" "omniknight_purification" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "300" - "AbilityCastPoint" "0.2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "9" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "55 60 65 70" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "heal" "150 225 300 375" - "LinkedSpecialBonus" "special_bonus_unique_omniknight_1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - "LinkedSpecialBonus" "special_bonus_unique_omniknight_4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "cast_radius" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "AbilityCharges" "" - "LinkedSpecialBonus" "aghsfort_special_omniknight_purification_charges" - } - "05" - { - "var_type" "FIELD_INTEGER" - "secondary_heal_damage_pct" "75" - } - "06" - { - "var_type" "FIELD_INTEGER" - "cast_range" "300" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Omniknight: Guardian Angel - //================================================================================================================= - "aghsfort_omniknight_guardian_angel" - { - // General - //------------------------------------------------------------------------------------------------------------- - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Omniknight.GuardianAngel.Cast" - "AbilityTextureName" "omniknight_guardian_angel" - - - - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - "AbilityCastPoint" "0.4" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 125 150" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "3.5 4.0 4.5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "1000" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hp_regen" "50 100 150" - } - } - } - - - //================================================================================================================= - // Omniknight: Guardian Angel - //================================================================================================================= - "aghsfort_special_omniknight_guardian_angel_single_target" - { - // General - //------------------------------------------------------------------------------------------------------------- - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "2" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "MaxLevel" "1" - "AbilitySound" "Hero_Omniknight.GuardianAngel.Cast" - "AbilityTextureName" "omniknight_guardian_angel" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "500" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - "AbilityCastPoint" "0.4" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75 75 75" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "mana_cost_modifier" "50" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_guardian_angel_single_target_dummy" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_guardian_angel" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "mana_cost_modifier" "50" - } - } - } - - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_purification_cast_radius" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_purification" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "250" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_purification_charges" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_purification" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "2" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_purification_cooldown_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_purification" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "cooldown_reduction_per_hit" "1.0" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_purification_multicast" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_purification" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "multicast_chance" "100" - } - "02" - { - "var_type" "FIELD_FLOAT" - "multicast_delay" "0.5" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_repel_procs_purification" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_repel" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_repel_outgoing_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_repel" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "60" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_repel_applies_degen_aura" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_repel" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_repel_damage_instance_refraction" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_repel" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_threshold" "5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_instances" "5" - } - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_repel_knockback_on_cast" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_repel" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "knockback_radius" "400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "knockback_speed" "1000" - } - "03" - { - "var_type" "FIELD_INTEGER" - "knockback_damage_pct" "300" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_purification_cooldown_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_purification" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "cooldown_reduction_per_hit" "0.5" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_degen_aura_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_degen_aura" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "damage_interval" "1.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_damage_pct" "100" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_degen_aura_restoration" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_degen_aura" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "8" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_degen_aura_toggle" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_degen_aura" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "100" - } - } - } - - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_guardian_angel_purification" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_guardian_angel" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "purification_trigger_chance" "100" - } - "02" - { - "var_type" "FIELD_FLOAT" - "purification_trigger_cooldown" "1.0" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_omniknight_guardian_angel_immune_flight" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "omniknight_guardian_angel" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "45" - } - } - } - - - - //================================================================================================================= - // Omniknight: END - //================================================================================================================= - - //================================================================================================================= - // Disruptor: START - //================================================================================================================= - - //================================================================================================================= - // Disruptor: Thunder Strike - //================================================================================================================= - "aghsfort_disruptor_thunder_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Disruptor.ThunderStrike.Target" - "AbilityTextureName" "disruptor_thunder_strike" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_THUNDER_STRIKE" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastPoint" "0.05 0.05 0.05 0.05" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "70 80 90 100" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800 800 800 800" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "240 240 240 240" - } - "02" - { - "var_type" "FIELD_INTEGER" - "strikes" "4" - "LinkedSpecialBonus" "special_bonus_unique_disruptor" - } - "03" - { - "var_type" "FIELD_FLOAT" - "strike_interval" "1.5 1.5 1.5 1.5" - } - "04" - { - "var_type" "FIELD_INTEGER" - "strike_damage" "70 90 110 130 " - "LinkedSpecialBonus" "special_bonus_unique_disruptor_3" - } - "05" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0.25" - } - "06" - { - "var_type" "FIELD_INTEGER" - "slow_amount" "100" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_disruptor_thunder_strike_interval_upgrade" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_thunder_strike" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "50" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_disruptor_thunder_strike_mana_restore" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_thunder_strike" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "restore_radius" "450" - } - "02" - { - "var_type" "FIELD_INTEGER" - "restore_amount" "12" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_disruptor_thunder_strike_crit_chance" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_thunder_strike" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "100" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_pct" "150" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_disruptor_thunder_strike_on_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_thunder_strike" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "strike_chance" "100" - } - } - } - - //================================================================================================================= - // Disruptor: Glimpse - //================================================================================================================= - "aghsfort_disruptor_glimpse" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Disruptor.Glimpse.Target" - "AbilityTextureName" "disruptor_glimpse" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.05 0.05 0.05 0.05" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "60" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600 1000 1400 1800" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "backtrack_time" "4.0 4.0 4.0 4.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "cast_range" "1200 1400 1600 1800" - } - "03" - { - "var_type" "FIELD_INTEGER" - "cast_radius" "300" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "120 180 240 300" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - - //================================================================================================================= - // Ability: Special Bonus Glimpse AoE Increase - //================================================================================================================= - "aghsfort_special_disruptor_glimpse_cast_aoe" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_glimpse" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "250" - } - } - } - //================================================================================================================= - // Ability: Special Bonus Glimpse hit on arrival - //================================================================================================================= - "aghsfort_special_disruptor_glimpse_hit_on_arrival" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_glimpse" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "hit_radius" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "int_pct" "300" - } - } - } - //================================================================================================================= - // Ability: Special Bonus Glimpse Travel Damage - //================================================================================================================= - "aghsfort_special_disruptor_glimpse_travel_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_glimpse" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "100" - } - } - } - //================================================================================================================= - // Disruptor: Kinetic Field - //================================================================================================================= - "aghsfort_disruptor_kinetic_field" - { - // General - //------------------------------------------------------------------------------------------------------------- - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Disruptor.KineticField" - "AbilityTextureName" "disruptor_kinetic_field" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_KINETIC_FIELD" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastPoint" "0.05 0.05 0.05 0.05" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "40 50 60 70" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900 900 900 900" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "340" - } - "02" - { - "var_type" "FIELD_FLOAT" - "formation_time" "0.75 0.75 0.75 0.75" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "2.8 3.2 3.4 4" - "LinkedSpecialBonus" "special_bonus_unique_disruptor_5" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus Kinetic Field Instant Setup - //================================================================================================================= - "aghsfort_special_disruptor_kinetic_field_instant_setup" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_kinetic_field" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "100" - } - } - } - //================================================================================================================= - // Ability: Special Bonus Kinetic Field Allied Buff - //================================================================================================================= - "aghsfort_special_disruptor_kinetic_field_allied_attack_buff" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_kinetic_field" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "150" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus Kinetic Field Damage - //================================================================================================================= - "aghsfort_special_disruptor_kinetic_field_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_kinetic_field" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "125" - } - } - } - //================================================================================================================= - // Ability: Special Bonus Kinetic Field Allied Heal - //================================================================================================================= - "aghsfort_special_disruptor_kinetic_field_allied_heal" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_kinetic_field" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "100" - } - } - } - //================================================================================================================= - // Ability: Special Bonus Kinetic Field Instant Setup - //================================================================================================================= - "aghsfort_special_disruptor_kinetic_field_double_ring" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_kinetic_field" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "2" - } - } - } - //================================================================================================================= - // Disruptor: Static Storm - //================================================================================================================= - "aghsfort_disruptor_static_storm" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Disruptor.StaticStorm.Cast" - "AbilityTextureName" "disruptor_static_storm" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_STATIC_STORM" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastPoint" "0.05 0.05 0.05 0.05" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 140 180" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800 800 800" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "pulses" "40" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_max" "300 500 700" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "5.0" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus Static Storm Kinetic Field On Cast - //================================================================================================================= - "aghsfort_special_disruptor_static_storm_kinetic_field_on_cast" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_static_storm" - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Ability: Special Bonus Static Storm Crits on attack - //================================================================================================================= - "aghsfort_special_disruptor_static_storm_crits_on_attacks" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_static_storm" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "100" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_damage" "160" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus Static Storm Damage Reduction - //================================================================================================================= - "aghsfort_special_disruptor_static_storm_damage_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "disruptor_static_storm" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_reduction_pct" "35" - } - } - } - - //================================================================================================================= - // Disruptor: END - //================================================================================================================= - - - //================================================================================================================= - // Magnataur: START - //================================================================================================================= - - //================================================================================================================= - // Magnataur: Shockwave - //================================================================================================================= - "aghsfort_magnataur_shockwave" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityTextureName" "magnataur_shockwave" - "FightRecapLevel" "1" - - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "9" - "AbilityDuration" "0.6875 0.6875 0.6875 0.6875" - - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "55 60 65 70" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "shock_speed" "900" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "shock_width" "200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "shock_damage" "140 200 260 320" - "LinkedSpecialBonus" "special_bonus_unique_magnus_4" - } - "04" - { - "var_type" "FIELD_FLOAT" - "pull_duration" "0.2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movement_slow" "60" - } - "06" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "2" - } - "07" - { - "var_type" "FIELD_INTEGER" - "scepter_distance" "2000" - } - "08" - { - "var_type" "FIELD_INTEGER" - "scepter_speed" "1500" - } - "09" - { - "var_type" "FIELD_INTEGER" - "pull_distance" "150" - } - "10" - { - "var_type" "FIELD_FLOAT" - "basic_slow_duration" "0.75" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Shockwave - Multishot - //================================================================================================================= - "aghsfort_special_magnataur_shockwave_multishot" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_shockwave" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "total_shockwaves" "3" - } - "02" - { - "var_type" "FIELD_INTEGER" - "degrees_between_shockwaves" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "25" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Shockwave - Damage Redution On Targets - //================================================================================================================= - "aghsfort_special_magnataur_shockwave_damage_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_shockwave" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "2.5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_reduction_pct" "65" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Shockwave - Boomerang - //================================================================================================================= - "aghsfort_special_magnataur_shockwave_boomerang" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_shockwave" - } - - //================================================================================================================= - // Magnataur: Empower - //================================================================================================================= - "aghsfort_magnataur_empower" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_Magnataur.Empower.Cast" - "AbilityTextureName" "magnataur_empower" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "45 50 55 60" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.3" // Easy to spam - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "empower_duration" "44 46 48 50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_pct" "25 30 35 40" - "LinkedSpecialBonus" "special_bonus_unique_magnus_2" - } - "03" - { - "var_type" "FIELD_FLOAT" - "cleave_damage_pct" "35 40 45 50" - "LinkedSpecialBonus" "special_bonus_unique_magnus_2" - } - "04" - { - "var_type" "FIELD_INTEGER" - "cleave_starting_width" "150" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cleave_ending_width" "360" - } - "06" - { - "var_type" "FIELD_INTEGER" - "cleave_distance" "650" - } - "07" - { - "var_type" "FIELD_FLOAT" - "splash_damage_pct" "25 30 35 40" - } - "08" - { - "var_type" "FIELD_INTEGER" - "splash_radius" "240" - } - "09" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "900" - } - "10" - { - "var_type" "FIELD_FLOAT" - "self_multiplier" "2" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Empower - All Allies - //================================================================================================================= - "aghsfort_special_magnataur_empower_all_allies" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_empower" - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Empower - Lifesteal - //================================================================================================================= - "aghsfort_special_magnataur_empower_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_empower" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "30" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Empower - Shockwave on Attack - //================================================================================================================= - "aghsfort_special_magnataur_empower_shockwave_on_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_empower" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "80" - } - "02" - { - "var_type" "FIELD_FLOAT" - "shockwave_cooldown" "2" - } - - } - } - - //================================================================================================================= - // Magnataur: Skewer - //================================================================================================================= - "aghsfort_magnataur_skewer" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Magnataur.Skewer.Cast" - "AbilityTextureName" "magnataur_skewer" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "9" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50 60 70 80" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "skewer_speed" "950" - } - "02" - { - "var_type" "FIELD_INTEGER" - "range" "800 900 1000 1100" - "LinkedSpecialBonus" "special_bonus_unique_magnus_3" - } - "03" - { - "var_type" "FIELD_INTEGER" - "slow_pct" "10 20 30 40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "skewer_radius" "175" - } - "05" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "3.25" - } - "06" - { - "var_type" "FIELD_INTEGER" - "skewer_damage" "130 180 230 280" - } - "07" - { - "var_type" "FIELD_INTEGER" - "tree_radius" "200" - } - "08" - { - "var_type" "FIELD_INTEGER" - "tool_attack_slow" "10 20 30 40" - } - "09" - { - "var_type" "FIELD_FLOAT" - "skewer_cooldown" "6" - "RequiresScepter" "1" - } - "10" - { - "var_type" "FIELD_INTEGER" - "skewer_manacost" "40" - "RequiresScepter" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Friendly Skewer - //================================================================================================================= - "aghsfort_special_magnataur_friendly_skewer" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitDamageType" "DAMAGE_TYPE_NONE" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Magnataur.Skewer.Cast" - "AbilityTextureName" "aghsfort_magnataur_friendly_skewer" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "20" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "skewer_speed" "950" - } - "02" - { - "var_type" "FIELD_INTEGER" - "skewer_radius" "175" - } - "03" - { - "var_type" "FIELD_INTEGER" - "max_targets" "20" - } - "04" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "slow_pct" "0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "skewer_damage" "0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "range" "600 800 1000 1200" - } - "08" - { - "var_type" "FIELD_INTEGER" - "tree_radius" "200" - } - "09" - { - "var_type" "FIELD_INTEGER" - "affects_creeps" "0" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Skewer - Original Scepter - //================================================================================================================= - "aghsfort_special_magnataur_skewer_original_scepter" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_skewer" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "skewer_manacost" "40" - } - "02" - { - "var_type" "FIELD_FLOAT" - "skewer_cooldown" "5" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Skewer - Bonus Strength per Target - //================================================================================================================= - "aghsfort_special_magnataur_skewer_bonus_strength" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_skewer" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "strength_gain" "10" - } - "02" - { - "var_type" "FIELD_FLOAT" - "buff_duration" "20" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Skewer - Heal Allies - //================================================================================================================= - "aghsfort_special_magnataur_skewer_heal" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_skewer" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "100" - } - - } - } - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Skewer - Shockwave - //================================================================================================================= - "aghsfort_special_magnataur_skewer_shockwave" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_skewer" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "cooldown_reduction_per_hit" "0.5" - } - } - } - //================================================================================================================= - // Magnataur: Reverse Polarity - //================================================================================================================= - "aghsfort_magnataur_reverse_polarity" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Magnataur.ReversePolarity.Cast" - "AbilityTextureName" "magnataur_reverse_polarity" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - "AbilityCooldown" "35" - "AbilityManaCost" "100 125 150" - "AbilityCastRange" "410 410 410" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // Applies multiple modifiers - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "pull_radius" "410" - } - "02" - { - "var_type" "FIELD_INTEGER" - "polarity_damage" "100 150 200" - } - "03" - { - "var_type" "FIELD_FLOAT" - "hero_stun_duration" "2.75 3.25 3.75" - "LinkedSpecialBonus" "special_bonus_unique_magnus_5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "pull_duration" "0.0 0.0 0.0" - } - } - } - //================================================================================================================= - // Magnataur: Reverse Polarity - //================================================================================================================= - "aghsfort_special_magnataur_reverse_polarity_polarity" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Magnataur.ReversePolarity.Cast" - "AbilityTextureName" "aghsfort_magnataur_reverse_polarity_polarity" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - "AbilityCooldown" "35" - "AbilityManaCost" "200 250 300" - "AbilityCastRange" "410 410 410" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // Applies multiple modifiers - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "pull_radius" "410" - } - "02" - { - "var_type" "FIELD_INTEGER" - "polarity_damage" "50 125 200" - } - "03" - { - "var_type" "FIELD_FLOAT" - "hero_stun_duration" "2.75 3.25 3.75" - "LinkedSpecialBonus" "special_bonus_unique_magnus_5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "pull_duration" "0.3 0.3 3.3" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius_modifier" "75" - } - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_magnataur_reverse_polarity_polarity_dummy" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_reverse_polarity" - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Reverse Polarity - Radius - //================================================================================================================= - "aghsfort_special_magnataur_reverse_polarity_radius" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_reverse_polarity" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "820" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Reverse Polarity - Allies Crit - //================================================================================================================= - "aghsfort_special_magnataur_reverse_polarity_allies_crit" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_reverse_polarity" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Magnataur: Reverse Polarity - Steroid - //================================================================================================================= - "aghsfort_special_magnataur_reverse_polarity_steroid" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "magnataur_reverse_polarity" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "move_speed_percent" "100" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "150" - } - "03" - { - "var_type" "FIELD_FLOAT" - "buff_duration" "20" - } - } - } - - //================================================================================================================= - // Magnataur: END - //================================================================================================================= - - //================================================================================================================= - // Phantom Assassin : Start - //================================================================================================================= - //================================================================================================================= - // Ability: Phantom Assassin's Stifling Dagger - //================================================================================================================= - "aghsfort_phantom_assassin_stifling_dagger" - { - // General - //------------------------------------------------------------------------------------------------------------- - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_PhantomAssassin.Dagger.Cast" - "AbilityTextureName" "phantom_assassin_stifling_dagger" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900 1000 1100 1200" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5.5 5.0 4.5 4.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "20" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "move_slow" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "dagger_speed" "1200" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "1.75 2.5 3.25 4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "base_damage" "160 220 280 340" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attack_factor" "25" - } - "06" - { - "var_type" "FIELD_INTEGER" - "secondary_dagger_range" "600 650 700 750" - - } - "07" - { - "var_type" "FIELD_INTEGER" - "secondary_dagger_width" "220" - - } - "08" - { - "var_type" "FIELD_INTEGER" - "secondary_dagger_amount" "6 8 10 12" - - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - - - //================================================================================================================= - // Ability: Special Bonus - Stifling Dagger No Secondary Dagger limit - //================================================================================================================= - "aghsfort_special_phantom_assassin_stifling_dagger_no_secondary_dagger_restriction" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_stifling_dagger_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Ability: Special Bonus - Stifling Dagger On Attack - //================================================================================================================= - "aghsfort_special_phantom_assassin_stifling_dagger_on_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_stifling_dagger_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "strike_chance" "80" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - Stifling Dagger Autodagger - //================================================================================================================= - "aghsfort_special_phantom_assassin_stifling_dagger_autodagger" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_stifling_dagger_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "fire_rate" "2.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "600" - } - } - } - //================================================================================================================= - // Ability: Phantom Assassin's Phantom Strike - //================================================================================================================= - "aghsfort_phantom_assassin_phantom_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CUSTOM" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_PhantomAssassin.Strike.Start" - "AbilityTextureName" "phantom_assassin_phantom_strike" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000 1000 1000 1000" - "AbilityCastPoint" "0.25" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "40" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "100 125 150 175" - } - - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "3.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "16 20 24 28" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Ability: Special Bonus - Phantom Strike Buffs Allies - //================================================================================================================= - "aghsfort_special_phantom_assassin_phantom_strike_buff_allies" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_phantom_strike_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Ability: Special Bonus - Phantom Strike Duration, cast point, cast range buffs - //================================================================================================================= - "aghsfort_special_phantom_assassin_phantom_strike_mastery" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_phantom_strike_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_range" "500" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_duration" "1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "20" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - Phantom Strike Damage_Reduction - //================================================================================================================= - "aghsfort_special_phantom_assassin_phantom_strike_damage_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_phantom_strike_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_reduction_pct" "40" - } - } - } - - //================================================================================================================= - // Ability: Phantom Assassin's Blur - //================================================================================================================= - "aghsfort_phantom_assassin_blur" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityTextureName" "phantom_assassin_blur" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "30" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "20 30 40 50" - "LinkedSpecialBonus" "special_bonus_unique_phantom_assassin_3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "6 7 8 9" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "600" - } - "04" - { - "var_type" "FIELD_FLOAT" - "fade_duration" "0.25" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Special Ability: Phantom Assassin's Blur Regen when active - //================================================================================================================= - "aghsfort_special_phantom_assassin_blur_regen_when_active" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_blur_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "5" - } - } - } - //================================================================================================================= - // Special Ability: Phantom Assassin's Blur Dagger On End - //================================================================================================================= - "aghsfort_special_phantom_assassin_blur_dagger_on_end" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_blur_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - //================================================================================================================= - // Special Ability: Phantom Assassin's Blur Immediate - //================================================================================================================= - "aghsfort_special_phantom_assassin_blur_immediate" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_blur_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "10" - } - } - } - - //================================================================================================================= - // Ability: Phantom Coup de Grace - //================================================================================================================= - "aghsfort_phantom_assassin_coup_de_grace" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilitySound" "Hero_PhantomAssassin.CoupDeGrace" - "AbilityTextureName" "phantom_assassin_coup_de_grace" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - // "AbilityCooldown" "40" - - // Cost - //------------------------------------------------------------------------------------------------------------- - // "AbilityManaCost" "30 45 60" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "15" - "LinkedSpecialBonus" "special_bonus_unique_phantom_assassin_2" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_bonus" "200 325 450" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Phantom Assassin: Coup de Grace - Marks Targets for Death - //================================================================================================================= - "aghsfort_special_phantom_assassin_coup_de_grace_marks_target" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_coup_de_grace_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "10" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Phantom Assassin: Coup de Grace - Execute - //================================================================================================================= - "aghsfort_special_phantom_assassin_coup_de_grace_execute" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_coup_de_grace_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "health_percent" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "kill_percent" "20" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - Phantom Assassin: Coup de Grace - Kills Refresh - //================================================================================================================= - "aghsfort_special_phantom_assassin_coup_de_grace_kills_refresh" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_coup_de_grace_upgrade" - } - - //================================================================================================================= - // Ability: Special Bonus - Phantom Assassin: Coup de Grace - Bloody Debuff - //================================================================================================================= - "aghsfort_special_phantom_assassin_coup_de_grace_bloody_debuff" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "aghsfort_phantom_assassin_coup_de_grace_upgrade" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "33" - } - "02" - { - "var_type" "FIELD_FLOAT" - "debuff_duration" "3" - } - "03" - { - "var_type" "FIELD_FLOAT" - "radius" "350" - } - "04" - { - "var_type" "FIELD_INTEGER" - "angle" "45" - } - } - } - - //================================================================================================================= - // Phantom Assassin : END - //================================================================================================================= - - //================================================================================================================= - // Winter Wyvern: START - //================================================================================================================= - - //================================================================================================================= - // Winter Wyvern: Arctic Burn - //================================================================================================================= - "aghsfort_winter_wyvern_arctic_burn" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilitySound" "Hero_WinterWyvern.ArcticBurn.Cast" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityTextureName" "winter_wyvern_arctic_burn" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0 0.0 0.0 0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "14.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "45" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "10.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_range_bonus" "300 350 400 450" - } - "03" - { - "var_type" "FIELD_FLOAT" - "damage_per_second" "60 90 120 150" - } - "04" - { - "var_type" "FIELD_FLOAT" - "tick_rate" "0.5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "damage_duration" "5.0" - "CalculateSpellDamageTooltip" "0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "move_slow" "31 34 37 40" - "LinkedSpecialBonus" "special_bonus_unique_winter_wyvern_1" - } - "07" - { - "var_type" "FIELD_INTEGER" - "night_vision_bonus" "600" - } - "08" - { - "var_type" "FIELD_INTEGER" - "projectile_speed_bonus" "700" - } - "09" - { - "var_type" "FIELD_INTEGER" - "tree_destruction_radius" "250" - } - "10" - { - "var_type" "FIELD_FLOAT" - "attack_point" "0.1" - } - "11" - { - "var_type" "FIELD_INTEGER" - "mana_cost_scepter" "30" - "RequiresScepter" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Ability: Special Bonus Arctic Burn Splitshot - //================================================================================================================= - "aghsfort_special_winter_wyvern_arctic_burn_splitshot" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_arctic_burn" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_modifier" "-20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_modifier_tooltip" "80" - } - "03" - { - "var_type" "FIELD_INTEGER" - "arrow_count" "5" - } - "04" - { - "var_type" "FIELD_INTEGER" - "split_shot_bonus_range" "100" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus Arctic Burn DoubleAttack - //================================================================================================================= - "aghsfort_special_winter_wyvern_arctic_burn_doubleattack" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_arctic_burn" - - "AbilityCooldown" "3.5" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "delay" "0.25" - } - "02" - { - "var_type" "FIELD_FLOAT" - "cooldown_tooltip" "2.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - //================================================================================================================= - // Ability: Special Bonus Arctic Burn No Mana cost - //================================================================================================================= - "aghsfort_special_winter_wyvern_arctic_burn_nomana" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_arctic_burn" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - - } - //================================================================================================================= - // Ability: Special Bonus Arctic Burn Splash Damage - //================================================================================================================= - "aghsfort_special_winter_wyvern_arctic_burn_splash_damage" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_arctic_burn" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "350" - } - } - - } - - - //================================================================================================================= - // Winter Wyvern: Splinter Blast - //================================================================================================================= - "aghsfort_winter_wyvern_splinter_blast" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilityTextureName" "winter_wyvern_splinter_blast" - "FightRecapLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "6" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "55 60 65 70" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "750" - } - "02" - { - "var_type" "FIELD_FLOAT" - "projectile_max_time" "1.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "split_radius" "600" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_movespeed" "30" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow_tooltip" "30" - } - "06" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "secondary_projectile_speed" "750" - } - "08" - { - "var_type" "FIELD_INTEGER" - "splinter_damage" "220 260 300 340" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Ability: Special Bonus Splinter Blast Main Target Also hits - //================================================================================================================= - "aghsfort_special_winter_wyvern_splinter_blast_main_target_hit" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_splinter_blast" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "50" - } - } - - } - - //================================================================================================================= - // Ability: Special Bonus Splinter Blast Vacuum - //================================================================================================================= - "aghsfort_special_winter_wyvern_splinter_blast_vacuum" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_splinter_blast" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "0.3" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - //================================================================================================================= - // Ability: Special Bonus Splinter Blast Heal - //================================================================================================================= - "aghsfort_special_winter_wyvern_splinter_blast_heal" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_splinter_blast" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "100" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Winter Wyvern: Cold Embrace - //================================================================================================================= - "aghsfort_winter_wyvern_cold_embrace" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityTextureName" "winter_wyvern_cold_embrace" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Winter_Wyvern.ColdEmbrace" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "25 30 35 40" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "heal_additive" "26 30 34 38" - } - "03" - { - "var_type" "FIELD_FLOAT" - "heal_percentage" "3.0 3.5 4.0 5.5" - "LinkedSpecialBonus" "special_bonus_unique_winter_wyvern_5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - - //================================================================================================================= - // Ability: Special Bonus Cold Embrace Charges - //================================================================================================================= - "aghsfort_special_winter_wyvern_cold_embrace_charges" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_cold_embrace" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "2" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus Cold Embrace Casts Splinter Blast on End - //================================================================================================================= - "aghsfort_special_winter_wyvern_cold_embrace_blast_on_end" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_cold_embrace" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Ability: Special Bonus Cold Embrace Charges - //================================================================================================================= - "aghsfort_special_winter_wyvern_cold_embrace_magic_damage_block" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_cold_embrace" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "350" - } - } - } - //================================================================================================================= - // Winter Wyvern: Winter's Curse - //================================================================================================================= - "aghsfort_winter_wyvern_winters_curse" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilityTextureName" "winter_wyvern_winters_curse" - "FightRecapLevel" "2" - "AbilitySound" "Hero_WinterWyvern.WintersCurse.Target" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "125" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_amplification" "0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "75" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0 4.75 5.5" - "LinkedSpecialBonus" "special_bonus_unique_winter_wyvern_3" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus Winters Curse transfers to new target upon initial target's death - //================================================================================================================= - "aghsfort_special_winter_wyvern_winters_curse_transfer" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_winters_curse" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - } - - } - //================================================================================================================= - // Ability: Special Bonus Winters Curse transfers to new target upon initial target's death - //================================================================================================================= - "aghsfort_special_winter_wyvern_winters_curse_damage_amp" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_winters_curse" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "75" - } - } - - } - //================================================================================================================= - // Ability: Special Bonus Winters Curse transfers to new target upon initial target's death - //================================================================================================================= - "aghsfort_special_winter_wyvern_winters_curse_heal_on_death" - { - // General - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "winter_wyvern_winters_curse" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "50" - } - } - - } - //================================================================================================================= - // Winter Wyvern: END - //================================================================================================================= - //================================================================================================================= - // Snapfire: Start - //================================================================================================================= - //================================================================================================================= - // Ability: Snapfire Scatterblast - //================================================================================================================= - "aghsfort_snapfire_scatterblast" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Snapfire.Shotgun.Fire" - "AbilityTextureName" "snapfire_scatterblast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.4" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AnimationPlaybackRate" "1.2" // 1.0 corresponds to cast point of 0.45 or so - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "40 50 60 70" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "140 200 260 320" - "LinkedSpecialBonus" "special_bonus_unique_snapfire_7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "blast_speed" "3000" - } - "03" - { - "var_type" "FIELD_INTEGER" - "blast_width_initial" "225" - } - "04" - { - "var_type" "FIELD_INTEGER" - "blast_width_end" "400" - } - "05" - { - "var_type" "FIELD_FLOAT" - "debuff_duration" "1.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movement_slow_pct" "100" - } - "07" - { - "var_type" "FIELD_INTEGER" - "point_blank_range" "600" - } - "08" - { - "var_type" "FIELD_FLOAT" - "point_blank_dmg_bonus_pct" "100.0" - } - } - } - - //================================================================================================================= - // Ability: Snapfire Mortimer Kisses - //================================================================================================================= - "aghsfort_snapfire_mortimer_kisses" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_Snapfire.MortimerBlob.Launch" - "AbilityTextureName" "snapfire_mortimer_kisses" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "0.25" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Damage - //------------------------------------------------------------------------------------------------------------- - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - "AbilityDuration" "5.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 150 200" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "projectile_count" "8" - "LinkedSpecialBonus" "special_bonus_unique_snapfire_1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "1300" - } - "03" - { - "var_type" "FIELD_INTEGER" - "projectile_width" "130" - } - "04" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "275" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage_per_impact" "160 240 320" - } - "06" - { - "var_type" "FIELD_FLOAT" - "duration_tooltip" "6.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "projectile_vision" "500" - } - "08" - { - "var_type" "FIELD_FLOAT" - "turn_rate" "75" - } - "09" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "0.5" - } - "10" - { - "var_type" "FIELD_INTEGER" - "burn_damage" "100 125 150" - } - "11" - { - "var_type" "FIELD_INTEGER" - "move_slow_pct" "35 45 55" - "LinkedSpecialBonus" "special_bonus_unique_snapfire_4" - } - "12" - { - "var_type" "FIELD_FLOAT" - "burn_ground_duration" "3.0" - } - "13" - { - "var_type" "FIELD_FLOAT" - "dist_change_speed" "100" - } - "14" - { - "var_type" "FIELD_INTEGER" - "min_range" "350" - } - "15" - { - "var_type" "FIELD_FLOAT" - "min_lob_travel_time" "0.2" - } - "16" - { - "var_type" "FIELD_FLOAT" - "max_lob_travel_time" "0.4" - } - "17" - { - "var_type" "FIELD_FLOAT" - "delay_after_last_projectile" "0.1" - } - "18" - { - "var_type" "FIELD_FLOAT" - "burn_linger_duration" "1.0" - } - } - } - - //================================================================================================================= - // Snapfire: Gobble Up - //================================================================================================================= - "aghsfort_snapfire_gobble_up" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_SHOW_IN_GUIDES" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" - "MaxLevel" "1" - "FightRecapLevel" "1" - "IsGrantedByScepter" "1" - - "AbilitySound" "Hero_Snapfire.GobbleUp.Cast" - "AbilityTextureName" "snapfire_gobble_up" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "150" - "AbilityCooldown" "40" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "max_time_in_belly" "3.0" - "RequiresScepter" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Snapfire Spit Creep - //================================================================================================================= - "aghsfort_snapfire_spit_creep" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "MaxLevel" "1" - "FightRecapLevel" "1" - "IsGrantedByScepter" "1" - "AbilitySound" "Hero_Snapfire.MortimerBlob.Launch" - "AbilityTextureName" "snapfire_spit_creep" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Damage - //------------------------------------------------------------------------------------------------------------- - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "1400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "projectile_width" "130" - } - "03" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "impact_damage" "400" - } - "05" - { - "var_type" "FIELD_INTEGER" - "projectile_vision" "500" - } - "06" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "0.5" - } - "07" - { - "var_type" "FIELD_INTEGER" - "burn_damage" "100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "move_slow_pct" "25" - "LinkedSpecialBonus" "special_bonus_unique_snapfire_4" - } - "09" - { - "var_type" "FIELD_FLOAT" - "burn_ground_duration" "3.0" - } - "10" - { - "var_type" "FIELD_INTEGER" - "min_range" "0" //"600" - } - "11" - { - "var_type" "FIELD_FLOAT" - "min_lob_travel_time" "0.2" - } - "12" - { - "var_type" "FIELD_FLOAT" - "max_lob_travel_time" "0.4" - } - "13" - { - "var_type" "FIELD_FLOAT" - "burn_linger_duration" "1.0" - } - "14" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0" - } - "15" - { - "var_type" "FIELD_FLOAT" - "min_height_above_lowest" "150.0" - } - "16" - { - "var_type" "FIELD_FLOAT" - "min_height_above_highest" "100.0" - } - "17" - { - "var_type" "FIELD_FLOAT" - "min_acceleration" "1000.0" - } - "18" - { - "var_type" "FIELD_FLOAT" - "max_acceleration" "2000.0" - } - } - } - - //================================================================================================================= - // Ability: Snapfire Firesnap Cookie - //================================================================================================================= - "aghsfort_snapfire_firesnap_cookie" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "6483" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Snapfire.FeedCookie.Cast" - "AbilityTextureName" "snapfire_firesnap_cookie" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.2" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "9" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50 60 70 80" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "1000" - } - "02" - { - "var_type" "FIELD_FLOAT" - "pre_hop_duration" "0.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "jump_duration" "0.484" //"0.431 0.484 0.538 0.592" // proportional to horizontal distance - } - "04" - { - "var_type" "FIELD_INTEGER" - "jump_height" "257" //"228 257 285 314" // proportional to horizontal distance - } - "05" - { - "var_type" "FIELD_INTEGER" - "jump_horizontal_distance" "1100" //"400 450 500 550" - } - "06" - { - "var_type" "FIELD_FLOAT" - "pre_land_anim_time" "0.14" - } - "07" - { - "var_type" "FIELD_FLOAT" - "landing_gesture_duration" "0.6" - } - "08" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "550" - } - "09" - { - "var_type" "FIELD_INTEGER" - "impact_damage" "150 200 250 300" - } - "10" - { - "var_type" "FIELD_FLOAT" - "impact_stun_duration" "1.6 1.8 2.0 2.2" - } - "11" - { - "var_type" "FIELD_FLOAT" - "self_cast_delay" "0.1" - } - } - } - - //================================================================================================================= - // Ability: Snapfire Lil Shredder - //================================================================================================================= - "aghsfort_snapfire_lil_shredder" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Snapfire.ExplosiveShells.Cast" - "AbilityTextureName" "snapfire_lil_shredder" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - "AbilityCastRange" "800" - "AbilityCastAnimation" "ACT_DOTA_OVERRIDE_ABILITY_3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - "AbilityDuration" "12" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50 55 60 65" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "50 100 150 200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "buffed_attacks" "12" - } - "03" - { - "var_type" "FIELD_INTEGER" - "attack_speed_bonus" "200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attack_range_bonus" "150 200 250 300" - } - "05" - { - "var_type" "FIELD_INTEGER" - "buff_duration_tooltip" "12" - } - "06" - { - "var_type" "FIELD_FLOAT" - "base_attack_time" "1.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "attack_speed_slow_per_stack" "15 20 25 30" - } - "08" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "3.0" - } - } - - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_scatterblast_double_barrel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_scatterblast" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "2" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_scatterblast_knockback" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_scatterblast" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "400" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_scatterblast_fullrange_pointblank" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_scatterblast" - "AbilitySpecial" - { - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_scatterblast_barrage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_scatterblast" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "100" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_firesnap_cookie_multicookie" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_firesnap_cookie" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - "02" - { - "var_type" "FIELD_INTEGER" - "projectile_speed_pct" "50" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_firesnap_cookie_allied_buff" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_firesnap_cookie" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_range" "350" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_damage" "100" - } - "03" - { - "var_type" "FIELD_FLOAT" - "buff_duration" "8.0" - } - } - } - - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_firesnap_cookie_enemytarget" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_firesnap_cookie" - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_lil_shredder_explosives" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_lil_shredder" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_lil_shredder_bouncing_bullets" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_lil_shredder" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bounce_range" "300" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bounces" "5" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_lil_shredder_ally_cast" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_lil_shredder" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "500" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_mortimer_kisses_fragmentation" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_mortimer_kisses" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "split_projectiles" "6" - } - "02" - { - "var_type" "FIELD_INTEGER" - "split_radius" "300" - } - "03" - { - "var_type" "FIELD_INTEGER" - "split_impact_radius" "150" - } - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_mortimer_kisses_autoattack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_mortimer_kisses" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "fire_rate" "1.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "450" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_snapfire_mortimer_kisses_incoming_damage_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "snapfire_mortimer_kisses" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "90" - } - } - } - - - //================================================================================================================= - // Snapfire: END - //================================================================================================================= - - //================================================================================================================= - // Tusk: START - //================================================================================================================= - - //================================================================================================================= - // Tusk: Ice Shards - //================================================================================================================= - "aghsfort_tusk_ice_shards" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Tusk.IceShards" - "AbilityTextureName" "tusk_ice_shards" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "2000" - "AbilityCastPoint" "0.1 0.1 0.1 0.1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50 60 70 80" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "shard_width" "200" - } - - "02" - { - "var_type" "FIELD_INTEGER" - "shard_damage" "170 220 270 320" - } - "03" - { - "var_type" "FIELD_INTEGER" - "shard_count" "7" - } - "04" - { - "var_type" "FIELD_FLOAT" - "shard_speed" "1200.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "shard_duration" "3.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "shard_angle_step" "40.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "shard_distance" "200" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Tusk: Ice Shards Stop - //================================================================================================================= - "aghsfort_tusk_ice_shards_stop" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0 0.0 0.0 0.0" - } - - - - //================================================================================================================= - // Tusk: Snowball - //================================================================================================================= - "aghsfort_tusk_snowball" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Tusk.Snowball.Cast" - "AbilityTextureName" "tusk_snowball" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1250" - "AbilityCastPoint" "0.1 0.1 0.1 0.1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "40 50 60 70" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "snowball_damage" "140 190 240 290" - "LinkedSpecialBonus" "special_bonus_unique_tusk_2" - } - "02" - { - "var_type" "FIELD_INTEGER" - "snowball_speed" "600 625 650 675" - "LinkedSpecialBonus" "special_bonus_unique_tusk_3" - } - "03" - { - "var_type" "FIELD_INTEGER" - "snowball_damage_bonus" "70 80 90 100" - } - "04" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "0.5 0.75 1.0 1.25" - } - "05" - { - "var_type" "FIELD_INTEGER" - "snowball_windup_radius" "100" - } - "06" - { - "var_type" "FIELD_FLOAT" - "snowball_duration" "3.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "snowball_radius" "200" - } - "08" - { - "var_type" "FIELD_INTEGER" - "snowball_grow_rate" "40" - } - "09" - { - "var_type" "FIELD_FLOAT" - "snowball_windup" "3.0" - } - "10" - { - "var_type" "FIELD_INTEGER" - "snowball_grab_radius" "350" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Tusk: Launch Snowball - //================================================================================================================= - "aghsfort_tusk_launch_snowball" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_PSEUDO_QUEUE" - "AbilityTextureName" "tusk_snowball" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0 0.0 0.0 0.0" - "AbilityCastAnimation" "ACT_INVALID" - } - - //================================================================================================================= - // Tusk: Tag Team - //================================================================================================================= - "aghsfort_tusk_tag_team" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilitySound" "Hero_Tusk.FrozenSigil" - "AbilityTextureName" "tusk_tag_team" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0" - "AbilityCastRange" "500" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - "AbilityCastGestureSlot" "DEFAULT" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "35" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "50 80 110 140" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movement_slow" "75" - } - "03" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0.4" - } - "04" - { - "var_type" "FIELD_FLOAT" - "debuff_duration" "5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "350" - } - } - } - - //================================================================================================================= - // Tusk: Walrus Punch - //================================================================================================================= - "aghsfort_tusk_walrus_punch" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AUTOCAST | DOTA_ABILITY_BEHAVIOR_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Tusk.WalrusPunch.Target" - "AbilityTextureName" "tusk_walrus_punch" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0" - "AbilityCastRange" "150" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "80 120 160" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_multiplier" "350 400 450" - "LinkedSpecialBonus" "special_bonus_unique_tusk" - } - "02" - { - "var_type" "FIELD_FLOAT" - "air_time" "1.0" - "LinkedSpecialBonus" "special_bonus_unique_tusk_7" - } - "03" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "2.0 3.0 4.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "move_slow" "40" - } - "05" - { - "var_type" "FIELD_INTEGER" - "push_length" "1000" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_ice_shards_circle" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_ice_shards" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "80" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_ice_shards_secondary" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_ice_shards" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "2000" - } - } - } - - - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_ice_shards_explode" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_ice_shards" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "75" - } - "03" - { - "var_type" "FIELD_FLOAT" - "explosion_interval" "0.66" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_ice_shards_stun" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_ice_shards" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "2" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_snowball_heal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_snowball" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "4" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_snowball_end_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_snowball" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "500" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_snowball_global" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_snowball" - "AbilitySpecial" - { - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_tag_team_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_tag_team" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "25" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_tag_team_toggle" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_tag_team" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "15" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_tag_team_global" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_tag_team" - "AbilitySpecial" - { - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_walrus_punch_reset" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_walrus_punch" - "AbilitySpecial" - { - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_walrus_punch_land_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_walrus_punch" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "100" - } - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_tusk_walrus_punch_wallop" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "tusk_walrus_punch" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "distance" "600" - } - "02" - { - "var_type" "FIELD_INTEGER" - "fall_off_pct" "25" - } - "03" - { - "var_type" "FIELD_FLOAT" - "vertical_distance" "150" - } - - } - } - //================================================================================================================= - // Tusk: END - //================================================================================================================= - - //================================================================================================================= - // Ursa: START - //================================================================================================================= - //================================================================================================================= - // Ursa: Earthshock - //================================================================================================================= - "aghsfort_ursa_earthshock" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Ursa.Earthshock" - "AbilityTextureName" "ursa_earthshock" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "5.0" - "AbilityDuration" "4.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "45 50 55 60" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "shock_radius" "385" - "LinkedSpecialBonus" "special_bonus_unique_ursa_5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "movement_slow" "25 35 45 55" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hop_distance" "250" - } - "04" - { - "var_type" "FIELD_FLOAT" - "hop_duration" "0.25" - } - "05" - { - "var_type" "FIELD_INTEGER" - "hop_height" "83" - } - "06" - { - "var_type" "FIELD_INTEGER" - "impact_damage" "150 210 270 330" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityCastGestureSlot" "DEFAULT" - } - - //================================================================================================================= - // Ursa: Overpower - //================================================================================================================= - "aghsfort_ursa_overpower" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_Ursa.Overpower" - "AbilityTextureName" "ursa_overpower" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_OVERRIDE_ABILITY_3" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "0" - "AbilityCastPoint" "0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8" - "AbilityDuration" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "40 45 50 55" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "max_attacks" "5 6 7 8" - "LinkedSpecialBonus" "special_bonus_unique_ursa_7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_speed_bonus_pct" "400" - } - } - } - - //================================================================================================================= - // Ursa: Fury Swipes - //================================================================================================================= - "aghsfort_ursa_fury_swipes" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityTextureName" "ursa_fury_swipes" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_reset_time" "10" - "LinkedSpecialBonus" "special_bonus_unique_ursa_4" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_reset_time_roshan" "12" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_per_stack" "16 22 28 34" //"9 18 27 36" - "LinkedSpecialBonus" "special_bonus_unique_ursa" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_swipe_stack" "10" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Ursa: Enrage - //================================================================================================================= - "aghsfort_ursa_enrage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Ursa.Enrage" - "AbilityTextureName" "ursa_enrage" - - - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_OVERRIDE_ABILITY_4" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "65" - } - "02" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "65" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "3 3.5 4" - "LinkedSpecialBonus" "special_bonus_unique_ursa_3" - } - "04" - { - "var_type" "FIELD_FLOAT" - "cooldown_scepter" "30 24 18" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_earthshock_bonus_charge" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_earthshock" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "1" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_earthshock_invis" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_earthshock" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "2.5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "value2" "0.0" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_earthshock_apply_fury_swipes" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_earthshock" - "AbilitySpecial" - { - - } - } - "aghsfort_special_ursa_earthshock_overpower_stack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_earthshock" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "1" - } - } - } - - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_earthshock_knockback" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_earthshock" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "200" // knockback distance - } - "02" - { - "var_type" "FIELD_FLOAT" - "value2" "0.3" // knockback duration - } - "03" - { - "var_type" "FIELD_FLOAT" - "value3" "1.5" // stun duration - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_earthshock_miss_chance" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_earthshock" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "50" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_overpower_crit" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_overpower" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "200" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_overpower_evasion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_overpower" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "3.5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "50" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_overpower_taunt" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_overpower" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "6" // armor - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "350" // radius - } - "03" - { - "var_type" "FIELD_FLOAT" - "value3" "2.5" // seconds - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_overpower_cleave" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_overpower" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "80" // damage pct - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "150" // starting width - } - "03" - { - "var_type" "FIELD_INTEGER" - "value3" "360" // ending width - } - "04" - { - "var_type" "FIELD_INTEGER" - "value4" "650" // cleave distance - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_fury_swipes_armor_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_fury_swipes" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "1.5" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_enrage_magic_immunity" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_enrage" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "700" // radius - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "30" // Percentage over model scale - } - } - } - "aghsfort_special_ursa_fury_swipes_ursa_minor" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_fury_swipes" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "cubs" "3" - } - "02" - { - "var_type" "FIELD_INTEGER" - "mana_cost" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "cooldown" "12" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "10.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cub_swipes_modifier" "80" - } - } - } - "aghsfort_special_ursa_fury_swipes_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_fury_swipes" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "4" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_enrage_allies" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_enrage" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "700" // radius - } - } - } - - - - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_enrage_fear" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_enrage" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "500" // radius - } - "02" - { - "var_type" "FIELD_FLOAT" - "value2" "3.0" // duration - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_enrage_armor" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_enrage" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "700" // radius - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "30" // bonus armor - } - } - } - "aghsfort_special_ursa_enrage_earthshock" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_enrage" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "interval" "1.0" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_ursa_enrage_attack_speed" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "ursa_enrage" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "700" // radius - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "300" // attack speed - } - } - } - - //================================================================================================================= - // Ursa: END - //================================================================================================================= - - - //================================================================================================================= - // Sniper: START - //================================================================================================================= - - //================================================================================================================= - // Sniper: Shrapnel - //================================================================================================================= - "aghsfort_sniper_shrapnel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Sniper.ShrapnelShatter" - "AbilityTextureName" "sniper_shrapnel" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1800" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0" - "AbilityCharges" "3" - "AbilityChargeRestoreTime" "14" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "45 50 55 60" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.25" // primarily about damage - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed" "-30 -40 -50 -60" - "LinkedSpecialBonus" "special_bonus_unique_sniper_5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "03" - { - "var_type" "FIELD_INTEGER" - "shrapnel_damage" "50 70 90 110" - "LinkedSpecialBonus" "special_bonus_unique_sniper_1" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "5.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "damage_delay" "0.25" - } - "06" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "2.0 2.0 2.0 2.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "AbilityCharges" "" - "LinkedSpecialBonus" "special_bonus_unique_sniper_2" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Sniper: Headshot - //================================================================================================================= - "aghsfort_sniper_headshot" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityTextureName" "sniper_headshot" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "proc_chance" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "80 140 200 260" - } - "03" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "10" - "LinkedSpecialBonus" "special_bonus_unique_sniper_3" - } - "04" - { - "var_type" "FIELD_INTEGER" - "slow" "-100" - } - "05" - { - "var_type" "FIELD_INTEGER" - "slow_vs_considered_hero" "-40" - } - "06" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "1.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Sniper: Take Aim - //================================================================================================================= - "aghsfort_sniper_take_aim" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityTextureName" "sniper_take_aim" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4" - - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "30" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_range" "250 300 350 400" - "LinkedSpecialBonus" "special_bonus_unique_sniper_6" - } - "02" - { - "var_type" "FIELD_INTEGER" - "active_attack_range_multiplier" "5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Sniper: Assassinate - //================================================================================================================= - "aghsfort_sniper_assassinate" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "2" - - "AbilitySound" "Ability.Assassinate" - "AbilityTextureName" "sniper_assassinate" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastRangeBuffer" "600" - "AbilityCastPoint" "0.5" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 130 160" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.0" // Modifier just does damage - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "600 1000 1400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "abilitycastpoint" "" - "LinkedSpecialBonus" "aghsfort_special_sniper_assassinate_original_scepter" - "LinkedSpecialBonusOperation" "SPECIAL_BONUS_SUBTRACT" - } - "03" - { - "var_type" "FIELD_FLOAT" - "scepter_stun_duration" "1.5" - "RequiresScepter" "1" - } - "04" - { - "var_type" "FIELD_FLOAT" - "scepter_cast_point" "0.5" - "RequiresScepter" "1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "2500" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_shrapnel_bombs" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_shrapnel" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" // bomb aoe - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "80" // damage pct - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_shrapnel_attack_speed" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_shrapnel" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "50" // attack speed per charge - } - "02" - { - "var_type" "FIELD_FLOAT" - "value2" "15" // charge duration - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_shrapnel_miss_chance" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_shrapnel" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "50" // miss chance - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_shrapnel_move_speed" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_shrapnel" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "200" // move speed - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_headshot_crits" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_headshot" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" // crit damage - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_headshot_stuns" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_headshot" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "2.0" // cooldown - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_take_aim_self_purge" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_take_aim" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "250" // bonus movespeed - } - "02" - { - "var_type" "FIELD_FLOAT" - "value2" "2.5" // sprint duration - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_take_aim_aoe" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_take_aim" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "500" // radius - } - "02" - { - "var_type" "FIELD_FLOAT" - "value2" "0.05" // delay per unit - } - "03" - { - "var_type" "FIELD_INTEGER" - "value3" "800" // cast range - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_take_aim_hop_backwards" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_take_aim" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "400" // distance - } - "02" - { - "var_type" "FIELD_FLOAT" - "value2" "0.2" // travel duration - } - "03" - { - "var_type" "FIELD_INTEGER" - "value3" "350" // knockback proc range - } - "04" - { - "var_type" "FIELD_INTEGER" - "value4" "180" // knockback angle - } - "05" - { - "var_type" "FIELD_FLOAT" - "value5" "30.0" // knockback height - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_take_aim_armor_reduction" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_take_aim" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "10" // duration - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "8" // armor reduction - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_take_aim_rapid_fire" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_take_aim" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "6.0" // duration - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "400" // attack speed bonus - } - "03" - { - "var_type" "FIELD_INTEGER" - "value3" "4" // attack count - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_assassinate_buckshot" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_assassinate" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "900" // scatter range - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "450" // scatter width - } - "03" - { - "var_type" "FIELD_INTEGER" - "value3" "100" // buckshot damage pct - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_assassinate_original_scepter" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_assassinate" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_sniper_assassinate_killshot" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "sniper_assassinate" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "200" // bonus assassinate damage per kill - } - "02" - { - "var_type" "FIELD_INTEGER" - "value2" "2" // max killshot gains per encounter - } - } - } - - - //================================================================================================================= - // Sniper: END - //================================================================================================================= - - - //================================================================================================================= - // Mars: Start - //================================================================================================================= - - - //================================================================================================================= - // Ability: Spear of Mars - //================================================================================================================= - "aghsfort_mars_spear" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "mars_spear" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_DIRECTIONAL" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Mars.Spear.Cast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.25" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "55 60 65 70" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "175 225 275 325" - "LinkedSpecialBonus" "special_bonus_unique_mars_spear_bonus_damage" - } - "02" - { - "var_type" "FIELD_FLOAT" - "spear_speed" "1400" - } - "03" - { - "var_type" "FIELD_INTEGER" - "spear_width" "125" - } - "04" - { - "var_type" "FIELD_INTEGER" - "spear_vision" "300" - } - "05" - { - "var_type" "FIELD_INTEGER" - "spear_range" "1200" - } - "06" - { - "var_type" "FIELD_FLOAT" - "activity_duration" "1.7" - } - "07" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "2.2 2.4 2.6 2.8" - "LinkedSpecialBonus" "special_bonus_unique_mars_spear_stun_duration" - } - "08" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.25" - } - "09" - { - "var_type" "FIELD_FLOAT" - "knockback_distance" "75" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_5" - } - - //================================================================================================================= - // Mars: God's Rebuke - //================================================================================================================= - "aghsfort_mars_gods_rebuke" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "mars_gods_rebuke" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Mars.Shield.Cast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityCastRange" "500" - "AbilityCastPoint" "0.2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "7" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "45 50 55 60" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_mult" "160 210 260 310" - "LinkedSpecialBonus" "special_bonus_unique_mars_gods_rebuke_extra_crit" - } - "02" - { - "var_type" "FIELD_INTEGER" - "angle" "140" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - "04" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.3" - } - "05" - { - "var_type" "FIELD_FLOAT" - "knockback_distance" "150" - } - "06" - { - "var_type" "FIELD_INTEGER" - "knockback_slow" "40" - } - "07" - { - "var_type" "FIELD_FLOAT" - "knockback_slow_duration" "2" - } - "08" - { - "var_type" "FIELD_FLOAT" - "activity_duration" "2" - } - "09" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_vs_heroes" "35" - } - } - } - - //================================================================================================================= - // Ability: Mars Bulwark - //================================================================================================================= - "aghsfort_mars_bulwark" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "mars_bulwark" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityCastAnimation" "ACT_INVALID" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8" - "AbilityDuration" "5.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "15" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "physical_damage_reduction" "40 45 50 55" - } - "02" - { - "var_type" "FIELD_INTEGER" - "forward_angle" "140" - } - "03" - { - "var_type" "FIELD_INTEGER" - "physical_damage_reduction_side" "35 40 45 50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "side_angle" "240" - } - "05" - { - "var_type" "FIELD_INTEGER" - "redirect_chance" "70" - } - "06" - { - "var_type" "FIELD_INTEGER" - "redirect_range" "800" - } - "07" - { - "var_type" "FIELD_INTEGER" - "redirect_speed_penatly" "20" - } - "08" - { - "var_type" "FIELD_INTEGER" - "active_bulwark_block_bonus" "50" - } - "09" - { - "var_type" "FIELD_INTEGER" - "active_duration" "4 5 6 7" - } - - } - } - - //================================================================================================================= - // Phoenix: Sun Ray Stop - //================================================================================================================= - "aghsfort_mars_bulwark_stop" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityTextureName" "aghsfort_mars_bulwark_stop" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0 0.0 0.0 0.0" - "AbilityCastAnimation" "ACT_INVALID" - } - - - //================================================================================================================= - // Ability: Mars Arena of Blood - //================================================================================================================= - "aghsfort_mars_arena_of_blood" - { - "AbilityTextureName" "mars_arena_of_blood" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilitySound" "Hero_Mars.ArenaOfBlood.Start" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCastPoint" "0.2" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 150 200" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "5 6 7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "03" - { - "var_type" "FIELD_INTEGER" - "width" "100" - } - "04" - { - "var_type" "FIELD_INTEGER" - "spear_damage" "100 200 300" - } - "05" - { - "var_type" "FIELD_FLOAT" - "formation_time" "0.66" - } - "06" - { - "var_type" "FIELD_INTEGER" - "spear_distance_from_wall" "360" - } - "07" - { - "var_type" "FIELD_FLOAT" - "spear_attack_interval" "0.40" - } - "08" - { - "var_type" "FIELD_INTEGER" - "warrior_count" "14" - } - "09" - { - "var_type" "FIELD_FLOAT" - "first_warrior_angle" "0.0" - } - "10" - { - "var_type" "FIELD_FLOAT" - "warrior_fade_min_dist" "350.0" - } - "11" - { - "var_type" "FIELD_FLOAT" - "warrior_fade_max_dist" "450.0" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_spear_multiskewer" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_spear" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "10" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_spear_impale_explosion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_spear" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "500" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_spear_burning_trail" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_spear" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "trail_duration" "4" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "75" - } - "03" - { - "var_type" "FIELD_INTEGER" - "path_radius" "150" - } - "04" - { - "var_type" "FIELD_FLOAT" - "linger_duration" "0.2" - } - "05" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "0.5" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_gods_rebuke_full_circle" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_gods_rebuke" - "AbilitySpecial" - { - - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_gods_rebuke_stun" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_gods_rebuke" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "2.5" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_gods_rebuke_strength_buff" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_gods_rebuke" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "buff_duration" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "strength_gain" "10" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_bulwark_counter_rebuke" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_bulwark" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "15" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_bulwark_healing" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_bulwark" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "4" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_bulwark_spears" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_bulwark" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "stack_limit" "3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "stack_interval" "1.25" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_bulwark_soldiers" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_bulwark" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "soldier_count" "3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "soldier_offset" "200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_pct" "100" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attack_damage_tooltip" "100" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attack_range_tooltip" "300" - } - } - } - - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_bulwark_return" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_bulwark" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "75" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_arena_of_blood_fear" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_arena_of_blood" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "3" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_arena_of_blood_global" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_arena_of_blood" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "25" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_arena_of_blood_attack_buff" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_arena_of_blood" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "100" - } - } - } - //================================================================================================================= - // Ability: Special Bonus - //================================================================================================================= - "aghsfort_special_mars_arena_of_blood_outside_perimeter" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "mars_arena_of_blood" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "250" - } - } - } - - - - //================================================================================================================= - // Mars: End - //================================================================================================================= - - //================================================================================================================= - // Viper: Start - //================================================================================================================= - - //================================================================================================================= - // Aghsfort Viper: Poison Attack - //================================================================================================================= - "aghsfort_viper_poison_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AUTOCAST | DOTA_ABILITY_BEHAVIOR_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "hero_viper.poisonAttack.Cast" - "AbilityTextureName" "viper_poison_attack" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "750" - "AbilityCastPoint" "0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "0 0 0 0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "10 12 14 16" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "damage" "15 20 25 30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "18 20 22 24" - } - "04" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "3.0 3.5 4.0 4.5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_stacks" "9" - } - "06" - { - "var_type" "FIELD_INTEGER" - "bonus_range" "105 115 125 145" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Aghsfort Viper: Nethertoxin - //================================================================================================================= - "aghsfort_viper_nethertoxin" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "AbilityTextureName" "viper_nethertoxin" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.2" - "AbilityCastRange" "900" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "45 50 55 60" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "min_damage" "50 65 80 95" - } - "02" - { - "var_type" "FIELD_INTEGER" - "max_damage" "60 80 100 120" - } - "03" - { - "var_type" "FIELD_FLOAT" - "max_duration" "3" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "8" - } - "06" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "2000" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Aghsfort Viper: Corrosive Skin - //================================================================================================================= - "aghsfort_viper_corrosive_skin" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "hero_viper.CorrosiveSkin" - "AbilityTextureName" "viper_corrosive_skin" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportBonus" "10" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "20 24 28 32" - "LinkedSpecialBonus" "special_bonus_unique_viper_1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_magic_resistance" "19 21 23 25" - "LinkedSpecialBonus" "special_bonus_unique_viper_1" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage" "20 24 28 32" - "LinkedSpecialBonus" "special_bonus_unique_viper_1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_range_tooltip" "1400" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Aghsfort Viper: Viper Strike - //================================================================================================================= - "aghsfort_viper_viper_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "2" - "AbilitySound" "hero_viper.viperStrike" - "AbilityTextureName" "viper_viper_strike" - - - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 150 200" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "150 250 350" - "LinkedSpecialBonus" "special_bonus_unique_viper_2" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "-60 -70 -80" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "-60 -70 -80" - } - "05" - { - "var_type" "FIELD_INTEGER" - "mana_cost_scepter" "125 125 125" - "RequiresScepter" "1" - } - "06" - { - "var_type" "FIELD_FLOAT" - "cooldown_scepter" "10" - "RequiresScepter" "1" - } - "07" - { - "var_type" "FIELD_INTEGER" - "cast_range_scepter" "900" - "RequiresScepter" "1" - } - "08" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "1200" - } - "09" - { - "var_type" "FIELD_INTEGER" - "max_charges" "2" - } - "10" - { - "var_type" "FIELD_FLOAT" - "charge_restore_time" "30.0" - } - } - } - - //================================================================================================================= - // Ability: Viper Poison Attack Snap - //================================================================================================================= - "aghsfort_special_viper_poison_snap" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_poison_attack" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "25" - } - } - } - - //================================================================================================================= - // Ability: Viper Poison Attack Explode - //================================================================================================================= - "aghsfort_special_viper_poison_attack_explode" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_poison_attack" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - "02" - { - "var_type" "FIELD_FLOAT" - "damage_multiplier" "2.5" - } - } - } - - //================================================================================================================= - // Ability: Viper Poison Attack Spread - //================================================================================================================= - "aghsfort_special_viper_poison_attack_spread" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_poison_attack" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "500" - } - } - } - - //================================================================================================================= - // Ability: Viper Nethertoxin Lifesteal - //================================================================================================================= - "aghsfort_special_viper_nethertoxin_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_nethertoxin" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "20" - } - } - } - - //================================================================================================================= - // Ability: Viper Nethertoxin Charges - //================================================================================================================= - "aghsfort_special_viper_nethertoxin_charges" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_nethertoxin" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "2" - } - } - } - - //================================================================================================================= - // Ability: Viper Nethertoxin Persist - //================================================================================================================= - "aghsfort_special_viper_nethertoxin_persist" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_nethertoxin" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "2.0" - } - } - } - - //================================================================================================================= - // Ability: Viper Corrosive Skin Speed Steal - //================================================================================================================= - "aghsfort_special_viper_corrosive_skin_speed_steal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_corrosive_skin" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_factor" "0.25" - } - } - } - - //================================================================================================================= - // Ability: Viper Corrosive Skin Flying - //================================================================================================================= - "aghsfort_special_viper_corrosive_skin_flying" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_corrosive_skin" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "damage_multiplier" "2.0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "flight_time" "8.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "cooldown" "30.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_cost" "50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "450" - } - } - } - - //================================================================================================================= - // Ability: Viper Corrosive Skin Aura - //================================================================================================================= - "aghsfort_special_viper_corrosive_skin_aura" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_corrosive_skin" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "900" - } - } - } - - //================================================================================================================= - // Ability: Viper Viper Strike Allies - //================================================================================================================= - "aghsfort_special_viper_viper_strike_allies" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_viper_strike" - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Ability: Viper Viper Strike Allies - //================================================================================================================= - "aghsfort_special_viper_chain_viper_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_viper_strike" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "2" - } - } - } - - //================================================================================================================= - // Ability: Viper Viper Strike Channeled - //================================================================================================================= - "aghsfort_special_viper_channeled_viper_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_viper_strike" - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // Ability: Viper Viper Strike Channeled - //================================================================================================================= - "aghsfort_special_viper_periodic_strike" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "viper_viper_strike" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "0.75" - } - - } - } - - - //================================================================================================================= - // Viper: End - //================================================================================================================= - - //================================================================================================================= - // WEAVER Start - //================================================================================================================= - - //================================================================================================================= - // Weaver: The Swarm - //================================================================================================================= - "aghsfort_weaver_the_swarm" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilitySound" "Hero_Weaver.Swarm.Cast" - "AbilityTextureName" "weaver_the_swarm" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - "AbilityCastRange" "3000" - "AbilityCooldown" "12" - "AbilityManaCost" "50 55 60 65" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.2" // Primarily about the damage - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "30 35 40 45" - } - "02" - { - "var_type" "FIELD_FLOAT" - "attack_rate" "1.0 0.95 0.90 0.85" - } - "03" - { - "var_type" "FIELD_INTEGER" - "count" "16" - } - "04" - { - "var_type" "FIELD_FLOAT" - "armor_reduction" "1 1 1 1" - "LinkedSpecialBonus" "special_bonus_unique_weaver_3" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - } - "06" - { - "var_type" "FIELD_INTEGER" - "destroy_attacks" "4" - "LinkedSpecialBonus" "special_bonus_unique_weaver_4" - } - "07" - { - "var_type" "FIELD_INTEGER" - "radius" "100 100 100 100" - } - "08" - { - "var_type" "FIELD_INTEGER" - "speed" "600 600 600 600" - } - "09" - { - "var_type" "FIELD_INTEGER" - "spawn_radius" "300 300 300 300" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - - //================================================================================================================= - // Weaver: Shukuchi - //================================================================================================================= - "aghsfort_weaver_shukuchi" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilitySound" "Hero_Weaver.Shukuchi" - "AbilityTextureName" "weaver_shukuchi" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0 0 0 0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "7.0" - - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "45 50 55 60" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "130 200 270 340" - "LinkedSpecialBonus" "special_bonus_unique_weaver_1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "190 200 210 220" - "LinkedSpecialBonus" "special_bonus_unique_weaver_2" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "200 200 200 200" - } - "04" - { - "var_type" "FIELD_FLOAT" - "fade_time" "0.25 0.25 0.25 0.25" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "4.5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - - //================================================================================================================= - // Ability: Weaver's Geminate Attack - //================================================================================================================= - "aghsfort_weaver_geminate_attack" - { - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilityTextureName" "weaver_geminate_attack" - "AbilityCooldown" "4.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "delay" "0.20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "tooltip_attack" "1" - "LinkedSpecialBonus" "special_bonus_unique_weaver_5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "100 160 220 280" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - - //================================================================================================================= - // Ability: Weaver's Time Lapse - //================================================================================================================= - "aghsfort_weaver_time_lapse" - { - // General - //------------------------------------------------------------------------------------------------------------- - - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" - "AbilityCastRange" "1000" - "AbilitySound" "Hero_Weaver.TimeLapse" - "AbilityTextureName" "weaver_time_lapse" - "FightRecapLevel" "2" - - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - "AbilityCooldown" "30" - "AbilityManaCost" "50" - - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "cooldown_scepter" "16" - "RequiresScepter" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "cast_range_tooltip_scepter" "1000" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Ability: Weaver Swarm Allies - //================================================================================================================= - "aghsfort_special_weaver_swarm_allies" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_the_swarm" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_swarm_explosion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_the_swarm" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - } - } - "aghsfort_special_weaver_swarm_damage_transfer" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_the_swarm" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "20" - } - } - } - "aghsfort_special_weaver_geminate_attack_splitshot" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_geminate_attack" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_count" "6" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_range" "250" - } - } - } - "aghsfort_special_weaver_geminate_attack_applies_swarm" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_geminate_attack" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_geminate_attack_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_geminate_attack" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "60" - } - } - } - "aghsfort_special_weaver_geminate_attack_knockback" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_geminate_attack" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "30" - } - } - } - "aghsfort_special_weaver_shukuchi_pull" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_shukuchi" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_shukuchi_trail" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_shukuchi" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "trail_duration" "4" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "80" - } - "03" - { - "var_type" "FIELD_INTEGER" - "path_radius" "150" - } - "04" - { - "var_type" "FIELD_FLOAT" - "linger_duration" "0.2" - } - "05" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "0.25" - } - } - } - - "aghsfort_special_weaver_shukuchi_attack_on_completion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_shukuchi" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_shukuchi_swarm" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_shukuchi" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_shukuchi_greater_invisibility" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_shukuchi" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_shukuchi_heal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_shukuchi" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "heal_pct" "50" - } - } - } - "aghsfort_special_weaver_time_lapse_allies" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_time_lapse" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_time_lapse_restoration" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_time_lapse" - "AbilitySpecial" - { - - } - } - "aghsfort_special_weaver_time_lapse_explosion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "weaver_time_lapse" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_pct" "100" - } - } - } - - //================================================================================================================= - // WEAVER END - //================================================================================================================= - - //================================================================================================================= - // WITCH DOCTOR START - //================================================================================================================= - - //================================================================================================================= - // Witch Doctor: Paralyzing Cask - //================================================================================================================= - "aghsfort_witch_doctor_paralyzing_cask" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_WitchDoctor.Paralyzing_Cask_Cast" - "AbilityTextureName" "witch_doctor_paralyzing_cask" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.25 0.25 0.25 0.25" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - //"AbilityDamage" "75 100 125 150" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50 60 70 80" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // Can have multiple bounces - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.0 1.0 1.0 1.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "140 200 260 320" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bounce_range" "575 575 575 575" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bounces" "7 8 9 10" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_3" - } - "06" - { - "var_type" "FIELD_INTEGER" - "speed" "1000" - } - "07" - { - "var_type" "FIELD_FLOAT" - "bounce_delay" "0.2" - } - "08" - { - "var_type" "FIELD_INTEGER" - "bounces_tooltip" "7 8 9 10" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_3" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Witch Doctor: Voodoo Restoration - //================================================================================================================= - "aghsfort_witch_doctor_voodoo_restoration" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_TOGGLE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "SpellImmunityType" "SPELL_IMMUNITY_ALLIES_YES" - "AbilitySound" "Hero_WitchDoctor.Voodoo_Restoration" - "AbilityTextureName" "witch_doctor_voodoo_restoration" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0 0.0 0.0 0.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 110 120 130" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "mana_per_second" "30 50 70 90" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "600" - } - "03" - { - "var_type" "FIELD_INTEGER" - "heal" "100 150 200 250" - } - "04" - { - "var_type" "FIELD_FLOAT" - "heal_interval" "0.2 0.2 0.2 0.2 0.2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "activation_base_mana_cost" "100" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Witch Doctor: Maledict - //================================================================================================================= - "aghsfort_witch_doctor_maledict" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_WitchDoctor.Maledict_Cast" - "AbilityTextureName" "witch_doctor_maledict" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "575" - "AbilityCastPoint" "0.35 0.35 0.35 0.35" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "24 23 22 21" - "AbilityDuration" "12.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "25 30 35 40" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "60 70 80 90" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "250" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_6" - } - "02" - { - "var_type" "FIELD_INTEGER" - "abilityduration" "" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_4" - "LinkedSpecialBonusField" "value" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "40 45 50 55" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_threshold" "100" - } - "05" - { - "var_type" "FIELD_INTEGER" - "ticks" "3" - "LinkedSpecialBonusField" "value2" - } - "06" - { - "var_type" "FIELD_INTEGER" - "max_bonus_damage" "300 400 500 600" - } - - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Witch Doctor: Death Ward - //================================================================================================================= - "aghsfort_witch_doctor_death_ward" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_CHANNELLED" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NO_INVIS | DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE | DOTA_UNIT_TARGET_FLAG_NOT_ATTACK_IMMUNE | DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "2" - "AbilitySound" "Hero_WitchDoctor.Death_WardBuild" - "AbilityTextureName" "witch_doctor_death_ward" - "LinkedAbility" "aghsfort_witch_doctor_death_ward_no_channel" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "200" - "AbilityCastPoint" "0.35 0.35 0.35" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityChannelAnimation" "ACT_DOTA_CHANNEL_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35.0" - //"AbilityChannelTime" "8.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "120 160 200" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "150 200 250" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_5" - "CalculateSpellDamageTooltip" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_range_tooltip" "700" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bounce_radius" "550 550 550" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bounces" "12" - } - "05" - { - "var_type" "FIELD_FLOAT" - "channel_duration" "5.0" - } - } - } - - //================================================================================================================= - // Witch Doctor: Death Ward - //================================================================================================================= - "aghsfort_witch_doctor_death_ward_no_channel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NO_INVIS | DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE | DOTA_UNIT_TARGET_FLAG_NOT_ATTACK_IMMUNE | DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "FightRecapLevel" "2" - "AbilitySound" "Hero_WitchDoctor.Death_WardBuild" - "AbilityTextureName" "witch_doctor_death_ward" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "200" - "AbilityCastPoint" "0.35 0.35 0.35" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - "AbilityChannelAnimation" "ACT_DOTA_CHANNEL_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35.0" - "AbilityDuration" "5.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "120 160 200" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "150 200 250" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_5" - "CalculateSpellDamageTooltip" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_range_tooltip" "700" - "LinkedSpecialBonus" "special_bonus_unique_witch_doctor_1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bounce_radius" "550 550 650" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bounces" "12" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "5.0" - } - } - } - - "aghsfort_special_witch_doctor_paralyzing_cask_multicask" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_paralyzing_cask" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "2" - } - } - } - "aghsfort_special_witch_doctor_paralyzing_cask_applies_maledict" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_paralyzing_cask" - "AbilitySpecial" - { - - } - } - "aghsfort_special_witch_doctor_paralyzing_cask_aoe_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_paralyzing_cask" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - } - } - "aghsfort_special_witch_doctor_paralyzing_cask_attack_procs" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_paralyzing_cask" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "cask_chance" "80" - } - "02" - { - "var_type" "FIELD_FLOAT" - "cask_cooldown" "2.0" - } - } - } - "aghsfort_special_witch_doctor_maledict_ground_curse" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_maledict" - "AbilitySpecial" - { - - } - } - "aghsfort_special_witch_doctor_maledict_aoe_procs" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_maledict" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - } - } - "aghsfort_special_witch_doctor_maledict_death_restoration" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_maledict" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "65" - } - } - } - "aghsfort_special_witch_doctor_maledict_affects_allies" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_maledict" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "75" - } - } - } - "aghsfort_special_witch_doctor_maledict_infectious" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_maledict" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "300" - } - } - } - - "aghsfort_special_witch_doctor_voodoo_restoration_enemy_damage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_voodoo_restoration" - "AbilitySpecial" - { - - } - } - "aghsfort_special_witch_doctor_voodoo_restoration_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_voodoo_restoration" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "15" - } - } - } - "aghsfort_special_witch_doctor_voodoo_restoration_damage_amp" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_voodoo_restoration" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "35" - } - } - } - "aghsfort_special_witch_doctor_voodoo_restoration_mana_restore" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_voodoo_restoration" - "AbilitySpecial" - { - - } - } - "aghsfort_special_witch_doctor_death_ward_no_channel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_death_ward" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "value" "80" - } - } - } - "aghsfort_special_witch_doctor_death_ward_splitshot" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_death_ward" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "split_shot_count" "4" - } - "02" - { - "var_type" "FIELD_INTEGER" - "split_shot_bonus_range" "100" - } - } - } - "aghsfort_special_witch_doctor_death_ward_damage_resist" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_death_ward" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "value" "90" - } - } - } - "aghsfort_special_witch_doctor_death_ward_bounce" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "witch_doctor_death_ward" - "AbilitySpecial" - { - - } - } - - //================================================================================================================= - // WITCH DOCTOR END - //================================================================================================================= - - - - - //================================================================================================================= - // HERO ABILITY UPGRADES END - //================================================================================================================= - - - //================================== - // MINOR STAT UPGRADES - //================ - - //================================================================================================================= - // Ability: minor stat upgrade - //================================================================================================================= - "aghsfort_minor_stats_upgrade" - { - // General - //------------------------------------------------------------------------------------------------------------- - //"AbilityType" "DOTA_ABILITY_TYPE_ATTRIBUTES" - //"BaseClass" "ability_lua" - //"ScriptFile" "abilities/heroes/aghsfort_minor_stats_upgrade" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityTextureName" "attribute_bonus" - "MaxLevel" "1" - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_primary_stat" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_movespeed" "0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_hp_regen" "0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_damage" "0" - } - "08" - { - "var_type" "FIELD_INTEGER" - "bonus_cast_range" "0" - } - "09" - { - "var_type" "FIELD_INTEGER" - "bonus_spell_amp" "0" - } - "10" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "0" - } - "11" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "0" - } - "12" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "0" - } - "13" - { - "var_type" "FIELD_INTEGER" - "bonus_heal_amp" "0" - } - "14" - { - "var_type" "FIELD_INTEGER" - "bonus_mana_regen" "0" - } - "15" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "0" - } - "16" - { - "var_type" "FIELD_INTEGER" - "bonus_magic_resist" "0" - } - "17" - { - "var_type" "FIELD_INTEGER" - "bonus_lifesteal" "0" - } - } - } - - -} diff --git a/aghanim_singleplayer/scripts/npc/npc_abilities_override.txt b/aghanim_singleplayer/scripts/npc/npc_abilities_override.txt deleted file mode 100755 index c958c54..0000000 --- a/aghanim_singleplayer/scripts/npc/npc_abilities_override.txt +++ /dev/null @@ -1,4493 +0,0 @@ - -// Dota Abilities Override File -"DOTAAbilities" -{ - "Version" "1" - - //================================================================================================================= - // - // ITEM ABILITIES - // - //================================================================================================================= - - //================================================================================================================= - // Broom Handle - //================================================================================================================= - "item_broom_handle" - { - "ItemCost" "600" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Keen Optic - //================================================================================================================= - "item_keen_optic" - { - "ItemCost" "500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Arcane Ring - //================================================================================================================= - "item_arcane_ring" - { - "ItemCost" "600" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Ocean Heart - //================================================================================================================= - "item_ocean_heart" - { - "ItemCost" "600" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Ironwood Tree - //================================================================================================================= - "item_ironwood_tree" - { - "ItemCost" "600" - "ItemPurchasable" "0" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Poor Man's Shield - //================================================================================================================= - "item_poor_mans_shield" - { - "ItemCost" "750" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Faded Broach - //================================================================================================================= - "item_faded_broach" - { - "ItemCost" "600" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Dragon Scale - //================================================================================================================= - "item_dragon_scale" - { - "ItemCost" "1000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Essence Ring - //================================================================================================================= - "item_essence_ring" - { - "ItemCost" "1000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Pupil's Gift - //================================================================================================================= - "item_pupils_gift" - { - "ItemCost" "1000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Enchanted Quiver - //================================================================================================================= - "item_enchanted_quiver" - { - "ItemCost" "1250" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Ring of Aquila - //================================================================================================================= - "item_ring_of_aquila" - { - "ItemCost" "1250" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Grove Bow - //================================================================================================================= - "item_grove_bow" - { - "ItemCost" "1250" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Craggy Coat - //================================================================================================================= - "item_craggy_coat" - { - "ItemCost" "1250" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Nether Shawl - //================================================================================================================= - "item_nether_shawl" - { - "ItemCost" "1500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Imp Claw - //================================================================================================================= - "item_imp_claw" - { - "ItemCost" "1500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Vambrace - //================================================================================================================= - "item_vambrace" - { - "ItemCost" "1500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Greater Faerie Fire - //================================================================================================================= - "item_greater_faerie_fire" - { - "ItemCost" "1750" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Quickening Charm - //================================================================================================================= - "item_quickening_charm" - { - "ItemCost" "2500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Orb of Destruction - //================================================================================================================= - "item_orb_of_destruction" - { - "ItemCost" "3000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Paladin Sword - //================================================================================================================= - "item_paladin_sword" - { - "ItemCost" "3000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_lifesteal" "30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_amp" "20" - } - } - } - - //================================================================================================================= - // Havoc Hammer - //================================================================================================================= - "item_havoc_hammer" - { - "ItemCost" "3000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Witless Shako - //================================================================================================================= - "item_witless_shako" - { - "ItemCost" "3000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Magic Lamp - //================================================================================================================= - "item_panic_button" - { - "ItemCost" "3000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - - //================================================================================================================= - // Illusionist's Cape - //================================================================================================================= - "item_illusionsts_cape" - { - "ItemCost" "3500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Minotaur Horn - //================================================================================================================= - "item_minotaur_horn" - { - "ItemCost" "3000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Phoenix Ash - //================================================================================================================= - "item_phoenix_ash" - { - "ItemCost" "2500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Spell Prism - //================================================================================================================= - "item_spell_prism" - { - "ItemCost" "4000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Timeless Relic - //================================================================================================================= - "item_timeless_relic" - { - "ItemCost" "4000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Ballista - //================================================================================================================= - "item_ballista" - { - "ItemCost" "4500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Book of the Dead - //================================================================================================================= - "item_demonicon" - { - "ItemCost" "5000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Force Boots - //================================================================================================================= - "item_force_boots" - { - "ItemCost" "5500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Woodland Striders - //================================================================================================================= - "item_woodland_striders" - { - "ItemCost" "4500" - "ItemPurchasable" "0" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Mirror Shield - //================================================================================================================= - "item_mirror_shield" - { - "ItemCost" "4500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Ex Machina - //================================================================================================================= - "item_ex_machina" - { - "ItemCost" "4500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Fallen Sky - //================================================================================================================= - "item_fallen_sky" - { - "ItemCost" "4500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Apex - //================================================================================================================= - "item_apex" - { - "ItemCost" "6000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Stygian Desolator - //================================================================================================================= - "item_desolator_2" - { - "ItemCost" "6000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - } - - //================================================================================================================= - // Magic Stick - //================================================================================================================= - "item_magic_stick" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Magic Wand - //================================================================================================================= - "item_magic_wand" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Tome of Knowledge - //================================================================================================================= - "item_tome_of_knowledge" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Magic Wand - Recipe - //================================================================================================================= - "item_recipe_magic_wand" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Teleport Scroll - //================================================================================================================= - "item_tpscroll" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Flask - //================================================================================================================= - "item_flask" - { - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "buff_duration" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "health_regen" "40" - } - "03" - { - "var_type" "FIELD_INTEGER" - "break_on_hero_damage" "0" // don't break to anything in this mode - } - } - } - - //================================================================================================================= - // Clarity - //================================================================================================================= - "item_clarity" - { - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Bottle - //================================================================================================================= - "item_bottle" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "41" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_OPTIONAL_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_SUPPRESS_ASSOCIATED_CONSUMABLE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/bottle_blue.vmdl" - "ModelAlternate" "models/props_gameplay/bottle_empty.vmdl" - "FightRecapLevel" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.5" - "AbilityCastRange" "350" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - "ItemCost" "0" - "ItemShopTags" "consumable" - "ItemQuality" "common" - "ItemAliases" "bottle" - "ItemStackable" "0" - "ItemShareability" "ITEM_PARTIALLY_SHAREABLE" - "ItemPermanent" "1" - "ItemInitialCharges" "3" - "ItemDisplayCharges" "1" - "IsTempestDoubleClonable" "0" - "ShouldBeSuggested" "1" - "ShouldBeInitiallySuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "health_restore" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "mana_restore" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "health_restore_pct" "25" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_restore_pct" "8" - } - "05" - { - "var_type" "FIELD_FLOAT" - "restore_time" "2.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "max_charges" "3" - } - "07" - { - "var_type" "FIELD_INTEGER" - "break_on_hero_damage" "0" - } - } - } - - //================================================================================================================= - // Recipe: Urn of Shadows - //================================================================================================================= - "item_recipe_urn_of_shadows" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Urn of Shadows - //================================================================================================================= - "item_urn_of_shadows" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Faerie Fire - //================================================================================================================= - "item_faerie_fire" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Recipe: Spirit Vessel - //================================================================================================================= - "item_recipe_spirit_vessel" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Spirit Vessel - //================================================================================================================= - "item_spirit_vessel" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Recipe: Bloodstone - //================================================================================================================= - "item_recipe_bloodstone" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Bloodstone - //================================================================================================================= - "item_bloodstone" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Enchanted Mango - //================================================================================================================= - "item_enchanted_mango" - { - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Courier - //================================================================================================================= - "item_courier" - { - "ItemPurchasable" "0" - "ItemDroppable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Flying Courier - //================================================================================================================= - "item_flying_courier" - { - "ItemPurchasable" "0" - "ItemDroppable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Smoke of Deceit - //================================================================================================================= - "item_smoke_of_deceit" - { - "ItemPurchasable" "0" - "ItemDroppable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Recipe: Rapier - //================================================================================================================= - "item_recipe_rapier" - { - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - - // Recipe - //------------------------------------------------------------------------------------------------------------- - "ItemRequirements" "0" - } - - //================================================================================================================= - // Divine Rapier - //================================================================================================================= - "item_rapier" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Helm of the Dominator - //================================================================================================================= - "item_helm_of_the_dominator" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Recipe: Helm of the Dominator - //================================================================================================================= - "item_recipe_helm_of_the_dominator" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Hand of Midas - //================================================================================================================= - "item_hand_of_midas" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Hand of Midas Recipe - //================================================================================================================= - "item_recipe_hand_of_midas" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Quelling Blade - //================================================================================================================= - "item_quelling_blade" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Recipe: Battlefury - now requires a purchase in place of the quelling blade - //================================================================================================================= - "item_recipe_bfury" - { - "ItemCost" "130" - "ItemRequirements" - { - "01" "item_broadsword;item_claymore;item_pers" - } - } - - //================================================================================================================= - // Observer Wards - //================================================================================================================= - "item_ward_observer" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Sentry - //================================================================================================================= - "item_ward_sentry" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Recipe: Ward Dispenser - //================================================================================================================= - "item_recipe_ward_dispenser" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Ward Dispenser - //================================================================================================================= - "item_ward_dispenser" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Tango - //================================================================================================================= - "item_tango" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Aghs Scepter - //================================================================================================================= - "item_ultimate_scepter" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Aghs Scepter 2 - //================================================================================================================= - "item_ultimate_scepter_2" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Recipe: Scepter - //================================================================================================================= - "item_recipe_ultimate_scepter" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Holy Locket - //================================================================================================================= - "item_recipe_holy_locket" - { - "ItemRequirements" "0" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - "item_holy_locket" - { - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - } - - //================================================================================================================= - // Lifesteal - //================================================================================================================= - "item_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "900" - "ItemShopTags" "unique" - "ItemQuality" "component" - "ItemAliases" "morbid mask" - //"SideShop" "1" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "lifesteal_percent" "20" - } - } - } - - //================================================================================================================= - // Mask of Madness - //================================================================================================================= - "item_mask_of_madness" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "FightRecapLevel" "1" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "25" - "ItemCost" "1775" - "ItemShopTags" "unique;hard_to_tag" - "ItemQuality" "artifact" - "ItemAliases" "mom;mask of madness" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "lifesteal_percent" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "berserk_bonus_attack_speed" "220" - } - "05" - { - "var_type" "FIELD_INTEGER" - "berserk_bonus_movement_speed" "60" - } - "06" - { - "var_type" "FIELD_INTEGER" - "berserk_armor_reduction" "8" - } - "07" - { - "var_type" "FIELD_FLOAT" - "berserk_duration" "6.0" - } - } - } - - //================================================================================================================= - // Vladimir - //================================================================================================================= - "item_vladmir" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityCastRange" "1200" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "2200" - "ItemShopTags" "lifesteal;damage;armor;regen_mana" - "ItemQuality" "rare" - "ItemAliases" "vladmir's offering;vlads" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "mana_regen_aura" "2.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "lifesteal_aura" "8" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_aura" "18" - } - "04" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - } - } - - //================================================================================================================= - // Satanic - //================================================================================================================= - "item_satanic" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "2" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "5300" - "ItemShopTags" "damage;str;armor;unique;hard_to_tag" - "ItemQuality" "artifact" - "ItemAliases" "satanic" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "lifesteal_percent" "20" - } - "05" - { - "var_type" "FIELD_INTEGER" - "unholy_lifesteal_percent" "100" - } - "06" - { - "var_type" "FIELD_INTEGER" - "unholy_lifesteal_total_tooltip" "120" - } - "07" - { - "var_type" "FIELD_FLOAT" - "unholy_duration" "5.0" - } - "08" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "30" - } - } - } - - //================================================================================================================= - // Vampire Fangs - //================================================================================================================= - "item_vampire_fangs" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - - "ItemIsNeutralDrop" "1" - - "ItemCost" "2000" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_lifesteal" "25" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal" "12" - } - "03" - { - "var_type" "FIELD_INTEGER" - "night_vision" "500" - } - } - } - - //================================================================================================================= - // - //================================================================================================================= - "item_trident" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemIsNeutralDrop" "1" - - "ItemCost" "6000" - "ItemPurchasable" "0" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "30" - } - "04" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "20" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "30" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movement_speed_percent_bonus" "30" - } - "07" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "30" - } - "08" - { - "var_type" "FIELD_INTEGER" - "manacost_reduction" "30" - } - "09" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "30" - } - } - } - - //================================================================================================================= - // Shadow Amulet - //================================================================================================================= - "item_shadow_amulet" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "FightRecapLevel" "1" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - "AbilityCooldown" "28.0" - "AbilityManaCost" "75" - "AbilitySharedCooldown" "shadow_blade" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "" - "ItemAliases" "shadow amulet" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "fade_time" "0.3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "fade_duration" "14" - } - } - } - - //================================================================================================================= - // Titan Sliver - //================================================================================================================= - "item_titan_sliver" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemIsNeutralDrop" "1" - - - "ItemCost" "2500" - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "base_attack_damage" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "24" - } - } - } - - //================================================================================================================= - // Lifesteal - //================================================================================================================= - "item_lifesteal" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "26" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "900" - "ItemShopTags" "unique" - "ItemQuality" "component" - "ItemAliases" "morbid mask" - //"SideShop" "1" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "lifesteal_percent" "8" - } - } - } - - //================================================================================================================= - // Recipe: Heart - //================================================================================================================= - "item_recipe_heart" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "113" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "Model" "models/props_gameplay/recipe.vmdl" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1400" - "ItemShopTags" "" - - // Recipe - //------------------------------------------------------------------------------------------------------------- - "ItemRecipe" "1" - "ItemResult" "item_heart" - "ItemRequirements" - { - "01" "item_ring_of_tarrasque;item_vitality_booster;item_reaver" - } - } - - //================================================================================================================= - // Heart - //================================================================================================================= - "item_heart" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "114" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "5200" - "ItemShopTags" "str;regen_health;health_pool" - "ItemQuality" "epic" - "ItemAliases" "hot;heart of tarrasque" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - "ItemStockMax" "4" - "ItemStockTime" "99999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "600" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "15" - } - "04" - { - "var_type" "FIELD_FLOAT" - "health_regen_rate" "1.5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cooldown_melee" "7" - } - "06" - { - "var_type" "FIELD_INTEGER" - "cooldown_ranged_tooltip" "6" - } - } - } - - //================================================================================================================= - // Recipe: Bloodthorn - //================================================================================================================= - "item_recipe_bloodthorn" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "245" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "Model" "models/props_gameplay/recipe.vmdl" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "2000" - "ItemShopTags" "" - - // Recipe - //------------------------------------------------------------------------------------------------------------- - "ItemRecipe" "1" - "ItemResult" "item_bloodthorn" - "ItemRequirements" - { - "01" "item_orchid;item_hyperstone" - } - } - - //================================================================================================================= - // Bloodthorn - //================================================================================================================= - "item_bloodthorn" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "250" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "FightRecapLevel" "1" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "15.0" - "AbilitySharedCooldown" "orchid" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - "ItemCost" "6475" - "ItemShopTags" "int;attack_speed;damage;regen_mana;damage;hard_to_tag" - "ItemQuality" "epic" - "ItemAliases" "orchid malevolence" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "180" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "60" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "16.5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "silence_damage_percent" "60" - } - "06" - { - "var_type" "FIELD_FLOAT" - "silence_duration" "5" - } - "07" - { - "var_type" "FIELD_FLOAT" - "target_crit_multiplier" "180" - } - "08" - { - "var_type" "FIELD_FLOAT" - "tooltip_crit_chance" "100" - } - } - } - - //================================================================================================================= - // Black King Bar - //================================================================================================================= - "item_black_king_bar" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "2" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "60" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "4050" - "ItemShopTags" "str;damage;hard_to_tag" - "ItemQuality" "epic" - "ItemAliases" "bkb;black king bar" - "ItemSellable" "1" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "48" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "7.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_level" "1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "model_scale" "30" // Percentage over model scale - } - } - } - "skywrath_mage_mystic_flare" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5584" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "2" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - "AbilityCastPoint" "0.1 0.1 0.1 0.1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "60.0 40.0 20.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "300 550 800" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "170" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "2.4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "400 600 800" - "LinkedSpecialBonus" "special_bonus_unique_skywrath_5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "damage_interval" "0.1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "scepter_radius" "700" - "RequiresScepter" "1" - } - } - } - "legion_commander_duel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5598" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_LegionCommander.Duel" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "200" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "50.0 50.0 50.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75 75 75" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "3.0" // Value much higher than cost. - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "2.5 2.5 2.5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration_scepter" "6 7 8" - "RequiresScepter" "1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "reward_damage" "10 20 30" - "LinkedSpecialBonus" "special_bonus_unique_legion_commander" - } - "04" - { - "var_type" "FIELD_INTEGER" - "victory_range" "600" - } - } - } - - //================================================================================================================= - // Battlefury - //================================================================================================================= - "item_bfury" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_TREE | DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - - "AbilityCastRange" "350" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "4.0" - - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "4500" - "ItemShopTags" "damage;health_regen;mana_regen;hard_to_tag" - "ItemQuality" "epic" - "ItemAliases" "bf;battle fury" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "110" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "22.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "7.75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "cleave_damage_percent" "70" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cleave_damage_percent_creep" "70" - } - "06" - { - "var_type" "FIELD_INTEGER" - "quelling_bonus" "36" - } - "07" - { - "var_type" "FIELD_INTEGER" - "quelling_bonus_ranged" "25" - } - "08" - { - "var_type" "FIELD_INTEGER" - "cleave_starting_width" "150" - } - "09" - { - "var_type" "FIELD_INTEGER" - "cleave_ending_width" "360" - } - "10" - { - "var_type" "FIELD_INTEGER" - "cleave_distance" "650" - } - } - } - - //================================================================================================================= - // Orchid - //================================================================================================================= - "item_orchid" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "FightRecapLevel" "1" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "18.0" - "AbilitySharedCooldown" "orchid" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - "ItemCost" "3475" - "ItemShopTags" "int;attack_speed;damage;regen_mana;damage;hard_to_tag" - "ItemQuality" "rare" - "ItemAliases" "orchid malevolence;silence" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "60" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "12" - } - "05" - { - "var_type" "FIELD_FLOAT" - "silence_damage_percent" "60" - } - "06" - { - "var_type" "FIELD_FLOAT" - "silence_duration" "5" - } - } - } - - //================================================================================================================= - // Travel Boots - //================================================================================================================= - "item_travel_boots" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP | DOTA_UNIT_TARGET_BUILDING" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "45.0" - "AbilitySharedCooldown" "teleport" - "AbilityChannelTime" "3.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75" - "ItemCost" "2500" - "ItemShopTags" "teleport;move_speed" - "ItemQuality" "common" - "ItemAliases" "bot;boots of travel;tp" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "MaxUpgradeLevel" "2" - "ItemBaseLevel" "1" - "ShouldBeSuggested" "1" - - "UpgradesItems" "item_travel_boots" - "UpgradeRecipe" "item_recipe_travel_boots" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "maximum_distance" "575" - } - "03" - { - "var_type" "FIELD_INTEGER" - "vision_radius" "200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "tp_penalty" "10" - } - } - } - - - //================================================================================================================= - // - // REGULAR ABILITIES - // - //================================================================================================================= - - //================================================================================================================= - // Shredder: Chakram - //================================================================================================================= - "shredder_chakram" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5527" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "HasScepterUpgrade" "1" - "AbilitySound" "Hero_Shredder.Chakram.Cast" - "MaxLevel" "4" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "2500" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "speed" "600.0 625.0 650.0 675.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "175" - } - "03" - { - "var_type" "FIELD_INTEGER" - "pass_damage" "250 275 300 325" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage_per_second" "100 125 150 175" - } - "05" - { - "var_type" "FIELD_INTEGER" - "slow" "5 6 7 8" - } - "06" - { - "var_type" "FIELD_FLOAT" - "damage_interval" "0.25" - } - "07" - { - "var_type" "FIELD_FLOAT" - "break_distance" "3000.0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "mana_per_second" "0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "pass_slow_duration" "0.5" - } - "10" - { - "var_type" "FIELD_INTEGER" - "slow_health_percentage" "5" - } - - } - } - - //================================================================================================================= - // Shredder: Chakram 2 - //================================================================================================================= - "shredder_chakram_2" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5645" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE | DOTA_ABILITY_BEHAVIOR_HIDDEN | DOTA_ABILITY_BEHAVIOR_SHOW_IN_GUIDES" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "IsGrantedByScepter" "1" - "HasScepterUpgrade" "1" - "MaxLevel" "4" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "2500" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_6" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "speed" "600.0 625.0 650.0 675.0" - "RequiresScepter" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "200" - "RequiresScepter" "1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "pass_damage" "250 275 300 325" - "RequiresScepter" "1" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage_per_second" "100 125 150 175" - "RequiresScepter" "1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "slow" "5 6 7 8" - "RequiresScepter" "1" - } - "06" - { - "var_type" "FIELD_FLOAT" - "damage_interval" "0.25" - "RequiresScepter" "1" - } - "07" - { - "var_type" "FIELD_FLOAT" - "break_distance" "3000.0" - "RequiresScepter" "1" - } - "08" - { - "var_type" "FIELD_FLOAT" - "mana_per_second" "0" - "RequiresScepter" "1" - } - "09" - { - "var_type" "FIELD_FLOAT" - "pass_slow_duration" "0.5" - "RequiresScepter" "1" - } - "10" - { - "var_type" "FIELD_INTEGER" - "slow_health_percentage" "5" - "RequiresScepter" "1" - } - } - } - //================================================================================================================= - // Tidehunter: Ravage - //================================================================================================================= - "tidehunter_ravage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "2" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.7" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "15.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "300" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "1025" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "775" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "1.2" - } - } - } - - //================================================================================================================= - // Kunkka: Tidebringer - //================================================================================================================= - "kunkka_tidebringer" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5032" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AUTOCAST | DOTA_ABILITY_BEHAVIOR_ATTACK" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "AbilitySound" "Hero_Kunkka.Tidebringer.Attack" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4.0" - "AbilityCastRange" "150" - "AbilityCastPoint" "0.0 0.0 0.0 0.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "cleave_starting_width" "150" - } - "02" - { - "var_type" "FIELD_INTEGER" - "cleave_ending_width" "650" - } - "03" - { - "var_type" "FIELD_INTEGER" - "cleave_distance" "1100" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage_bonus" "100" - "CalculateSpellDamageTooltip" "0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cleave_damage" "300" - "LinkedSpecialBonus" "special_bonus_unique_kunkka_4" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Kunkka: Ghostship - //================================================================================================================= - "kunkka_ghostship" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - "AbilityCastPoint" "0.3" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "1000" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "150" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "tooltip_delay" "2.7" - } - "02" - { - "var_type" "FIELD_INTEGER" - "ghostship_distance" "1000" - } - "03" - { - "var_type" "FIELD_INTEGER" - "ghostship_width" "425" - } - "04" - { - "var_type" "FIELD_INTEGER" - "movespeed_bonus" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "buff_duration" "10" - } - "06" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "2.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "ghostship_speed" "550" - } - "08" - { - "var_type" "FIELD_INTEGER" - "ghostship_speed_scepter" "650" - } - "09" - { - "var_type" "FIELD_INTEGER" - "ghostship_width_scepter" "200" - } - "10" - { - "var_type" "FIELD_FLOAT" - "ghostship_absorb" "40 45 50" - } - } - } - - //================================================================================================================= - // Obsidian Destroyer: Astral Imprisonment - //================================================================================================================= - "obsidian_destroyer_astral_imprisonment" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5392" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY | DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "AbilitySound" "Hero_ObsidianDestroyer.AstralImprisonment" - "HasScepterUpgrade" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityDuration" "2.0" - "AbilityCooldown" "3" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "150" - "AbilityCastPoint" "0.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.5" // applies multiple modifiers - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "prison_duration" "2.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "0" - "LinkedSpecialBonus" "special_bonus_unique_outworld_devourer_3" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "150" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_charges_scepter" "2" - "RequiresScepter" "1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "charge_restore_time_scepter" "12" - "RequiresScepter" "1" - } - "06" - { - "var_type" "FIELD_INTEGER" - "scepter_range_bonus" "300" - "RequiresScepter" "1" - } - "07" - { - "var_type" "FIELD_INTEGER" - "counter_duration" "35" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Alchemist: Acid Spray - //================================================================================================================= - "alchemist_acid_spray" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.2" - "AbilityCastRange" "900" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "450" // was 625 - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "9.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "125" - } - "04" - { - "var_type" "FIELD_INTEGER" - "armor_reduction" "20" - "LinkedSpecialBonus" "special_bonus_unique_alchemist" - } - "05" - { - "var_type" "FIELD_FLOAT" - "tick_rate" "0.5" - } - } - } - - //================================================================================================================= - // Alchemist: Unstable Concoction - //================================================================================================================= - "alchemist_unstable_concoction" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" // give it a range for sake of our alchemist_ai - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "18.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "brew_time" "2.5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "brew_explosion" "5.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "min_stun" "1.5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "max_stun" "3.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "min_damage" "800" - } - "06" - { - "var_type" "FIELD_INTEGER" - "max_damage" "1200" - } - "07" - { - "var_type" "FIELD_INTEGER" - "midair_explosion_radius" "500" - } - } - } - - //================================================================================================================= - // Alchemist: Unstable Concoction Throw - //================================================================================================================= - "alchemist_unstable_concoction_throw" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_HIDDEN" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" // was 775 - "AbilityCastPoint" "0.2" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportBonus" "120" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "brew_time" "2.5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "min_stun" "2.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "max_stun" "2.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "min_damage" "800" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_damage" "1200" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "900" - } - "07" - { - "var_type" "FIELD_INTEGER" - "vision_range" "300" - } - "08" - { - "var_type" "FIELD_INTEGER" - "midair_explosion_radius" "500" - } - "09" - { - "var_type" "FIELD_FLOAT" - "brew_explosion" "5.5" - } - } - } - - //================================================================================================================= - // Alchemist: Chemical Rage - //================================================================================================================= - "alchemist_chemical_rage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5369" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Alchemist.ChemicalRage.Cast" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - "AbilityCastAnimation" "ACT_INVALID" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "22.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "8.0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "transformation_time" "0.7" - } - "03" - { - "var_type" "FIELD_FLOAT" - "base_attack_time" "0.75" - "LinkedSpecialBonus" "special_bonus_unique_alchemist_3" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "3000" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_health_regen" "100" - "LinkedSpecialBonus" "special_bonus_unique_alchemist_4" - } - "06" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "200" - } - "07" - { - "var_type" "FIELD_INTEGER" - "bonus_movespeed" "150" - "LinkedSpecialBonus" "special_bonus_unique_alchemist_6" - } - "08" - { - "var_type" "FIELD_FLOAT" - "scepter_gold_damage" "2" - "RequiresScepter" "1" - } - "09" - { - "var_type" "FIELD_INTEGER" - "scepter_bonus_damage" "30" - "RequiresScepter" "1" - } - "10" - { - "var_type" "FIELD_INTEGER" - "scepter_spell_amp" "6" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Ability: Mirana Starfall - //================================================================================================================= - "mirana_starfall" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5051" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Ability.Starfall" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12.0" - "AbilityDuration" "10.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "200" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "80" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "starfall_radius" "650" - } - "02" - { - "var_type" "FIELD_INTEGER" - "starfall_secondary_radius" "450" - } - "03" - { - "var_type" "FIELD_FLOAT" - "interval_scepter" "8.0" - "RequiresScepter" "1" - } - "04" - { - "var_type" "FIELD_INTEGER" - "secondary_starfall_damage_percent" "50" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityCastGestureSlot" "DEFAULT" - } - - //================================================================================================================= - // Ability: Mirana Arrow - //================================================================================================================= - "mirana_arrow" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5048" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Mirana.ArrowCast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "3000" - "AbilityCastPoint" "0.5 0.5 0.5 0.5" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "18 17 16 15" - "AbilityDuration" "3.11 3.11 3.11 3.11" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "350" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100 100 100 100" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "arrow_speed" "900.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "arrow_width" "115" - } - "03" - { - "var_type" "FIELD_INTEGER" - "arrow_range" "3000" - } - "04" - { - "var_type" "FIELD_INTEGER" - "arrow_max_stunrange" "1500" - } - "05" - { - "var_type" "FIELD_FLOAT" - "arrow_min_stun" "0.3" - } - "06" - { - "var_type" "FIELD_FLOAT" - "arrow_max_stun" "5.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "arrow_bonus_damage" "500" - } - "08" - { - "var_type" "FIELD_INTEGER" - "arrow_vision" "500" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Luna: Moon Glaive - //================================================================================================================= - "luna_moon_glaive" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "range" "500" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bounces" "2 4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_reduction_percent" "35" - } - } - } - - //================================================================================================================= - // Harpy Storm: Chain Lightning - //================================================================================================================= - "harpy_storm_chain_lightning" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5319" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "MaxLevel" "1" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - - // Unit Targeting - //------------------------------------------------------------------------------------------------------------- - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "200" - "AbilityCastPoint" "0.3" - "AbilityCooldown" "6.0" - "AbilityManaCost" "00" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "initial_damage" "450" - } - "02" - { - "var_type" "FIELD_INTEGER" - "jump_range" "500" - } - "03" - { - "var_type" "FIELD_FLOAT" - "jump_delay" "0.25" - } - "04" - { - "var_type" "FIELD_FLOAT" - "damage_percent_loss" "25.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_targets" "4" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Ghost: Frost Attack - //================================================================================================================= - "ghost_frost_attack" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5301" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "MaxLevel" "1" - "AbilityType" "DOTA_ABILITY_TYPE_BASIC" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-15" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-10" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Brewmaster Storm: Static Remnant - //================================================================================================================= - "storm_spirit_static_remnant" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5098" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_StormSpirit.StaticRemnantPlant" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0 0 0 0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "3.5" - "AbilityDuration" "12.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "25" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "static_remnant_radius" "235" - } - "02" - { - "var_type" "FIELD_INTEGER" - "static_remnant_damage_radius" "260" - } - "03" - { - "var_type" "FIELD_FLOAT" - "static_remnant_delay" "1.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "static_remnant_damage" "100" - "LinkedSpecialBonus" "special_bonus_unique_storm_spirit_5" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Brewmaster: Thunder Clap - //================================================================================================================= - "brewmaster_thunder_clap" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5400" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySound" "Hero_Brewmaster.ThunderClap" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.4 0.4 0.4" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50 100 110 120" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "400 400 400 400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "100 100 100 100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "movement_slow" "25" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attack_speed_slow" "25" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "2.0" - "LinkedSpecialBonus" "special_bonus_unique_brewmaster_3" - } - "06" - { - "var_type" "FIELD_FLOAT" - "duration_creeps" "2.0" - "LinkedSpecialBonus" "special_bonus_unique_brewmaster_3" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Beastmaster: Wild Axes - //================================================================================================================= - "beastmaster_wild_axes" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5168" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Beastmaster.Wild_Axes" - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "12" - - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "80" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "175" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spread" "450" - } - "03" - { - "var_type" "FIELD_INTEGER" - "range" "1500" - } - "04" - { - "var_type" "FIELD_INTEGER" - "axe_damage" "250" - "LinkedSpecialBonus" "special_bonus_unique_beastmaster" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "6" - } - "06" - { - "var_type" "FIELD_INTEGER" - "damage_amp" "6 8 10 12" - } - "07" - { - "var_type" "FIELD_FLOAT" - "scepter_cooldown" "0" - "RequiresScepter" "1" - } - "08" - { - "var_type" "FIELD_FLOAT" - "min_throw_duration" "1.25" - } - "09" - { - "var_type" "FIELD_FLOAT" - "max_throw_duration" "1.25" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - } - - //================================================================================================================= - // Beastmaster: Primal Roar - //================================================================================================================= - "beastmaster_primal_roar" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5177" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Beastmaster.Primal_Roar" - - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.5 0.5 0.5" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "90" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "200" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "0.6" // Applies multiple modifiers - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "2.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage" "150" - } - "03" - { - "var_type" "FIELD_INTEGER" - "side_damage" "150" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "300" - } - "05" - { - "var_type" "FIELD_INTEGER" - "slow_movement_speed_pct" "-60" - } - "06" - { - "var_type" "FIELD_INTEGER" - "slow_attack_speed_pct" "-60" - } - "07" - { - "var_type" "FIELD_INTEGER" - "push_distance" "450" - } - "08" - { - "var_type" "FIELD_FLOAT" - "push_duration" "1.0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "3" - } - "10" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "40" - } - "11" - { - "var_type" "FIELD_FLOAT" - "movement_speed_duration" "3.0" - } - } - } - - //================================================================================================================= - // Troll Warlord: Whirling Axes (Throw) - //================================================================================================================= - "troll_warlord_whirling_axes_ranged" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5509" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_TrollWarlord.WhirlingAxes.Ranged" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_WHIRLING_AXES_RANGED" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastRange" "1000" - "AbilityCastPoint" "0.2 0.2 0.2 0.2" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "9" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "axe_width" "100" - } - - "02" - { - "var_type" "FIELD_FLOAT" - "axe_speed" "800.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "axe_range" "1000.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "axe_damage" "600" - "LinkedSpecialBonus" "special_bonus_unique_troll_warlord_3" - } - "05" - { - "var_type" "FIELD_FLOAT" - "axe_slow_duration" "2.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "40" - } - "07" - { - "var_type" "FIELD_INTEGER" - "axe_spread" "25" - } - "08" - { - "var_type" "FIELD_INTEGER" - "axe_count" "5" - } - } - } - - //================================================================================================================= - // Troll Warlord: Whirling Axes Spin - //================================================================================================================= - "troll_warlord_whirling_axes_melee" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5510" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_TrollWarlord.WhirlingAxes.Melee" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - "AbilityCastGestureSlot" "DEFAULT" - "AbilityCastPoint" "0.0" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "9" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage" "400" - "LinkedSpecialBonus" "special_bonus_unique_troll_warlord_3" - } - "02" - { - "var_type" "FIELD_INTEGER" - "hit_radius" "100" - } - "03" - { - "var_type" "FIELD_FLOAT" - "max_range" "450.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "axe_movement_speed" "1250" - } - "05" - { - "var_type" "FIELD_FLOAT" - "blind_duration" "5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "blind_pct" "60" - } - "07" - { - "var_type" "FIELD_FLOAT" - "whirl_duration" "3.0" - } - } - } - - //================================================================================================================= - // Skywrath Mage: Mystic Flare - //================================================================================================================= - "skywrath_mage_mystic_flare" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5584" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "2" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.1 0.1 0.1 0.1" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "60.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "300" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "170" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "2.4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "750" - "LinkedSpecialBonus" "special_bonus_unique_skywrath_5" - } - "04" - { - "var_type" "FIELD_FLOAT" - "damage_interval" "0.1" - } - "05" - { - "var_type" "FIELD_INTEGER" - "scepter_radius" "700" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Legion Commander: Duel - //================================================================================================================= - "legion_commander_duel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5598" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_LegionCommander.Duel" - - "HasScepterUpgrade" "1" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "150" - "AbilityCastPoint" "0.3 0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "50.0 50.0 50.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75 75 75" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityModifierSupportValue" "3.0" // Value much higher than cost. - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "3.5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration_scepter" "6 7 8" - "RequiresScepter" "1" - } - "03" - { - "var_type" "FIELD_INTEGER" - "reward_damage" "20" - "LinkedSpecialBonus" "special_bonus_unique_legion_commander" - } - "04" - { - "var_type" "FIELD_INTEGER" - "victory_range" "600" - } - } - } - - //================================================================================================================= - // Slark: Dark Pact - //================================================================================================================= - "slark_dark_pact" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5494" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Slark.DarkPact.Cast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_INVALID" - "AbilityCastPoint" "0.001 0.001 0.001 0.001" - "AbilityCastRange" "400" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20.0" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "60" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "delay" "1.5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "pulse_duration" "1.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "total_damage" "300" - "LinkedSpecialBonus" "special_bonus_unique_slark_2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "total_pulses" "10" - } - "06" - { - "var_type" "FIELD_FLOAT" - "pulse_interval" "0.1" - } - } - } - - //================================================================================================================= - // Slark: Pounce - //================================================================================================================= - "slark_pounce" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5495" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Slark.Pounce.Cast" - "HasScepterUpgrade" "1" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "pounce_distance" "400" - } - "02" - { - "var_type" "FIELD_FLOAT" - "pounce_speed" "1000" - } - "03" - { - "var_type" "FIELD_FLOAT" - "pounce_acceleration" "4000.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "pounce_radius" "95" - } - "05" - { - "var_type" "FIELD_FLOAT" - "leash_duration" "0" - "LinkedSpecialBonus" "special_bonus_unique_slark" - } - "06" - { - "var_type" "FIELD_INTEGER" - "leash_radius" "400" - } - "07" - { - "var_type" "FIELD_INTEGER" - "max_charges" "2" - "RequiresScepter" "1" - } - "08" - { - "var_type" "FIELD_INTEGER" - "charge_restore_time" "10" - "RequiresScepter" "1" - } - "09" - { - "var_type" "FIELD_INTEGER" - "pounce_distance_scepter" "1100" - "RequiresScepter" "1" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Slark Shadow Dance - //================================================================================================================= - "slark_shadow_dance" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5497" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "AbilitySound" "Hero_Slark.ShadowDance" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "45" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - "LinkedSpecialBonus" "special_bonus_unique_slark_3" - } - "02" - { - "var_type" "FIELD_FLOAT" - "fade_time" "0.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_regen_pct" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "activation_delay" "0.5" - } - "06" - { - "var_type" "FIELD_FLOAT" - "neutral_disable" "2.0" - } - } - } - - //================================================================================================================= - // Naga Siren: Ensnare - //================================================================================================================= - "naga_siren_ensnare" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5468" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_NagaSiren.Ensnare.Cast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.6" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "70" - - // Cast Range - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "650 650 650 650" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "2.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "net_speed" "500" - } - "03" - { - "var_type" "FIELD_INTEGER" - "fake_ensnare_distance" "900" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_2" - } - - //================================================================================================================= - // Naga Siren: Rip Tide - //================================================================================================================= - "naga_siren_rip_tide" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5469" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_NagaSiren.Riptide.Cast" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0 0 0 0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "chance" "17" - } - "02" - { - "var_type" "FIELD_INTEGER" - "armor_reduction" "-2 -4 -6 -8" - "LinkedSpecialBonus" "special_bonus_unique_naga_siren_3" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage" "300" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "300" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Naga Siren: Song of the Siren - //================================================================================================================= - "naga_siren_song_of_the_siren" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5470" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "FightRecapLevel" "2" - "HasScepterUpgrade" "1" - "AbilitySound" "Hero_NagaSiren.SongOfTheSiren" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "1.0" - "AbilityCastRange" "1000 1200 1400" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "60" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "150 175 200" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "1000" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "7.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "animation_rate" "0.55 0.55 0.55" - } - "04" - { - "var_type" "FIELD_FLOAT" - "regen_rate" "10.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "regen_rate_self" "100.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "regen_rate_tooltip_scepter" "10" - "RequiresScepter" "1" - } - } - } - - //================================================================================================================= - // Tidehunter: Anchor Smash - //================================================================================================================= - "tidehunter_anchor_smash" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5120" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "FightRecapLevel" "1" - "AbilitySound" "Hero_Tidehunter.AnchorSmash" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "375" - "AbilityCastPoint" "0.4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "30" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_damage" "1000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "-30" - "LinkedSpecialBonus" "special_bonus_unique_tidehunter_3" - "CalculateSpellDamageTooltip" "0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "reduction_duration" "6.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "375" - } - } - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_3" - } - - //================================================================================================================= - // Tidehunter: Ravage - //================================================================================================================= - "tidehunter_ravage" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "5121" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats. - "AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "FightRecapLevel" "2" - "AbilitySound" "Ability.Ravage" - - // Casting - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.3 0.3 0.3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_4" - - // Time - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Damage. - //------------------------------------------------------------------------------------------------------------- - "AbilityDamage" "1000" - - // Cost - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "150" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "1250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "725" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "2.0" - } - } - } - - //================================================================================================================= - // Sange - //================================================================================================================= - "item_sange" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "162" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "2050" - "ItemShopTags" "damage;str;unique" - "ItemQuality" "artifact" - "ItemAliases" "sange" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "16" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "24" - } - } - } - - //================================================================================================================= - // Sange and Yasha - //================================================================================================================= - "item_sange_and_yasha" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "154" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "4100" - "ItemShopTags" "damage;str;agi;attack_speed;unique" - "ItemQuality" "artifact" - "ItemAliases" "sny;s&y;sy;sange and yasha" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "32" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movement_speed_percent_bonus" "20" - } - "06" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "30" - } - } - } - - //================================================================================================================= - // Kaya and Sange - //================================================================================================================= - "item_kaya_and_sange" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "273" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "4100" - "ItemShopTags" "damage;str;agi;attack_speed;unique" - "ItemQuality" "artifact" - "ItemAliases" "snk;s&k;sk;sange and kaya" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_regen_multiplier" "60" - } - "05" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "32" - } - "06" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "30" - } - "07" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal_amp" "30" - } - } - } - - //================================================================================================================= - // Heaven's Halberd - //================================================================================================================= - "item_heavens_halberd" - { - // General - //------------------------------------------------------------------------------------------------------------- - "ID" "210" // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "FightRecapLevel" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "18" - "AbilityCastRange" "600" - "AbilityCastPoint" "0.0" - - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - "ItemCost" "3450" - "ItemShopTags" "str;damage;evasion" - "ItemQuality" "artifact" - "ItemAliases" "heaven's halberd" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "03" - { - "var_type" "FIELD_FLOAT" - "disarm_range" "5.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "disarm_melee" "3.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "10" - } - "06" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "15" - } - } - } -} diff --git a/aghanim_singleplayer/scripts/npc/npc_heroes_custom.txt b/aghanim_singleplayer/scripts/npc/npc_heroes_custom.txt deleted file mode 100755 index 3fceb7f..0000000 --- a/aghanim_singleplayer/scripts/npc/npc_heroes_custom.txt +++ /dev/null @@ -1,220 +0,0 @@ -// Dota Heroes File -// NOTE: This is not for creating new heroes, this is for taking a currently existing hero as a template and overriding -// the specified key-value combinations. Use override_hero for this. -"DOTAHeroes" -{ - //================================================================================================================= - // HERO: Luna - //================================================================================================================= - "npc_dota_hero_luna_aghsfort" - { - "override_hero" "npc_dota_hero_luna" - "Ability1" "aghsfort_luna_lucent_beam" - "Ability6" "aghsfort_luna_eclipse" - } - - //================================================================================================================= - // HERO: Magnus - //================================================================================================================= - "npc_dota_hero_magnataur_aghsfort" - { - "override_hero" "npc_dota_hero_magnataur" - "Ability1" "aghsfort_magnataur_shockwave" - "Ability2" "aghsfort_magnataur_empower" - "Ability3" "aghsfort_magnataur_skewer" - "Ability5" "aghsfort_special_magnataur_reverse_polarity_polarity" - "Ability6" "aghsfort_magnataur_reverse_polarity" - "Ability11" "special_bonus_mp_200" - "Ability12" "special_bonus_strength_8" - } - - //================================================================================================================= - // HERO: Monkey King - //================================================================================================================= - "npc_dota_hero_monkey_king_aghsfort" - { - "override_hero" "npc_dota_hero_monkey_king" - "Ability4" "monkey_king_jingu_mastery_aghsfort" - } - - //================================================================================================================= - // HERO: Omniknight - //================================================================================================================= - "npc_dota_hero_omniknight_aghsfort" - { - "override_hero" "npc_dota_hero_omniknight" - "Ability1" "aghsfort_omniknight_purification" - "Ability2" "aghsfort_omniknight_repel" - "Ability3" "aghsfort_omniknight_degen_aura" - "Ability5" "aghsfort_special_omniknight_guardian_angel_single_target" - "Ability6" "aghsfort_omniknight_guardian_angel" - "Ability10" "special_bonus_mp_250" - "Ability12" "special_bonus_armor_6" - "Ability15" "special_bonus_mp_regen_3" - "Ability17" "special_bonus_unique_omniknight_3" - "ArmorPhysical" "4" - } - - //================================================================================================================= - // HERO: Winter Wyvern - //================================================================================================================= - "npc_dota_hero_winter_wyvern_aghsfort" - { - "override_hero" "npc_dota_hero_winter_wyvern" - "Ability1" "aghsfort_winter_wyvern_arctic_burn" - "Ability2" "aghsfort_winter_wyvern_splinter_blast" - "Ability3" "aghsfort_winter_wyvern_cold_embrace" - "Ability6" "aghsfort_winter_wyvern_winters_curse" - "Ability13" "special_bonus_attack_speed_30" - } - - //================================================================================================================= - // HERO: Phantom Assassin - //================================================================================================================= - "npc_dota_hero_phantom_assassin_aghsfort" - { - "override_hero" "npc_dota_hero_phantom_assassin" - "Ability1" "aghsfort_phantom_assassin_stifling_dagger" - "Ability2" "aghsfort_phantom_assassin_phantom_strike" - "Ability3" "aghsfort_phantom_assassin_blur" - "Ability6" "aghsfort_phantom_assassin_coup_de_grace" - } - - //================================================================================================================= - // HERO: Disruptor - //================================================================================================================= - "npc_dota_hero_disruptor_aghsfort" - { - "override_hero" "npc_dota_hero_disruptor" - "Ability1" "aghsfort_disruptor_thunder_strike" - "Ability2" "aghsfort_disruptor_glimpse" - "Ability3" "aghsfort_disruptor_kinetic_field" - "Ability6" "aghsfort_disruptor_static_storm" - "Ability14" "special_bonus_intelligence_20" - "Ability13" "special_bonus_unique_disruptor_2" - "Ability10" "special_bonus_magic_resistance_20" - } - - //================================================================================================================= - // HERO: Snapfire - //================================================================================================================= - "npc_dota_hero_snapfire_aghsfort" - { - "override_hero" "npc_dota_hero_snapfire" - "Ability1" "aghsfort_snapfire_scatterblast" - "Ability2" "aghsfort_snapfire_firesnap_cookie" - "Ability3" "aghsfort_snapfire_lil_shredder" - "Ability4" "aghsfort_snapfire_gobble_up" - "Ability5" "aghsfort_snapfire_spit_creep" - "Ability6" "aghsfort_snapfire_mortimer_kisses" - "Ability16" "special_bonus_attack_damage_90" - - } - - //================================================================================================================= - // HERO: Tusk - //================================================================================================================= - "npc_dota_hero_tusk_aghsfort" - { - "override_hero" "npc_dota_hero_tusk" - "Ability1" "aghsfort_tusk_ice_shards" - "Ability2" "aghsfort_tusk_snowball" - "Ability3" "aghsfort_tusk_tag_team" - "Ability6" "aghsfort_tusk_walrus_punch" - "Ability7" "aghsfort_tusk_launch_snowball" - "Ability14" "special_bonus_movement_speed_30" - "Ability17" "special_bonus_attack_speed_40" - "ArmorPhysical" "4" - "AttackDamageMin" "29" - "AttackDamageMax" "33" - } - - //================================================================================================================= - // HERO: Ursa - //================================================================================================================= - "npc_dota_hero_ursa_aghsfort" - { - "override_hero" "npc_dota_hero_ursa" - "Ability1" "aghsfort_ursa_earthshock" - "Ability2" "aghsfort_ursa_overpower" - "Ability3" "aghsfort_ursa_fury_swipes" - "Ability6" "aghsfort_ursa_enrage" - "Ability10" "special_bonus_attack_damage_20" - "Ability14" "special_bonus_unique_ursa_3" - } - - //================================================================================================================= - // HERO: Sniper - //================================================================================================================= - "npc_dota_hero_sniper_aghsfort" - { - "override_hero" "npc_dota_hero_sniper" - "Ability1" "aghsfort_sniper_shrapnel" - "Ability2" "aghsfort_sniper_headshot" - "Ability3" "aghsfort_sniper_take_aim" - "Ability6" "aghsfort_sniper_assassinate" - } - - //================================================================================================================= - // HERO: Mars - //================================================================================================================= - "npc_dota_hero_mars_aghsfort" - { - "override_hero" "npc_dota_hero_mars" - "Ability1" "aghsfort_mars_spear" - "Ability2" "aghsfort_mars_gods_rebuke" - "Ability3" "aghsfort_mars_bulwark" - "Ability6" "aghsfort_mars_arena_of_blood" - "Ability9" "aghsfort_mars_bulwark_stop" - } - - //================================================================================================================= - // HERO: Viper - //================================================================================================================= - "npc_dota_hero_viper_aghsfort" - { - "override_hero" "npc_dota_hero_viper" - "Ability1" "aghsfort_viper_poison_attack" - "Ability2" "aghsfort_viper_nethertoxin" - "Ability3" "aghsfort_viper_corrosive_skin" - "Ability6" "aghsfort_viper_viper_strike" - "Ability16" "special_bonus_hp_400" - "Ability17" "special_bonus_movement_speed_30" - "Ability11" "special_bonus_spell_lifesteal_6" - } - - //================================================================================================================= - // HERO: Weaver - //================================================================================================================= - "npc_dota_hero_weaver_aghsfort" - { - "override_hero" "npc_dota_hero_weaver" - "Ability1" "aghsfort_weaver_the_swarm" - "Ability2" "aghsfort_weaver_shukuchi" - "Ability3" "aghsfort_weaver_geminate_attack" - "Ability6" "aghsfort_weaver_time_lapse" - "Ability11" "special_bonus_agility_6" - "Ability12" "special_bonus_corruption_3" - "Ability16" "special_bonus_hp_475" - "MovementSpeed" "300" - "AttributeBaseStrength" "18" - } - - //================================================================================================================= - // HERO: Witch Doctor - //================================================================================================================= - "npc_dota_hero_witch_doctor_aghsfort" - { - "override_hero" "npc_dota_hero_witch_doctor" - "Ability1" "aghsfort_witch_doctor_paralyzing_cask" - "Ability2" "aghsfort_witch_doctor_voodoo_restoration" - "Ability3" "aghsfort_witch_doctor_maledict" - "Ability5" "aghsfort_witch_doctor_death_ward_no_channel" - "Ability6" "aghsfort_witch_doctor_death_ward" - "Ability15" "special_bonus_unique_witch_doctor_4" - } - - - - -} diff --git a/aghanim_singleplayer/scripts/npc/npc_items_custom.txt b/aghanim_singleplayer/scripts/npc/npc_items_custom.txt deleted file mode 100755 index 053a7f9..0000000 --- a/aghanim_singleplayer/scripts/npc/npc_items_custom.txt +++ /dev/null @@ -1,11610 +0,0 @@ -"DOTAAbilities" -{ - - //================================================================================================================= - // Item Battle Points - //================================================================================================================= - "item_battle_points" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_battle_points" - "AbilityTextureName" "item_battle_points" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/ui/compendium_points/compendium_points_aghanim.vmdl" - "Skin" "3" - "Effect" "particles/econ/events/ti10/ingame_battle_points_ti10.vpcf" - "WorldDropSound" "Item.BattlePointsDropped" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - "ItemCastOnPickup" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - "item_ring_of_regen" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "27" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "175" - "ItemShopTags" "regen_health" - "ItemAliases" "ror" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "4.5" - } - } - "ShouldBeInitiallySuggested" "1" - // Sound - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_sobi_mask" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "28" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "175" - "ItemShopTags" "regen_mana" - "ItemAliases" "sage's mask" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "1.8" - } - } - "ShouldBeInitiallySuggested" "1" - } - "item_gloves" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "25" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "450" - "ItemShopTags" "attack_speed" - "ItemAliases" "gloves of haste" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "40" - } - } - } - "item_ring_of_tarrasque" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "279" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "650" - "ItemShopTags" "regen_health" - "ItemAliases" "rot" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "300" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "12" - } - } - "ShouldBeInitiallySuggested" "1" - // Sound - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_ring_of_protection" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "12" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "175" - "ItemShopTags" "armor" - "ItemAliases" "rop;ring of protection" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_armor" "4" - } - } - "ShouldBeInitiallySuggested" "1" - // Sound - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_infused_raindrop" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - "AbilityCooldown" "7.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "265" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "225" - "ItemPermanent" "0" - "ItemInitialCharges" "6" - "ItemStackable" "0" - "ItemShopTags" "armor" - "ItemAliases" "raindrop" - "ItemStockMax" "1" - "ItemStockTime" "1" - "ItemStockInitial" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "mana_regen" "2.4" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_armor" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_magical_armor" "0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "magic_damage_block" "240" - } - "05" - { - "var_type" "FIELD_INTEGER" - "min_damage" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "initial_charges" "6" - } - } - "ItemHideCharges" "0" - "ItemInitialStockTime" "270.0" - // Sounden - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_orb_of_venom" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "181" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "300" - "ItemShopTags" "hard_to_tag" - "ItemAliases" "oov;orb of venom" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "poison_damage_melee" "4.0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "poison_damage_range" "4.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "poison_movement_speed_melee" "-30" - } - "04" - { - "var_type" "FIELD_INTEGER" - "poison_movement_speed_range" "-8" - } - "05" - { - "var_type" "FIELD_FLOAT" - "poison_duration" "4.0" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeInitiallySuggested" "1" - } - "item_blades_of_attack" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "2" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "450" - "ItemShopTags" "damage;tutorial" - "ItemAliases" "blades of attack" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "18" - } - } - } - "item_chainmail" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "4" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "550" - "ItemShopTags" "armor" - "ItemAliases" "chainmail" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "8" - } - } - } - "item_quarterstaff" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "10" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "875" - "ItemShopTags" "damage;attack_speed" - "ItemAliases" "quarterstaff" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_speed" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "20" - } - } - } - "item_helm_of_iron_will" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "6" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "925" - "ItemShopTags" "armor;regen_health" - "ItemAliases" "helm of iron will" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "10" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_regen" "10" - } - } - } - "item_broadsword" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "3" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "damage" - "ItemAliases" "broadsword" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "30" - } - } - } - "item_claymore" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "5" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1400" - "ItemShopTags" "damage" - "ItemAliases" "claymore" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "42" - } - } - } - "item_mithril_hammer" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "8" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1600" - "ItemShopTags" "damage" - "ItemAliases" "mithril hammer" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "48" - } - } - } - "item_ring_of_health" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "56" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "825" - "SecretShop" "1" - "ItemShopTags" "regen_health" - "ItemAliases" "roh;ring of health" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "19.5" - } - } - // Sound - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_void_stone" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "57" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "825" - "SecretShop" "1" - "ItemShopTags" "regen_mana" - "ItemAliases" "void stone" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "6.75" - } - } - } - "item_energy_booster" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "59" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "900" - "SecretShop" "1" - "ItemShopTags" "mana_pool" - "ItemAliases" "energy booster" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "500" - } - } - } - "item_vitality_booster" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "61" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1100" - "SecretShop" "1" - "ItemShopTags" "health_pool" - "ItemAliases" "vitality booster" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "500" - } - } - } - "item_point_booster" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "60" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1200" - "SecretShop" "1" - "ItemShopTags" "mana_pool;health_pool" - "ItemAliases" "point booster" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "350" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "350" - } - } - } - "item_platemail" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "9" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1400" - "SecretShop" "1" - "ItemShopTags" "armor" - "ItemAliases" "platemail" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "20" - } - } - } - "item_talisman_of_evasion" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "32" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1400" - "SecretShop" "1" - "ItemShopTags" "evasion" - "ItemAliases" "talisman of evasion" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "30" - } - } - } - "item_hyperstone" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "55" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2000" - "SecretShop" "1" - "ItemShopTags" "attack_speed" - "ItemAliases" "hyperstone" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "120" - } - } - } - "item_ultimate_orb" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "24" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2050" - "SecretShop" "1" - "ItemShopTags" "agi;int;str" - "ItemAliases" "ultimate orb" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "20" - } - } - } - "item_demon_edge" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "51" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2200" - "SecretShop" "1" - "ItemShopTags" "damage" - "ItemAliases" "demon edge" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "84" - } - } - } - "item_mystic_staff" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "58" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2700" - "SecretShop" "1" - "ItemShopTags" "int" - "ItemAliases" "mystic staff" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "50" - } - } - } - "item_reaver" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "53" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3000" - "SecretShop" "1" - "ItemShopTags" "str" - "ItemAliases" "reaver" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "50" - } - } - } - "item_eagle" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "52" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3000" - "SecretShop" "1" - "ItemShopTags" "agi" - "ItemAliases" "eaglesong" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "50" - } - } - } - "item_relic" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "54" - "ItemQuality" "secret_shop" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3800" - "SecretShop" "1" - "ItemShopTags" "damage" - "ItemAliases" "sacred relic" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "120" - } - } - } - "item_null_talisman" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "77" - "ItemQuality" "common" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "510" - "ItemShopTags" "damage;int;agi;str" - "ItemAliases" "null talisman" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_spell_amp" "6" - } - "05" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "1.2" - } - } - "ShouldBeInitiallySuggested" "1" - "ShouldBeSuggested" "1" - } - "item_wraith_band" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "75" - "ItemQuality" "common" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "510" - "ItemShopTags" "damage;int;agi;str" - "ItemAliases" "wraith band" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "10" - } - "05" - { - "var_type" "FIELD_FLOAT" - "bonus_armor" "3.0" - } - } - "ShouldBeInitiallySuggested" "1" - "ShouldBeSuggested" "1" - } - "item_bracer" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "73" - "ItemQuality" "common" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "510" - "ItemShopTags" "damage;int;agi;str" - "ItemAliases" "bracer" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "4" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "6" - } - "05" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "1.5" - } - } - "ShouldBeInitiallySuggested" "1" - "ShouldBeSuggested" "1" - } - "item_soul_ring" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "178" - "ItemQuality" "common" - "ItemCost" "815" - "ItemDeclarations" "DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "regen_health;boost_mana" - "ItemAliases" "soul ring" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "12" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_armor" "4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "health_sacrifice" "170" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_gain" "300" - } - "05" - { - "var_type" "FIELD_INTEGER" - "duration" "10" - } - } - "ShouldBeSuggested" "1" - // Sound - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_power_treads" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "63" - "ItemQuality" "common" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1400" - "ItemDeclarations" "DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "attack_speed;move_speed;int;agi;str" - "ItemAliases" "power treads" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "90" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_stat" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "0" - } - } - "ShouldBeSuggested" "1" - } - "item_phase_boots" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "8.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "50" - "ItemQuality" "common" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1500" - "ItemDeclarations" "DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;move_speed;hard_to_tag" - "ItemAliases" "phase boots" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "90" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_melee" "36" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_range" "24" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage_block_melee" "0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage_block_ranged" "0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "block_chance" "0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "phase_movement_speed" "40" - } - "08" - { - "var_type" "FIELD_INTEGER" - "phase_movement_speed_range" "20" - } - "09" - { - "var_type" "FIELD_FLOAT" - "phase_duration" "6.0" - } - "10" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "0" - } - "11" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "8" - } - } - "ShouldBeSuggested" "1" - } - "item_oblivion_staff" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "67" - "ItemQuality" "common" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1500" - "ItemShopTags" "damage;int;attack_speed;regen_mana" - "ItemAliases" "oblivion staff" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "20" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "2.5" - } - } - } - "item_mask_of_madness" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "25" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "172" - "ItemQuality" "artifact" - "ItemCost" "1775" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "unique;hard_to_tag" - "ItemAliases" "mom;mask of madness" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "lifesteal_percent" "40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "berserk_bonus_attack_speed" "220" - } - "05" - { - "var_type" "FIELD_INTEGER" - "berserk_bonus_movement_speed" "60" - } - "06" - { - "var_type" "FIELD_INTEGER" - "berserk_armor_reduction" "8" - } - "07" - { - "var_type" "FIELD_FLOAT" - "berserk_duration" "6.0" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - - "item_pers" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "69" - "ItemQuality" "common" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1650" - "ItemShopTags" "regen_health;regen_mana" - "ItemAliases" "perseverance" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "19.5" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "6.75" - } - } - } - "item_ring_of_basilius" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "88" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "425" - "ItemShopTags" "regen_mana" - "ItemAliases" "rob;ring of basilius" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "aura_mana_regen" "4.2" - } - "03" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - } - "ShouldBeInitiallySuggested" "1" - // Sound - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_headdress" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "94" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "425" - "ItemShopTags" "str;int;agi;regen_health" - "ItemAliases" "headdress" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "aura_health_regen" "4.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - } - } - "item_buckler" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "86" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "375" - "ItemShopTags" "armor;boost_armor" - "ItemAliases" "buckler" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "0" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_aoe_armor" "4" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_aoe_radius" "1200" - } - } - } - "item_tranquil_boots" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "13.0" - "AbilityManaCost" "0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "214" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "925" - "ItemDeclarations" "DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "move_speed;regen_health;armor" - "ItemAliases" "tranquil boots" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "140" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_health_regen" "28" - } - "04" - { - "var_type" "FIELD_FLOAT" - "heal_duration" "20.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "heal_amount" "250" - } - "06" - { - "var_type" "FIELD_FLOAT" - "heal_interval" "0.334" - } - "07" - { - "var_type" "FIELD_INTEGER" - "break_time" "8" - } - "08" - { - "var_type" "FIELD_INTEGER" - "break_count" "1" - } - "09" - { - "var_type" "FIELD_INTEGER" - "break_threshold" "20" - } - "10" - { - "var_type" "FIELD_INTEGER" - "broken_movement_speed" "90" - } - } - "ItemHideCharges" "1" - "ShouldBeSuggested" "1" - } - "item_medallion_of_courage" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilityCooldown" "7.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "187" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1025" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "armor;regen_mana;hard_to_tag" - "ItemAliases" "medallion of courage" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "10" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen_pct" "3.75" - } - "03" - { - "var_type" "FIELD_INTEGER" - "armor_reduction" "-10" - } - "04" - { - "var_type" "FIELD_INTEGER" - "duration" "7" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySharedCooldown" "medallion" - "ShouldBeSuggested" "1" - } - "item_arcane_boots" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "55.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "180" - "ItemQuality" "rare" - "ItemCost" "1400" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemAlertable" "1" - "ItemShopTags" "move_speed;boost_mana;mana_pool" - "ItemAliases" "mana;mb;arcane boots" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement" "90" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "500" - } - "03" - { - "var_type" "FIELD_INTEGER" - "replenish_amount" "320" - } - "04" - { - "var_type" "FIELD_INTEGER" - "replenish_radius" "1200" - } - } - "ShouldBeSuggested" "1" - } - "item_ancient_janggo" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30.0" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "185" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1475" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemPermanent" "1" - "ItemRequiresCharges" "1" - "ItemInitialCharges" "6" - "ItemShopTags" "str;agi;int;damage;move_speed;attack_speed;hard_to_tag" - "ItemAliases" "drum of endurance" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "12" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "4.5" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed_pct" "90" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed_pct" "26" - } - "06" - { - "var_type" "FIELD_INTEGER" - "duration" "6" - } - "07" - { - "var_type" "FIELD_INTEGER" - "radius" "1200" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ItemDisplayCharges" "1" - "ShouldBeSuggested" "1" - } - "item_javelin" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "7" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1100" - "ItemShopTags" "damage" - "ItemAliases" "javelin" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_chance" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_chance_damage" "160" - } - } - } - "item_vladmir" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "81" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2375" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;armor;regen_mana" - "ItemAliases" "vladmir's offering;vlads" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "mana_regen_aura" "4.0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "lifesteal_aura" "30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_aura" "36" - } - "04" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - } - "ShouldBeSuggested" "1" - } - "item_mekansm" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "2" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "45.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "225" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "79" - "ItemQuality" "rare" - "ItemCost" "1975" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemAlertable" "1" - "ItemShopTags" "agi;int;str;armor;boost_health" - "ItemAliases" "mechanism;mekansm" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "8" - } - "02" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "03" - { - "var_type" "FIELD_FLOAT" - "aura_health_regen" "4.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "aura_armor" "6.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "heal_amount" "550" - } - "06" - { - "var_type" "FIELD_INTEGER" - "heal_radius" "1200" - } - } - "ShouldBeSuggested" "1" - } - "item_pipe" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "2" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "60.0" - "AbilityManaCost" "100" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "90" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3425" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemAlertable" "1" - "ItemShopTags" "regen_health;boost_magic_resist" - "ItemAliases" "pipe of insight" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "health_regen" "25.5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "60" - } - "03" - { - "var_type" "FIELD_FLOAT" - "barrier_debuff_duration" "50.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "tooltip_resist" "60" - } - "05" - { - "var_type" "FIELD_FLOAT" - "aura_health_regen" "6.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "magic_resistance_aura" "20" - } - "07" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "08" - { - "var_type" "FIELD_INTEGER" - "barrier_block" "800" - } - "09" - { - "var_type" "FIELD_INTEGER" - "barrier_duration" "12.0" - } - "10" - { - "var_type" "FIELD_INTEGER" - "barrier_radius" "1200" - } - "11" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "0" - } - "12" - { - "var_type" "FIELD_INTEGER" - "barrier_block_creep" "400" - } - } - "ShouldBeSuggested" "1" - } - "item_guardian_greaves" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "40" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "231" - "ItemQuality" "rare" - "ItemCost" "4975" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemAlertable" "1" - "ItemShopTags" "int;armor;regen_health;hard_to_tag" - "ItemAliases" "guardian greaves" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement" "100" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "500" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "8" - } - "04" - { - "var_type" "FIELD_FLOAT" - "aura_health_regen" "7.5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "aura_armor" "6" - } - "06" - { - "var_type" "FIELD_INTEGER" - "aura_health_regen_bonus" "32" - } - "07" - { - "var_type" "FIELD_INTEGER" - "aura_armor_bonus" "20" - } - "08" - { - "var_type" "FIELD_INTEGER" - "aura_bonus_threshold" "40" - } - "09" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "10" - { - "var_type" "FIELD_INTEGER" - "replenish_health" "600" - } - "11" - { - "var_type" "FIELD_INTEGER" - "replenish_mana" "400" - } - "12" - { - "var_type" "FIELD_INTEGER" - "replenish_radius" "1200" - } - } - "ShouldBeSuggested" "1" - } - "item_glimmer_cape" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "FightRecapLevel" "1" - "AbilityCooldown" "14.0" - "AbilityManaCost" "90" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "550" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "254" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1900" - "ItemAliases" "glimmer cape" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_magical_armor" "30" - } - "03" - { - "var_type" "FIELD_FLOAT" - "fade_delay" "0.6" - } - "04" - { - "var_type" "FIELD_INTEGER" - "active_magical_armor" "90" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "5" - } - "06" - { - "var_type" "FIELD_FLOAT" - "building_duration_limit" "180" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_veil_of_discord" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_DONT_CANCEL_MOVEMENT" - "AbilityCastPoint" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50" - "AbilityCastRange" "1000" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "190" - "ItemQuality" "rare" - "ItemCost" "1525" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;armor;regen_health;hard_to_tag" - "ItemAliases" "vod;veil of discord" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "8" - } - "02" - { - "var_type" "FIELD_FLOAT" - "aura_mana_regen" "4.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "36" - } - "05" - { - "var_type" "FIELD_INTEGER" - "debuff_radius" "600" - } - "06" - { - "var_type" "FIELD_FLOAT" - "resist_debuff_duration" "16.0" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_force_staff" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC | DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH | DOTA_UNIT_TARGET_TEAM_CUSTOM" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "23.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "550" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "102" - "ItemQuality" "rare" - "ItemCost" "2175" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;damage;attack_speed;hard_to_tag" - "ItemAliases" "fs;force staff" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "7.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "push_length" "600" - } - "04" - { - "var_type" "FIELD_INTEGER" - "enemy_cast_range" "850" - } - } - "AbilitySharedCooldown" "force" - "ShouldBeSuggested" "1" - } - "item_aether_lens" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "232" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2275" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;regen_mana;move_speed;hard_to_tag" - "ItemAliases" "aether lens" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "900" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "9.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "cast_range_bonus" "500" - } - } - "ShouldBeSuggested" "1" - } - "item_cyclone" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "23.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "175" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "575" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "100" - "ItemQuality" "rare" - "ItemCost" "2725" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;regen_mana;move_speed;hard_to_tag" - "ItemAliases" "cyclone euls;eul's scepter of divinity" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "15.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "40" - } - "04" - { - "var_type" "FIELD_FLOAT" - "cyclone_duration" "2.5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "tooltip_drop_damage" "50" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_rod_of_atos" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "18" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50" - "AbilityCastRange" "1100" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "206" - "ItemQuality" "rare" - "ItemCost" "2750" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;regen_health" - "ItemAliases" "rod of atos" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "20" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_solar_crest" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilityCooldown" "7.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "229" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3775" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "armor;regen_mana;hard_to_tag" - "ItemAliases" "solar crest" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "16" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "self_movement_speed" "40" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen_pct" "5.25" - } - "05" - { - "var_type" "FIELD_INTEGER" - "target_movement_speed" "20" - } - "06" - { - "var_type" "FIELD_INTEGER" - "target_attack_speed" "160" - } - "07" - { - "var_type" "FIELD_INTEGER" - "duration" "7" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySharedCooldown" "medallion" - "ShouldBeSuggested" "1" - } - "item_orchid" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "18.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "98" - "ItemQuality" "rare" - "ItemCost" "3475" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;attack_speed;damage;regen_mana;damage;hard_to_tag" - "ItemAliases" "orchid malevolence;silence" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "60" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "60" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "12" - } - "05" - { - "var_type" "FIELD_FLOAT" - "silence_damage_percent" "60" - } - "06" - { - "var_type" "FIELD_FLOAT" - "silence_duration" "5" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySharedCooldown" "orchid" - "ShouldBeSuggested" "1" - } - "item_nullifier" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - "FightRecapLevel" "1" - "AbilityCooldown" "11.0" - "AbilityManaCost" "75" - "AbilityCastRange" "900" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "225" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4725" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemAliases" "nlf;nullifier" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "160" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "16" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_regen" "12" - } - "04" - { - "var_type" "FIELD_FLOAT" - "mute_duration" "5.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "1000" - } - "06" - { - "var_type" "FIELD_INTEGER" - "slow_pct" "80" - } - "07" - { - "var_type" "FIELD_FLOAT" - "slow_interval_duration" "0.5" - } - } - "ShouldBeSuggested" "1" - } - "item_refresher" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - "AbilityCooldown" "120.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "375" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "110" - "ItemQuality" "rare" - "ItemCost" "5000" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "regen_health;regen_mana;hard_to_tag" - "ItemAliases" "refresher orb" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health_regen" "39" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "36.0" - } - } - "ShouldBeSuggested" "1" - } - "item_sheepstick" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "FightRecapLevel" "2" - "AbilityCastPoint" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "22.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "250" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "96" - "ItemQuality" "rare" - "ItemCost" "5575" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;regen_mana;agi;hard_to_tag" - "ItemAliases" "hex;sheepstick;scythe of vyse" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "70" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "27.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "sheep_duration" "3.5" - } - "06" - { - "var_type" "FIELD_FLOAT" - "sheep_movement_speed" "140" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "ShouldBeSuggested" "1" - } - "item_octarine_core" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "235" - "ItemQuality" "rare" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5000" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "move_speed;boost_mana;mana_pool" - "ItemAliases" "mana;mb;octarine core" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "640" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "640" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_magical_armor" "15" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_cooldown" "35" - } - "06" - { - "var_type" "FIELD_FLOAT" - "hero_lifesteal" "35" - } - "07" - { - "var_type" "FIELD_FLOAT" - "creep_lifesteal" "10" - } - "08" - { - "var_type" "FIELD_INTEGER" - "active_duration" "7" - } - } - "ShouldBeSuggested" "1" - } - "item_hood_of_defiance" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "60.0" - "AbilityManaCost" "75" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "131" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1750" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "regen_health;magic_resist" - "ItemAliases" "hood of defiance" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_spell_resist" "50" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "25.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "tooltip_resist" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "barrier_block" "650" - } - "05" - { - "var_type" "FIELD_INTEGER" - "barrier_duration" "12.0" - } - } - "ShouldBeSuggested" "1" - } - "item_vanguard" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "125" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1925" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "regen_health;block;health_pool" - "ItemAliases" "vg;vanguard" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "500" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "21.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "block_damage_melee" "140" - } - "04" - { - "var_type" "FIELD_INTEGER" - "block_damage_ranged" "70" - } - "05" - { - "var_type" "FIELD_INTEGER" - "block_chance" "75" - } - } - "ShouldBeSuggested" "1" - } - "item_blade_mail" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "25" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "127" - "ItemQuality" "epic" - "ItemCost" "2050" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;armor;int;hard_to_tag" - "ItemAliases" "bm;blade mail;blademail" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "56" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "14" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "4.5" - } - "05" - { - "var_type" "FIELD_INTEGER" - "passive_reflection_constant" "10" - } - "06" - { - "var_type" "FIELD_INTEGER" - "passive_reflection_pct" "10" - } - "07" - { - "var_type" "FIELD_INTEGER" - "active_reflection_pct" "90" - } - } - "ShouldBeSuggested" "1" - } - "item_soul_booster" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "129" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3200" - "ItemShopTags" "regen_health;regen_mana;health_pool;mana_pool" - "ItemAliases" "soul booster" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "850" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "850" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_magical_armor" "20" - } - } - } - "item_aeon_disk" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "105.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "256" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3100" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS | DECLARE_PURCHASES_IN_SPEECH" - "ItemShopTags" "str;regen_health;health_pool" - "ItemAliases" "ad;aeon disk" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "600" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "600" - } - "03" - { - "var_type" "FIELD_INTEGER" - "health_threshold_pct" "70" - } - "04" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "75" - } - "05" - { - "var_type" "FIELD_FLOAT" - "buff_duration" "2.5" - } - } - "ShouldBeSuggested" "1" - } - "item_crimson_guard" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "40.0" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "242" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3800" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemAlertable" "1" - "ItemShopTags" "armor;boost_armor;regen_health;block;health_pool" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "500" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "36" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_armor" "12" - } - "04" - { - "var_type" "FIELD_INTEGER" - "block_damage_melee" "140" - } - "05" - { - "var_type" "FIELD_INTEGER" - "block_damage_ranged" "70" - } - "06" - { - "var_type" "FIELD_INTEGER" - "block_chance" "75" - } - "07" - { - "var_type" "FIELD_INTEGER" - "duration" "12" - } - "08" - { - "var_type" "FIELD_INTEGER" - "bonus_aoe_radius" "1200" - } - "09" - { - "var_type" "FIELD_INTEGER" - "block_damage_melee_active" "60" - } - "10" - { - "var_type" "FIELD_INTEGER" - "block_damage_ranged_active" "60" - } - "11" - { - "var_type" "FIELD_INTEGER" - "block_chance_active" "100" - } - "12" - { - "var_type" "FIELD_FLOAT" - "tooltip_reapply_time" "40" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_lotus_orb" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "FightRecapLevel" "1" - "AbilityCooldown" "15.0" - "AbilityManaCost" "175" - "AbilityCastRange" "900" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "226" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3950" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "regen_health;regen_mana;str;agi;int;hard_to_tag" - "ItemAliases" "ls;lotus orb" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "19.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "12.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "500" - } - "05" - { - "var_type" "FIELD_FLOAT" - "active_duration" "6" - } - } - "ShouldBeSuggested" "1" - } - "item_black_king_bar" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "2" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "70" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "116" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4050" - "ItemSellable" "1" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "str;damage;hard_to_tag" - "ItemAliases" "bkb;black king bar" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "48" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "10.0 9.0 8.0 7.0 6.0 5.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_level" "6" - } - "05" - { - "var_type" "FIELD_INTEGER" - // Percentage over model scale - "model_scale" "30" - } - } - "ShouldBeSuggested" "1" - } - "item_hurricane_pike" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC | DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_BOTH | DOTA_UNIT_TARGET_TEAM_CUSTOM" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "23.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "550" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "263" - "ItemQuality" "epic" - "ItemCost" "4525" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;damage;attack_speed;hard_to_tag" - "ItemAliases" "fs;force staff" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "26" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "7.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "30" - } - "05" - { - "var_type" "FIELD_INTEGER" - "base_attack_range" "280" - } - "06" - { - "var_type" "FIELD_INTEGER" - "push_length" "600" - } - "07" - { - "var_type" "FIELD_INTEGER" - "enemy_length" "450" - } - "08" - { - "var_type" "FIELD_FLOAT" - "range_duration" "5" - } - "09" - { - "var_type" "FIELD_INTEGER" - "cast_range_enemy" "400" - } - "10" - { - "var_type" "FIELD_INTEGER" - "max_attacks" "4" - } - "11" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "100" - } - } - "AbilitySharedCooldown" "force" - "ShouldBeSuggested" "1" - } - "item_shivas_guard" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - "AbilityCastRange" "900" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "119" - "ItemQuality" "epic" - "ItemCost" "4850" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;armor;hard_to_tag" - "ItemAliases" "shiva's guard;shivas" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "22" - } - "03" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "aura_attack_speed" "-75" - } - "05" - { - "var_type" "FIELD_INTEGER" - "blast_damage" "400" - } - "06" - { - "var_type" "FIELD_INTEGER" - "blast_movement_speed" "-60" - } - "07" - { - "var_type" "FIELD_FLOAT" - "blast_debuff_duration" "4.0" - } - "08" - { - "var_type" "FIELD_INTEGER" - "blast_radius" "900" - } - "09" - { - "var_type" "FIELD_INTEGER" - "blast_speed" "350" - } - "10" - { - "var_type" "FIELD_INTEGER" - "hp_regen_degen_aura" "50" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_manta" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityCastPoint" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "45.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "125" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "147" - "ItemQuality" "epic" - "ItemCost" "4600" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "agi;str;int;attack_speed;move_speed;hard_to_tag" - "ItemAliases" "manta style" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "52" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "24" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "16" - } - "06" - { - "var_type" "FIELD_INTEGER" - "images_count" "2" - } - "07" - { - "var_type" "FIELD_INTEGER" - "tooltip_illusion_duration" "20" - } - "08" - { - "var_type" "FIELD_INTEGER" - "images_do_damage_percent_melee" "-67" - } - "09" - { - "var_type" "FIELD_INTEGER" - "tooltip_damage_outgoing_melee" "33" - } - "10" - { - "var_type" "FIELD_INTEGER" - "images_take_damage_percent_melee" "250" - } - "11" - { - "var_type" "FIELD_INTEGER" - "tooltip_damage_incoming_melee_total_pct" "350" - } - "12" - { - "var_type" "FIELD_INTEGER" - "images_do_damage_percent_ranged" "-72" - } - "13" - { - "var_type" "FIELD_INTEGER" - "tooltip_damage_outgoing_ranged" "28" - } - "14" - { - "var_type" "FIELD_INTEGER" - "images_take_damage_percent_ranged" "300" - } - "15" - { - "var_type" "FIELD_INTEGER" - "tooltip_damage_incoming_ranged_total_pct" "400" - } - "16" - { - "var_type" "FIELD_INTEGER" - "cooldown_melee" "30" - } - "17" - { - "var_type" "FIELD_INTEGER" - "cooldown_ranged_tooltip" "45" - } - "18" - { - "var_type" "FIELD_FLOAT" - "invuln_duration" "0.1" - } - "19" - { - "var_type" "FIELD_INTEGER" - "vision_radius" "1000" - } - "20" - { - "var_type" "FIELD_FLOAT" - "tooltip_ranged_cooldown_increase" "15" - } - } - "ShouldBeSuggested" "1" - } - "item_sphere" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "FightRecapLevel" "1" - "AbilityCooldown" "12.0" - "AbilityCastRange" "700" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "123" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4600" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "regen_health;regen_mana;str;agi;int;hard_to_tag" - "ItemAliases" "ls;linken's sphere" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "28" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "21" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "15.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "block_cooldown" "12.0" - } - } - "ActiveDescriptionLine" "2" - "ShouldBeSuggested" "1" - } - "item_heart" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "7.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "114" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5400" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "str;regen_health;health_pool" - "ItemAliases" "hot;heart of tarrasque" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "80" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "800" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "20" - } - "04" - { - "var_type" "FIELD_FLOAT" - "health_regen_pct" "2" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cooldown_melee" "5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "cooldown_ranged_tooltip" "7" - } - } - "ShouldBeSuggested" "1" - } - "item_assault" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "112" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5075" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "attack_speed;armor;hard_to_tag" - "ItemAliases" "ac;assault cuirass" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "15" - } - "03" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "04" - { - "var_type" "FIELD_INTEGER" - "aura_attack_speed" "60" - } - "05" - { - "var_type" "FIELD_INTEGER" - "aura_positive_armor" "7.5" - } - "06" - { - "var_type" "FIELD_INTEGER" - "aura_negative_armor" "-10" - } - } - "ShouldBeSuggested" "1" - } - "item_armlet" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_TOGGLE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "151" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2475" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;attack_speed;armor;regen_health;hard_to_tag" - "ItemAliases" "armlet of mordiggian" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "10" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_health_regen" "10" - } - "05" - { - "var_type" "FIELD_INTEGER" - "unholy_bonus_damage" "62" - } - "06" - { - "var_type" "FIELD_INTEGER" - "unholy_bonus_attack_speed" "0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "unholy_bonus_strength" "50" - } - "08" - { - "var_type" "FIELD_INTEGER" - "unholy_bonus_armor" "8" - } - "09" - { - "var_type" "FIELD_INTEGER" - "unholy_health_drain_per_tick" "6" - } - "10" - { - "var_type" "FIELD_INTEGER" - "unholy_health_drain_per_second_tooltip" "54" - } - "11" - { - "var_type" "FIELD_FLOAT" - "toggle_cooldown" "0.036f" - } - } - "ShouldBeSuggested" "1" - } - "item_meteor_hammer" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_CHANNELLED" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "FightRecapLevel" "1" - "AbilityCooldown" "24" - "AbilityManaCost" "125" - // Casting - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - // Time - // ------------------------------------------------------------------------------------------------------------- - "AbilityChannelTime" "2.5" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "223" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2350" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemAliases" "mh;meteor hammer" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "16" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "25.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "7.5" - } - "04" - { - "var_type" "FIELD_INTEGER" - "burn_dps_buildings" "50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "burn_dps_units" "90" - } - "06" - { - "var_type" "FIELD_INTEGER" - "burn_duration" "6" - } - "07" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.75" - } - "08" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "1.0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "land_time" ".5" - } - "10" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "315" - } - "11" - { - "var_type" "FIELD_FLOAT" - "max_duration" "2.5" - } - "12" - { - "var_type" "FIELD_INTEGER" - "impact_damage_buildings" "75" - } - "13" - { - "var_type" "FIELD_INTEGER" - "impact_damage_units" "150" - } - } - "ShouldBeSuggested" "1" - } - "item_invis_sword" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "28.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "152" - "ItemQuality" "epic" - "ItemCost" "3000" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;attack_speed;movespeed;hard_to_tag" - "ItemAliases" "sb;invis;shadow blade;silver edge" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "70" - } - "03" - { - "var_type" "FIELD_FLOAT" - "windwalk_duration" "14.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "windwalk_movement_speed" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "windwalk_fade_time" "0.3" - } - "06" - { - "var_type" "FIELD_INTEGER" - "windwalk_bonus_damage" "175" - } - } - "AbilitySharedCooldown" "shadow_blade" - "ShouldBeSuggested" "1" - } - "item_basher" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2.3" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "143" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2950" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;str;hard_to_tag" - "ItemAliases" "skull basher" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bash_chance_melee" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bash_chance_ranged" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "bash_duration" "1.5" - } - "06" - { - "var_type" "FIELD_FLOAT" - "bash_cooldown" "2.3" - } - "07" - { - "var_type" "FIELD_INTEGER" - "bonus_chance_damage" "100" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "ShouldBeSuggested" "1" - } - "item_broom_handle" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "355" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "melee_attack_range" "100" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "24" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "6" - } - } - "ItemIsNeutralDrop" "1" - } - "item_ocean_heart" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "354" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "all_stats" "10" - } - "02" - { - "var_type" "FIELD_FLOAT" - "water_hp_regen" "24" - } - "03" - { - "var_type" "FIELD_FLOAT" - "water_mp_regen" "12" - } - } - "ItemIsNeutralDrop" "1" - } - "item_keen_optic" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "287" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "cast_range_bonus" "225" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "3.75" - } - } - "ItemIsNeutralDrop" "1" - } - - "item_monkey_king_bar" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "135" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4300" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;attack_speed;hard_to_tag" - "ItemAliases" "mkb;monkey king bar" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "84" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "70" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_chance" "75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_chance_damage" "200" - } - } - "ShouldBeSuggested" "1" - } - "item_bfury" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_TREE | DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "4.0" - "AbilityCastRange" "350" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "145" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4180" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;health_regen;mana_regen;hard_to_tag" - "ItemAliases" "bf;battle fury" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "110" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "22.5" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "7.75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "cleave_damage_percent" "70" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cleave_damage_percent_creep" "70" - } - "06" - { - "var_type" "FIELD_INTEGER" - "quelling_bonus" "32" - } - "07" - { - "var_type" "FIELD_INTEGER" - "quelling_bonus_ranged" "20" - } - "08" - { - "var_type" "FIELD_INTEGER" - "cleave_starting_width" "150" - } - "09" - { - "var_type" "FIELD_INTEGER" - "cleave_ending_width" "360" - } - "10" - { - "var_type" "FIELD_INTEGER" - "cleave_distance" "650" - } - } - "ShouldBeSuggested" "1" - } - "item_quelling_blade" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_TREE | DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_CUSTOM" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "4.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - "AbilityCastRange" "350" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "11" - "ItemQuality" "component" - "Model" "models/props_gameplay/quelling_blade.vmdl" - "ItemCost" "130" - "ItemShopTags" "damage" - "ItemAliases" "qb;quelling blade" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "damage_bonus" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_bonus_ranged" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "quelling_range_tooltip" "350" - } - } - // "SideShop" "1" - "ShouldBeSuggested" "1" - "ShouldBeInitiallySuggested" "1" - } - "item_branches" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "400" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "16" - "ItemQuality" "consumable" - "Model" "models/props_gameplay/branch.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "50" - "ItemShopTags" "agi;int;str" - "ItemAliases" "gg branch;iron branch" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "2" - } - "02" - { - "var_type" "FIELD_INTEGER" - "tree_duration" "20" - } - } - "ShouldBeInitiallySuggested" "1" - } - "item_gauntlets" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "13" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "145" - "ItemShopTags" "str" - "ItemAliases" "gauntlets of strength" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "6" - } - } - "ShouldBeInitiallySuggested" "1" - } - "item_slippers" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "14" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "145" - "ItemShopTags" "agi" - "ItemAliases" "slippers of agility" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "6" - } - } - "ShouldBeInitiallySuggested" "1" - } - "item_mantle" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "15" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "145" - "ItemShopTags" "int" - "ItemAliases" "mantle of intelligence" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "6" - } - } - "ShouldBeInitiallySuggested" "1" - } - "item_circlet" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "20" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "155" - "ItemShopTags" "agi;int;str" - "ItemAliases" "circlet" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "4" - } - } - "ShouldBeInitiallySuggested" "1" - } - "item_belt_of_strength" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "17" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "450" - "ItemShopTags" "str" - "ItemAliases" "belt of strength" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "12" - } - } - } - "item_boots_of_elves" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "18" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "450" - "ItemShopTags" "agi" - "ItemAliases" "band of elvenskin" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "12" - } - } - } - "item_robe" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "19" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "450" - "ItemShopTags" "int" - "ItemAliases" "robe of the magi" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "12" - } - } - } - - "item_crown" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "261" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "450" - "ItemShopTags" "agi;int;str" - "ItemAliases" "crown" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "8" - } - } - "ShouldBeInitiallySuggested" "1" - } - "item_ogre_axe" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "21" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "str" - "ItemAliases" "ogre club" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - } - } - - // ================================================================================================================= - // Blade of Alacrity - // ================================================================================================================= - "item_blade_of_alacrity" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "22" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "agi" - "ItemAliases" "blade of alacrity" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "20" - } - } - } - - // ================================================================================================================= - // Staff of Wizardry - // ================================================================================================================= - "item_staff_of_wizardry" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "23" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "int" - "ItemAliases" "staff of wizardry" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - } - } - - "item_ethereal_blade" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY | DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_MAGIC_IMMUNE_ALLIES" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "20.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "176" - "ItemQuality" "epic" - "ItemCost" "4500" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "agi;str;int;hard_to_tag" - "ItemAliases" "eb;ethereal blade;eblade" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "80" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "blast_movement_slow" "-80" - } - "05" - { - "var_type" "FIELD_FLOAT" - "duration" "4.0" - } - "06" - { - "var_type" "FIELD_FLOAT" - "blast_agility_multiplier" "3.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "blast_damage_base" "250" - } - "08" - { - "var_type" "FIELD_FLOAT" - "duration_ally" "4.0" - } - "09" - { - "var_type" "FIELD_INTEGER" - "ethereal_damage_bonus" "-40" - } - "10" - { - "var_type" "FIELD_INTEGER" - "projectile_speed" "1275" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySharedCooldown" "ethereal" - "ShouldBeSuggested" "1" - } - "item_radiance" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_TOGGLE" - "AbilityCastRange" "700" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "137" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5150" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage" - "ItemAliases" "radiance" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "120" - } - "02" - { - "var_type" "FIELD_INTEGER" - "aura_damage" "120" - } - "03" - { - "var_type" "FIELD_INTEGER" - "aura_damage_illusions" "70" - } - "04" - { - "var_type" "FIELD_INTEGER" - "blind_pct" "34" - } - "05" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "700" - } - } - "ShouldBeSuggested" "1" - } - "item_butterfly" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "139" - "ItemQuality" "epic" - // "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5275" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "agi;damage;evasion;attack_speed" - "ItemAliases" "bfly;butterfly" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "60" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "50" - } - } - "ShouldBeSuggested" "1" - } - "item_silver_edge" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "22.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "249" - "ItemQuality" "epic" - "ItemCost" "6100" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;attack_speed;movespeed;hard_to_tag" - "ItemAliases" "sb;invis;shadow blade" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "80" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "90" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "24" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "4.5" - } - "06" - { - "var_type" "FIELD_FLOAT" - "windwalk_duration" "14.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "windwalk_movement_speed" "25" - } - "08" - { - "var_type" "FIELD_FLOAT" - "windwalk_fade_time" "0.3" - } - "09" - { - "var_type" "FIELD_INTEGER" - "windwalk_bonus_damage" "175" - } - "10" - { - "var_type" "FIELD_INTEGER" - "backstab_reduction" "-50" - } - "11" - { - "var_type" "FIELD_FLOAT" - "backstab_duration" "4" - } - "12" - { - "var_type" "FIELD_INTEGER" - "movement_slow" "100" - } - "13" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0.8" - } - "14" - { - "var_type" "FIELD_FLOAT" - "echo_cooldown" "5.0" - } - } - "AbilitySharedCooldown" "shadow_blade" - "ShouldBeSuggested" "1" - } - "item_abyssal_blade" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "75" - "AbilityCastRange" "600" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "208" - "ItemQuality" "epic" - "ItemCost" "6625" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;str;hard_to_tag" - "ItemAliases" "abyssal blade" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "500" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "30" - } - "04" - { - "var_type" "FIELD_INTEGER" - "block_damage_melee" "140" - } - "05" - { - "var_type" "FIELD_INTEGER" - "block_damage_ranged" "70" - } - "06" - { - "var_type" "FIELD_INTEGER" - "block_chance" "75" - } - "07" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "08" - { - "var_type" "FIELD_INTEGER" - "bash_chance_melee" "50" - } - "09" - { - "var_type" "FIELD_INTEGER" - "bash_chance_ranged" "20" - } - "10" - { - "var_type" "FIELD_FLOAT" - "bash_duration" "1.5" - } - "11" - { - "var_type" "FIELD_FLOAT" - "bash_cooldown" "2.3" - } - "12" - { - "var_type" "FIELD_INTEGER" - "bonus_chance_damage" "200" - } - "13" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.8" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - "ShouldBeSuggested" "1" - } - "item_bloodthorn" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "15.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "900" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "250" - "ItemQuality" "epic" - "ItemCost" "6475" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;attack_speed;damage;regen_mana;damage;hard_to_tag" - "ItemAliases" "orchid malevolence" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "180" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "60" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "16.5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "silence_damage_percent" "60" - } - "06" - { - "var_type" "FIELD_FLOAT" - "silence_duration" "5" - } - "07" - { - "var_type" "FIELD_FLOAT" - "target_crit_multiplier" "180" - } - "08" - { - "var_type" "FIELD_FLOAT" - "tooltip_crit_chance" "100" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySharedCooldown" "orchid" - "ShouldBeSuggested" "1" - } - "item_dragon_lance" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "236" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1900" - "ItemShopTags" "damage" - "ItemAliases" "dragon lance" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "28" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "24" - } - "03" - { - "var_type" "FIELD_INTEGER" - "base_attack_range" "280" - } - } - "ShouldBeSuggested" "1" - } - "item_sange" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "162" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2050" - "ItemShopTags" "damage;str;unique" - "ItemAliases" "sange" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "16" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "24" - } - } - "ShouldBeSuggested" "1" - } - "item_yasha" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "170" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2050" - "ItemShopTags" "agi;attack_speed;move_speed" - "ItemAliases" "yasha" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "24" - } - "03" - { - "var_type" "FIELD_INTEGER" - "movement_speed_percent_bonus" "16" - } - } - "ShouldBeSuggested" "1" - } - "item_kaya" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "259" - "ItemQuality" "epic" - // Item Info^ - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2050" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS | DECLARE_PURCHASES_IN_SPEECH" - "ItemShopTags" "int;mana" - "ItemAliases" "ky;kaya" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "16" - } - "03" - { - "var_type" "FIELD_INTEGER" - "mana_regen_multiplier" "48" - } - "04" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal_amp" "48" - } - } - "ShouldBeSuggested" "1" - } - "item_echo_sabre" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastPoint" "0.0" - "AbilityCooldown" "4.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "252" - "ItemQuality" "artifact" - "ItemCost" "2500" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "int;attack_speed;damage;regen_mana;damage;hard_to_tag" - "ItemAliases" "echo sabre" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "24" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "3.75" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movement_slow" "100" - } - "07" - { - "var_type" "FIELD_INTEGER" - "attack_speed_slow" "0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "0.8" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_maelstrom" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "166" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "2700" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;attack_speed;unique" - "ItemAliases" "maelstrom" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "48" - } - "02" - { - "var_type" "FIELD_INTEGER" - "chain_chance" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "chain_damage" "280" - } - "04" - { - "var_type" "FIELD_INTEGER" - "chain_strikes" "8" - } - "05" - { - "var_type" "FIELD_INTEGER" - "chain_radius" "650" - } - "06" - { - "var_type" "FIELD_FLOAT" - "chain_delay" "0.25" - } - "07" - { - "var_type" "FIELD_FLOAT" - "chain_cooldown" "0.2" - } - } - "ShouldBeSuggested" "1" - } - "item_diffusal_blade" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "15.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "600" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "174" - "ItemQuality" "artifact" - "ItemCost" "3150" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemPermanent" "1" - "ItemShopTags" "agi;int;unique;hard_to_tag" - "ItemAliases" "diffusal blade 1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "feedback_mana_burn" "80" - } - "04" - { - "var_type" "FIELD_INTEGER" - "feedback_mana_burn_illusion_melee" "32" - } - "05" - { - "var_type" "FIELD_INTEGER" - "feedback_mana_burn_illusion_ranged" "16" - } - "06" - { - "var_type" "FIELD_INTEGER" - "purge_rate" "5" - } - "07" - { - "var_type" "FIELD_FLOAT" - "purge_root_duration" "3.0" - } - "08" - { - "var_type" "FIELD_FLOAT" - "purge_slow_duration" "4.0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "damage_per_burn" "0.8" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "AbilitySharedCooldown" "diffusal" - "UpgradesItems" "item_diffusal_blade" - "UpgradeRecipe" "item_recipe_diffusal_blade" - "ShouldBeSuggested" "1" - } - "item_heavens_halberd" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "FightRecapLevel" "1" - "AbilityCastPoint" "0.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "18" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "100" - "AbilityCastRange" "600" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "210" - "ItemQuality" "artifact" - "ItemCost" "3450" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "str;damage;evasion" - "ItemAliases" "heaven's halberd" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "40" - } - "03" - { - "var_type" "FIELD_FLOAT" - "disarm_range" "5.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "disarm_melee" "3.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "40" - } - "06" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "60" - } - } - "ShouldBeSuggested" "1" - } - "item_desolator" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "168" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "3500" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;unique" - "ItemAliases" "desolator" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "120" - } - "02" - { - "var_type" "FIELD_INTEGER" - "corruption_armor" "-12" - } - "03" - { - "var_type" "FIELD_FLOAT" - "corruption_duration" "7.0" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_kaya_and_sange" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "273" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4100" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;str;agi;attack_speed;unique" - "ItemAliases" "snk;s&k;sk;sange and kaya" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_regen_multiplier" "60" - } - "05" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "32" - } - "06" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "30" - } - "07" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal_amp" "60" - } - } - "ShouldBeSuggested" "1" - } - "item_sange_and_yasha" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "154" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4100" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;str;agi;attack_speed;unique" - "ItemAliases" "sny;s&y;sy;sange and yasha" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "32" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movement_speed_percent_bonus" "20" - } - "06" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "30" - } - } - "ShouldBeSuggested" "1" - } - "item_satanic" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "2" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "35.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "156" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5800" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;str;armor;unique;hard_to_tag" - "ItemAliases" "satanic" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "lifesteal_percent" "26" - } - "04" - { - "var_type" "FIELD_INTEGER" - "unholy_lifesteal_percent" "150" - } - "05" - { - "var_type" "FIELD_INTEGER" - "unholy_lifesteal_total_tooltip" "176" - } - "06" - { - "var_type" "FIELD_FLOAT" - "unholy_duration" "5.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "30" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_skadi" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "160" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5300" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "agi;str;int;hard_to_tag;mana_pool;health_pool;unique" - "ItemAliases" "eos;eye of skadi" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "450" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "500" - } - "04" - { - "var_type" "FIELD_INTEGER" - "cold_slow_melee" "-50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "cold_slow_ranged" "-100" - } - "06" - { - "var_type" "FIELD_FLOAT" - "cold_duration" "3.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "heal_reduction" "80" - } - } - "ShouldBeSuggested" "1" - } - "item_mjollnir" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "35.0" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "50" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "158" - "ItemQuality" "artifact" - "ItemCost" "5600" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;attack_speed;unique" - "ItemAliases" "mjollnir" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "48" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "130" - } - "03" - { - "var_type" "FIELD_FLOAT" - "static_duration" "15.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "static_chance" "40" - } - "05" - { - "var_type" "FIELD_INTEGER" - "static_strikes" "8" - } - "06" - { - "var_type" "FIELD_INTEGER" - "static_damage" "400" - } - "07" - { - "var_type" "FIELD_INTEGER" - "static_primary_radius" "600" - } - "08" - { - "var_type" "FIELD_INTEGER" - "static_seconary_radius" "900" - } - "09" - { - "var_type" "FIELD_INTEGER" - "static_radius" "900" - } - "10" - { - "var_type" "FIELD_FLOAT" - "static_cooldown" "1.0" - } - "11" - { - "var_type" "FIELD_INTEGER" - "chain_chance" "25" - } - "12" - { - "var_type" "FIELD_INTEGER" - "chain_damage" "170" - } - "13" - { - "var_type" "FIELD_INTEGER" - "chain_strikes" "12" - } - "14" - { - "var_type" "FIELD_INTEGER" - "chain_radius" "650" - } - "15" - { - "var_type" "FIELD_FLOAT" - "chain_delay" "0.25" - } - "16" - { - "var_type" "FIELD_FLOAT" - "chain_cooldown" "0.2" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - - "item_yasha_and_kaya" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "277" - "ItemQuality" "artifact" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4100" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;str;agi;attack_speed;unique" - "ItemAliases" "ynk;y&k;sk;yasha and kaya" - "ItemDisassembleRule" "DOTA_ITEM_DISASSEMBLE_ALWAYS" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "32" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "32" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_regen_multiplier" "60" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movement_speed_percent_bonus" "20" - } - "06" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "32" - } - "07" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal_amp" "60" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_greater_crit" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "141" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "5150" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemShopTags" "damage;crit" - "ItemAliases" "daedalus" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "176" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "45" - } - "03" - { - "var_type" "FIELD_INTEGER" - "crit_multiplier" "340" - } - } - "ShouldBeSuggested" "1" - } - "item_lesser_crit" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "149" - "ItemQuality" "epic" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1950" - "ItemShopTags" "damage;crit" - "ItemAliases" "crystalys" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "64" - } - "02" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "45" - } - "03" - { - "var_type" "FIELD_INTEGER" - "crit_multiplier" "240" - } - "04" - { - "var_type" "FIELD_INTEGER" - "tooltip_crit_damage" "60" - } - } - "ShouldBeSuggested" "1" - } - "item_moon_shard" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CUSTOM" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "247" - "ItemQuality" "consumable" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4000" - "ItemShopTags" "attack_speed" - "ItemAliases" "moon shard" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "280" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_night_vision" "800" - } - "03" - { - "var_type" "FIELD_INTEGER" - "consumed_bonus" "120" - } - "04" - { - "var_type" "FIELD_INTEGER" - "consumed_bonus_night_vision" "400" - } - } - "ShouldBeSuggested" "1" - } - "item_blight_stone" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "240" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "300" - "ItemShopTags" "hard_to_tag" - "ItemAliases" "blight stone" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "corruption_armor" "-4" - } - "02" - { - "var_type" "FIELD_FLOAT" - "corruption_duration" "16.0" - } - } - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeInitiallySuggested" "1" - } - "item_ghost" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE" - "FightRecapLevel" "1" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "20.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "37" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "1500" - "ItemShopTags" "int;agi;str;hard_to_tag" - "ItemAliases" "ghost scepter" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "10" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "8.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "extra_spell_damage_percent" "-40" - } - } - "AbilitySharedCooldown" "ethereal" - "SpellDispellableType" "SPELL_DISPELLABLE_YES" - "ShouldBeSuggested" "1" - } - "item_lifesteal" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "26" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "900" - "ItemShopTags" "unique" - "ItemAliases" "morbid mask" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "lifesteal_percent" "30" - } - } - // "SideShop" "1" - "ShouldBeSuggested" "1" - } - "item_cloak" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "31" - "ItemQuality" "component" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "450" - "ItemShopTags" "magic_resist" - "ItemAliases" "cloak" - // "SideShop" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_magical_armor" "15" - } - "02" - { - "var_type" "FIELD_INTEGER" - "tooltip_resist" "30" - } - } - } - "item_boots" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "29" - "ItemQuality" "component" - "Model" "models/props_gameplay/boots_of_speed.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "500" - "ItemShopTags" "move_speed" - "ItemAliases" "boots of speed" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "100" - } - } - // "SideShop" "1" - "ShouldBeSuggested" "1" - "ShouldBeInitiallySuggested" "1" - } - - //================================================================================================================= - // Item Arcane Fragments - //================================================================================================================= - "item_arcane_fragments" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "item_arcane_fragments" - "ScriptFile" "items/item_arcane_fragments" - "Model" "models/ui/compendium_points/compendium_points_aghanim.vmdl" - "Skin" "4" - "Effect" "particles/ingame_arcane_fragments.vpcf" - "WorldDropSound" "Item.ArcaneFragmentsDropped" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - "ItemCastOnPickup" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Health Potion - //================================================================================================================= - "item_health_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "item_health_potion" - "ScriptFile" "items/item_health_potion" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/bottle_rejuvenation.vmdl" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - "ItemCastOnPickup" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "hp_restore_pct" "15" - } - } - } - - //================================================================================================================= - // Mana Potion - //================================================================================================================= - "item_mana_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "item_mana_potion" - "ScriptFile" "items/item_mana_potion" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/bottle_mango001.vmdl" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - "ItemCastOnPickup" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "mana_restore_pct" "15" - } - } - } - - - //================================================================================================================= - // Bag of Gold - //================================================================================================================= - "item_bag_of_gold" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityName" "item_bag_of_gold" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/gold_bag.vmdl" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - } - - //================================================================================================================= - // Holdout Tombstone - //================================================================================================================= - "item_tombstone" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityName" "item_tombstone" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "Model" "models/props_gameplay/tombstoneb01.vmdl" - "PingOverrideText" "DOTA_Chat_Tombstone_Pinged" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - "AbilityChannelTime" "4.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemCastOnPickup" "1" - "ItemKillable" "0" - } - - //================================================================================================================= - // Treasure Box - //================================================================================================================= - "item_treasure_box" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "treasure_box" - "ScriptFile" "items/item_treasure_box" - - "AbilityBehavior" "DOTA_ABILTIY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/bottle_rejuvenation.vmdl" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "750" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - } - - //================================================================================================================= - // Life Rune - //================================================================================================================= - "item_life_rune" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "life_rune" - "ScriptFile" "items/item_life_rune" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/heart001.vmdl" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemPurchasable" "1" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - "ItemCastOnPickup" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "4" - "ItemStockMax" "4" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Small Scepter Fragment - //================================================================================================================= - "item_small_scepter_fragment" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "small_scepter_fragment" - "ScriptFile" "items/item_small_scepter_fragment" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/aghanim_scepter.vmdl" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - "ItemCastOnPickup" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - //================================================================================================================= - // Tome Of Greater Knowledge - //================================================================================================================= - "item_tome_of_greater_knowledge" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "item_tome_of_knowledge" - "ScriptFile" "items/item_tome_of_greater_knowledge" - "Model" "models/gameplay/attrib_tome_xp.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "ItemKillable" "0" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemKillable" "0" - "ItemCastOnPickup" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - } - } - - - //================================================================================================================= - // Book of Strength - //================================================================================================================= - "item_book_of_strength" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - - "Model" "models/gameplay/attrib_tome_str.vmdl" - "skin" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "600" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemPurchasable" "1" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemDisplayCharges" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "4" - "ItemStockMax" "4" - "ItemStockTime" "999999.0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_stat" "3" - } - } - } - - //================================================================================================================= - // Book of Greater Strength - //================================================================================================================= - "item_book_of_greater_strength" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_book_of_strength" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - - "Model" "models/gameplay/attrib_tome_str.vmdl" - "skin" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemPurchasable" "1" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemDisplayCharges" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "4" - "ItemStockMax" "4" - "ItemStockTime" "999999.0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_stat" "5" - } - } - } - - //================================================================================================================= - // Book of Agility - //================================================================================================================= - "item_book_of_agility" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - - "Model" "models/gameplay/attrib_tome_agi.vmdl" - "skin" "2" - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "500" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemPurchasable" "1" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemDisplayCharges" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "4" - "ItemStockMax" "4" - "ItemStockTime" "999999.0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_stat" "3" - } - } - } - - //================================================================================================================= - // Book of Greater Agility - //================================================================================================================= - "item_book_of_greater_agility" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_book_of_agility" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - - "Model" "models/gameplay/attrib_tome_agi.vmdl" - "skin" "2" - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemPurchasable" "0" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemDisplayCharges" "1" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_stat" "5" - } - } - } - - //================================================================================================================= - // Book of Intelligence - //================================================================================================================= - "item_book_of_intelligence" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "Model" "models/gameplay/attrib_tome_int.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "500" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemPurchasable" "1" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemDisplayCharges" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "4" - "ItemStockMax" "4" - "ItemStockTime" "999999.0" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_stat" "3" - } - } - } - - //================================================================================================================= - // Book of Greater Intelligence - //================================================================================================================= - "item_book_of_greater_intelligence" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_book_of_intelligence" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "Model" "models/gameplay/attrib_tome_int.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemPurchasable" "0" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemDisplayCharges" "1" - - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_stat" "5" - } - } - } - - - - //================================================================================================================= - // Creed of Omniscience - //================================================================================================================= - "item_creed_of_omniscience" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "creed_of_omniscience" - "ScriptFile" "items/item_creed_of_omniscience" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_xp" "25" - } - } - } - - //================================================================================================================= - // Oblivion's Locket - //================================================================================================================= - "item_oblivions_locket" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "oblivions_locket" - "ScriptFile" "items/item_oblivions_locket" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - "AbilityChannelTime" "1.0" - "AbilityCooldown" "10.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "600" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "extra_spell_damage_percent" "25" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "10" - } - } - } - "item_arcane_ring" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "40.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "349" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "8" - } - "03" - { - "var_type" "FIELD_INTEGER" - "mana_restore" "150" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "1200" - } - } - "ItemIsNeutralDrop" "1" - } - "item_poor_mans_shield" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "71" - "ItemQuality" "common" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "agi;block" - "ItemAliases" "pms;poor man's shield" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "8" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_block_melee" "60" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_block_ranged" "40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "block_chance" "100" - } - "05" - { - "var_type" "FIELD_INTEGER" - "block_chance_hero" "100" - } - } - "ItemIsNeutralDrop" "1" - } - "item_dragon_scale" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "358" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_hp_regen" "15" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_per_sec" "36" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - } - } - "ItemIsNeutralDrop" "1" - } - "item_essence_ring" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25.0" - "AbilityManaCost" "200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "359" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_int" "12" - } - "02" - { - "var_type" "FIELD_FLOAT" - "mp_regen" "5.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "health_gain" "750" - } - "04" - { - "var_type" "FIELD_INTEGER" - "health_gain_duration" "15" - } - } - "ItemIsNeutralDrop" "1" - } - "item_enchanted_quiver" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "3.5" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "361" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_range" "400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "600" - } - } - "ItemIsNeutralDrop" "1" - } - "item_pupils_gift" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "306" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "secondary_stats" "26" - } - } - "ItemIsNeutralDrop" "1" - } - "item_ring_of_aquila" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_TOGGLE" - "AbilityCastRange" "1200" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "212" - "ItemQuality" "rare" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemSellable" "0" - "ItemPurchasable" "0" - "ItemAliases" "roa;ring of aquila" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "14" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "18" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "6" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "1200" - } - "07" - { - "var_type" "FIELD_FLOAT" - "aura_mana_regen" "2.5" - } - "08" - { - "var_type" "FIELD_INTEGER" - "aura_bonus_armor" "4" - } - } - "ActiveDescriptionLine" "2" - "ShouldBeSuggested" "0" - "ItemIsNeutralDrop" "1" - // Sound - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - "item_grove_bow" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "288" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_range_bonus" "200" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_speed_bonus" "30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "magic_resistance_reduction" "24" - } - "04" - { - "var_type" "FIELD_INTEGER" - "debuff_duration" "6" - } - } - "ItemIsNeutralDrop" "1" - } - "item_craggy_coat" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "298" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "armor_bonus" "24" - } - "02" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "-25" - } - } - "ItemIsNeutralDrop" "1" - } - "item_nether_shawl" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "357" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_magic_resistance" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_spell_amp" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "5" - } - } - "ItemIsNeutralDrop" "1" - } - "item_imp_claw" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "4.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "334" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "crit_multiplier" "250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "48" - } - } - "ItemIsNeutralDrop" "1" - } - "item_vambrace" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "331" - "ItemQuality" "common" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemShopTags" "damage;int;agi;str" - "ItemAliases" "bracer" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_primary_stat" "20" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_secondary_stat" "10" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_spell_amp" "12" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_magic_resistance" "20" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "20" - } - } - "ItemIsNeutralDrop" "1" - } - "item_vampire_fangs" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "297" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_lifesteal" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal" "12" - } - "03" - { - "var_type" "FIELD_INTEGER" - "night_vision" "500" - } - } - "ItemIsNeutralDrop" "1" - } - "item_greater_faerie_fire" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityCooldown" "10.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "299" - "ItemQuality" "consumable" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemPermanent" "0" - "ItemInitialCharges" "3" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "80" - } - "02" - { - "var_type" "FIELD_INTEGER" - "hp_restore" "900" - } - } - "ItemIsNeutralDrop" "1" - "IsTempestDoubleClonable" "0" - } - "item_quickening_charm" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "289" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_cooldown" "26" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_health_regen" "18" - } - } - "ItemIsNeutralDrop" "1" - } - "item_titan_sliver" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "381" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "base_attack_damage" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "24" - } - } - "ItemIsNeutralDrop" "1" - } - "item_orb_of_destruction" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "378" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "armor_reduction" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "slow_melee" "50" - } - "03" - { - "var_type" "FIELD_INTEGER" - "slow_range" "30" - } - "04" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - } - } - "ItemIsNeutralDrop" "1" - } - "item_paladin_sword" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "376" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_lifesteal" "32" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_amp" "28" - } - } - "ItemIsNeutralDrop" "1" - } - "item_havoc_hammer" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "364" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "36" - } - "03" - { - "var_type" "FIELD_INTEGER" - "range" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "slow" "50" - } - "05" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "3" - } - "06" - { - "var_type" "FIELD_INTEGER" - "angle" "360" - } - "07" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.3" - } - "08" - { - "var_type" "FIELD_FLOAT" - "knockback_distance" "250" - } - "09" - { - "var_type" "FIELD_INTEGER" - "nuke_base_dmg" "550" - } - "10" - { - "var_type" "FIELD_FLOAT" - "nuke_str_dmg" "2" - } - } - "ItemIsNeutralDrop" "1" - } - "item_witless_shako" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "330" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "max_health" "2400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "max_mana" "800" - } - } - "ItemIsNeutralDrop" "1" - } - "item_panic_button" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "365" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_health" "800" - } - "02" - { - "var_type" "FIELD_INTEGER" - "heal" "800" - } - "03" - { - "var_type" "FIELD_FLOAT" - "health_threshold" "25" - } - } - "ItemIsNeutralDrop" "1" - } - "item_illusionsts_cape" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "363" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_damage_aura" "20" - } - "02" - { - "var_type" "FIELD_FLOAT" - "illusion_duration" "30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "outgoing_damage" "-25" - } - "04" - { - "var_type" "FIELD_INTEGER" - "outgoing_damage_tooltip" "75" - } - "05" - { - "var_type" "FIELD_INTEGER" - "incoming_damage" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "tooltip_incoming_damage_total_pct" "150" - } - "07" - { - "var_type" "FIELD_INTEGER" - "bonus_agi" "28" - } - "08" - { - "var_type" "FIELD_INTEGER" - "bonus_str" "28" - } - } - "ItemIsNeutralDrop" "1" - } - "item_minotaur_horn" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "16.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "377" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "40" - } - "02" - { - "var_type" "FIELD_FLOAT" - "duration" "4" - } - } - "ItemIsNeutralDrop" "1" - } - "item_phoenix_ash" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "293" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "health_pct" "100" - } - } - "ItemIsNeutralDrop" "1" - } - "item_spell_prism" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "311" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_cooldown" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "24" - } - "03" - { - "var_type" "FIELD_FLOAT" - "mana_regen" "8" - } - } - "ItemIsNeutralDrop" "1" - } - "item_timeless_relic" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "300" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "debuff_amp" "50" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "30" - } - } - "ItemIsNeutralDrop" "1" - } - "item_ballista" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "367" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "attack_range_bonus" "400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "knockback_distance" "75" - } - "03" - { - "var_type" "FIELD_FLOAT" - "knockback_duration" "0.3" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "80" - } - } - "ItemIsNeutralDrop" "1" - } - "item_demonicon" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30.0" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "370" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "60" - } - "03" - { - "var_type" "FIELD_FLOAT" - "summon_duration" "120" - } - } - "ItemIsNeutralDrop" "1" - } - "item_force_boots" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "10.0" - "AbilityManaCost" "100" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "291" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "140" - } - "02" - { - "var_type" "FIELD_INTEGER" - "push_length" "800" - } - "03" - { - "var_type" "FIELD_FLOAT" - "push_duration" "0.5" - } - } - "ItemIsNeutralDrop" "1" - } - "item_mirror_shield" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "301" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "reflect_chance" "75" - } - "02" - { - "var_type" "FIELD_INTEGER" - "all_stats" "40" - } - "03" - { - "var_type" "FIELD_FLOAT" - "block_cooldown" "8.0" - } - } - "ItemIsNeutralDrop" "1" - } - "item_apex" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "366" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "primary_stat" "150" - } - } - "ItemIsNeutralDrop" "1" - } - "item_desolator_2" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "292" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "150" - } - "02" - { - "var_type" "FIELD_INTEGER" - "corruption_armor" "-20" - } - "03" - { - "var_type" "FIELD_FLOAT" - "corruption_duration" "7.0" - } - } - "ItemIsNeutralDrop" "1" - } - "item_ex_machina" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "45.0" - "AbilityManaCost" "100" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "374" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "40" - } - } - "ItemIsNeutralDrop" "1" - } - "item_faded_broach" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "375" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "400" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "60" - } - } - "ItemIsNeutralDrop" "1" - } - - //================================================================================================================= - // Pelt of the Old Wolf - //================================================================================================================= - "item_pelt_of_the_old_wolf" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "pelt_of_the_old_wolf" - "ScriptFile" "items/item_pelt_of_the_old_wolf" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1250" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "10" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_move_speed" "70" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_evasion" "30" - } - } - } - - //================================================================================================================= - // Paw of Lucius - //================================================================================================================= - "item_paw_of_lucius" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "paw_of_lucius" - "ScriptFile" "items/item_paw_of_lucius" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1250" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "rupture_chance" "50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "movement_damage_pct" "40" - } - "06" - { - "var_type" "FIELD_INTEGER" - "damage_cap_amount" "400" - } - "07" - { - "var_type" "FIELD_FLOAT" - "damage_cap_interval" "0.25" - } - "08" - { - "var_type" "FIELD_FLOAT" - "rupture_duration" "5.0" - } - } - } - - //================================================================================================================= - // Longclaw's Amulet - //================================================================================================================= - "item_longclaws_amulet" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "longclaws_amulet" - "ScriptFile" "items/item_longclaws_amulet" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "750" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal_pct" "6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "cooldown_reduction_pct" "12" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_cost_reduction_pct" "12" - } - } - } - - //================================================================================================================= - // Bogdugg's Cudgel - //================================================================================================================= - "item_bogduggs_cudgel" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "bogduggs_cudgel" - "ScriptFile" "items/item_bogduggs_cudgel" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "3000" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "40" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "base_attack_time_penalty_pct" "50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attack_speed_penalty_pct" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "400" - } - "07" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.5" - } - } - } - - //================================================================================================================= - // Bogdugg's Baldric - //================================================================================================================= - "item_bogduggs_baldric" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "bogduggs_baldric" - "ScriptFile" "items/item_bogduggs_baldric" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1250" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "25" - } - "03" - { - "var_type" "FIELD_INTEGER" - "disable_resist_pct" "75" - } - "04" - { - "var_type" "FIELD_INTEGER" - "move_speed_penalty" "30" - } - } - } - - //================================================================================================================= - // Bogdugg's Lucky Femur - //================================================================================================================= - "item_bogduggs_lucky_femur" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "bogduggs_lucky_femur" - "ScriptFile" "items/item_bogduggs_lucky_femur" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "3250" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "max_mana_penalty" "400" - } - "03" - { - "var_type" "FIELD_INTEGER" - "intelligence_penalty" "10" - } - "04" - { - "var_type" "FIELD_INTEGER" - "mana_regen_sec" "10" - } - "05" - { - "var_type" "FIELD_INTEGER" - "refresh_pct" "50" - } - } - } - - //================================================================================================================= - // Sign of the Arachnid - //================================================================================================================= - "item_sign_of_the_arachnid" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "sign_of_the_arachnid" - "ScriptFile" "items/item_sign_of_the_arachnid" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "2500" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_move_speed_pct" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "attack_speed" "40" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "500" - } - } - } - - //================================================================================================================= - // Unhallowed Icon - //================================================================================================================= - "item_unhallowed_icon" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "unhallowed_icon" - "ScriptFile" "items/item_unhallowed_icon" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "5000" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "lifesteal_pct" "15" - } - "04" - { - "var_type" "FIELD_INTEGER" - "hp_regen" "15" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "900" - } - } - } - - //================================================================================================================= - // Preserved Skull - //================================================================================================================= - "item_preserved_skull" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "preserved_skull" - "ScriptFile" "items/item_preserved_skull" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "3000" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "30" - } - "03" - { - "var_type" "FIELD_INTEGER" - "cooldown_reduction_pct" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "aura_mana_regen" "15" - } - "05" - { - "var_type" "FIELD_INTEGER" - "radius" "900" - } - } - } - - //================================================================================================================= - // Treads of Ermacor - //================================================================================================================= - "item_treads_of_ermacor" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "treads_of_ermacor" - "ScriptFile" "items/item_treads_of_ermacor" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "5000" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "80" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "20" - } - } - } - - //================================================================================================================= - // Rhyzik's Eye - //================================================================================================================= - "item_rhyziks_eye" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "rhyziks_eye" - "ScriptFile" "items/item_rhyziks_eye" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage_pct" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_reduction" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "hp_regen_sec" "20" - } - "05" - { - "var_type" "FIELD_INTEGER" - "mana_regen_sec" "20" - } - "06" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "20" - } - } - } - - //================================================================================================================= - // Guardian Shell - //================================================================================================================= - "item_guardian_shell" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "guardian_shell" - "ScriptFile" "items/item_guardian_shell" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "4250" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "40" - } - } - } - - //================================================================================================================= - // Watcher's Gaze - //================================================================================================================= - "item_watchers_gaze" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "watchers_gaze" - "ScriptFile" "items/item_watchers_gaze" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "20.0" - "AbilityManaCost" "75" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "4250" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_stats" "40" - } - "03" - { - "var_type" "FIELD_FLOAT" - "stone_duration" "4.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_physical_damage" "100" - } - "05" - { - "var_type" "FIELD_FLOAT" - "vision_cone" "0.08715" // 85 degree cone - } - } - } - - //================================================================================================================= - // Carapace of Qaldin - //================================================================================================================= - "item_carapace_of_qaldin" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "carapace_of_qaldin" - "ScriptFile" "items/item_carapace_of_qaldin" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_hp" "750" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_mana" "750" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_restore_pct" "100" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage_return_pct" "50" - } - } - } - - //================================================================================================================= - // The Caustic Finale - //================================================================================================================= - "item_the_caustic_finale" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "the_caustic_finale" - "ScriptFile" "items/item_the_caustic_finale" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "150" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "35" - } - "04" - { - "var_type" "FIELD_INTEGER" - "caustic_armor_reduction_pct" "5" - } - "05" - { - "var_type" "FIELD_FLOAT" - "caustic_duration" "3.0" - } - "06" - { - "var_type" "FIELD_INTEGER" - "caustic_radius" "300" - } - "07" - { - "var_type" "FIELD_INTEGER" - "caustic_damage" "300" - } - "08" - { - "var_type" "FIELD_INTEGER" - "max_stack_count" "5" - } - } - } - - //================================================================================================================= - // Winter's Embrace - //================================================================================================================= - "item_winter_embrace" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "winter_embrace" - "ScriptFile" "items/item_winter_embrace" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "750" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "6" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "15" - } - "04" - { - "var_type" "FIELD_INTEGER" - "movespeed_slow" "-40" - } - "05" - { - "var_type" "FIELD_INTEGER" - "attackspeed_slow" "-40" - } - "06" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "3.0" - } - } - } - - //================================================================================================================= - // Ice Dragon Maw - //================================================================================================================= - "item_ice_dragon_maw" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "ice_dragon_maw" - "ScriptFile" "items/item_ice_dragon_maw" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_range" "100" - } - "04" - { - "var_type" "FIELD_INTEGER" - "chance_to_freeze" "25" - } - "05" - { - "var_type" "FIELD_FLOAT" - "freeze_duration" "0.75" - } - "06" - { - "var_type" "FIELD_FLOAT" - "freeze_cooldown" "3.0" - } - } - } - - //================================================================================================================= - // Precious Egg - //================================================================================================================= - "item_precious_egg" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "precious_egg" - "ScriptFile" "items/item_precious_egg" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "600" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "10" - } - "03" - { - "var_type" "FIELD_INTEGER" - "chance_to_resist_death" "50" - } - } - } - - //================================================================================================================= - // Stony Coat - //================================================================================================================= - "item_stony_coat" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "stony_coat" - "ScriptFile" "items/item_stony_coat" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "3250" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "40" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "boulder_chance" "50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "boulder_damage" "250" - } - "06" - { - "var_type" "FIELD_FLOAT" - "boulder_stun_duration" "1.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "boulder_speed" "800" - } - - } - } - - //================================================================================================================= - // Stonework Pendant - //================================================================================================================= - "item_stonework_pendant" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "stonework_pendant" - "ScriptFile" "items/item_stonework_pendant" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "3750" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal" "10" - } - "03" - { - "var_type" "FIELD_FLOAT" - "hp_cost_multiplier" "3.0" - } - } - } - - //================================================================================================================= - // Gravel Foot - //================================================================================================================= - "item_gravel_foot" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "gravel_foot" - "ScriptFile" "items/item_gravel_foot" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "3000" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "damage_block" "50" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_all_stats" "16" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_hp_regen" "24" - } - } - } - - //================================================================================================================= - // Wand of the Brine - //================================================================================================================= - "item_wand_of_the_brine" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "wand_of_the_brine" - "ScriptFile" "items/item_wand_of_the_brine" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.2" - "AbilityCooldown" "25.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "4750" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "100" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_mana_regen_pct" "250" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bubble_duration" "3.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bubble_heal_per_tick" "300" - } - "06" - { - "var_type" "FIELD_FLOAT" - "heal_tick_interval" "0.5" - } - } - } - "item_fallen_sky" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES" - "AbilityCooldown" "15.0" - // Stats - // ------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1600" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "371" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "4751" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "40" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "40" - } - "03" - { - "var_type" "FIELD_FLOAT" - "bonus_health_regen" "30.0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "20.0" - } - "05" - { - "var_type" "FIELD_INTEGER" - "burn_dps_buildings" "50" - } - "06" - { - "var_type" "FIELD_INTEGER" - "burn_dps_units" "90" - } - "07" - { - "var_type" "FIELD_INTEGER" - "burn_duration" "6" - } - "08" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "2.0" - } - "09" - { - "var_type" "FIELD_FLOAT" - "burn_interval" "1.0" - } - "10" - { - "var_type" "FIELD_FLOAT" - "land_time" ".5" - } - "11" - { - "var_type" "FIELD_INTEGER" - "impact_radius" "315" - } - "12" - { - "var_type" "FIELD_FLOAT" - "max_duration" "2.5" - } - "13" - { - "var_type" "FIELD_INTEGER" - "impact_damage_buildings" "75" - } - "14" - { - "var_type" "FIELD_INTEGER" - "impact_damage_units" "150" - } - "15" - { - "var_type" "FIELD_FLOAT" - "blink_damage_cooldown" "3.0" - } - } - "ItemIsNeutralDrop" "1" - } - - //================================================================================================================= - // Slippers of the Abyss - //================================================================================================================= - "item_slippers_of_the_abyss" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "slippers_of_the_abyss" - "ScriptFile" "items/item_slippers_of_the_abyss" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "20.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "5500" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "110" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "30" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "30" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_atk_speed" "150" - } - "06" - { - "var_type" "FIELD_INTEGER" - "sprint_duration" "4" - } - "07" - { - "var_type" "FIELD_INTEGER" - "sprint_bonus_ms" "200" - } - //"08" - //{ - //"var_type" "FIELD_INTEGER" - //"sprint_bonus_dmg" "300" - //} - //"09" - //{ - //"var_type" "FIELD_INTEGER" - //"sprint_bonus_atk_speed" "200" - //} - } - } - - //================================================================================================================= - // Glimmerdark Shield - //================================================================================================================= - "item_glimmerdark_shield" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_glimmerdark_shield" - "AbilityTextureName" "glimmerdark_shield" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "700" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "30.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "20" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_health_regen" "80" - } - "06" - { - "var_type" "FIELD_INTEGER" - "bonus_armor" "40" - } - "07" - { - "var_type" "FIELD_INTEGER" - "prism_duration" "6" - } - "08" - { - "var_type" "FIELD_INTEGER" - "prism_bonus_magic_dmg" "-100" - } - "09" - { - "var_type" "FIELD_INTEGER" - "tooltip_prism_bonus_magic_dmg" "100" - } - } - } - - //================================================================================================================= - // Dredged Trident - //================================================================================================================= - "item_dredged_trident" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "dredged_trident" - "ScriptFile" "items/item_dredged_trident" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - //"AbilityCooldown" "5.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "160" - } - "03" - { - "var_type" "FIELD_INTEGER" - "crit_chance" "35" - } - "04" - { - "var_type" "FIELD_INTEGER" - "crit_multiplier" "350" - } - } - } - "item_trident" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "369" - "Model" "models/props_gameplay/neutral_box.vmdl" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "60" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "60" - } - "04" - { - "var_type" "FIELD_INTEGER" - "status_resistance" "60" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "60" - } - "06" - { - "var_type" "FIELD_INTEGER" - "movement_speed_percent_bonus" "20" - } - "07" - { - "var_type" "FIELD_INTEGER" - "hp_regen_amp" "60" - } - "08" - { - "var_type" "FIELD_INTEGER" - "mana_regen_multiplier" "60" - } - "09" - { - "var_type" "FIELD_INTEGER" - "spell_amp" "60" - } - "10" - { - "var_type" "FIELD_INTEGER" - "spell_lifesteal_amp" "60" - } - } - "ItemIsNeutralDrop" "1" - } - - //================================================================================================================= - // Ambient Sorcery - //================================================================================================================= - "item_ambient_sorcery" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "AbilityTextureName" "ambient_sorcery" - "ScriptFile" "items/item_ambient_sorcery" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1500" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "20" - } - "03" - { - "var_type" "FIELD_INTEGER" - "radius" "750" - } - "04" - { - "var_type" "FIELD_INTEGER" - "aura_magic_reduction" "-30" - } - "05" - { - "var_type" "FIELD_INTEGER" - "aura_magic_reduction_tooltip" "30" - } - } - } - - //================================================================================================================= - // Ogre Seal Totem - //================================================================================================================= - "item_ogre_seal_totem" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_ogre_seal_totem" - "AbilityTextureName" "ogre_seal_totem" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_AOE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "1000" - "AbilityCastPoint" "0.3" - "AbilityCooldown" "12.0" - "AbilityManaCost" "50" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "16" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_hp" "400" - } - "04" - { - "var_type" "FIELD_INTEGER" - "radius" "275" - } - "05" - { - "var_type" "FIELD_INTEGER" - "damage" "500" - } - "06" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "2.0" - } - } - } - - //================================================================================================================= - // Bear Cloak - //================================================================================================================= - "item_bear_cloak" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_bear_cloak" - "AbilityTextureName" "bear_cloak" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "750" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_FLOAT" - "bonus_magic_resist" "35.0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "aura_bonus_magic_resist" "15.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "aura_radius" "900.0" - } - } - } - - //================================================================================================================= - // Lifestone - //================================================================================================================= - "item_lifestone" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_lifestone" - "AbilityTextureName" "lifestone" - - "Model" "models/props_gameplay/neutral_box.vmdl" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "1.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "2000" - "ItemPurchasable" "1" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_FLOAT" - "pact_interval" "0.5" - } - "03" - { - "var_type" "FIELD_INTEGER" - "pact_hp_cost" "40" - } - "04" - { - "var_type" "FIELD_INTEGER" - "pact_mana_gained" "50" - } - "05" - { - "var_type" "FIELD_INTEGER" - "hp_regen" "10" - } - } - } - - //================================================================================================================= - // Corrupting Blade - //================================================================================================================= - "item_corrupting_blade" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_corrupting_blade" - "AbilityTextureName" "corrupting_blade" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "80" - } - "03" - { - "var_type" "FIELD_INTEGER" - "corruption_armor" "-14" - } - "04" - { - "var_type" "FIELD_FLOAT" - "corruption_duration" "15.0" - } - } - } - - //================================================================================================================= - // Greater Clarity - //================================================================================================================= - "item_greater_clarity" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/salve_blue.vmdl" - "BaseClass" "item_datadriven" - "AbilityTextureName" "item_greater_clarity" - "ItemKillable" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "130" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - - "OnSpellStart" - { - "ApplyModifier" - { - "Target" "CURSOR_TARGET" - "ModifierName" "modifier_item_greater_clarity" - } - "FireSound" - { - "Target" "UNIT" - "EffectName" "DOTA_Item.ClarityPotion.Activate" - } - "SpendCharge" - {} - } - - "Modifiers" - { - "modifier_item_greater_clarity" - { - "TextureName" "item_greater_clarity" - "EffectName" "particles/items_fx/healing_clarity.vpcf" - "EffectAttachType" "follow_origin" - "Duration" "%buff_duration" - "Properties" - { - "MODIFIER_PROPERTY_MANA_REGEN_CONSTANT" "%mana_per_tick" - } - } - } - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "buff_duration" "30" - } - "02" - { - "var_type" "FIELD_INTEGER" - "total_mana" "200" - } - "03" - { - "var_type" "FIELD_INTEGER" - "mana_per_tick" "15" // %total_mana / %buff_duration - } - } - } - - //================================================================================================================= - // Greater Salve - //================================================================================================================= - "item_greater_salve" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/salve_red.vmdl" - "BaseClass" "item_datadriven" - "AbilityTextureName" "item_greater_salve" - "ItemKillable" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "100" - "AbilityCastPoint" "0.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - - "ItemCost" "275" - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemStackable" "1" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - - "OnSpellStart" - { - "ApplyModifier" - { - "Target" "CURSOR_TARGET" - "ModifierName" "modifier_item_greater_salve" - } - "FireSound" - { - "Target" "UNIT" - "EffectName" "DOTA_Item.HealingSalve.Activate" - } - "SpendCharge" - {} - } - - "Modifiers" - { - "modifier_item_greater_salve" - { - "TextureName" "item_greater_salve" - "EffectName" "particles/items_fx/healing_flask.vpcf" - "EffectAttachType" "follow_origin" - "Duration" "%buff_duration" - "Properties" - { - "MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT" "%hp_per_tick" - } - } - } - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "buff_duration" "10" - } - "02" - { - "var_type" "FIELD_INTEGER" - "total_hp" "1000" - } - "03" - { - "var_type" "FIELD_INTEGER" - "hp_per_tick" "100" // %total_mana / %buff_duration - } - } - } - - //================================================================================================================= - // Double Damage Potion - //================================================================================================================= - "item_double_damage_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_double_damage_potion" - "AbilityTextureName" "double_damage_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "5" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "buff_duration" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "damage_bonus_pct" "100" - } - } - } - - //================================================================================================================= - // Spell Amp Potion - //================================================================================================================= - "item_spell_amp_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_spell_amp_potion" - "AbilityTextureName" "spell_amp_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "5" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "buff_duration" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "spell_amp_bonus_pct" "100" - } - } - } - - //================================================================================================================= - // Evasion Potion - //================================================================================================================= - "item_evasion_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_evasion_potion" - "AbilityTextureName" "evasion_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "5" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "buff_duration" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "evasion_bonus_pct" "100" - } - } - } - - //================================================================================================================= - // Purification Potion - //================================================================================================================= - "item_purification_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_purification_potion" - "AbilityTextureName" "purification_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - //"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_OPTIONAL_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_SUPPRESS_ASSOCIATED_CONSUMABLE" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitDamageType" "DAMAGE_TYPE_PURE" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - //"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityCooldown" "0.5" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "500" - "ItemPurchasable" "1" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "360.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "heal" "1000" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "260" - } - } - } - - //================================================================================================================= - // Ravage Potion - //================================================================================================================= - "item_ravage_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "aghsfort_ravage_potion" - "AbilityTextureName" "ravage_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.3" - "AbilityCooldown" "3" - "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" - "AbilityDamage" "600" - "AbilityManaCost" "0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "750" - "ItemPurchasable" "1" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "360.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "radius" "1250" - } - "02" - { - "var_type" "FIELD_INTEGER" - "speed" "725" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "3.5" - } - } - } - - //================================================================================================================= - // Dragon Potion - //================================================================================================================= - "item_dragon_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "aghsfort_dragon_potion" - "AbilityTextureName" "dragon_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_INVALID" - "AbilityCooldown" "80" - "AbilityManaCost" "0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1500" - "ItemPurchasable" "1" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "360.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_movement_speed" "25" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_range" "350" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_damage" "70" - } - "05" - { - "var_type" "FIELD_INTEGER" - "corrosive_breath_damage" "20" - } - "06" - { - "var_type" "FIELD_FLOAT" - "corrosive_breath_duration" "5.0" - } - "07" - { - "var_type" "FIELD_INTEGER" - "splash_radius" "300" - } - "08" - { - "var_type" "FIELD_INTEGER" - "splash_damage_percent" "80" - } - "09" - { - "var_type" "FIELD_INTEGER" - "frost_bonus_movement_speed" "-60" - } - "10" - { - "var_type" "FIELD_INTEGER" - "frost_bonus_attack_speed" "-60" - } - "11" - { - "var_type" "FIELD_FLOAT" - "frost_duration" "3.0" - } - "12" - { - "var_type" "FIELD_FLOAT" - "frost_aoe" "300" - } - "13" - { - "var_type" "FIELD_INTEGER" - "magic_resistance" "30" - } - "14" - { - "var_type" "FIELD_INTEGER" - "model_scale" "50" - } - } - } - - //================================================================================================================= - // Arcanist Potion - //================================================================================================================= - "item_arcanist_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "aghsfort_arcanist_potion" - "AbilityTextureName" "item_arcanist_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_INVALID" - "AbilityCooldown" "3" - "AbilityManaCost" "0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "750" - "ItemPurchasable" "1" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "360.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_FLOAT" - "duration" "60" - } - "02" - { - "var_type" "FIELD_INTEGER" - "cooldown_reduction_pct" "40" - } - "03" - { - "var_type" "FIELD_INTEGER" - "manacost_reduction_pct" "40" - } - } - } - - //================================================================================================================= - // Echo Slam Potion - //================================================================================================================= - "item_echo_slam_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "aghsfort_echo_slam_potion" - "AbilityTextureName" "echo_slam_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" - "SpellDispellableType" "SPELL_DISPELLABLE_NO" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastAnimation" "ACT_INVALID" - "AbilityCooldown" "5" - "AbilityManaCost" "0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "750" - "ItemPurchasable" "1" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "360.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "echo_slam_damage_range" "600" - "CalculateSpellDamageTooltip" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "echo_slam_echo_search_range" "600" - } - "03" - { - "var_type" "FIELD_INTEGER" - "echo_slam_echo_range" "600" - } - "04" - { - "var_type" "FIELD_INTEGER" - "echo_slam_echo_damage" "110" - } - "05" - { - "var_type" "FIELD_INTEGER" - "echo_slam_initial_damage" "180" - } - "06" - { - "var_type" "FIELD_FLOAT" - "spend_charge_delay" "3.0" - } - } - } - - //================================================================================================================= - // Torrent Effect Potion - //================================================================================================================= - "item_torrent_effect_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_torrent_effect_potion" - "AbilityTextureName" "torrent_effect_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "0.5" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1250" - "ItemPurchasable" "1" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "99999.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "proc_chance" "3" - } - "02" - { - "var_type" "FIELD_INTEGER" - "radius" "225" - } - "03" - { - "var_type" "FIELD_INTEGER" - "movespeed_bonus" "-35" - } - "04" - { - "var_type" "FIELD_FLOAT" - "slow_duration" "1" - } - "05" - { - "var_type" "FIELD_FLOAT" - "stun_duration" "1.2" - } - "06" - { - "var_type" "FIELD_FLOAT" - "delay" "1.6" - } - "07" - { - "var_type" "FIELD_INTEGER" - "torrent_damage" "125" - } - "08" - { - "var_type" "FIELD_FLOAT" - "torrent_cooldown" "2.0" - } - } - } - - //================================================================================================================= - // Shadow Wave Effect Potion - //================================================================================================================= - "item_shadow_wave_effect_potion" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "aghsfort_shadow_wave_effect_potion" - "AbilityTextureName" "shadow_wave_effect_potion" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" - "Model" "models/props_gameplay/red_box.vmdl" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "0" - "AbilityCastPoint" "0.0" - "AbilityCooldown" "0.5" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemPurchasable" "1" - "ItemKillable" "0" - "ItemShopTags" "consumable" - "ItemQuality" "consumable" - "ItemShareability" "ITEM_FULLY_SHAREABLE_STACKING" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemStackable" "1" - "ItemStackableMax" "5" - - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "99999.0" - "ItemSellable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "proc_chance" "5" - } - "02" - { - "var_type" "FIELD_INTEGER" - "cast_range" "800" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bounce_radius" "475" - } - "04" - { - "var_type" "FIELD_INTEGER" - "damage_radius" "185" - } - "05" - { - "var_type" "FIELD_INTEGER" - "max_targets" "6" - } - "06" - { - "var_type" "FIELD_INTEGER" - "tooltip_max_targets_inc_dazzle" "7" - } - "07" - { - "var_type" "FIELD_INTEGER" - "damage" "100" - } - } - } - - //================================================================================================================= - // Creature's Black King Bar - //================================================================================================================= - "item_creature_black_king_bar" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_black_king_bar" - "AbilityTextureName" "item_black_king_bar" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "30" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemShopTags" "" - "ItemQuality" "epic" - "ItemAliases" "" - "ItemSellable" "0" - "ItemDeclarations" "" - "ShouldBeSuggested" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "duration" "6.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "max_level" "6" - } - "05" - { - "var_type" "FIELD_INTEGER" - "model_scale" "30" // Percentage over model scale - } - } - } - - //================================================================================================================= - // Phoenix Creature's Sheepstick - //================================================================================================================= - "item_phoenix_sheepstick" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_sheepstick" - "AbilityTextureName" "item_sheepstick" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" - "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" - "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" - "FightRecapLevel" "2" - "SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCastRange" "800" - "AbilityCastPoint" "0.5" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "25.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemSellable" "0" - "AbilityManaCost" "0" - "ItemCost" "5575" - "ItemShopTags" "int;regen_mana;agi;hard_to_tag" - "ItemQuality" "rare" - "ItemAliases" "hex;sheepstick;scythe of vyse" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - "ShouldBeSuggested" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "bonus_intellect" "0" - } - "04" - { - "var_type" "FIELD_FLOAT" - "bonus_mana_regen" "0.0" - } - "05" - { - "var_type" "FIELD_FLOAT" - "sheep_duration" "3.5" - } - "06" - { - "var_type" "FIELD_FLOAT" - "sheep_movement_speed" "140" - } - } - } - - //================================================================================================================= - // Amorphotic Shell - //================================================================================================================= - "item_amorphotic_shell" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_lua" - "ScriptFile" "items/item_amorphotic_shell" - "AbilityTextureName" "amorphotic_shell" - - "Model" "models/props_gameplay/treasure_chest001.vmdl" - "Effect" "particles/generic_gameplay/dropped_aegis.vpcf" - - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "0" - "ItemPurchasable" "0" - "ItemQuality" "" - "ItemStackable" "0" - "ItemSellable" "0" - "ItemShareability" "ITEM_NOT_SHAREABLE" - "ItemPermanent" "0" - "ItemKillable" "0" - "CustomShop" "1" - "ItemIsNeutralDrop" "1" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "required_level" "1" - } - "02" - { - "var_type" "FIELD_FLOAT" - "amoeba_duration" "20.0" - } - "03" - { - "var_type" "FIELD_INTEGER" - "amoeba_chance" "20" - } - "04" - { - "var_type" "FIELD_INTEGER" - "bonus_strength" "30" - } - "05" - { - "var_type" "FIELD_INTEGER" - "bonus_intelligence" "20" - } - "06" - { - "var_type" "FIELD_INTEGER" - "bonus_agility" "10" - } - } - } - - //================================================================================================================= - // Aghs Fort Refresher Shard - //================================================================================================================= - "item_aghsfort_refresher_shard" - { - // General - //------------------------------------------------------------------------------------------------------------- - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - "FightRecapLevel" "2" - "Model" "models/props_gameplay/refresher_shard.vmdl" - "Effect" "particles/generic_gameplay/dropped_refresher_shard.vpcf" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "200.0" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "ItemCost" "1000" - "ItemShopTags" "" - "ItemQuality" "consumable" - - "ItemPurchasable" "1" - "CustomShop" "1" - "RequiresCustomShop" "1" - "RequiredCustomShopName" "boss_shop" - "ItemStockInitial" "1" - "ItemStockMax" "1" - "ItemStockTime" "999999.0" - "ItemSellable" "0" - - "ItemStackable" "0" - "ItemShareability" "ITEM_FULLY_SHAREABLE" - "ItemPermanent" "0" - "ItemInitialCharges" "1" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS" - "ItemContributesToNetWorthWhenDropped" "0" - "IsTempestDoubleClonable" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "health_restore_percent" "0" - } - } - } - - //================================================================================================================= - // Drow Ranger Shadow Blade Invisibility Sword - //================================================================================================================= - "item_aghsfort_drow_ranger_invis_sword" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_invis_sword" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "FightRecapLevel" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "2.0" - "AbilitySharedCooldown" "shadow_blade" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - "ItemCost" "2800" - "ItemShopTags" "damage;attack_speed;movespeed;hard_to_tag" - "ItemQuality" "epic" - "ItemAliases" "sb;invis;shadow blade;silver edge" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "27" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "30" - } - "03" - { - "var_type" "FIELD_FLOAT" - "windwalk_duration" "14.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "windwalk_movement_speed" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "windwalk_fade_time" "0.3" - } - "06" - { - "var_type" "FIELD_INTEGER" - "windwalk_bonus_damage" "25" - } - } - } - "item_wind_lace" - { - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" - // General - // ------------------------------------------------------------------------------------------------------------- - // unique ID number for this item. Do not change this once established or it will invalidate collected stats. - "ID" "244" - "ItemQuality" "component" - // "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET" - // Item Info - // ------------------------------------------------------------------------------------------------------------- - "ItemCost" "250" - "ItemPermanent" "1" - "ItemShopTags" "armor" - "ItemAliases" "wind lace" - // Special - // ------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "movement_speed" "40" - } - } - // "ItemInitialCharges" "3" - // "ItemRequiresCharges" "1" - "ShouldBeInitiallySuggested" "1" - // Sounden - // ------------------------------------------------------------------------------------------------------------- - "UIPickupSound" "Item.PickUpRingShop" - "UIDropSound" "Item.DropRingShop" - "WorldDropSound" "Item.DropRingWorld" - } - - //================================================================================================================= - // Bandit Archer Shadow Blade - //================================================================================================================= - "item_bandit_archer_shadow_blade" - { - // General - //------------------------------------------------------------------------------------------------------------- - "BaseClass" "item_invis_sword" - "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL" - "FightRecapLevel" "1" - - // Stats - //------------------------------------------------------------------------------------------------------------- - "AbilityCooldown" "22.0" - "AbilitySharedCooldown" "shadow_blade" - - // Item Info - //------------------------------------------------------------------------------------------------------------- - "AbilityManaCost" "0" - "ItemCost" "2800" - "ItemShopTags" "damage;attack_speed;movespeed;hard_to_tag" - "ItemQuality" "epic" - "ItemAliases" "sb;invis;shadow blade;silver edge" - "ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_IN_SPEECH | DECLARE_PURCHASES_TO_SPECTATORS" - - "ItemPurchasable" "0" - "ShouldBeSuggested" "0" - - // Special - //------------------------------------------------------------------------------------------------------------- - "AbilitySpecial" - { - "01" - { - "var_type" "FIELD_INTEGER" - "bonus_damage" "0" - } - "02" - { - "var_type" "FIELD_INTEGER" - "bonus_attack_speed" "0" - } - "03" - { - "var_type" "FIELD_FLOAT" - "windwalk_duration" "7.0" - } - "04" - { - "var_type" "FIELD_INTEGER" - "windwalk_movement_speed" "20" - } - "05" - { - "var_type" "FIELD_FLOAT" - "windwalk_fade_time" "0.3" - } - "06" - { - "var_type" "FIELD_INTEGER" - "windwalk_bonus_damage" "0" - } - } - } - -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/npc/npc_neutral_items_custom.txt b/aghanim_singleplayer/scripts/npc/npc_neutral_items_custom.txt deleted file mode 100755 index f78052e..0000000 --- a/aghanim_singleplayer/scripts/npc/npc_neutral_items_custom.txt +++ /dev/null @@ -1,97 +0,0 @@ -"neutral_items" -{ - "1" - { - - "items" - { - "item_broom_handle" "1" - "item_keen_optic" "1" - "item_ocean_heart" "1" - "item_oblivions_locket" "1" - "item_precious_egg" "1" - "item_faded_broach" "1" - "item_longclaws_amulet" "1" - "item_bear_cloak" "1" - "item_arcane_ring" "1" - "item_poor_mans_shield" "1" - "item_winter_embrace" "1" - } - } - "2" - { - "items" - { - "item_ogre_seal_totem" "1" - "item_dragon_scale" "1" - "item_essence_ring" "1" - "item_enchanted_quiver" "1" - "item_pupils_gift" "1" - "item_ring_of_aquila" "1" - "item_grove_bow" "1" - "item_bogduggs_baldric" "1" - "item_craggy_coat" "1" - "item_nether_shawl" "1" - "item_imp_claw" "1" - "item_ambient_sorcery" "1" - "item_vambrace" "1" - "item_paw_of_lucius" "1" - "item_pelt_of_the_old_wolf" "1" - } - } - "3" - { - "items" - { - - "item_vampire_fangs" "1" - "item_greater_faerie_fire" "1" - "item_quickening_charm" "1" - "item_titan_sliver" "1" - "item_sign_of_the_arachnid" "1" - "item_preserved_skull" "1" - "item_gravel_foot" "1" - "item_orb_of_destruction" "1" - "item_paladin_sword" "1" - "item_havoc_hammer" "1" - "item_witless_shako" "1" - "item_bogduggs_cudgel" "1" - } - } - "4" - { - - "items" - { - "item_stony_coat" "1" - "item_panic_button" "1" - "item_bogduggs_lucky_femur" "1" - "item_illusionsts_cape" "1" - "item_minotaur_horn" "1" - "item_phoenix_ash" "1" - "item_stonework_pendant" "1" - "item_spell_prism" "1" - "item_timeless_relic" "1" - "item_watchers_gaze" "1" - "item_guardian_shell" "1" - } - } - "5" - { - "items" - { - "item_ballista" "1" - "item_demonicon" "1" - "item_force_boots" "1" - "item_mirror_shield" "1" - "item_treads_of_ermacor" "1" - "item_wand_of_the_brine" "1" - "item_fallen_sky" "1" - "item_apex" "1" - "item_slippers_of_the_abyss" "1" - "item_desolator_2" "1" - "item_ex_machina" "1" - "item_trident" "1" - } - } -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/npc/npc_units_custom.txt b/aghanim_singleplayer/scripts/npc/npc_units_custom.txt deleted file mode 100755 index d762f5e..0000000 --- a/aghanim_singleplayer/scripts/npc/npc_units_custom.txt +++ /dev/null @@ -1,18174 +0,0 @@ -// Units File -"DOTAUnits" -{ - "Version" "1" - - //================================================================================================================= - // Announcer - //================================================================================================================= - "npc_dota_announcer_aghanim" - { - // Script - "vscripts" "ai/announcer_aghanim.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_custom_game_announcer" - "Model" "models/development/invisiblebox.vmdl" - "VoiceFile" "soundevents/voscripts/game_sounds_vo_announcer_aghanim.vsndevts" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghanim_announcer_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "30" - "StatusHealthRegen" "0" - "StatusMana" "10000" - "StatusStartingMana" "10000" - "StatusManaRegen" "500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "0" - "VisionNighttimeRange" "0" - - "DisableDamageDisplay" "1" - } - - //================================================================================= - // Creature: Baby Ogre Tank - //================================================================================= - "npc_dota_creature_baby_ogre_tank" - { - // Script - "vscripts" "ai/baby_ogre_tank.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/large_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Ogre" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "Level" "1" - "ModelScale" "1.2" - "ConsideredHero" "1" - "IsAncient" "1" - "skin" "1" - - "MinimapIcon" "minimap_enemyicon" - "MinimapIconSize" "275" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "baby_ogre_tank_melee_smash" - "Ability2" "baby_ogre_tank_jump_smash" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "78" - "AttackDamageMax" "88" - "AttackRate" "2.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "60" - "HealthBarOffset" "240" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" - "BountyGoldMin" "65" - "BountyGoldMax" "75" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "240" - "MovementTurnRate" "0.2" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "900" - "StatusHealthRegen" "2" - "StatusMana" "400" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableResistance" "100.0" - - //------------------------------------------------------------ - "ItemDrops" - { - - } - } - } - - //================================================================================= - // Creature: Ogre Tank - //================================================================================= - "npc_dota_creature_ogre_tank" - { - // Script - "vscripts" "ai/ogre_tank.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/large_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Ogre" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "Level" "1" - "ModelScale" "1.8" - "ConsideredHero" "1" - "IsAncient" "1" - "skin" "1" - - "MinimapIcon" "minimap_enemyicon" - "MinimapIconSize" "275" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ogre_tank_melee_smash" - "Ability2" "ogre_tank_jump_smash" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "20" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "200" - "AttackDamageMax" "225" - "AttackRate" "2.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "500" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "100" - "HealthBarOffset" "310" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "240" - "MovementTurnRate" "0.2" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4800" - "StatusHealthRegen" "5" - "StatusMana" "500" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableResistance" "100.0" - - //------------------------------------------------------------ - "ItemDrops" - { - } - } - } - - //================================================================================= - // Creature: Baby Ogre Magi - //================================================================================= - "npc_dota_creature_baby_ogre_magi" - { - // Script - "vscripts" "ai/baby_ogre_magi.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/small_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.75" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ogre_magi_channelled_bloodlust" - "Ability2" "baby_ogre_magi_area_ignite" - "Ability3" "skeleton_king_run_passive" // adds "run" activity modifier - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "50" - "AttackDamageMax" "55" - "AttackRate" "1.35" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "230" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "340" - "StatusHealthRegen" "1" - "StatusMana" "500" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - //------------------------------------------------------------ - "ItemDrops" - { - - } - } - } - - //================================================================================= - // Creature: Ogre Magi - //================================================================================= - "npc_dota_creature_ogre_magi" - { - // Script - "vscripts" "ai/ogre_magi.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/small_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ogre_magi_channelled_bloodlust" - "Ability2" "ogre_magi_area_ignite" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "100" - "AttackDamageMax" "110" - "AttackRate" "1.50" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "500" - "AttackRange" "140" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "230" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1000" - "StatusHealthRegen" "3" - "StatusMana" "800" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - //------------------------------------------------------------ - "ItemDrops" - { - - } - } - } - - //================================================================================= - // Creature: Ogre Tank Boss - //================================================================================= - "npc_dota_creature_ogre_tank_boss" - { - // Script - "vscripts" "ai/ogre_tank_boss.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/boss_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Ogre" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "Level" "1" - "ModelScale" "2.1" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "300" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ogre_tank_boss_melee_smash" - "Ability2" "ogre_tank_boss_jump_smash" - "Ability3" "ability_absolute_no_cc" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "20" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "2.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1500" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "100" - "HealthBarOffset" "420" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "230" - "MovementTurnRate" "0.25" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "25000" - "StatusHealthRegen" "0" - "StatusMana" "1000" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" - "VisionNighttimeRange" "1500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableResistance" "100.0" - - //------------------------------------------------------------ - "ItemDrops" - { - } - } - } - - //================================================================================= - // Creature: Ogre Seer - //================================================================================= - "npc_dota_creature_ogre_seer" - { - // Script - "vscripts" "ai/ogre_seer.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/small_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.4" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ogre_magi_channelled_bloodlust" - "Ability2" "ogre_seer_area_ignite" - "Ability3" "skeleton_king_run_passive" // adds "run" activity modifier - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "190" - "AttackDamageMax" "200" - "AttackRate" "1.35" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1500" - "AttackRange" "160" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "330" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1800" - "StatusHealthRegen" "0" - "StatusMana" "1200" - "StatusManaRegen" "10" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" - "VisionNighttimeRange" "1500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - //------------------------------------------------------------ - "ItemDrops" - { - } - } - } - - //================================================================================================================= - // Breakable Crate - //================================================================================================================= - "npc_dota_crate" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_rotatable_building" - "Model" "models/gameplay/breakingcrate_dest.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "0.9" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "30" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - //"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - "PathfindingSearchDepthScale" "0.0" - } - - //================================================================================================================= - // Breakable Vase - //================================================================================================================= - "npc_dota_vase" - { - // General - //---------------------------------------------------------------- - - "BaseClass" "npc_dota_creep" - "Model" "models/gameplay/breakingvase_dest.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "0.8" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "30" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - //"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - "PathfindingSearchDepthScale" "0.0" - } - - //================================================================================================================= - // Treasure Chest - //================================================================================================================= - "npc_treasure_chest" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/beetlejaws/mesh/beetlejaws.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.5" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "treasure_chest" - "Ability2" "creature_techies_land_mine" - "Ability3" "trap_sun_strike" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "20" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1000" - "StatusHealthRegen" "3" - "StatusMana" "500" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - } - - //================================================================================================================= - // Explosive Barrel - //================================================================================================================= - "npc_dota_explosive_barrel" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_rotatable_building" - "Model" "models/heroes/techies/fx_techies_remotebomb_underhollow.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_explosive_barrel" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "30" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - //"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - "PathfindingSearchDepthScale" "0.0" - } - - //================================================================================= - // Techies Land Mine - //================================================================================= - "npc_dota_creature_techies_land_mine" - { - // General - //---------------------------------------------------------------- - "Model" "models/heroes/techies/fx_techiesfx_mine.vmdl" - "BaseClass" "npc_dota_techies_mines" - "SoundSet" "0" - "Level" "1" - "ModelScale" "1.0" - "SelectionGroup" "Techies_LandMines" - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - "wearable" "8644" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ability_unselectable" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.0" - "AttackAnimationPoint" "0.0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1" - "StatusHealthRegen" "0.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "64" - "VisionNighttimeRange" "64" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================================================= - // Shop Keeper Bristleback - //================================================================================================================= - "npc_dota_shop_keeper" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creep" - "Model" "models/heroes/bristleback/bristleback.vmdl" - "SoundSet" "Hero_Bristleback" - "Level" "1" - "ModelScale" "1.5" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - //"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - "PathfindingSearchDepthScale" "0.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "436" // back: default - } - "Wearable2" - { - "ItemDef" "437" // head: default - } - "Wearable3" - { - "ItemDef" "438" // weapons: default - } - "Wearable4" - { - "ItemDef" "439" // bracers: default - } - "Wearable5" - { - "ItemDef" "440" // necklace: default - } - } - } - } - - //================================================================================= - // Small Hellbear - //================================================================================= - "npc_dota_creature_small_hellbear" - { - // Script - "vscripts" "ai/small_hellbear.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/neutral_creeps/n_creep_beast/n_creep_beast.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" ".60" - "IsNeutralUnitType" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "44" - "AttackDamageMax" "50" - "AttackRate" "1.65" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "25" - "BountyGoldMin" "13" - "BountyGoldMax" "17" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "50" - "StatusHealthRegen" "0.5" - "StatusMana" "0" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - } - } - - //================================================================================= - // Hellbear - //================================================================================= - "npc_dota_creature_hellbear" - { - // Script - "vscripts" "ai/hellbear.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/neutral_creeps/n_creep_furbolg/n_creep_furbolg_disrupter.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "hellbear_smash" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "50" - "AttackDamageMax" "54" - "AttackRate" "1.70" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "160" - "StatusHealthRegen" "1" - "StatusMana" "300" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - } - } - - //================================================================================= - // Brewmaster Unit - Earth - //================================================================================= - "npc_dota_brewmaster_earth_unit" - { - // Script - "vscripts" "ai/brewmaster_earth.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/brewmaster/brewmaster_earthspirit.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Brewmaster_Earth" - "Level" "1" - "ModelScale" ".85" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "brewmaster_earth_pulverize" - "Ability2" "brewmaster_unit_passive" - "Ability3" "aghsfort_brewmaster_thunderclap" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "38" // Damage range min. - "AttackDamageMax" "42" // Damage range max. - "AttackRate" "1.40" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "600" // Range within a target can be acquired. - "AttackRange" "150" // Range within a target can be attacked. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "110" - "StatusHealthRegen" "1" - "StatusMana" "75" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - } - } - - //================================================================================= - // Brewmaster Unit - Storm - //================================================================================= - "npc_dota_brewmaster_storm_unit" - { - // Script - "vscripts" "ai/brewmaster_storm.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/brewmaster/brewmaster_windspirit.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Brewmaster_Storm" - "Level" "1" - "ModelScale" ".85" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "brewmaster_unit_passive" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "28" // Damage range min. - "AttackDamageMax" "33" // Damage range max. - "AttackRate" "1.6" // Speed of attack. - "AttackAnimationPoint" "0.4" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "600" // Range within a target can be acquired. - "AttackRange" "600" // Range within a target can be attacked. - "ProjectileModel" "particles/units/heroes/hero_brewmaster/brewmaster_storm_attack.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "1200" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "115" - "StatusHealthRegen" "1" - "StatusMana" "75" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - } - - //================================================================================= - // Brewmaster Unit - Fire - //================================================================================= - "npc_dota_brewmaster_fire_unit" - { - // Script - "vscripts" "ai/brewmaster_fire.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/brewmaster/brewmaster_firespirit.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Brewmaster_Fire" - "Level" "1" - "ModelScale" ".85" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_brewmaster_fire_permanent_immolation" - "Ability2" "brewmaster_unit_passive" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "50" // Damage range min. - "AttackDamageMax" "55" // Damage range max. - "AttackRate" "1.50" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "600" // Range within a target can be acquired. - "AttackRange" "150" // Range within a target can be attacked. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" - "StatusHealthRegen" "1" - "StatusMana" "75" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - } - } - - //================================================================================= - // Brewmaster Boss - //================================================================================= - "npc_dota_creature_brewmaster_boss" - { - // Script - "vscripts" "ai/brewmaster.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/brewmaster/brewmaster.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Brewmaster" - "Level" "1" - "ModelScale" "1.1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_brewmaster_thunderclap" - "Ability2" "aghsfort_brewmaster_primal_split" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "85" - "AttackDamageMax" "90" - "AttackRate" "1.70" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "240" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "330" - "StatusHealthRegen" "1" - "StatusMana" "300" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "158" // staff: default - } - "Wearable2" - { - "ItemDef" "159" // barrel: default - } - "Wearable3" - { - "ItemDef" "160" // bracers: default - } - "Wearable4" - { - "ItemDef" "161" // backpack: default - } - "Wearable5" - { - "ItemDef" "162" // shoulders: default - } - } - } - } - - //================================================================================= - // Creature: Pinecone Warrior - //================================================================================= - "npc_dota_pinecone_warrior" - { - // General - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/pine_cone/pine_cone.vmdl" - "SoundSet" "Furion_Treant" - "ModelScale" "0.75" - "Level" "2" - "Portrait" "scripts/npc/portraits" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_furion.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "30" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "50" - "AttackDamageMax" "56" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.80" - "AttackAnimationPoint" "0.467" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "HealthBarOffset" "150" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "60" - "StatusHealthRegen" "1.5" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "700" - "VisionNighttimeRange" "700" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - "DisableClumpingBehavior" "1" - } - } - - //================================================================================= - // Creature: Pinecone Champion - //================================================================================= - "npc_dota_pinecone_champion" - { - // General - "BaseClass" "npc_dota_creature" - "RunAIWhenControllableByPlayer" "1" - - "Model" "models/creeps/pine_cone/pine_cone.vmdl" - //"SoundSet" "Furion_Treant" - "SoundSet" "Hero_Mars" - "ModelScale" "1.4" - "Level" "2" - "ConsideredHero" "1" - "Portrait" "scripts/npc/portraits" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_mars.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "pine_cone_shield_bash" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "75" - "AttackDamageMax" "80" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.9" - "AttackAnimationPoint" "0.467" - "AttackAcquisitionRange" "1000" - "AttackRange" "200" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "HealthBarOffset" "270" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - "MovementTurnRate" "0.3" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "320" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "700" - "VisionNighttimeRange" "700" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DisableClumpingBehavior" "1" - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "pine_cone_shield_bash" - "AOE" "1" - "Radius" "250" - "MinimumTargets" "1" - } - } - } - } - - //================================================================================= - // Creature: Tusk Skeleton - //================================================================================= - "npc_dota_creature_tusk_skeleton" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/undeadtusk/undead_tuskskeleton01.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.7" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "68" - "AttackDamageMax" "72" - "AttackRate" "1.2" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALLEST" - "RingRadius" "40" - "HealthBarOffset" "135" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" - "StatusHealthRegen" "1" - "StatusMana" "50" - "StatusManaRegen" "2" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - //================================================================================= - // Creature: Icy Tusk Skeleton - //================================================================================= - "npc_dota_creature_spectral_tusk_mage" - { - // Script - "vscripts" "ai/spectral_tusk_mage.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/undeadtusk/undead_tuskskeleton02.vmdl" - "SoundSet" "Hero_Necrolyte" - "IdleSoundLoop" "Hero_Necrolyte.IdleLoop" - "Level" "1" - "ModelScale" "1.2" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "undead_tusk_mage_tombstone" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "75" - "AttackDamageMax" "80" - "AttackRate" "1.6" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "1000" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf" - "ProjectileSpeed" "400" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "260" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "400" - "StatusHealthRegen" "0" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - //================================================================================= - // Creature: Undead Tusk Tombstone - //================================================================================= - "npc_dota_undead_tusk_tombstone" - { - // General - "BaseClass" "npc_dota_unit_aghsfort_spectral_tusk_tombstone" - "Model" "models/props_gameplay/undying_tower_winter/undying_tower_winter.vmdl" - "SoundSet" "Undying_Tombstone" - "ModelScale" "0.8" - "Level" "4" - "IsSummoned" "1" - "IsAncient" "1" - "IsOther" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "neutral_spell_immunity" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "100" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "HealthBarOffset" "320" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "120" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" - "VisionNighttimeRange" "1800" - } - - //================================================================================= - // Creature: Friendly Baby Ogre Tank - //================================================================================= - "npc_dota_creature_friendly_baby_ogre_tank" - { - // Script - "vscripts" "ai/friendly_baby_ogre_tank.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/large_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Ogre" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "Level" "1" - "ModelScale" "1.2" - "ConsideredHero" "1" - "IsAncient" "1" - "skin" "0" //"1" - - "MinimapIcon" "minimap_enemyicon" - "MinimapIconSize" "275" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "baby_ogre_tank_melee_smash" - "Ability2" "baby_ogre_tank_jump_smash" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "5" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "70" - "AttackDamageMax" "80" - "AttackRate" "2.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - "RingRadius" "60" - "HealthBarOffset" "240" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" - "BountyGoldMin" "65" - "BountyGoldMax" "75" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "200" - "MovementTurnRate" "0.2" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "8000" - "StatusHealthRegen" "35" - "StatusMana" "400" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableResistance" "100.0" - - //------------------------------------------------------------ - "ItemDrops" - { - } - } - } - - //================================================================================= - // Creature: Friendly Ogre Seal - //================================================================================= - "npc_dota_creature_friendly_ogre_seal" - { - // Script - "vscripts" "ai/friendly_ogre_seal.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/ogreseal/ogreseal_rednose.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.8" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "friendly_ogreseal_flop" - "Ability2" "ability_ascension" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "5" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "130" - "AttackDamageMax" "130" - "AttackRate" "1.8" - "AttackAnimationPoint" "0.5714" - "AttackAcquisitionRange" "1000" - "AttackRange" "180" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_LARGE" - "RingRadius" "65" - "HealthBarOffset" "250" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4500" - "StatusHealthRegen" "15" - "StatusMana" "400" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableClumpingBehavior" "1" - } - } - - //================================================================================= - // Creature: Zealot Scarab - //================================================================================= - "npc_dota_creature_zealot_scarab" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/nerubian_assassin/nerubian_assassin.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1" - "IsNeutralUnitType" "1" - "vscripts" "ai/scarab_zealot.lua" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_creature_impale" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - "MagicalResistance" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "80" - "AttackDamageMax" "90" - "AttackRate" "1.55" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1500" - "AttackRange" "128" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "220" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "250" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "250" - "StatusHealthRegen" "1" - "StatusMana" "3000" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" - "VisionNighttimeRange" "1500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "8005" // weapon: Latticean Shards - } - "Wearable2" - { - "ItemDef" "196" // back: default - } - "Wearable3" - { - "ItemDef" "197" // head: default - } - "Wearable4" - { - "ItemDef" "578" // misc: default - } - } - } - } - - //================================================================================= - // Creature: Zealot Scarab Mound - //================================================================================= - "npc_dota_creature_zealot_mound" - { - // General - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/nerubian_assassin/mound.vmdl" - "SoundSet" "n_creep_Melee" - "ModelScale" "1.0" - "Level" "4" - "IsSummoned" "1" - "IsAncient" "1" - "IsOther" "1" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "HealthBarOffset" "200" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "40" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - } - } - - //================================================================================= - // Creature: Scarab Priest - //================================================================================= - "npc_dota_creature_scarab_priest" - { - // Script - //---------------------------------------------------------------- - "vscripts" "ai/scarab_priest.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/nerubian_assassin/nerubian_assassin.vmdl" - "ModelScale" "2.3" - "Level" "1" - "IsNeutralUnitType" "1" - "ConsideredHero" "1" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_nyx_assassin.vsndevts" - - "SoundSet" "Hero_NyxAssassin" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_creature_spiked_carapace" - "Ability2" "scarab_priest_summon_zealots" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - "MagicalResistance" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "165" - "AttackDamageMax" "198" - "AttackRate" "1.70" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "900" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "220" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "900" - "StatusHealthRegen" "2" - "StatusMana" "300" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "8005" // weapon: Latticean Shards - } - "Wearable2" - { - "ItemDef" "196" // back: default - } - "Wearable3" - { - "ItemDef" "197" // head: default - } - "Wearable4" - { - "ItemDef" "578" // misc: default - } - } - } - } - - //================================================================================= - // Creature: Small Ogre Seal - //================================================================================= - "npc_dota_creature_small_ogre_seal" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/ogreseal/ogreseal.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.45" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "10" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "120" - "AttackDamageMax" "130" - "AttackRate" "1.6" - "AttackAnimationPoint" "0.5714" - "AttackAcquisitionRange" "1000" - "AttackRange" "130" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "45" - "HealthBarOffset" "150" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "330" - "StatusHealthRegen" "1" - "StatusMana" "400" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableClumpingBehavior" "1" - } - } - - //================================================================================= - // Creature: Large Ogre Seal - //================================================================================= - "npc_dota_creature_large_ogre_seal" - { - // Script - "vscripts" "ai/ogre_seal.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/ogreseal/ogreseal_rednose.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.0" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ogreseal_flop" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "205" - "AttackDamageMax" "220" - "AttackRate" "1.8" - "AttackAnimationPoint" "0.5714" - "AttackAcquisitionRange" "1000" - "AttackRange" "180" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "65" - "HealthBarOffset" "250" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1100" - "StatusHealthRegen" "3" - "StatusMana" "600" - "StatusManaRegen" "5.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableClumpingBehavior" "1" - } - } - - //================================================================================= - // Creature: Pudge Miniboss - //================================================================================= - "npc_dota_creature_pudge_miniboss" - { - // Script - //---------------------------------------------------------------- - "vscripts" "ai/ai_pudge_miniboss.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/pudge/pudge.vmdl" - "ModelScale" "1.75" - "Level" "1" - "ConsideredHero" "1" - "IsAncient" "1" - - "SoundSet" "Hero_Pudge" - "GameSoundsFile" "soundevents/game_sounds_pudge_miniboss.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_pudge_dismember" - "Ability2" "creature_pudge_miniboss_flesh_heap" - "Ability3" "creature_pudge_miniboss_passive" - "Ability4" "generic_hidden" - "Ability5" "generic_hidden" - "Ability6" "generic_hidden" - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "25" - "MagicalResistance" "0" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "500" - "AttackDamageMax" "550" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "3000" - "AttackRange" "150" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "40" - "HealthBarOffset" "350" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "375" - "MovementTurnRate" "0.3" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "18000" - "StatusHealthRegen" "10.0" - "StatusMana" "750" - "StatusManaRegen" "5.0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" - "VisionNighttimeRange" "1400" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - - "EquippedItems" - { - "PhaseBoots" - { - "Item" "item_phase_boots" - } - } - - - "AttachWearables" - { - // Plague Champion of Nurgle - "Wearable1" - { - "ItemDef" "8495" - } - "Wearable2" - { - "ItemDef" "8496" - } - - "Wearable3" - { - "ItemDef" "8497" - } - - "Wearable4" - { - "ItemDef" "8498" - } - - "Wearable5" - { - "ItemDef" "8499" - } - "Wearable6" - { - "ItemDef" "8500" - } - "Wearable6" - { - "ItemDef" "8501" - } - } - } - } - - //================================================================================= - // Creature: Drow Ranger Miniboss - //================================================================================= - "npc_dota_creature_drow_ranger_miniboss" - { - // Script - //---------------------------------------------------------------- - "vscripts" "ai/ai_drow_ranger_miniboss.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/drow/drow_base.vmdl" - "IdleExpression" "scenes/drowranger/drowranger_exp_idle_01.vcd" - - "ModelScale" "1.5" - "Level" "1" - "ConsideredHero" "1" - "IsAncient" "1" - - "SoundSet" "Hero_DrowRanger" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_drowranger.vsndevts" - "particle_folder" "particles/units/heroes/hero_drow" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_drow_ranger_wave_of_silence" - "Ability2" "aghsfort_drow_ranger_multishot" - "Ability3" "generic_hidden" - "Ability4" "generic_hidden" - "Ability5" "generic_hidden" - "Ability6" "generic_hidden" - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "5" - "MagicalResistance" "0" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "72" - "AttackDamageMax" "85" - "AttackRate" "1.15" - "AttackAnimationPoint" "0.55" - "AttackAcquisitionRange" "3000" - "AttackRange" "600" - "ProjectileModel" "particles/units/heroes/hero_drow/drow_base_attack.vpcf" - "ProjectileSpeed" "1250" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "40" - "HealthBarOffset" "300" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "320" - "MovementTurnRate" "0.6" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "2500" - "StatusHealthRegen" "0.0" - "StatusMana" "1000" - "StatusManaRegen" "5.0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" - "VisionNighttimeRange" "1400" - - //Inventory - "HasInventory" "1" - - "RenderablePortrait" - { - "Particles" - { - "particles/units/heroes/hero_drow/drow_loadout.vpcf" "loadout" - } - } - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "EquippedItems" - { - "Pike" - { - "Item" "item_hurricane_pike" - } - "ShadowBlade" - { - "Item" "item_aghsfort_drow_ranger_invis_sword" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "7232" // "Boots of the Winged Bolt" - } - "Wearable2" - { - "ItemDef" "7238" // "Bow of the Winged Bolt" - } - "Wearable3" - { - "ItemDef" "7242" // "Bracers of the Winged Bolt" - } - "Wearable4" - { - "ItemDef" "7243" // "Cape of the Winged Bolt" - } - "Wearable5" - { - "ItemDef" "7244" // "Guards of the Winged Bolt" - } - "Wearable6" - { - "ItemDef" "7245" // "Mask of the Winged Bolt" - } - "Wearable7" - { - "ItemDef" "7246" // "Quiver of the Winged Bolt" - } - // "6785" // "Mania's Mask" - } - } - } - - "npc_dota_creature_drow_ranger_skeleton_archer" - { - // Script - "vscripts" "ai/ai_drow_ranger_skeleton_archer.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/clinkz/clinkz_archer.vmdl"// Model. - "SoundSet" "Hero_Clinkz" // Name of sound set. - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_clinkz.vsndevts" - "Level" "1" - "ModelScale" "1.1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "35" // Damage range min. - "AttackDamageMax" "38" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.7" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1000" // Range within a target can be acquired. - "AttackRange" "900" // Range within a target can be attacked. - "ProjectileModel" "particles/units/heroes/hero_clinkz/clinkz_searing_arrow.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "900" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - "HealthBarOffset" "200" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "150" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "1000" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" // Range of vision during day light. - "VisionNighttimeRange" "1500" // Range of vision at night time. - - //Inventory - "HasInventory" "0" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - - //================================================================================= - // Creature: Drow Ranger Miniboss Skeleton Warrior - //================================================================================= - "npc_dota_creature_drow_ranger_skeleton_warrior" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/neutral_creeps/n_creep_troll_skeleton/n_creep_skeleton_melee.vmdl" // Model. - "SoundSet" "Creep_Good_Melee" // Name of sound set. - "ModelScale" "1.1" - "Level" "1" - "IsSummoned" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "50" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "48" // Damage range min. - "AttackDamageMax" "54" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.2" // Speed of attack. - "AttackAnimationPoint" "0.56" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "2500" // Range within a target can be acquired. - "AttackRange" "128" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALLEST" // Hull type used for navigation/locomotion. - "HealthBarOffset" "140" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "350" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "130" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "2500" // Range of vision during day light. - "VisionNighttimeRange" "2500" // Range of vision at night time. - } - - //================================================================================= - // Creature: Basic Zombie - //================================================================================= - "npc_dota_creature_pudge_miniboss_minion" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/heroes/undying/undying_minion_torso.vmdl" // Model. - "SoundSet" "Undying_Zombie" // Name of sound set. - "ModelScale" "1.1" - "Level" "1" - - "GameSoundsFile" "soundevents/game_sounds_pudge_miniboss.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_pudge_miniboss_armor_corruption" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "50" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "120" // Damage range min. - "AttackDamageMax" "130" // Damage range max. - "AttackRate" "1.0" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "3000" // Range within a target can be acquired. - "AttackRange" "100" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "120" - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "225" // Speed - "MovementTurnRate" "0.4" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "180" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" // Range of vision during day light. - "VisionNighttimeRange" "1400" // Range of vision at night time. - - // Pathing - //---------------------------------------------------------------- - "PathfindingSearchDepthScale" "0.2" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - //================================================================================= - // Creature: Wave Blaster - //================================================================================= - "npc_dota_creature_wave_blaster" - { - // Script - "vscripts" "ai/wave_blaster_ai.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/neutral_creeps/n_creep_harpy_b/n_creep_harpy_b.vmdl" // Model. - "SoundSet" "Hero_Necrolyte" - "IdleSoundLoop" "Hero_Necrolyte.IdleLoop" - "Level" "3" - "ModelScale" "1.1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_wave_blast" - "Ability2" "aghsfort_waveblaster_leap" - "Ability3" "aghsfort_waveblaster_summon_ghost" - - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "35" - "AttackDamageMax" "37" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "500" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf" - "ProjectileSpeed" "400" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "310" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1000" - "StatusHealthRegen" "1" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - -//================================================================================= -// Neutral: Wave Blaster Ghost -//================================================================================= - "npc_aghsfort_creature_wave_blaster_ghost" - { - // General - //---------------------------------------------------------------- - "Model" "models/creeps/neutral_creeps/n_creep_ghost_a/n_creep_ghost_a.vmdl" // Model. - "BaseClass" "npc_dota_creature" - "SoundSet" "n_creep_Ranged" - "Level" "3" - "ModelScale" ".90" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ghost_frost_attack" // Ability 1 - "Ability2" "" // Ability 2 - "Ability3" "" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "55" // Damage range min. - "AttackDamageMax" "60" // Damage range max. - "AttackRate" "1.0" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1000" // Range within a target can be acquired. - "AttackRange" "350" // Range within a target can be attacked. - "ProjectileModel" "particles/neutral_fx/ghost_base_attack.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "900" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "45" - "HealthBarOffset" "190" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "160" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "400" // Base mana. - "StatusManaRegen" "1.0" // Mana regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - - //================================================================================= - // Creature: Storegga - //================================================================================= - "npc_dota_creature_storegga" - { - // Script - "vscripts" "ai/storegga.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/storegga/storegga.vmdl" - "SoundSet" "Hero_Tiny" - "Level" "1" - "ModelScale" "2.4" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - "MinimapIcon" "minimap_enemyicon" - "MinimapIconSize" "300" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "storegga_arm_slam" - "Ability2" "storegga_grab" - "Ability3" "storegga_grab_throw" - "Ability4" "storegga_ground_pound" - "Ability5" "storegga_passive" - "Ability6" "storegga_avalanche" - "Ability7" "generic_gold_bag_fountain_8000" - //"Ability8" "ability_absolute_no_cc" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "30" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "1500" - "AttackDamageMax" "2000" - "AttackRate" "2.5" - "AttackAnimationPoint" "1.0" - "AttackAcquisitionRange" "1500" - "AttackRange" "10" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "100" - "HealthBarOffset" "850" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "2500" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "550" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "45000" - "StatusHealthRegen" "0" - "StatusMana" "10000" - "StatusManaRegen" "50" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" - "VisionNighttimeRange" "1800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "ItemDrops" - { - } - - "HPGain" "7500" - "DamageGain" "75" - } - } - - //================================================================================= - // Creature: Little Rock - //================================================================================= - "npc_dota_creature_small_storegga" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/tiny_01/tiny_01.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "25" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "280" - "AttackDamageMax" "282" - "AttackRate" "1.4" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "3000" - "AttackRange" "128" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "130" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "350" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "600" - "StatusHealthRegen" "1.0" - "StatusMana" "300" - "StatusManaRegen" "2.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.4" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "6866" // head: Elemental Ice Head - //"ItemDef" "493" // head: default - } - "Wearable2" - { - "ItemDef" "494" // armor: default - } - "Wearable3" - { - "ItemDef" "6868" // arms: Elemental Ice Left Arm - //"ItemDef" "495" // arms: default - } - "Wearable4" - { - "ItemDef" "6867" // offhand_weapon: Elemental Ice Right Arm - //"ItemDef" "496" // offhand_weapon: default - } - "Wearable5" - { - "ItemDef" "6869" // armor: Elemental Ice Body - } - "Wearable6" - { - "ItemDef" "516" // ambient_effects: default - } - } - } - } - - //================================================================================================================= - // Storegga Rock - //================================================================================================================= - "npc_dota_storegga_rock" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/rocks/crypt_rock_basalt_medium_03.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "3.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "modifier_no_minimap" - "Ability2" "provides_fow_position" - "Ability3" "no_vision" - "Ability4" "no_health_bar" - "Ability5" "ability_storegga_rock" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "99999" - "MagicalResistance" "100" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "9999" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - } - - //================================================================================================================= - // Storegga Rock 2 - //================================================================================================================= - "npc_dota_storegga_rock2" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/rocks/crypt_rock_basalt_medium_02.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.3" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "modifier_no_minimap" - "Ability2" "provides_fow_position" - "Ability3" "no_vision" - "Ability4" "no_health_bar" - "Ability5" "ability_storegga_rock" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "99" - "MagicalResistance" "100" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_FILLER" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "99999" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - } - - //================================================================================================================= - // Storegga Rock 3 - //================================================================================================================= - "npc_dota_storegga_rock3" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/rocks/crypt_rock_basalt_medium_01.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.8" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "modifier_no_minimap" - "Ability2" "provides_fow_position" - "Ability3" "no_vision" - "Ability4" "no_health_bar" - "Ability5" "ability_storegga_rock" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "999" - "MagicalResistance" "100" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_BARRACKS" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "99999" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - } - - //================================================================================= - // Creature: Temple Guardian - //================================================================================= - "npc_dota_creature_temple_guardian" - { - // Script - "vscripts" "ai/temple_guardian.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/omniknight_golem/omniknight_golem.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "n_creep_Melee" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "Level" "1" - "ModelScale" "2.3072" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - "MinimapIcon" "minimap_enemyicon" - "MinimapIconSize" "275" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "temple_guardian_purification" - "Ability2" "temple_guardian_hammer_throw" - "Ability3" "temple_guardian_hammer_smash" - "Ability4" "temple_guardian_rage_hammer_smash" - "Ability5" "temple_guardian_wrath" - "Ability6" "temple_guardian_passive" - "Ability7" "generic_gold_bag_fountain_2000" - "Ability8" "ability_absolute_no_cc" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "20" - "MagicalResistance" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "175" - "AttackDamageMax" "225" - "AttackRate" "2.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "2500" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - "RingRadius" "100" - "HealthBarOffset" "500" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "700" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.2" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "10000" // "20000" - "StatusHealthRegen" "0" // "5" - "StatusMana" "5000" - "StatusManaRegen" "30" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" - "VisionNighttimeRange" "1500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "HPGain" "1875" - "DamageGain" "0" - } - } - - //================================================================================= - // Creature: Demon Golem - //================================================================================= - "npc_dota_creature_demon_golem" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/warlock/warlock_demon.vmdl" - "SoundSet" "Hero_WarlockGolem" - "Level" "1" - "ModelScale" "0.45" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" //"warlock_golem_flaming_fists" - "Ability2" "" //"warlock_golem_permanent_immolation" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "67" - "AttackDamageMax" "72" - "AttackRate" "1.2" - "AttackAnimationPoint" "0.26" - "AttackAcquisitionRange" "1000" - "AttackRange" "200" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "220" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "260" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "250" - "StatusHealthRegen" "0" - "StatusMana" "400" - "StatusManaRegen" "1" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "40.0" - } - } - } - } - - //================================================================================= - // Creature: Warlock - //================================================================================= - "npc_dota_creature_warlock" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/warlock/warlock.vmdl" - "SoundSet" "Hero_Warlock" - "Level" "6" - "ModelScale" "1.3" - "IsNeutralUnitType" "1" // need this too? - "ConsideredHero" "1" - "IsAncient" "1" // warlock's aura doesn't work on ancients, this is how we're keeping it from applying to other warlocks - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_warlock_shadow_word" - "Ability2" "warlock_hp_aura" - "Ability3" "creature_flamestrike" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "82" - "AttackDamageMax" "88" - "AttackRate" "1.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "600" - "ProjectileModel" "particles/units/heroes/hero_warlock/warlock_base_attack.vpcf" - "ProjectileSpeed" "800" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "230" - "BoundsHullName" "DOTA_HULL_SIZE_SIEGE" // siege gives bigger collision radius, helps with selecting warlocks when they're surrounded - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - "MovementTurnRate" "0.4" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "700" - "StatusHealthRegen" "0.0" - "StatusMana" "800" - "StatusManaRegen" "4.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "10.0" - } - } - - "OffensiveAbilities" - { - "Ability3" - { - "Name" "creature_flamestrike" - "AOE" "1" - "Radius" "275" - "MinimumTargets" "1" - } - } - - "DefensiveAbilities" - { - "Ability1" - { - "Name" "creature_warlock_shadow_word" - "Heal" "1" - "UseSelfishly" "1" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "245" // belt: default - } - "Wearable2" - { - "ItemDef" "241" // head: default - } - "Wearable3" - { - "ItemDef" "240" // offhand_weapon: default - } - "Wearable4" - { - "ItemDef" "243" // arms: default - } - "Wearable5" - { - "ItemDef" "244" // back: default - } - "Wearable6" - { - "ItemDef" "242" // shoulder: default - } - "Wearable7" - { - "ItemDef" "239" //"6473" // weapon: Hellborn Grasp - } - } - } - } - - //================================================================================= - // Creature: Gauntlet Skeleton - //================================================================================= - "npc_dota_creature_gauntlet_skeleton" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/undeadtusk/undead_tuskskeleton01.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.8" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "10" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "92" - "AttackDamageMax" "94" - "AttackRate" "1.0" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "1000" - "AttackRange" "110" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALLEST" - "RingRadius" "40" - "HealthBarOffset" "135" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "250" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "400" - "StatusHealthRegen" "1" - "StatusMana" "50" - "StatusManaRegen" "2" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - //================================================================================= - // Creature: Lifestealer - //================================================================================= - "npc_dota_creature_life_stealer" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/life_stealer/life_stealer.vmdl" - "SoundSet" "Hero_LifeStealer" - "Level" "1" - "ModelScale" "1.6" - "ConsideredHero" "1" - "VoiceFile" "soundevents/voscripts/game_sounds_vo_life_stealer.vsndevts" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_life_stealer.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "lifestealer_passive" - "Ability2" "aghsfort_lifestealer_enraged_pulse" - "Ability3" "aggro_on_damage" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "4" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "310" - "AttackDamageMax" "310" - "AttackRate" "1.35" - "AttackAnimationPoint" "0.39" - "AttackAcquisitionRange" "750" - "AttackRange" "140" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALLEST" - "RingRadius" "80" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "250" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1800" - "StatusHealthRegen" "0" - "StatusMana" "50" - "StatusManaRegen" "2" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "750" - "VisionNighttimeRange" "750" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "9199" // back: Profane Union - } - } - } - } - - //================================================================================= - // Creature: Grimstroke - //================================================================================= - "npc_dota_creature_grimstroke" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/grimstroke.lua" - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/grimstroke/grimstroke.vmdl" - "SoundSet" "Hero_Grimstroke" - "Level" "5" - "ModelScale" "1.0" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_grimstroke.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_grimstroke_spirit_walk" - "Ability2" "aggro_on_damage" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "110" - "AttackDamageMax" "115" - "AttackRate" "1.9" - "AttackAnimationPoint" "0.35" - "AttackAcquisitionRange" "750" - "AttackRange" "600" - "ProjectileModel" "particles/units/heroes/hero_grimstroke/grimstroke_base_attack.vpcf" - "ProjectileSpeed" "700" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "230" - "BoundsHullName" "DOTA_HULL_SIZE_SIEGE" // siege gives bigger collision radius, helps with selecting warlocks when they're surrounded - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - "MovementTurnRate" "0.4" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1400" - "StatusHealthRegen" "1.0" - "StatusMana" "800" - "StatusManaRegen" "4.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "750" - "VisionNighttimeRange" "750" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "10.0" - } - } - - "OffensiveAbilities" - { - "Ability3" - { - "Name" "creature_flamestrike" - "AOE" "1" - "Radius" "275" - "MinimumTargets" "1" - } - } - - "DefensiveAbilities" - { - "Ability1" - { - "Name" "creature_warlock_shadow_word" - "Heal" "1" - "UseSelfishly" "1" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "664" // belt - } - "Wearable2" - { - "ItemDef" "12939" // weapon: Immortal - } - "Wearable3" - { - "ItemDef" "667" // head - } - "Wearable4" - { - "ItemDef" "668" // armor - } - } - } - } - - - //================================================================================= - // Creature: Tidehunter Mini - //================================================================================= - "npc_dota_creature_tidehunter_mini" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/tidehunter/tidehunter.vmdl" - "SoundSet" "Hero_Tidehunter" - "Level" "1" - "ModelScale" "0.75" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "tidehunter_kraken_shell" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "5" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "250" - "AttackDamageMax" "275" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "1000" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.4" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1600" - "StatusHealthRegen" "1" - "StatusMana" "1100" - "StatusManaRegen" "5.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "34" // arms: default - } - "Wearable2" - { - "ItemDef" "35" // belt: default - } - "Wearable3" - { - "ItemDef" "36" // weapon: default - } - "Wearable4" - { - "ItemDef" "37" // offhand_weapon: default - } - } - } - } - - //================================================================================= - // Creature: Tidehunter Medium - //================================================================================= - "npc_dota_creature_tidehunter_medium" - { - // Scripts - "vscripts" "ai/tidehunter.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/tidehunter/tidehunter.vmdl" - "SoundSet" "Hero_Tidehunter" - "Level" "1" - "ModelScale" "1.25" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_tidehunter.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_tidehunter_gush" - "Ability2" "tidehunter_anchor_smash" - "Ability3" "tidehunter_kraken_shell" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - "MagicalResistance" "10" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "300" - "AttackDamageMax" "350" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.6" - "AttackAcquisitionRange" "1000" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - "MovementTurnRate" "0.4" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4000" - "StatusHealthRegen" "0" - "StatusMana" "2000" - "StatusManaRegen" "5.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "EquippedItems" - { - "UltimateScepter" - { - "Item" "item_ultimate_scepter" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "7774" // arms: default - } - "Wearable2" - { - "ItemDef" "7773" // belt: default - } - "Wearable3" - { - "ItemDef" "7778" // weapon: default - } - "Wearable4" - { - "ItemDef" "7777" // offhand_weapon: default - } - "Wearable5" - { - "ItemDef" "7775" // back: default - } - "Wearable6" - { - "ItemDef" "7776" // head: default - } - } - } - } - - //================================================================================= - // Creature: Tidehunter Large - //================================================================================= - "npc_dota_creature_tidehunter_large" - { - // Scripts - "vscripts" "ai/tidehunter_miniboss.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/tidehunter/tidehunter.vmdl" - "SoundSet" "Hero_Tidehunter" - "Level" "1" - "ModelScale" "1.75" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_tidehunter.vsndevts" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_tidehunter_gush" - "Ability2" "tidehunter_kraken_shell" - "Ability3" "tidehunter_anchor_smash" - "Ability4" "tidehunter_ravage" - "Ability5" "tidehunter_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" - "MagicalResistance" "20" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "700" - "AttackDamageMax" "800" - "AttackRate" "3.0" - "AttackAnimationPoint" "0.6" - "AttackAcquisitionRange" "1000" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "300" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - "MovementTurnRate" "0.4" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "12500" - "StatusHealthRegen" "0" - "StatusMana" "2000" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "EquippedItems" - { - "UltimateScepter" - { - "Item" "item_ultimate_scepter" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "34" // arms: default - } - "Wearable2" - { - "ItemDef" "35" // belt: default - } - "Wearable3" - { - "ItemDef" "7469" // weapon: Claddish Cudgel - } - "Wearable4" - { - "ItemDef" "37" // offhand_weapon: default - } - "Wearable5" - { - "ItemDef" "4092" // back: kraken shell - } - "Wearable6" - { - "ItemDef" "4093" // head: octopus hat - } - } - } - } - - //================================================================================= - // Creature: Slark Peon - //================================================================================= - "npc_dota_creature_slark_peon" - { - // Scripts - "vscripts" "ai/slark.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/slark/slark.vmdl" - "SoundSet" "Hero_Slark" - "Level" "1" - "ModelScale" "1" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_slark.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "slark_dark_pact" - "Ability2" "slark_pounce" - "Ability3" "slark_essence_shift" - "Ability4" "slark_shadow_dance" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - "MagicalResistance" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "220" - "AttackDamageMax" "270" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "600" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.4" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1100" - "StatusHealthRegen" "10" - "StatusMana" "1000" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "DisableClumpingBehavior" "1" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "slark_pounce" - "Linear" "1" - "AOE" "1" - "Radius" "100" - "MinimumTargets" "1" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "7710" // buckler: default - } - "Wearable2" - { - "ItemDef" "7711" // cape: default - } - "Wearable3" - { - "ItemDef" "7712" // cowl: default - } - "Wearable4" - { - "ItemDef" "7713" // flippers: default - } - "Wearable5" - { - "ItemDef" "7714" // weapon: default - } - } - } - } - - //================================================================================= - // Creature: Naga Siren Boss - //================================================================================= - "npc_dota_creature_naga_siren_boss" - { - // Scripts - "vscripts" "ai/naga_siren.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/siren/siren.vmdl" - "SoundSet" "Hero_NagaSiren" - "Level" "1" - "ModelScale" "1.5" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_naga_siren.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_naga_siren_mirror_image" - "Ability2" "naga_siren_ensnare" - "Ability3" "naga_siren_rip_tide" - "Ability4" "naga_siren_song_of_the_siren" - "Ability5" "naga_siren_song_of_the_siren_cancel" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - "MagicalResistance" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "500" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "600" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "300" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1600" - "StatusHealthRegen" "10" - "StatusMana" "2000" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "DisableClumpingBehavior" "1" - - "EquippedItems" - { - "Radiance" - { - "Item" "item_radiance" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "6424" // head: default - } - "Wearable2" - { - "ItemDef" "6425" // weapon: default - } - "Wearable3" - { - "ItemDef" "6427" // tail: default - } - "Wearable4" - { - "ItemDef" "6423" // armor: default - } - "Wearable5" - { - "ItemDef" "6426" // offhand: default - } - } - } - } - - //================================================================================= - // Creature: Naga Siren Illusion - //================================================================================= - "npc_dota_creature_naga_siren_illusion" - { - // Scripts - "vscripts" "ai/naga_siren_illusion.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/siren/siren.vmdl" - "SoundSet" "Hero_NagaSiren" - "Level" "1" - "ModelScale" "1.0" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_naga_siren.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "naga_siren_rip_tide" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - "MagicalResistance" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "400" - "AttackDamageMax" "450" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "600" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "300" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "119" - "BountyGoldMin" "76" - "BountyGoldMax" "88" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "320" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4000" - "StatusHealthRegen" "0" - "StatusMana" "2000" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "DisableClumpingBehavior" "1" - - "EquippedItems" - { - "Radiance" - { - "Item" "item_radiance" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "191" // head: default - } - "Wearable2" - { - "ItemDef" "192" // weapon: default - } - "Wearable3" - { - "ItemDef" "193" // tail: default - } - "Wearable4" - { - "ItemDef" "194" // armor: default - } - "Wearable5" - { - "ItemDef" "312" // offhand: default - } - } - } - } - - //================================================================================================================= - // Underwater Mine - //================================================================================================================= - "npc_dota_underwater_mine" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/techies/fx_techiesfx_stasis.vmdl" - "SoundSet" "0" - "Level" "1" - "ModelScale" "2" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "bomber_death_explosion" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "120" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "450" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - "PathfindingSearchDepthScale" "0.0" - } - - //================================================================================= - // Creature: Tiny Crab - //================================================================================= - "npc_dota_creature_tiny_crab" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/darkreef/prisoner_crab/darkreef_prisoner_crab.vmdl" - "SoundSet" "Hero_Broodmother" - "Level" "1" - "ModelScale" "0.7" - "IsNeutralUnitType" "1" - "EnableIK" "0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "10" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "42" - "AttackDamageMax" "48" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "130" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "100" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "250" - "StatusHealthRegen" "1" - "StatusMana" "400" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - - //================================================================================= - // Creature: Morphling Big - //================================================================================= - "npc_dota_creature_morphling_big" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/morphling/morphling.vmdl" - "SoundSet" "Hero_Morphling" - "Level" "1" - "ModelScale" "1.7" - "IsNeutralUnitType" "1" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_morphling.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_morphling_waveform" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "100" - "AttackDamageMax" "105" - "AttackRate" "1.6" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "450" - "ProjectileModel" "particles/units/heroes/hero_morphling/morphling_base_attack.vpcf" - "ProjectileSpeed" "800" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "300" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1000" - "StatusHealthRegen" "1" - "StatusMana" "1000" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "aghsfort_morphling_waveform" - "Linear" "1" - "AOE" "1" - "Radius" "200" - "MinimumTargets" "2" - } - } - } - } - - //================================================================================= - // Creature: Lina - //================================================================================= - "npc_dota_creature_lina" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/lina/lina.vmdl" - "SoundSet" "Hero_Lina" - "Level" "1" - "ModelScale" "1.3" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_lina.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_flamestrike" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - "MagicalResistance" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "130" - "AttackDamageMax" "140" - "AttackRate" "1.6" - "AttackAnimationPoint" "0.65" - "AttackAcquisitionRange" "1000" - "AttackRange" "550" - "ProjectileModel" "particles/units/heroes/hero_lina/lina_base_attack.vpcf" - "ProjectileSpeed" "800" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "240" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "900" - "StatusHealthRegen" "4" - "StatusMana" "1000" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "creature_flamestrike" - "AOE" "1" - "Radius" "200" - "MinimumTargets" "1" - } - } - } - } - - //================================================================================= - // Creature: Puck - //================================================================================= - "npc_dota_creature_puck" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/puck/puck.vmdl" - "SoundSet" "Hero_Puck" - "Level" "1" - "ModelScale" "1.2" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_puck.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "puck_flying_bomb" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "6" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "160" - "AttackDamageMax" "160" - "AttackRate" "1.6" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "1000" - "AttackRange" "650" - "ProjectileModel" "particles/units/heroes/hero_puck/puck_base_attack.vpcf" - "ProjectileSpeed" "900" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "230" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1800" - "StatusHealthRegen" "0" - "StatusMana" "1000" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "puck_flying_bomb" - "AOE" "1" - "Radius" "200" - "MinimumTargets" "1" - } - } - } - } - - //================================================================================= - // Creature: Large Elder Titan - //================================================================================= - "npc_dota_creature_large_elder_titan" - { - // Scripts - "vscripts" "ai/elder_titan.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/elder_titan/elder_titan.vmdl" - "SoundSet" "Hero_ElderTitan" - "Level" "11" - "ModelScale" "1.2" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_elder_titan.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_elder_titan_echo_stomp" - "Ability2" "elder_titan_ancestral_spirit" // required for Echo Stomp to function - "Ability3" "creature_elder_titan_earth_splitter" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "500" - "AttackRate" "1.6" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "200" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "350" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4500" - "StatusHealthRegen" "0.0" - "StatusMana" "2400" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "DisableResistance" "75.0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "6381" // weapon: Worldforger's Anvil - } - "Wearable2" - { - "ItemDef" "6382" // arms: Worldforger's Bracers - } - "Wearable3" - { - "ItemDef" "6384" // head: Worldforger's Crown - } - "Wearable4" - { - "ItemDef" "6385" // shoulder: Worldforger's Shoulders - } - "Wearable5" - { - "ItemDef" "6386" // back: Worldforger's Spires - } - } - } - } - - //================================================================================= - // Creature: Kunkka Mini - //================================================================================= - "npc_dota_creature_kunkka_mini" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/kunkka/kunkka.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.65" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "5" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "75" - "AttackDamageMax" "80" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "315" - "MovementTurnRate" "0.6" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "650" - "StatusHealthRegen" "1.0" - "StatusMana" "200" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "10" // boots - } - "Wearable2" - { - "ItemDef" "11" // hands - } - "Wearable3" - { - "ItemDef" "12" // sword - } - "Wearable4" - { - "ItemDef" "14" // hair - } - } - } - } - - //================================================================================= - // Creature: Kunkka Medium - //================================================================================= - "npc_dota_creature_kunkka_medium" - { - // Scripts - "vscripts" "ai/kunkka.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/kunkka/kunkka.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.3" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_kunkka.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "kunkka_torrent_dm" - "Ability2" "kunkka_ghostship" - "Ability3" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "4" - "MagicalResistance" "10" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "500" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.6" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "6000" - "StatusHealthRegen" "0" - "StatusMana" "800" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "10" // boots - } - "Wearable2" - { - "ItemDef" "11" // hands - } - "Wearable3" - { - "ItemDef" "12" // sword - } - "Wearable4" - { - "ItemDef" "14" // hair - } - "Wearable5" - { - "ItemDef" "81" // spyglass - } - "Wearable6" - { - "ItemDef" "357" // shoulder - } - } - } - } - - //================================================================================= - // Creature: Kunkka Large - //================================================================================= - "npc_dota_creature_kunkka_large" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/kunkka/kunkka.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.8" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_kunkka.vsndevts" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "kunkka_torrent_dm" - "Ability2" "life_stealer_empty_1" - "Ability3" "kunkka_x_marks_the_spot" - "Ability4" "kunkka_ghostship" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "7" - "MagicalResistance" "20" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "500" - "AttackDamageMax" "550" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "385" - "MovementTurnRate" "0.6" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "2600" - "StatusHealthRegen" "3.0" - "StatusMana" "1400" - "StatusManaRegen" "5.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "kunkka_torrent_dm" - "AOE" "1" - "Radius" "200" - "MinimumTargets" "1" - } - - "Ability3" - { - "Name" "kunkka_x_marks_the_spot" - } - - "Ability4" - { - "Name" "kunkka_ghostship" - "AOE" "1" - "Radius" "300" - "MinimumTargets" "2" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "4011" // legs: pegleg - } - "Wearable2" - { - "ItemDef" "11" // gloves - } - "Wearable3" - { - "ItemDef" "12" // sword - } - "Wearable4" - { - "ItemDef" "4017" // head: bicorne - } - "Wearable5" - { - "ItemDef" "81" // belt: spyglass - } - "Wearable6" - { - "ItemDef" "357" // shoulder - } - } - } - } - - //================================================================================= - // Creature: Leshrac Small - //================================================================================= - "npc_dota_creature_leshrac_small" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/leshrac/leshrac.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.6" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_leshrac.vsndevts" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "5" - "MagicalResistance" "20" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "70" - "AttackDamageMax" "80" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "600" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "150" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "330" - "MovementTurnRate" "0.6" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "800" - "StatusHealthRegen" "4.0" - "StatusMana" "800" - "StatusManaRegen" "8.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "60.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - //"Wearable1" - //{ - //"ItemDef" "12765" // weapon: Blade of Odocoeleus - //} - } - } - } - - //================================================================================= - // Creature: Bandit Captain - //================================================================================= - "npc_dota_creature_bandit_captain" - { - // Script - "vscripts" "ai/bandit_captain.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/thief/thief_01_leader.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "15" - "ModelScale" "1.75" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "bandit_stifling_dagger" - "Ability2" "creature_blink_strike" - "Ability3" "creature_generic_high_status_resist_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "30" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "750" - "AttackDamageMax" "750" - "AttackRate" "1.0" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "65" - "HealthBarOffset" "310" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "380" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "9500" - "StatusHealthRegen" "0" - "StatusMana" "1500" - "StatusManaRegen" "20" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "EquippedItems" - { - "MKB" - { - "Item" "item_monkey_king_bar" - } - } - } - } - - //================================================================================= - // Creature: Bandit Archer - //================================================================================= - "npc_dota_creature_bandit_archer" - { - // Script - "vscripts" "ai/bandit_archer.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/thief/thief_01_archer.vmdl" - "SoundSet" "Hero_DrowRanger" - "Level" "15" - "ModelScale" "1.32" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "bandit_archer_arrow" - "Ability2" "creature_generic_high_status_resist_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "21" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.0" - "AttackAnimationPoint" "0.700000" - "AttackAcquisitionRange" "1000" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "65" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "380" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "3500" - "StatusHealthRegen" "0" - "StatusMana" "1500" - "StatusManaRegen" "20" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "EquippedItems" - { - "ShadowBlade" - { - "Item" "item_bandit_archer_shadow_blade" - } - } - - } - } - - //================================================================================= - // Creature: Bandit - //================================================================================= - "npc_dota_creature_bandit" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/thief/thief_01.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "0.9" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "450" - "AttackRate" "1.2" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "160" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "380" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "2500" - "StatusHealthRegen" "0" - "StatusMana" "500" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - - //================================================================================= - // Creature: Rhyzik - //================================================================================= - "npc_dota_creature_sand_king" - { - // Script - "vscripts" "ai/rhyzik.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/sandking_boss/sand_king_boss.vmdl" - "SoundSet" "Roshan" - "Level" "50" - "ModelScale" "3.0" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "sand_king_boss_burrow" - "Ability2" "sand_king_boss_unburrow" - "Ability3" "sand_king_tail_swipe_right" - "Ability4" "sand_king_tail_swipe_left" - "Ability5" "sand_king_boss_move_back" - "Ability6" "sand_king_boss_burrowstrike" - "Ability7" "sand_king_boss_sandstorm" - "Ability8" "sand_king_boss_epicenter" - "Ability9" "sand_king_boss_passive" - "Ability10" "sand_king_burrowed_forward_strike" - "Ability11" "sand_king_burrowed_backward_strike" - "Ability12" "sand_king_boss_move_right" - "Ability13" "sand_king_boss_move_left" - "Ability14" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "75" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "1600" - "AttackDamageMax" "1800" - "AttackRate" "1.75" - "AttackAnimationPoint" "0.53" - "AttackAcquisitionRange" "1800" - "AttackRange" "300" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "75" - "HealthBarOffset" "250" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "1000" - "BountyGoldMin" "500" - "BountyGoldMax" "1000" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "420" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "180000" - "StatusHealthRegen" "50" - "StatusMana" "10000" - "StatusManaRegen" "250" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" - "VisionNighttimeRange" "1800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "DisableResistance" "100.0" - "DisableClumpingBehavior" "1" - - "EquippedItems" - { - "Blink" - { - "Item" "item_blink" - } - "Shivas" - { - "Item" "item_shivas_guard" - } - "Sphere" - { - "Item" "item_sphere" - } - } - "ItemDrops" - { - } - } - } - - "npc_dota_sand_king_sandstorm" - { - // General - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/attachto_ghost/attachto_ghost.vmdl" - "SoundSet" "Creep_Good_Melee" - "ModelScale" "16.0" - "Level" "4" - "IsSummoned" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "sand_king_boss_sandstorm_storm_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "1" - "AttackDamageMax" "1" - "AttackRate" "1" - "AttackAnimationPoint" "1" - "AttackAcquisitionRange" "1" - "AttackRange" "1" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "HealthBarOffset" "140" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_FLY" - "MovementSpeed" "650" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "450" - "StatusHealthRegen" "0.5" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "300" - "VisionNighttimeRange" "300" - } - - //================================================================================= - // Creature: Healing Burrower - //================================================================================= - "npc_dota_creature_healing_burrower" - { - // Script - "vscripts" "ai/healing_burrower.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/nerubian_assassin/nerubian_assassin.vmdl" - "SoundSet" "Hero_NyxAssassin" - "Level" "5" - "ModelScale" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "nyx_suicide_heal" - "Ability2" "nyx_assassin_burrow" - "Ability3" "nyx_assassin_unburrow" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.55" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - "RingRadius" "25" - "HealthBarOffset" "120" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "50" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "320" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "800" - "StatusHealthRegen" "100" - "StatusMana" "1000" - "StatusManaRegen" "30" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "750" - "VisionNighttimeRange" "750" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "70.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DisableClumpingBehavior" "1" - - "EquippedItems" - { - "Aghanims" - { - "Item" "item_ultimate_scepter" - } - } - - "ItemDrops" - { - } - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "5345" // misc nyx dagon - } - } - } - } - - //================================================================================= - // Creature: Big Exploding Burrower - //================================================================================= - "npc_dota_creature_big_exploding_burrower" - { - // Script - "vscripts" "ai/exploding_big_burrower.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/nyx_swarm/nyx_swarm.vmdl" - "SoundSet" "Hero_NyxAssassin" - "Level" "5" - "ModelScale" "1.5" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "burrower_big_explosion" - "Ability2" "nyx_assassin_burrow" - "Ability3" "nyx_assassin_unburrow" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.55" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - "RingRadius" "25" - "HealthBarOffset" "150" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "50" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "450" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "800" - "StatusHealthRegen" "25" - "StatusMana" "1000" - "StatusManaRegen" "30" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "750" - "VisionNighttimeRange" "750" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "70.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DisableClumpingBehavior" "1" - - "ItemDrops" - { - } - - } - } - - //================================================================================= - // Creature: Spectre - //================================================================================= - "npc_dota_creature_spectre" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/spectre.lua" - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/spectre/spectre.vmdl" - "SoundSet" "Hero_Spectre" - "Level" "11" - "ModelScale" "1.4" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_spectre.vsndevts" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_spectre_active_dispersion" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "11" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "460" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "200" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_LARGE" - "RingRadius" "70" - "HealthBarOffset" "300" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "3600" - "StatusHealthRegen" "0.0" - "StatusMana" "1800" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "8913" // belt: Flow of the Flowering Shade - } - "Wearable2" - { - "ItemDef" "8914" // shoulder: Drape of the Flowering Shade - } - "Wearable3" - { - "ItemDef" "8915" // weapon: Edge of the Flowering Shade - } - "Wearable4" - { - "ItemDef" "8916" // head: Crest of the Flowering shade - } - "Wearable5" - { - "ItemDef" "539" // ambient_effects: default - } - } - } - } - - //================================================================================= - // Creature: Wolf - //================================================================================= - "npc_dota_creature_wolf" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/items/lycan/wolves/ambry_summon/ambry_summon.vmdl" - "SoundSet" "DireHound" - "Level" "6" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "150" - "AttackDamageMax" "160" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.33" - "AttackAcquisitionRange" "1000" - "AttackRange" "110" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "340" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "950" - "StatusHealthRegen" "3.0" - "StatusMana" "500" - "StatusManaRegen" "6" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - - //================================================================================= - // Creature: Phoenix - //================================================================================= - "npc_dota_creature_phoenix" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/phoenix.lua" - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/phoenix/phoenix_bird.vmdl" - "SoundSet" "Hero_Phoenix" - "Level" "16" - "ModelScale" "1.4" - "particle_folder" "particles/units/heroes/hero_phoenix" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_phoenix.vsndevts" - "VoiceFile" "soundevents/voscripts/game_sounds_vo_phoenix.vsndevts" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_phoenix_icarus_dive" - "Ability2" "aghsfort_phoenix_icarus_dive_stop" - "Ability3" "aghsfort_phoenix_fire_spirits" - "Ability4" "aghsfort_phoenix_launch_fire_spirit" - "Ability5" "aghsfort_phoenix_supernova" - "Ability6" "creature_generic_high_status_resist_passive" - "Ability7" "phoenix_passive" - //"Ability7" "ability_absolute_no_cc" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "30" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "700" - "AttackDamageMax" "700" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.35" - "AttackAcquisitionRange" "1000" - "AttackRange" "700" - "ProjectileModel" "particles/units/heroes/hero_phoenix/phoenix_base_attack.vpcf" - "ProjectileSpeed" "1100" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "340" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "9000" - "StatusHealthRegen" "0.0" - "StatusMana" "3000" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - //"DisableResistance" "75.0" - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "7835" // head: Crest of the Vermillion Crucible - } - "Wearable2" - { - "ItemDef" "7836" // ability_ultimate: Egg of the Vermillion Crucible - } - "Wearable3" - { - "ItemDef" "7837" // back: Feathers of the Vermillion Crucible - } - } - } - } - - //================================================================================= - // Creature: Ember Spirit - //================================================================================= - "npc_dota_creature_ember_spirit" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/ember_spirit.lua" - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/ember_spirit/ember_spirit.vmdl" - "SoundSet" "Hero_Emberspirit" - "Level" "9" - "ModelScale" "1.3" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_ember_spirit.vsndevts" - "particle_folder" "particles/units/heroes/hero_ember_spirit" - "VoiceFile" "soundevents/voscripts/game_sounds_vo_ember_spirit.vsndevts" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ember_spirit_fireball" - //"Ability2" "creature_generic_high_status_resist_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "22" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "750" - "AttackDamageMax" "750" - "AttackRate" "1.1" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "290" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "360" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "7000" - "StatusHealthRegen" "0.0" - "StatusMana" "1800" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "EquippedItems" - { - "MKB" - { - "Item" "item_monkey_king_bar" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "462" // head: Ember Spirit's Head Item - } - "Wearable2" - { - "ItemDef" "469" // shoulder: Ember Spirit's Shoulders - } - //"Wearable3" - //{ - //"ItemDef" "471" // belt: Ember Spirit's Belt Item - //} - "Wearable4" - { - "ItemDef" "472" // weapon: Ember Spirit's Main Weapon - } - "Wearable5" - { - "ItemDef" "473" // offhand_weapon: Ember Spirit's Offhand Weapon - } - //"Wearable6" - //{ - //"ItemDef" "474" // arms: Ember Spirit's Arms - //} - } - } - } - - //================================================================================= - // Creature: Dragon Knight - //================================================================================= - "npc_dota_creature_dragon_knight" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/dragon_knight.lua" - "BaseClass" "npc_dota_creature_dragon_knight" - "Model" "models/heroes/dragon_knight/dragon_knight.vmdl" - "SoundSet" "Hero_DragonKnight" - "Level" "13" - "ModelScale" "1.3" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_dragon_knight.vsndevts" - "particle_folder" "particles/units/heroes/hero_dragon_knight" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_dragon_knight_breathe_fire" - "Ability2" "aghsfort_dragon_knight_dragon_tail" - "Ability3" "aghsfort_dragon_knight_elder_dragon_form" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "22" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "600" - "AttackDamageMax" "600" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "1000" - "AttackRange" "200" - "ProjectileModel" "" - "ProjectileSpeed" "900" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "330" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "260" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "7000" - "StatusHealthRegen" "0.0" - "StatusMana" "1800" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - //"HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DisableClumpingBehavior" "1" - - //"DisableResistance" "100.0" - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "aghsfort_dragon_knight_breathe_fire" - "AOE" "1" - "Radius" "250" - "MinimumTargets" "1" - } - } - - //"EquippedItems" - //{ - //"BlackKingBar" - //{ - //"Item" "item_creature_black_king_bar" - //} - //} - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "9638" // head: Helm of the Bitterwing Legacy - } - "Wearable2" - { - "ItemDef" "9639" // shoulder: Shoulder of the Bitterwing Legacy - } - "Wearable3" - { - "ItemDef" "9640" // back: Barding of the Bitterwing Legacy - } - "Wearable4" - { - "ItemDef" "9641" // offhand_weapon: Shield of the Bitterwing Legacy - } - "Wearable5" - { - "ItemDef" "9642" // arms: Arms of the Bitterwing Legacy - } - "Wearable6" - { - "ItemDef" "9643" // Blade of the Bitterwing Legacy - } - "Wearable7" - { - "ItemDef" "9644" // shapeshift: Bitterwing - } - } - } - } - - //================================================================================= - // Creature: Underlord - //================================================================================= - "npc_dota_creature_underlord" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/underlord.lua" - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/abyssal_underlord/abyssal_underlord_v2.vmdl" - "SoundSet" "Hero_AbyssalUnderlord" - "Level" "9" - "ModelScale" "0.7" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_abyssal_underlord.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "underlord_channelled_buff" - "Ability2" "aghsfort_underlord_firestorm" - "Ability3" "skeleton_king_run_passive" // adds "run" activity modifier - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "230" - "AttackDamageMax" "240" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.45" - "AttackAcquisitionRange" "1000" - "AttackRange" "200" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "320" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1600" - "StatusHealthRegen" "0.0" - "StatusMana" "1800" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "12293" // head: Horns of the Obsidian Forge - } - "Wearable2" - { - "ItemDef" "12294" // armor: Armor of the Obsidian Forge - } - "Wearable3" - { - "ItemDef" "12295" // Blade of the Obsidian Forge - } - } - } - } - - //================================================================================= - // Creature: Friendly Ogre Tank - //================================================================================= - "npc_dota_creature_friendly_ogre_tank" - { - // Script - "vscripts" "ai/friendly_ogre_tank.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/creeps/ogre_1/large_ogre.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Ogre" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "Level" "1" - "ModelScale" "1.8" - "ConsideredHero" "1" - "IsAncient" "1" - "skin" "0" //"1" - - "MinimapIcon" "minimap_enemyicon" - "MinimapIconSize" "275" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ogre_tank_melee_smash" - "Ability2" "ogre_tank_jump_smash" - "Ability3" "ability_ascension" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "200" - "AttackDamageMax" "225" - "AttackRate" "2.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - "RingRadius" "100" - "HealthBarOffset" "340" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "200" - "MovementTurnRate" "0.2" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "11000" - "StatusHealthRegen" "30" - "StatusMana" "400" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableResistance" "100.0" - - //------------------------------------------------------------ - "ItemDrops" - { - } - } - } - - //================================================================================= - // Creature: Spider Sac - //================================================================================= - "npc_dota_spider_sac" - { - // General - //---------------------------------------------------------------- - "Model" "models/creeps/spiders/spidersack.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "0" - "Level" "1" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "spider_egg_sack" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.0" - "AttackAnimationPoint" "0.0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - - // Bounty - //---------------------------------------------------------------- - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1" - "StatusHealthRegen" "0.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "0" - "VisionNighttimeRange" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - } - - //================================================================================= - // Creature: Broodmother - //================================================================================= - "npc_dota_creature_broodmother" - { - // Scripts - "vscripts" "ai/broodmother.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/broodmother/broodmother.vmdl" - "SoundSet" "Hero_Broodmother" - "Level" "1" - "ModelScale" "1.3" - "ConsideredHero" "1" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_broodmother.vsndevts" - "EnableIK" "0" - - // Abilities - //---------------------------------------------------------------- - //"Ability1" "broodmother_accrue_children" - "Ability1" "broodmother_web" - "Ability2" "creature_generic_high_status_resist_passive" - //"Ability4" "ability_absolute_no_cc" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "27" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "650" - "AttackDamageMax" "650" - "AttackRate" "1.2" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "800" - "AttackRange" "165" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "220" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "6000" - "StatusHealthRegen" "0.0" - "StatusMana" "500" - "StatusManaRegen" "5.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "EquippedItems" - { - "MKB" - { - "Item" "item_monkey_king_bar" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "8395" // head: Ancient Crown of the Arachnarok - } - "Wearable2" - { - "ItemDef" "8397" // misc: Ancient Pedipalps of the Arachnarok - } - "Wearable3" - { - "ItemDef" "9090" // back: Lycosidae's Brood - } - "Wearable4" - { - "ItemDef" "8399" // legs: Ancient Legs of the Arachnarok - } - } - } - } - - //================================================================================= - // Creature: Huge Broodmother - //================================================================================= - "npc_dota_creature_huge_broodmother" - { - // Scripts - "vscripts" "ai/huge_broodmother.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/broodmother/broodmother.vmdl" - "SoundSet" "Hero_Broodmother" - "Level" "1" - "ModelScale" "1.8" - "ConsideredHero" "1" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_broodmother.vsndevts" - "EnableIK" "0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "huge_brood_passive" - "Ability2" "huge_broodmother_accrue_children" - "Ability3" "broodmother_web" - "Ability4" "huge_brood_summon_eggs" - "Ability5" "ability_absolute_no_cc" - "Ability6" "creature_generic_high_status_resist_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "35" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "950" - "AttackDamageMax" "950" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "165" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "90" - "HealthBarOffset" "290" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "13500" - "StatusHealthRegen" "0.0" - "StatusMana" "2000" - "StatusManaRegen" "15.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "EquippedItems" - { - "MKB" - { - "Item" "item_monkey_king_bar" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "8562" // misc: Cowl of the Glutton's Larder - } - "Wearable2" - { - "ItemDef" "8563" // legs: Legs of the Glutton's Larder - } - "Wearable3" - { - "ItemDef" "8564" // head: Crown of the Glutton's Larder - } - "Wearable4" - { - "ItemDef" "8565" // back: Abdomen of the Glutton's Larder - } - } - } - } - - //================================================================================= - // Creature: Newborn Spider - //================================================================================= - "npc_dota_creature_newborn_spider" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/broodmother/spiderling.vmdl" - "SoundSet" "Hero_Broodmother" - "Level" "1" - "ModelScale" ".35" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "mini_spider_slow_attack" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "8" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "220" - "AttackDamageMax" "220" - "AttackRate" "1.25" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "1000" - "AttackRange" "110" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - "RingRadius" "35" - "HealthBarOffset" "110" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "450" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "650" - "StatusHealthRegen" "0" - "StatusMana" "200" - "StatusManaRegen" "3" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Pathing - //---------------------------------------------------------------- - "PathfindingSearchDepthScale" "0.01" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - } - } - - //================================================================================= - // Creature: Broodmother Baby C - //================================================================================= - "npc_dota_creature_broodmother_baby_c" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/broodmother/spiderling.vmdl" - "SoundSet" "0" - "Level" "1" - "ModelScale" "0.55" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "baby_broodmother_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "9" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "300" - "AttackDamageMax" "300" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "1000" - "AttackRange" "110" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - "RingRadius" "45" - "HealthBarOffset" "130" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "380" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "2000" - "StatusHealthRegen" "0.0" - "StatusMana" "100" - "StatusManaRegen" "3.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "900" - "VisionNighttimeRange" "900" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.2" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - } - } - - //================================================================================= - // Creature: Broodmother Baby D - //================================================================================= - "npc_dota_creature_broodmother_baby_d" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/items/broodmother/spiderling/elder_blood_heir_of_elder_blood/elder_blood_heir_of_elder_blood.vmdl" - "SoundSet" "0" - "Level" "1" - "ModelScale" "0.7" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "baby_broodmother_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "380" - "AttackDamageMax" "380" - "AttackRate" "1.2" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "1000" - "AttackRange" "110" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - "RingRadius" "50" - "HealthBarOffset" "150" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "360" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "2700" - "StatusHealthRegen" "0.0" - "StatusMana" "100" - "StatusManaRegen" "3.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "900" - "VisionNighttimeRange" "900" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.2" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - } - } - - //================================================================================= - // Creature: Kidnap Spider - //================================================================================= - "npc_dota_creature_kidnap_spider" - { - // Script - "vscripts" "ai/kidnap_spider.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/spiders/spider_kidnap.vmdl" - "SoundSet" "Hero_Broodmother" - "Level" "1" - "ModelScale" "1.0" - "ConsideredHero" "1" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_broodmother.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_batrider_flaming_lasso" - "Ability2" "kidnap_spider_summon_eggs" - "Ability3" "creature_generic_high_status_resist_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "21" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "550" - "AttackDamageMax" "550" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.4" - "AttackAcquisitionRange" "1000" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "215" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "540" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4200" - "StatusHealthRegen" "0" - "StatusMana" "600" - "StatusManaRegen" "20" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - } - - //================================================================================================================= - // Dummy Caster - //================================================================================================================= - "npc_dota_dummy_caster" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/development/invisiblebox.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "dummy_caster_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "30" - "StatusHealthRegen" "0" - "StatusMana" "10000" - "StatusStartingMana" "10000" - "StatusManaRegen" "500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - } - - - //================================================================================================================= - // Dummy target for chicken TPs - //================================================================================================================= - "npc_dota_dummy_target" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/development/invisiblebox.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "dummy_target_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "3000" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - } - - //================================================================================= - // Sled Penguin - //================================================================================= - "npc_dota_sled_penguin" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/penguin/penguin.vmdl" - "SoundSet" "Creep_Good_Melee_Mega" - "ModelScale" "2.7" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "sled_penguin_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "100" - "MagicalResistance" "100" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "5" - "AttackDamageMax" "5" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" - "AttackAnimationPoint" "0.467" - "AttackAcquisitionRange" "500" - "AttackRange" "130" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "25" - "BountyGoldMin" "16" - "BountyGoldMax" "24" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "160" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "325" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusManaRegen" "10" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "800" - - //Inventory - "HasInventory" "0" - "Creature" - { - } - } - - //================================================================================= - // Creature: Wandering Ogre Seal - //================================================================================= - "npc_dota_creature_wandering_ogre_seal" - { - // Script - //"vscripts" "ai/wandering_ogre_seal.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/ice_biome/ogreseal/ogreseal_rednose.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.0" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "wandering_ogre_seal_passive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "10" - "AttackDamageMax" "10" - "AttackRate" "1.8" - "AttackAnimationPoint" "0.5714" - "AttackAcquisitionRange" "1" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "65" - "HealthBarOffset" "250" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "175" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1200" - "StatusHealthRegen" "3" - "StatusMana" "600" - "StatusManaRegen" "5.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "DisableClumpingBehavior" "1" - } - } - - //================================================================================= - // Creeps: Watch Tower - //================================================================================= - "npc_dota_aghsfort_watch_tower_option_1" - { - // General - // - "BaseClass" "npc_dota_aghsfort_watch_tower" // Class of entity of link to. - "Model" "models/props_structures/aghanim_outpost.vmdl" // Model. - "ModelScale" "0.8" - "OptionNumber" "1" - "MovePlayersRadius" "500" - "SoundSet" "Creep_Good_Melee" // Name of sound set. - "MinimapIcon" "minimap_miscbuilding" - "destroysound" "Building_RadiantTower.Destruction" - "destroyfx" "particles/radiant_fx/radiant_statue001_destruction.vpcf" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" // Speed of attack. - "AttackAnimationPoint" "0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_FILLER" // Hull type used for navigation/locomotion. - "RingRadius" "100" - "HealthBarOffset" "375" - "MinimapIconSize" "500" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "450" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "0" // Range of vision during day light. - "VisionNighttimeRange" "0" // Range of vision at night time. - } - - "npc_dota_aghsfort_watch_tower_option_2" - { - // General - // - "BaseClass" "npc_dota_aghsfort_watch_tower" // Class of entity of link to. - "Model" "models/props_structures/aghanim_outpost.vmdl" // Model. - "ModelScale" "0.8" - "OptionNumber" "2" - "MovePlayersRadius" "500" - "SoundSet" "Creep_Good_Melee" // Name of sound set. - "MinimapIcon" "minimap_miscbuilding" - "destroysound" "Building_RadiantTower.Destruction" - "destroyfx" "particles/radiant_fx/radiant_statue001_destruction.vpcf" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" // Speed of attack. - "AttackAnimationPoint" "0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_FILLER" // Hull type used for navigation/locomotion. - "RingRadius" "100" - "HealthBarOffset" "375" - "MinimapIconSize" "500" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "450" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "0" // Range of vision during day light. - "VisionNighttimeRange" "0" // Range of vision at night time. - } - - //================================================================================= - // Ascension Level picker (for use in outpost previews only -- doesn't actually do anything) - //================================================================================= - "aghsfort_ascension_level_picker_1" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/courier/mighty_chicken/mighty_chicken.vmdl" - "ModelScale" "1.7" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================= - // Ascension Level picker (for use in outpost previews only -- doesn't actually do anything) - //================================================================================= - "aghsfort_ascension_level_picker_2" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/props_structures/well_skull.vmdl" - "ModelScale" "0.6" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================= - // Ascension Level picker (for use in outpost previews only -- doesn't actually do anything) - //================================================================================= - "aghsfort_ascension_level_picker_3" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/props_structures/well_skull.vmdl" - "ModelScale" "1" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================= - // Ascension Level picker (for use in outpost previews only -- doesn't actually do anything) - //================================================================================= - "aghsfort_ascension_level_picker_4" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/props_structures/well_skull.vmdl" - "ModelScale" "1.4" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - "npc_dota_aghsfort_effigy" - { - // General - // - "BaseClass" "npc_dota_aghsfort_effigy" // Class of entity of link to. - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" // Speed of attack. - "AttackAnimationPoint" "0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "0" - "HealthBarOffset" "0" - "MinimapIconSize" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "0" // Range of vision during day light. - "VisionNighttimeRange" "0" // Range of vision at night time. - - "EnableIK" "0" - } - - //================================================================================= - // Breathe Fire Trap - //================================================================================= - "npc_dota_breathe_fire_trap" - { - // General - "BaseClass" "npc_dota_trap_ward" - "Model" "models/props/traps/barking_dog/barking_dog.vmdl" - "Level" "1" - "VisbibleInPortraitOnly" "0" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "breathe_fire" - "Ability2" "trap_unselectable" - "Ability3" "provides_fow_position" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0.25" - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "500" - "VisionNighttimeRange" "500" - } - - //================================================================================= - // Spike Trap - //================================================================================= - "npc_dota_spike_trap_ward" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/props/traps/spiketrap/spiketrap.vmdl"// Model. - "Level" "1" - "VisbibleInPortraitOnly" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "spike_trap" // Ability 1. - "Ability2" "trap_unselectable" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0.25" // Turning rate. - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================= - // Arrow Trap - //================================================================================= - "npc_dota_arrow_trap" - { - // General - "BaseClass" "npc_dota_trap_ward" - "Model" "models/props/traps/barking_dog/barking_dog.vmdl" - "Level" "1" - "VisbibleInPortraitOnly" "0" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "arrow" - "Ability2" "trap_unselectable" - "Ability3" "provides_fow_position" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0.25" - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "500" - "VisionNighttimeRange" "500" - } - - //================================================================================= - // Pendulum Trap - //================================================================================= - "npc_dota_pendulum_trap" - { - // Script - "vscripts" "traps/pendulum_trap.lua" - - // General - "BaseClass" "npc_dota_creature" - "Model" "models/props/traps/pendulum/pendulum_extended.vmdl" - "Level" "1" - "ModelScale" "0.7" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "pendulum_swing" - "Ability2" "trap_unselectable" - "Ability3" "phased" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "6" - - // Team - //---------------------------------------------------------------- - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================= - // Holdout Tower - Tier 1 - //================================================================================= - "npc_dota_holdout_tower" - { - // General - "BaseClass" "npc_dota_holdout_tower" - "Model" "models/props_structures/tower_good.vmdl" - "SoundSet" "Tower.Water" - "MinimapIcon" "minimap_tower90" - "MinimapIconSize" "320" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "20" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "140" - "AttackDamageMax" "140" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" - "AttackAnimationPoint" "0.6" - "AttackAcquisitionRange" "700" - "AttackRange" "700" - "ProjectileModel" "particles/base_attacks/ranged_tower_good.vpcf" - "ProjectileSpeed" "750" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_TOWER" - "ProjectileCollisionSize" "50" - "RingRadius" "130" - "HealthBarOffset" "320" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "3000" - "StatusHealthRegen" "3" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1900" - "VisionNighttimeRange" "1600" - } - - //================================================================================= - // Holdout Tower - Tier 2 - //================================================================================= - "npc_dota_holdout_tower_tier2" - { - // General - "BaseClass" "npc_dota_holdout_tower" - "Model" "models/props_structures/tower_good.vmdl" - "SoundSet" "Tower.Water" - "MinimapIcon" "minimap_tower90" - "MinimapIconSize" "320" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "35" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "450" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" - "AttackAnimationPoint" "0.6" - "AttackAcquisitionRange" "700" - "AttackRange" "700" - "ProjectileModel" "particles/base_attacks/ranged_tower_good.vpcf" - "ProjectileSpeed" "750" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_TOWER" - "ProjectileCollisionSize" "50" - "RingRadius" "130" - "HealthBarOffset" "320" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "5000" - "StatusHealthRegen" "5" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1900" - "VisionNighttimeRange" "1600" - } - - //================================================================================= - // Creature: Wildwing Laborer - //================================================================================= - "npc_dota_creature_wildwing_laborer" - { - // General - //---------------------------------------------------------------- - "Model" "models/creeps/neutral_creeps/n_creep_vulture_b/n_creep_vulture_b.mdl" // Model. - "BaseClass" "npc_dota_creature" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" ".80" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" // Ability 1 - "Ability2" "" // Ability 2 - "Ability3" "" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "45" // Damage range min. - "AttackDamageMax" "50" // Damage range max. - "AttackRate" "1.35" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1000" // Range within a target can be acquired. - "AttackRange" "128" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "30" // Experience earn. - "BountyGoldMin" "21" // Gold earned min. - "BountyGoldMax" "24" // Gold earned max. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "220" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "500" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - } - } - - //================================================================================= - // Creature: dazzle - //================================================================================= - "npc_dota_creature_dazzle" - { - // General - //---------------------------------------------------------------- - "Model" "models/heroes/dazzle/dazzle.vmdl" - "Portrait" "vgui/hud/heroportraits/portrait_dazzle" - "IdleExpression" "scenes/dazzle/dazzle_exp_idle_01.vcd" - "SoundSet" "Hero_Dazzle" - "BaseClass" "npc_dota_creature" - "Level" "1" - "ModelScale" "1.25" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_poison_touch" - "Ability2" "creature_shallow_grave" - "Ability3" "creature_shadow_wave" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "80" - "AttackDamageMax" "90" - "AttackRate" "1.60" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "800" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_dazzle/dazzle_base_attack.vpcf" - "ProjectileSpeed" "1200" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "30" - "BountyGoldMin" "21" - "BountyGoldMax" "24" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "600" - "StatusHealthRegen" "0.5" - "StatusMana" "500" - "StatusManaRegen" "0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "ParticleFile" "particles/units/heroes/hero_dazzle.pcf" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "80.0" - "Avoidance" "0.0" - "Support" "40.0" - } - } - - "DefaultState" "Invade" - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "creature_poison_touch" - } - } - - "DefensiveAbilities" - { - "Ability3" - { - "Name" "creature_shadow_wave" - "AOE" "1" - "Heal" "1" - "Radius" "600" - "MinimumTargets" "2" - } - } - - "EscapeAbilities" - { - "Ability2" - { - "Name" "creature_shallow_grave" - "CanHelpOthersEscape" "1" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "263" // back: default - } - "Wearable2" - { - "ItemDef" "468" // misc: default - } - "Wearable3" - { - "ItemDef" "265" // legs: default - } - "Wearable4" - { - "ItemDef" "266" // arms: default - } - "Wearable5" - { - "ItemDef" "264" // weapon: default - } - } - } - } - - //================================================================================= - // Creature: Huskar - //================================================================================= - "npc_dota_creature_huskar" - { - // General - //---------------------------------------------------------------- - "Model" "models/heroes/huskar/huskar.vmdl" - "IdleExpression" "scenes/huskar/huskar_exp_idle_01.vcd" - "SoundSet" "Hero_Huskar" - "BaseClass" "npc_dota_creature" - "Level" "1" - "ModelScale" "1.5" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_berserkers_blood" - "Ability2" "creature_inner_fire" - "Ability3" "creature_life_break" - "Ability4" "creature_burning_spears" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "66" - "AttackDamageMax" "70" - "AttackRate" "1.50" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "800" - "AttackRange" "400" - "ProjectileModel" "particles/units/heroes/hero_huskar/huskar_base_attack.vpcf" - "ProjectileSpeed" "1400" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "220" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "30" - "BountyGoldMin" "21" - "BountyGoldMax" "24" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "275" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1000" - "StatusHealthRegen" "0.5" - "StatusMana" "500" - "StatusManaRegen" "0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "ParticleFile" "particles/units/heroes/hero_huskar.pcf" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "OffensiveAbilities" - { - "Ability1" - { - "Name" "creature_inner_fire" - "AOE" "1" - "Radius" "400" - "MinimumTargets" "2" - - } - "Ability3" - { - "Name" "creature_life_break" - "UseAtHealthPercent" "50" - } - - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "270" // back: default - } - "Wearable2" - { - "ItemDef" "269" // misc: default - } - "Wearable3" - { - "ItemDef" "272" // legs: default - } - "Wearable4" - { - "ItemDef" "268" // arms: default - } - "Wearable5" - { - "ItemDef" "271" // weapon: default - } - } - } - } - - - //================================================================================= - // Boss Timbersaw - //================================================================================= - "npc_dota_boss_timbersaw" - { - // Script - "vscripts" "ai/boss_timbersaw.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/shredder/shredder.vmdl" - "IdleExpression" "scenes/shredder/shredder_exp_idle_01.vcd" - "SoundSet" "Hero_Shredder" - "IdleSoundLoop" "Hero_Shredder.IdleLoop" - "Level" "1" - "ModelScale" "2.0" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "boss_timbersaw_whirling_death" - "Ability2" "boss_timbersaw_timber_chain" - "Ability3" "boss_timbersaw_reactive_armor" - "Ability4" "shredder_chakram_2" - "Ability5" "shredder_chakram" - "Ability6" "shredder_return_chakram" - "Ability7" "shredder_return_chakram_2" - "Ability8" "generic_gold_bag_fountain_4000" - "Ability9" "boss_timbersaw_chakram_dance" - "Ability10" "" - "Ability11" "" - "Ability12" "" - "Ability13" "" - "Ability14" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" - "MagicalResistance" "25" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "250" - "AttackDamageMax" "300" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.53" - "AttackAcquisitionRange" "1800" - "AttackRange" "300" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "75" - "HealthBarOffset" "250" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "1000" - "BountyGoldMin" "500" - "BountyGoldMax" "1000" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "15000" - "StatusHealthRegen" "0" - "StatusMana" "25000" - "StatusManaRegen" "250" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" - "VisionNighttimeRange" "1800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "7581" // Controlled Burn - } - "Wearable2" - { - "ItemDef" "12927" // Rectifier - } - "Wearable3" - { - "ItemDef" "9695" // Helm of the Siege Engine - } - "Wearable4" - { - "ItemDef" "9694" // Pauldrons of the Siege Engine - } - "Wearable5" - { - "ItemDef" "9693" // Hull of the Siege Engine - } - "Wearable6" - { - "ItemDef" "9692" // Armor of the Siege Engine - } - } - - "EquippedItems" - { - "Aghs" - { - "Item" "item_ultimate_scepter" - } - } - - "HPGain" "2625" - "DamageGain" "60" - } - } - - //================================================================================= - // Boss Timbersaw Treant - //================================================================================= - "npc_dota_creature_timbersaw_treant" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/heroes/furion/treant.vmdl" // Model. - "SoundSet" "Furion_Treant" // Name of sound set. - "ModelScale" "1.2" - "Level" "1" - "IsSummoned" "1" - "SelectionGroup" "Furion_Treants" - "wearable" "8363" - "UnitLabel" "treants" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "50" // Damage range min. - "AttackDamageMax" "60" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.75" // Speed of attack. - "AttackAnimationPoint" "0.467" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1000" // Range within a target can be acquired. - "AttackRange" "128" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "20" // Experience earn. - "BountyGoldMin" "16" // Gold earned min. - "BountyGoldMax" "16" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "HealthBarOffset" "170" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "365" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "200" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "500" // Range of vision during day light. - "VisionNighttimeRange" "500" // Range of vision at night time. - - "Creature" - { - } - } - - //================================================================================= - // Boss Visage - //================================================================================= - "npc_dota_boss_visage" - { - // Script - "vscripts" "ai/boss_visage.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/visage/visage.vmdl" - "IdleExpression" "scenes/visage/visage_exp_idle_01.vcd" - "SoundSet" "Hero_Visage" - "IdleSoundLoop" "Hero_Visage.IdleLoop" - "Level" "1" - "ModelScale" "2.3" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "boss_visage_ranged_attack" - "Ability2" "boss_visage_grave_chill" - "Ability3" "boss_visage_passive" - "Ability4" "generic_gold_bag_fountain_4000" - "Ability5" "ability_absolute_no_cc" - "Ability6" "" - "Ability7" "" - "Ability8" "" - "Ability9" "" - "Ability10" "" - "Ability11" "" - "Ability12" "" - "Ability13" "" - "Ability14" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "50" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.53" - "AttackAcquisitionRange" "3000" - "AttackRange" "300" - "ProjectileModel" "particles/units/heroes/hero_visage/visage_base_attack.vpcf" - "ProjectileSpeed" "9000" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "75" - "HealthBarOffset" "250" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "1000" - "BountyGoldMin" "500" - "BountyGoldMax" "1000" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "16000" - "StatusHealthRegen" "0" - "StatusMana" "25000" - "StatusManaRegen" "250" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "3000" - "VisionNighttimeRange" "3000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "UsesGestureBasedAttackAnimation" "1" - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "543" // Visage Ambient - } - "Wearable2" - { - "ItemDef" "599" // Familiars - } - "Wearable3" - { - "ItemDef" "625" // Visage Armor - } - "Wearable4" - { - "ItemDef" "624" // Visage's... Visage - } - "Wearable5" - { - "ItemDef" "600" // Familiar Ambient - } - } - - "HPGain" "2500" - "DamageGain" "50" - } - } - - //================================================================================= - // Boss Visage Familiar - //================================================================================= - "npc_dota_boss_visage_familiar" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/heroes/visage/visage_familiar.vmdl" // Model. - "SoundSet" "Visage_Familiar" // Name of sound set. - "ModelScale" "1.0" - "Level" "1" - "IsSummoned" "1" - "IsAncient" "1" - "UnitLabel" "visage_familiars" - "ConsideredHero" "0" - "wearable" "600" - - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "boss_visage_familiar_stone_form" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "50" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "35" // Damage range min. - "AttackDamageMax" "35" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0.75" // Speed of attack. - "AttackAnimationPoint" "0.33" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "3000" // Range within a target can be acquired. - "AttackRange" "160" // Range within a target can be attacked. - "ProjectileModel" "particles/units/heroes/hero_visage/visage_familiar_base_attack.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "900" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "41" // Experience earn. - "BountyGoldMin" "100" // Gold earned min. - "BountyGoldMax" "100" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "HealthBarOffset" "130" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "350" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0.0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_HERO" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" // Range of vision during day light. - "VisionNighttimeRange" "1500" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "ShouldDoFlyHeightVisual" "1" - "IsHybridFlyer" "1" - "UsesGestureBasedAttackAnimation" "1" - } - } - - //================================================================================= - // Boss Visage Familiar - //================================================================================= - "npc_dota_boss_visage_familiar_statue" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/heroes/visage/visage_familiar.vmdl" // Model. - "SoundSet" "Visage_Familiar" // Name of sound set. - "ModelScale" "1.6" - "Level" "1" - "IsSummoned" "1" - "IsAncient" "1" - "UnitLabel" "visage_familiars" - "ConsideredHero" "0" - "wearable" "600" - - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "boss_visage_familiar_stone_form" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "50" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0.4" // Speed of attack. - "AttackAnimationPoint" "0.33" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "3000" // Range within a target can be acquired. - "AttackRange" "160" // Range within a target can be attacked. - "ProjectileModel" "particles/units/heroes/hero_visage/visage_familiar_base_attack.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "900" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "41" // Experience earn. - "BountyGoldMin" "100" // Gold earned min. - "BountyGoldMax" "100" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "HealthBarOffset" "130" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "250" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "220" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0.0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_HERO" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" // Range of vision during day light. - "VisionNighttimeRange" "1500" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - } - } - - //================================================================================= - // Boss Void Spirit - //================================================================================= - "npc_dota_boss_void_spirit" - { - // Script - "vscripts" "ai/boss_void_spirit.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - - "Model" "models/heroes/void_spirit/void_spirit.vmdl" - "IdleExpression" "scenes/void_spirit/void_spirit_exp_idle_01.vcd" - "SoundSet" "Hero_VoidSpirit" - //"IdleSoundLoop" "Hero_VoidSpirit.IdleLoop" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_void_spirit.vsndevts" - "VoiceFile" "soundevents/voscripts/game_sounds_vo_void_spirit.vsndevts" - "ParticleFile" "particles/units/heroes/hero_void_spirit.pcf" - "Level" "1" - "ModelScale" "1.8" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_void_spirit_boss_aether_remnant" - "Ability2" "aghsfort_void_spirit_boss_dissimilate" - "Ability3" "aghsfort_void_spirit_boss_resonant_pulse" - "Ability4" "void_spirit_boss_activate_earth_spirits" - "Ability5" "generic_hidden" - "Ability6" "aghsfort_void_spirit_boss_astral_step" - "Ability7" "generic_gold_bag_fountain_4000" - "Ability8" "aghsfort_void_spirit_boss_passive" - "Ability9" "ability_absolute_no_cc" - "Ability10" "special_bonus_mp_regen_3" - "Ability11" "special_bonus_attack_damage_30" - "Ability12" "ability_attack_speed_unslowable" - //"Ability12" "special_bonus_unique_void_spirit_7" - //"Ability13" "special_bonus_unique_void_spirit_4" - //"Ability14" "special_bonus_spell_amplify_15" - //"Ability15" "special_bonus_unique_void_spirit_1" - "Ability16" "special_bonus_unique_void_spirit_8" // astral step crit - "Ability17" "special_bonus_unique_void_spirit_3" // dissimilate stuns - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "21" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "475" - "AttackDamageMax" "475" - "AttackRate" "1.1" - "AttackAnimationPoint" "0.35" - "AttackAcquisitionRange" "1500" - "AttackRange" "300" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "75" - "HealthBarOffset" "340" - "BoundsHullName" "DOTA_HULL_SIZE_LARGE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "350" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "43000" - "StatusHealthRegen" "0" - "StatusMana" "25000" - "StatusManaRegen" "250" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1500" - "VisionNighttimeRange" "1500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "686" // default weapon - } - "Wearable2" - { - "ItemDef" "687" // default head - } - "Wearable3" - { - "ItemDef" "689" // default belt - } - "Wearable4" - { - "ItemDef" "690" // default ambient effects - } - //"Wearable5" - //{ - //"ItemDef" "688" // default armor [busted] - //} - } - - "EquippedItems" - { - "Aghs" - { - "Item" "item_ultimate_scepter" - } - "MKB" - { - "Item" "item_monkey_king_bar" - } - } - - "HPGain" "7050" - "DamageGain" "115" - } - } - - //================================================================================= - // Earth Spirit Statue - //================================================================================= - "npc_dota_earth_spirit_statue" - { - // Script - "vscripts" "ai/earth_spirit_statue.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - - "Model" "models/heroes/earth_spirit/earth_spirit.vmdl" - "IdleExpression" "scenes/earth_spirit/earth_spirit_exp_idle_01.vcd" - "SoundSet" "Hero_EarthSpirit" - //"IdleSoundLoop" "Hero_EarthSpirit.IdleLoop" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_earth_spirit.vsndevts" - "particle_folder" "particles/units/heroes/hero_earth_spirit" - "VoiceFile" "soundevents/voscripts/game_sounds_vo_earth_spirit.vsndevts" - "ParticleFile" "particles/units/heroes/hero_earth_spirit.pcf" - "Level" "1" - "ModelScale" "1.2" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_earth_spirit_boss_boulder_smash" - "Ability2" "aghsfort_earth_spirit_boss_rolling_boulder" - "Ability3" "aghsfort_earth_spirit_boss_geomagnetic_grip" - "Ability4" "aghsfort_earth_spirit_boss_stone_caller" - "Ability5" "aghsfort_earth_spirit_boss_petrify" - "Ability6" "aghsfort_earth_spirit_boss_magnetize" - "Ability7" "earth_spirit_statue_passive" // lua - "Ability10" "special_bonus_unique_earth_spirit_4" - "Ability11" "special_bonus_attack_damage_50" - "Ability12" "special_bonus_armor_6" - "Ability13" "special_bonus_unique_earth_spirit" - "Ability14" "special_bonus_spell_amplify_16" - "Ability15" "special_bonus_unique_earth_spirit_5" - "Ability16" "special_bonus_unique_earth_spirit_2" - "Ability17" "special_bonus_unique_earth_spirit_3" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "40" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "100" - "AttackDamageMax" "100" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.35" - "AttackAcquisitionRange" "2500" - "AttackRange" "200" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "75" - "HealthBarOffset" "340" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "250" - "MovementTurnRate" "0.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "25000" - "StatusHealthRegen" "5" - "StatusMana" "25000" - "StatusManaRegen" "250" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "2500" - "VisionNighttimeRange" "2500" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //"HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "481" // arms: default - //"ItemDef" "8712" // arms: Arms of the Jade General - } - "Wearable2" - { - "ItemDef" "479" // belt: default - //"ItemDef" "8903" // belt: Belt of the Jade General - } - "Wearable3" - { - // This unit has no face for some reason.. - "ItemDef" "13389" // head: Helm of the Jade Emissary - //"ItemDef" "7185" // head: Kabuto of Bedrock Serenity - //"ItemDef" "8904" // head: Style of the Jade General - //"ItemDef" "477" // head: default - } - "Wearable4" - { - "ItemDef" "480" // neck: default - //"ItemDef" "8905" // neck: Armor of the Jade General - } - "Wearable5" - { - "ItemDef" "475" // staff: default - //"ItemDef" "8906" // Staff of the Jade General - } - } - - //"EquippedItems" - //{ - //"Aghs" - //{ - //"Item" "item_ultimate_scepter" - //} - //} - - - } - } - - "npc_dota_aghsfort_earth_spirit_boss_stone" - { - // General - //---------------------------------------------------------------- - "Model" "models/heroes/attachto_ghost/attachto_ghost.vmdl" - "SoundSet" "0" - "Level" "4" - "ModelScale" "24" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.0" - "AttackAnimationPoint" "0.0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_FLY" - "MovementSpeed" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" - "StatusHealthRegen" "0.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "0" - "VisionNighttimeRange" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - } - - //================================================================================= - // Creature: Bomber - //================================================================================= - "npc_dota_creature_bomber" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/rattletrap/rattletrap.vmdl" - "SoundSet" "Hero_Rattletrap" - "Level" "1" - "ModelScale" "0.8" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_techies.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "bomber_death_explosion" - //"Ability2" "bomber_suicide_on_attack" // disabling this - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "5" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "57" - "AttackDamageMax" "74" - "AttackRate" "1.4" - "AttackAnimationPoint" "0.33" - "AttackAcquisitionRange" "500" - "AttackRange" "100" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - "RingRadius" "45" - "HealthBarOffset" "130" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "125" - "StatusHealthRegen" "1.0" - "StatusMana" "100" - "StatusManaRegen" "3.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "900" - "VisionNighttimeRange" "900" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.4" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "AttachWearables" - { - //"Wearable1" - //{ - // "ItemDef" "231" // rocket: default - //} - "Wearable2" - { - "ItemDef" "446" // weapon: default - } - "Wearable3" - { - "ItemDef" "484" // armor: default - } - "Wearable4" - { - "ItemDef" "485" // head: default - } - } - - "DisableClumpingBehavior" "1" - } - } - - //================================================================================= - // Gyrocopter Captain - //================================================================================= - "npc_dota_creature_gyrocopter" - { - "BaseClass" "npc_dota_creature" - "RunAIWhenControllableByPlayer" "1" - "ConsideredHero" "1" - - "Model" "models/heroes/gyro/gyro.vmdl" - "SoundSet" "Hero_Gyrocopter" - "IdleSoundLoop" "Hero_Gyrocopter.IdleLoop" - "ModelScale" "1.1" - "GibType" "motor" - - "Level" "1" - - "ArmorPhysical" "2" - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "BaseAttackSpeed" "125" - "AttackDamageMin" "60" - "AttackDamageMax" "80" - "AttackRate" "1.700000" - "AttackAnimationPoint" "0.200000" - "AttackAcquisitionRange" "800" - "AttackRange" "550" - "ProjectileSpeed" "3000" - "ProjectileModel" "particles/units/heroes/hero_gyrocopter/gyro_base_attack.vpcf" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "gyrocopter_multi_homing_missile" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "100" - "HealthBarOffset" "250" - - "particle_folder" "particles/units/heroes/hero_gyrocopter" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_gyrocopter.vsndevts" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - "MovementTurnRate" "0.600000" - "HasAggressiveStance" "1" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "300" - "StatusHealthRegen" "0.0" - "StatusMana" "100" - "StatusManaRegen" "3.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "900" - "VisionNighttimeRange" "900" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.4" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "gyrocopter_multi_homing_missile" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "126" // bottles: default - } - "Wearable2" - { - "ItemDef" "131" // head: default - } - "Wearable3" - { - "ItemDef" "176" // goggles: default - } - "Wearable4" - { - "ItemDef" "177" // guns: default - } - "Wearable5" - { - "ItemDef" "178" // propellor: default - } - "Wearable6" - { - "ItemDef" "179" // homing missile: default - } - "Wearable7" - { - "ItemDef" "527" // ambient effects: default - } - } - } - } - - "npc_dota_creature_gyrocopter_homing_missile" - { - // General - //---------------------------------------------------------------- - "Model" "models/heroes/gyro/gyro_missile.vmdl" // Model. - "BaseClass" "npc_dota_base_additive" - "SoundSet" "0" // Name of sound set. - "Level" "1" - "ModelScale" "1.5" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" // Ability 1 - "Ability2" "" // Ability 2 - "Ability3" "" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackRate" "1.0" // Speed of attack. - "AttackAnimationPoint" "0.0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "HealthBarOffset" "220" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "0" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "25" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "400" // Range of vision during day light. - "VisionNighttimeRange" "400" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - - //================================================================================= - // Shadow Demon - //================================================================================= - "npc_dota_creature_shadow_demon" - { - // Script - "vscripts" "ai/ai_shadow_demon.lua" - - "BaseClass" "npc_dota_creature" - "RunAIWhenControllableByPlayer" "1" - "ConsideredHero" "1" - - "Model" "models/heroes/shadow_demon/shadow_demon.vmdl" - "SoundSet" "Hero_ShadowDemon" - "ModelScale" "0.840000" - "GibType" "ethereal" - "GibTintColor" "148 68 121 255" - - "Level" "1" - - "ArmorPhysical" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "BaseAttackSpeed" "75" - "AttackDamageMin" "125" - "AttackDamageMax" "155" - "AttackRate" "1.700000" - "AttackAnimationPoint" "0.350000" - "AttackAcquisitionRange" "1200" - "AttackRange" "850" - "ProjectileModel" "particles/units/heroes/hero_shadow_demon/shadow_demon_base_attack.vpcf" - "ProjectileSpeed" "900" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_shadow_demon_disruption" - //"Ability2" "aghsfort_shadow_demon_shadow_poison" // disabling due to difficulty in communication - - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "100" - "HealthBarOffset" "275" - - "particle_folder" "particles/units/heroes/hero_shadow_demon" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_shadow_demon.vsndevts" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "330" - "MovementTurnRate" "0.600000" - "HasAggressiveStance" "1" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "3500" - "StatusHealthRegen" "0.0" - "StatusMana" "1000" - "StatusManaRegen" "3.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1100" - "VisionNighttimeRange" "1100" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.4" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "13152" // "Tail of Depraved Malformation" - } - "Wearable2" - { - "ItemDef" "13153" // "Grasp of Depraved Malformation" - } - "Wearable3" - { - "ItemDef" "13154" // "Armor of Depraved Malformation" - } - "Wearable4" - { - "ItemDef" "13155" // "Belt of Depraved Malformation" - } - "Wearable5" - { - "ItemDef" "545" // "Shadow Demon's Ambient Effects" - } - } - } - } - - //================================================================================= - // Doom - //================================================================================= - "npc_dota_creature_doom" - { - // Script - "vscripts" "ai/ai_doom.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/heroes/doom/doom.vmdl" - "SoundSet" "Hero_DoomBringer" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_doombringer.vsndevts" - "Level" "1" - "ModelScale" "1.2" - "ConsideredHero" "1" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_doom_infernal_blade" - "Ability2" "creature_doom_bringer_doom" - "Ability3" "ability_attack_speed_unslowable" - "Ability4" "creature_generic_high_status_resist_passive" - "Ability5" "ability_absolute_no_cc" - "Ability6" "" - "Ability7" "" - "Ability8" "" - "Ability9" "" - "Ability10" "" - "Ability11" "" - "Ability12" "" - "Ability13" "" - "Ability14" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "15" - "MagicalResistance" "10" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "400" - "AttackDamageMax" "550" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "1800" - "AttackRange" "175" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_LARGE" - "RingRadius" "70" - "HealthBarOffset" "300" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "310" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "12000" - "StatusHealthRegen" "0" - "StatusMana" "25000" - "StatusManaRegen" "0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" - "VisionNighttimeRange" "1800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "1" - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "6632" - } - "Wearable2" - { - "ItemDef" "6821" - } - "Wearable3" - { - "ItemDef" "6822" - } - "Wearable4" - { - "ItemDef" "6885" - } - "Wearable5" - { - "ItemDef" "6887" - } - "Wearable6" - { - "ItemDef" "6888" - } - "Wearable7" - { - "ItemDef" "6947" - } - } - } - } - - //================================================================================= - // Creature: Necro Warrior - //================================================================================= - "npc_dota_creature_necro_warrior" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/item_creeps/i_creep_necro_warrior/necro_warrior.vmdl" // Model. - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "0.5" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "4" - "MagicalResistance" "20" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "100" - "AttackDamageMax" "140" - "AttackRate" "0.75" - "AttackAnimationPoint" "0.56" - "AttackAcquisitionRange" "3000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "310" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "800" - "StatusHealthRegen" "0.0" - "StatusMana" "500" - "StatusManaRegen" "0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "3000" - "VisionNighttimeRange" "3000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - - //================================================================================= - // Creature: Shadow Shaman - //================================================================================= - "npc_dota_creature_shadow_shaman" - { - // Script - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "RunAIWhenControllableByPlayer" "1" - - "Model" "models/heroes/shadowshaman/shadowshaman.vmdl" - "SoundSet" "Hero_ShadowShaman" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_shadowshaman.vsndevts" - "Level" "1" - "ModelScale" "1.2" - "IsNeutralUnitType" "1" - - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_shadow_shaman_shackles" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "33" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "65" - "AttackDamageMax" "70" - "AttackRate" "1.35" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "3000" - "AttackRange" "400" - "ProjectileModel" "particles/units/heroes/hero_shadowshaman/shadowshaman_base_attack.vpcf" - "ProjectileSpeed" "900" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "160" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "350" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1000" - "StatusHealthRegen" "0.5" - "StatusMana" "350" - "StatusManaRegen" "1" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "3000" - "VisionNighttimeRange" "3000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "aghsfort_shadow_shaman_shackles" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "13367" // "Bogmarch Mask" - } - "Wearable2" - { - "ItemDef" "13368" // "Bogmarch Barrel" - } - "Wearable3" - { - "ItemDef" "13369" // "Bogmarch Garb" - } - "Wearable4" - { - "ItemDef" "13366" // "Bogmarch Charm" - } - "Wearable5" - { - "ItemDef" "13365" // "Bogmarch Ward" - } - "Wearable6" - { - "ItemDef" "13364" // "Bogmarch Wand" - } - } - } - } - - "npc_dota_creature_shroomling" - { - // General - // - "vscripts" "ai/ai_shroomling.lua" - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/furion/treant/shroomling_treant/shroomling_treant.vmdl" // Model. - "SoundSet" "Furion_Treant" // Name of sound set. - "ModelScale" "0.90" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "140" // Damage range min. - "AttackDamageMax" "150" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0.90" // Speed of attack. - "AttackAnimationPoint" "0.467" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "5000" // Range within a target can be acquired. - "AttackRange" "100" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "HealthBarOffset" "170" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "280" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "900" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "100" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "5000" // Range of vision during day light. - "VisionNighttimeRange" "5000" // Range of vision at night time. - } - - "npc_dota_creature_shroom_giant" - { - // General - // - //"vscripts" "ai/ai_shroom_giant.lua" - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/furion/treant/fungal_lord_shroomthing/fungal_lord_shroomthing.vmdl" // Model. - "SoundSet" "Furion_Treant" // Name of sound set. - "ModelScale" "1.75" - "Level" "1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "mushroom_split" // Ability 1. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "380" // Damage range min. - "AttackDamageMax" "405" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.10" // Speed of attack. - "AttackAnimationPoint" "0.467" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "900" // Range within a target can be acquired. - "AttackRange" "150" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "RingRadius" "100" - "HealthBarOffset" "250" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "280" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "6600" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "100" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - } - - //================================================================================= - // Dark Portal - //================================================================================= - "npc_aghsfort_dark_portal" - { - // General - // - "BaseClass" "npc_dota_building" - "Model" "models/props_structures/good_statue010.vmdl" - "SoundSet" "Creep_Good_Melee" - "MinimapIcon" "minimap_miscbuilding" - "destroysound" "Building_RadiantTower.Destruction" - "destroyfx" "particles/radiant_fx/radiant_statue001_destruction.vpcf" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "6" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_FILLER" - "RingRadius" "100" - "HealthBarOffset" "275" - "MinimapIconSize" "375" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "50" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "300" - "VisionNighttimeRange" "300" - } - - //================================================================================= - // Dark Portal - //================================================================================= - "npc_aghsfort_dark_portal_v2" - { - // General - // - "BaseClass" "npc_dota_building" - "Model" "models/props_structures/bad_statue001.vmdl" - "SoundSet" "Creep_Good_Melee" - "MinimapIcon" "minimap_miscbuilding" - "destroysound" "Building_DireTower.Destruction" - "destroyfx" "particles/dire_fx/statue001_bad_destroy.vpcf" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "6" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_FILLER" - "RingRadius" "100" - "HealthBarOffset" "275" - "MinimapIconSize" "375" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "50" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "300" - "VisionNighttimeRange" "300" - } - - //================================================================================= - // Creature: Bonus Chicken - //================================================================================= - "npc_dota_creature_bonus_chicken" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/items/courier/mighty_chicken/mighty_chicken.vmdl" - "SoundSet" "n_creep_Melee" - "ModelScale" "2.5" - "IsNeutralUnitType" "1" - "IsAncient" "1" - "ConsideredHero" "1" - "HasInventory" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_bonus_chicken" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "22" - "AttackDamageMax" "24" - "AttackRate" "1.45" - "AttackAnimationPoint" "0.33" - "AttackAcquisitionRange" "500" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "45" - "HealthBarOffset" "150" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "62" - "BountyGoldMin" "22" - "BountyGoldMax" "26" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "500" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1" - "StatusHealthRegen" "0.5" - "StatusMana" "60000" - "StatusManaRegen" "500" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "450" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "EquippedItems" - { - "Travels" - { - "Item" "item_travel_boots" - } - } - } - } - - //================================================================================= - // Blast Wave Tower - //================================================================================= - "npc_aghsfort_tower_blast_wave" - { - // General - // - "BaseClass" "npc_dota_building" // Class of entity of link to. - "Model" "models/props_structures/good_statue010.vmdl" // Model. - "SoundSet" "Creep_Good_Melee" // Name of sound set. - "MinimapIcon" "minimap_miscbuilding" - - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "aghsfort_tower_blast_wave"// Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "15" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" // Speed of attack. - "AttackAnimationPoint" "0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_FILLER" // Hull type used for navigation/locomotion. - "RingRadius" "100" - "HealthBarOffset" "275" - "MinimapIconSize" "375" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "50" // Base health. - "StatusHealthRegen" "1" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "100" // Range of vision during day light. - "VisionNighttimeRange" "100" // Range of vision at night time. - } - - //================================================================================= - // Free Morty - //================================================================================= - "npc_aghsfort_morty" - { - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/snapfire/snapfire_customgame.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Snapfire" - "GameSoundsFile" "soundevents/game_sounds_creeps.vsndevts" - "Level" "1" - "ModelScale" "0.58" - "ConsideredHero" "1" - "IsAncient" "1" - "skin" "1" - - "MinimapIcon" "minimap_enemyicon" - "MinimapIconSize" "275" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "morty_hop" - "Ability2" "morty_hop_launch" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "70" - "AttackDamageMax" "80" - "AttackRate" "2.8" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "500" - "AttackRange" "1" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "60" - "HealthBarOffset" "240" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" - "BountyGoldMin" "65" - "BountyGoldMax" "75" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "0" - "MovementTurnRate" "0.2" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "500" - "StatusHealthRegen" "2" - "StatusMana" "400" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "694" // Morty - } - } - } - } - - //================================================================================= - // Splitter A - //================================================================================= - "npc_dota_creature_rock_golem_a" - { - // Script - "vscripts" "ai/big_golem.lua" - - // General - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/neutral_creeps/n_creep_golem_a/neutral_creep_golem_a.vmdl" - "ModelScale" "1.8" - "Level" "1" - "CanBeDominated" "0" - "ConsideredHero" "1" - "SoundSet" "n_creep_Melee" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "rock_golem_split_a" - "Ability2" "aghsfort_rock_golem_smash" - "Ability3" "ability_absolute_no_cc" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "12" - "MagicalResistance" "60" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "690" - "AttackDamageMax" "710" - "AttackRate" "1.6" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1400" - "AttackRange" "128" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "410" - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "150" - "MovementTurnRate" "0.5" - - //"VoiceFile" "soundevents/voscripts/game_sounds_vo_life_stealer.vsndevts" - //"GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_life_stealer.vsndevts" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4000" - "StatusHealthRegen" "0.0" - "StatusMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" - "VisionNighttimeRange" "1400" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - "RoamDistance" "150.0" - } - } - - "DefaultState" "Invade" - } - } - - //================================================================================= - // Splitter B - //================================================================================= - "npc_dota_creature_rock_golem_b" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/neutral_creeps/n_creep_golem_b/n_creep_golem_b.vmdl" // Model. - "ModelScale" "1.2" - "Level" "1" - "CanBeDominated" "0" - "ConsideredHero" "1" - "SoundSet" "n_creep_Melee" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "rock_golem_split_b" // Ability 1. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "8" // Physical protection. - "MagicalResistance" "45" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "480" // Damage range min. - "AttackDamageMax" "480" // Damage range max. - "AttackRate" "1.0" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "700" // Range within a target can be acquired. - "AttackRange" "60" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "240" - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "240" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - "VoiceFile" "soundevents/voscripts/game_sounds_vo_life_stealer.vsndevts" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_life_stealer.vsndevts" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1800" // Base health. - "StatusHealthRegen" "1.0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" // Range of vision during day light. - "VisionNighttimeRange" "1400" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - "RoamDistance" "150.0" - } - } - - "DefaultState" "Invade" - - "DisableClumpingBehavior" "1" - } - } - - //================================================================================= - // Splitter C - //================================================================================= - "npc_dota_creature_rock_golem_c" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/neutral_creeps/n_creep_golem_b/n_creep_golem_b.vmdl" // Model. - "ModelScale" "0.6" - "Level" "1" - "SoundSet" "n_creep_Melee" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "4" // Physical protection. - "MagicalResistance" "30" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "300" // Damage range min. - "AttackDamageMax" "300" // Damage range max. - "AttackRate" "0.4" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "500" // Range within a target can be acquired. - "AttackRange" "40" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "15" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "20" - "HealthBarOffset" "125" - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "300" // Speed - "MovementTurnRate" "1.0" // Turning rate. - - "VoiceFile" "soundevents/voscripts/game_sounds_vo_life_stealer.vsndevts" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_life_stealer.vsndevts" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "450" // Base health. - "StatusHealthRegen" "1.0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" // Range of vision during day light. - "VisionNighttimeRange" "1400" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - "RoamDistance" "150.0" - } - } - - "DefaultState" "Invade" - - "DisableClumpingBehavior" "1" - } - } - - - //================================================================================= - // Creature: Bomb Squad - //================================================================================= - "npc_aghsfort_creature_bomb_squad" - { - // Script - "vscripts" "ai/bomb_squad_ai.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/techies/techies.vmdl" - "SoundSet" "Hero_Techies" - "IdleSoundLoop" "Hero_Techies.IdleLoop" - "Level" "1" - "ModelScale" "0.9" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - //"Ability1" "bomb_squad_self_cast" - "Ability1" "bomb_squad_mine_charge" - "Ability2" "bomb_squad_stasis_launch" - - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "15" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "35" - "AttackDamageMax" "37" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "500" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf" - "ProjectileSpeed" "400" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "350" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "6000" - "StatusHealthRegen" "1" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "DisableResistance" "100" - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "12833" // Spleen - } - "Wearable2" - { - "ItemDef" "12834" // Cannon - } - "Wearable3" - { - "ItemDef" "12835" // arms - } - "Wearable4" - { - "ItemDef" "12836" // sled - } - "Wearable5" - { - "ItemDef" "12839" // shoulder - } - "Wearable6" - { - "ItemDef" "12840" // back - } - } - } - } - - //================================================================================= - // Creature: Bomb Squad Landmine - //================================================================================= - "npc_aghsfort_creature_bomb_squad_landmine" - { - // Script - "vscripts" "ai/bomb_squad_landmine_ai.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/items/techies/frostivus2018_techies_squad_penguins_bomb/frostivus2018_techies_squad_penguins_bomb.vmdl" - "SoundSet" "Hero_Techies" - "IdleSoundLoop" "Hero_Techies.IdleLoop" - "Level" "1" - "ModelScale" "0.8" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "bomb_squad_landmine_detonate" - - - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "1000" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "35" - "AttackDamageMax" "37" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "500" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf" - "ProjectileSpeed" "400" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "50" - "StatusHealthRegen" "1" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - } - } - //================================================================================= - // Creature: Bomb Squad Landmine - //================================================================================= - "npc_aghsfort_creature_bomb_squad_stasis_trap" - { - // Script - - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/techies/fx_techiesfx_stasis.vmdl" - "SoundSet" "Hero_Techies" - "IdleSoundLoop" "Hero_Techies.IdleLoop" - "Level" "1" - "ModelScale" "1.1" - - - // Abilities - //---------------------------------------------------------------- - //"Ability1" "bomb_squad_landmine_detonate" - - - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "1000" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "35" - "AttackDamageMax" "37" - "AttackRate" "1.5" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "500" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf" - "ProjectileSpeed" "400" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "50" - "StatusHealthRegen" "1" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - } - } - //================================================================================= - // Creature: Walrus Pudge - //================================================================================= - "npc_aghsfort_creature_walrus_pudge" - { - // Script - "vscripts" "ai/walrus_pudge_ai.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/pudge/pudge.vmdl" - "SoundSet" "Hero_Pudge" - "IdleSoundLoop" "Hero_Pudge.IdleLoop" - "Level" "1" - "ModelScale" "1.2" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_walrus_pudge_harpoon" - - - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "20" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "820" - "AttackDamageMax" "920" - "AttackRate" "0.9" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "500" - "AttackRange" "150" - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "380" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "9500" - "StatusHealthRegen" "1" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "DisableResistance" "25.0" - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "12803" // Arm - } - "Wearable2" - { - "ItemDef" "12804" // bracer - } - "Wearable3" - { - "ItemDef" "12805" // shoulder - } - "Wearable4" - { - "ItemDef" "12806" // belt - } - "Wearable5" - { - "ItemDef" "12807" // offhand - } - "Wearable6" - { - "ItemDef" "12808" // head - } - "Wearable7" - { - "ItemDef" "12809" // hook - } - } - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - - "DefaultState" "Invade" - } - } - - //================================================================================= - // Assault Bad Melee Creep - //================================================================================= - "npc_dota_assault_bad_melee_creep" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/lane_creeps/creep_bad_melee/creep_bad_melee_mega.vmdl" // Model. - "SoundSet" "Creep_Bad_Melee_Mega" // Name of sound set. - "ModelScale" "1.5" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "8" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "75" // Damage range min. - "AttackDamageMax" "105" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" // Speed of attack. - "AttackAnimationPoint" "0.467" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "900" // Range within a target can be acquired. - "AttackRange" "100" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "RingRadius" "45" - "HealthBarOffset" "200" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "300" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1000" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "850" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - - "PathfindingSearchDepthScale" "0.1" - } - - //================================================================================= - // Assault Bad Ranged Creep - //================================================================================= - "npc_dota_assault_bad_ranged_creep" - { - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/lane_creeps/creep_bad_ranged/lane_dire_ranged_mega.vmdl" // Model. - "SoundSet" "Tower.Fire" // Name of sound set. - "ModelScale" "1.3" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "4" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "90" // Damage range min. - "AttackDamageMax" "120" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" // Speed of attack. - "AttackAnimationPoint" "0.5" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1200" // Range within a target can be acquired. - "AttackRange" "600" // Range within a target can be attacked. - "ProjectileModel" "particles/base_attacks/ranged_tower_bad.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "900" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - "RingRadius" "45" - "HealthBarOffset" "150" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "300" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "700" // Base health. - "StatusHealthRegen" "2" // Health regeneration rate. - "StatusMana" "500" // Base mana. - "StatusManaRegen" "0.75" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_PIERCE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "850" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - - "PathfindingSearchDepthScale" "0.1" - } - - //================================================================================= - // Catapult - //================================================================================= - "npc_dota_creature_catapult" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/ai_catapult.lua" - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/lane_creeps/creep_bad_siege/creep_bad_siege.mdl" // Model. - "SoundSet" "Creep_Bad_Engine" // Name of sound set. - "MinimapIcon" "minimap_siege" - "MinimapIconSize" "250" - "ModelScale" "1.0" - "Level" "1" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "catapult_attack" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" // Physical protection. - "MagicalResistance" "25" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "100.0" // Speed of attack. - "AttackAnimationPoint" "0.7" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1500" // Range within a target can be acquired. - "AttackRange" "1500" // Range within a target can be attacked. - "ProjectileModel" "ranged_siege_bad" // Particle system model for projectile. - "ProjectileSpeed" "1100" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SIEGE" // Hull type used for navigation/locomotion. - "RingRadius" "80" - "HealthBarOffset" "160" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1300" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "1500" // Base mana. - "StatusManaRegen" "5" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_SIEGE" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "2500" // Range of vision during day light. - "VisionNighttimeRange" "2500" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - - //================================================================================= - // Upheaval Urn - //================================================================================= - "npc_dota_creature_upheaval_urn" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/ai_upheaval_urn.lua" - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/gameplay/breakingvase_dest.vmdl" // Model - "SoundSet" "Creep_Bad_Engine" // Name of sound set. - "ModelScale" "1.0" - "Level" "1" - - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_warlock.vsndevts" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "urn_upheaval" // Ability 1. - "Ability2" "upheaval_urn_incoming_damage_rules" // Ability 2. - "Ability3" "no_health_bar" // Ability 3. - "Ability4" "modifier_no_minimap" // Ability 4. - "Ability5" "" //"upheaval_urn_reincarnation" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" // Physical protection. - "MagicalResistance" "25" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackAcquisitionRange" "1500" // Range within a target can be acquired. - "AttackRange" "1500" // Range within a target can be attacked. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SIEGE" // Hull type used for navigation/locomotion. - "RingRadius" "80" - "HealthBarOffset" "160" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "3" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "2500" // Range of vision during day light. - "VisionNighttimeRange" "2500" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "1" - - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - - //================================================================================= - // Dire Assault Captain - //================================================================================= - "npc_aghsfort_creature_dire_assault_captain" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/ai_assault_captain.lua" - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/lane_creeps/creep_dire_hulk/creep_dire_ancient_hulk.vmdl" - "SoundSet" "Creep_Good_Melee_Mega" - "ModelScale" "1.5" - "Level" "1" - "ConsideredHero" "1" - "MinimapIcon" "minimap_ancient" - "MinimapIconSize" "200" - "RunAIWhenControllableByPlayer" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "assault_captain_sun_ray" - "Ability2" "assault_captain_searing_chains" - "Ability3" "" - "Ability4" "" - "Ability5" "" - "Ability6" "" - "Ability7" "" - "Ability8" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "20" - "MagicalResistance" "20" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "160" - "AttackDamageMax" "220" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" - "AttackAnimationPoint" "0.467" - "AttackAcquisitionRange" "800" - "AttackRange" "130" - "ProjectileModel" "" - "ProjectileSpeed" "" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "380" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "320" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "5000" - "StatusHealthRegen" "0" - "StatusMana" "6000" - "StatusManaRegen" "30" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1200" - "VisionNighttimeRange" "1200" - - //Inventory - "HasInventory" "1" - "Creature" - { - //Basic AI State - //------------------------------------------------------------ - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "70.0" - "Avoidance" "0.0" - "Support" "50.0" - } - } - - "DisableResistance" "100.0" - - "EquippedItems" - { - "Assault" - { - "Item" "item_assault" - } - "Blademail" - { - "Item" "item_blade_mail" - } - //"Octarine" - //{ - // "Item" "item_octarine_core" - //} - "MKB" - { - "Item" "item_monkey_king_bar" - } - } - } - } - - //================================================================================= - // Creature: Luna - //================================================================================= - "npc_dota_creature_luna_mini" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/luna/luna.vmdl" - "SoundSet" "Hero_Luna" - "Level" "1" - "ModelScale" "0.5" - "GameSoundsFile" "soundevents/game_sounds_heroes/gamE_sounds_luna.vsndevts" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "luna_moon_glaive" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "25" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "120" - "AttackDamageMax" "120" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.46" - "AttackAcquisitionRange" "1000" - "AttackRange" "250" - "ProjectileModel" "particles/units/heroes/hero_luna/luna_base_attack.vpcf" - "ProjectileSpeed" "900" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "130" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "320" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "450" - "StatusHealthRegen" "2.0" - "StatusMana" "400" - "StatusManaRegen" "5.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "80.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "448" - } - "Wearable2" - { - "ItemDef" "449" - } - "Wearable3" - { - "ItemDef" "450" - } - "Wearable4" - { - "ItemDef" "451" - } - "Wearable5" - { - "ItemDef" "452" - } - "Wearable6" - { - "ItemDef" "453" - } - } - } - } - - - //================================================================================= - // Creature: Mirana - // Round 12 - //================================================================================= - "npc_dota_creature_mirana" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/mirana/mirana.vmdl" - "SoundSet" "Hero_Mirana" - "Level" "1" - "ModelScale" "1.1" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_mirana.vsndevts" - "ConsideredHero" "1" - //"IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "mirana_starfall" - "Ability2" "mirana_arrow" - "Ability3" "mirana_leap" - "Ability4" "mirana_invis" - "Ability5" "" // creature_mirana_global_vision - "Ability6" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "25" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "125" - "AttackDamageMax" "150" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "15000" - "AttackRange" "600" - "ProjectileModel" "particles/units/heroes/hero_mirana/mirana_base_attack.vpcf" - "ProjectileSpeed" "900" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "210" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "330" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "900" - "StatusHealthRegen" "10.0" - "StatusMana" "2000" - "StatusManaRegen" "10.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "15000" - "VisionNighttimeRange" "15000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - "vscripts" "ai/mirana_ai.lua" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "50.0" - } - } - - "EquippedItems" - { - "PhaseBoots" - { - "Item" "item_phase_boots" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "6658" // weapon: Crescent Bow - } - "Wearable2" - { - "ItemDef" "404" - } - "Wearable3" - { - "ItemDef" "405" - } - "Wearable4" - { - "ItemDef" "406" - } - "Wearable5" - { - "ItemDef" "407" - } - "Wearable6" - { - "ItemDef" "408" - } - } - } - } - - //================================================================================= - // Creature: Alchemist - //================================================================================= - "npc_dota_creature_alchemist" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/alchemist_ai.lua" - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/alchemist/alchemist.vmdl" - "SoundSet" "Hero_Alchemist" - "Level" "1" - "ModelScale" "1.4" - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_alchemist.vsndevts" - "ConsideredHero" "1" - "IsAncient" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "alchemist_acid_spray" - "Ability2" "alchemist_unstable_concoction" - "Ability3" "alchemist_goblins_greed" - "Ability4" "alchemist_chemical_rage" - "Ability5" "alchemist_unstable_concoction_throw" - "Ability6" "creature_generic_high_status_resist_passive" - "Ability7" "ability_absolute_no_cc" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "30" - "MagicalResistance" "25" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "550" - "AttackDamageMax" "550" - "AttackRate" "1.2" - "AttackAnimationPoint" "0.35" - "AttackAcquisitionRange" "1200" - "AttackRange" "170" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "210" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "220" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "16000" - "StatusHealthRegen" "0" - "StatusMana" "2000" - "StatusManaRegen" "30.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "70.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DisableClumpingBehavior" "1" - - "EquippedItems" - { - "ShivasGuard" - { - "Item" "item_shivas_guard" - } - "PhaseBoots" - { - "Item" "item_phase_boots" - } - "MKB" - { - "Item" "item_monkey_king_bar" - } - } - - "DisableResistance" "50.0" - "UltimateDisableResistance" "50.0" - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "117" - } - "Wearable2" - { - "ItemDef" "118" - } - "Wearable3" - { - "ItemDef" "119" - } - "Wearable4" - { - "ItemDef" "120" - } - "Wearable5" - { - "ItemDef" "121" - } - "Wearable6" - { - "ItemDef" "122" - } - "Wearable7" - { - "ItemDef" "123" - } - "Wearable8" - { - "ItemDef" "124" - } - } - } - } - - //================================================================================= - // Neutral: Enraged Wildkin - //================================================================================= - "npc_aghsfort_creature_enraged_wildwing" - { - // General - //---------------------------------------------------------------- - "vscripts" "ai/enraged_wildwing_ai.lua" - - "Model" "models/creeps/neutral_creeps/n_creep_vulture_a/n_creep_vulture_a.vmdl" // Model. - "BaseClass" "npc_dota_creature" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.4" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "enraged_wildwing_create_tornado" // Ability 1 - //"Ability2" "aghsfort_wildwing_tornado_blast" // Ability 2 - "Ability2" "aghsfort_enraged_wildwing_tornado_blast" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "4" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "800" - "AttackDamageMax" "900" - "AttackRate" "0.9" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1200" // Range within a target can be acquired. - "AttackRange" "150" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "220" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "90" // Experience earn. - "BountyGoldMin" "54" // Gold earned min. - "BountyGoldMax" "70" // Gold earned max. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "320" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "22000" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "400" // Base mana. - "StatusManaRegen" "1" // Mana regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "2400" // Range of vision during day light. - "VisionNighttimeRange" "2400" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "DisableResistance" "95.0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - - - "npc_aghsfort_creature_enraged_wildwing_tornado" - { - // General - // - "BaseClass" "npc_dota_base_additive" // Class of entity of link to. - "Model" "models/heroes/attachto_ghost/attachto_ghost.vmdl" // Model. - "SoundSet" "Creep_Good_Melee" // Name of sound set. - "ModelScale" "16.0" - "Level" "1" - "IsSummoned" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "enraged_wildkin_tornado_passive" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //------------------------------------------e---------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "HealthBarOffset" "140" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_FLY" // Type of locomotion - ground, air - "MovementSpeed" "125" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "500" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "300" // Range of vision during day light. - "VisionNighttimeRange" "300" // Range of vision at night time. - } - - //================================================================================= - // Neutral: Harpy Storm - //================================================================================= - "npc_aghsfort_creature_tornado_harpy" - { - // General - //---------------------------------------------------------------- - - //---------------------------------------------------------------- - "vscripts" "ai/tornado_harpy_ai.lua" - "Model" "models/creeps/neutral_creeps/n_creep_harpy_b/n_creep_harpy_b.vmdl" // Model. - "BaseClass" "npc_dota_creature" - "SoundSet" "n_creep_Ranged" - "Level" "1" - "ModelScale" "0.55" - "IsNeutralUnitType" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "harpy_storm_chain_lightning" // Ability 1 - "Ability2" "tornado_harpy_intrinsic" // Ability 2 - "Ability3" "" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "360" // Damage range min. - "AttackDamageMax" "380" // Damage range max. - "AttackRate" "1.3" // Speed of attack. - "AttackAnimationPoint" "0.3" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "400" // Range within a target can be acquired. - "AttackRange" "350" // Range within a target can be attacked. - "ProjectileModel" "particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf" - - "ProjectileSpeed" "1200" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "190" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_FLY" - "MovementSpeed" "325" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "700" // Base health. - "StatusHealthRegen" "5" // Health regeneration rate. - "StatusMana" "150" // Base mana. - "StatusManaRegen" "3" // Mana regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" // Range of vision during day light. - "VisionNighttimeRange" "1800" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_PIERCE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - } - - - //================================================================================= - // Creature: Worg - //================================================================================= - "npc_dota_creature_dire_hound" - { - // Script - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/creeps/neutral_creeps/n_creep_worg_small/n_creep_worg_small.vmdl" // precache issue with this asset - "SoundSet" "DireHound" - "Level" "1" - "ModelScale" ".97" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "33" - "AttackDamageMax" "38" - "AttackRate" "1.55" - "AttackAnimationPoint" "0.33" - "AttackAcquisitionRange" "500" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "45" - "HealthBarOffset" "90" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "20" - "BountyGoldMin" "11" - "BountyGoldMax" "15" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "40" - "StatusHealthRegen" "0.5" - "StatusMana" "100" - "StatusManaRegen" "1" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.2" - } - - //================================================================================= - // Creature: Dire Hound Boss - //================================================================================= - "npc_dota_creature_dire_hound_boss" - { - // Script - "vscripts" "ai/ai_dire_hound_boss.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/items/beastmaster/boar/beast_deming/beast_deming.vmdl" - "SoundSet" "Beastmaster_Boar" - "Level" "1" - "ModelScale" "1.0" - "IsNeutralUnitType" "1" - - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ranged_quill_attack" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "33" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "60" - "AttackDamageMax" "75" - "AttackRate" "1.45" - "AttackAnimationPoint" "0.5" - "AttackAcquisitionRange" "600" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "1200" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "160" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "35" - "BountyGoldMin" "20" - "BountyGoldMax" "24" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "260" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "170" - "StatusHealthRegen" "0.5" - "StatusMana" "350" - "StatusManaRegen" "1" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.3" - - // Creature Data - //---------------------------------------------------------------- - - } - - //================================================================================= - // Creature: Fire Roshan - //================================================================================= - "npc_dota_creature_fire_roshan" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/blazhan/blazhan.vmdl" // Model. - "SoundSet" "Roshan" // Name of sound set. - "ModelScale" "1.75" - "Level" "1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_fire_breath" // Ability 1. - "Ability2" "ability_absolute_no_cc" // Ability 2. - "Ability3" "ability_attack_speed_unslowable" - "Ability4" "ability_move_speed_unslowable" - "Ability5" "aggro_on_damage" // Ability 5 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "10" // Physical protection. - "MagicalResistance" "35" // Magical protection (percentage). - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "2400" // Damage range min. - "AttackDamageMax" "2600" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "2" // Speed of attack. - "AttackAnimationPoint" "0.6" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "3000" // Range within a target can be acquired. - "AttackRange" "200" // Range within a target can be attacked. - "ProjectileModel" "particles/base_attacks/ranged_goodguy.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "1000" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" // Experience earn. - "BountyGoldMin" "105" // Gold earned min. - "BountyGoldMax" "125" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_HERO" // Hull type used for navigation/locomotion. - "RingRadius" "60" - "HealthBarOffset" "550" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "175" // Speed - "MovementTurnRate" "1.0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "42000" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "250" // Base mana. - "StatusManaRegen" "5" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_LIGHT" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRONG" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" // Range of vision during day light. - "VisionNighttimeRange" "1400" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "creature_fire_breath" - "AOE" "1" - "Radius" "900" - "MinimumTargets" "1" - } - } - } - } - - //================================================================================= - // Creature: Ice Roshan - //================================================================================= - "npc_dota_creature_ice_roshan" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/blazhan/blazhan.vmdl" // Model. - "SoundSet" "Roshan" // Name of sound set. - "ModelScale" "0.7" - "Level" "1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_ice_slam" // Ability 1. - "Ability2" "ability_absolute_no_cc" // Ability 2. - "Ability3" "ability_attack_speed_unslowable" // Ability 3. - "Ability4" "ability_move_speed_unslowable" // Ability 4. - "Ability5" "aggro_on_damage" // Ability 5 - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "25" // Physical protection. - "MagicalResistance" "25" // Magical protection (percentage). - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "1600" // Damage range min. - "AttackDamageMax" "1800" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" // Speed of attack. - "AttackAnimationPoint" "0.6" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "1800" // Range within a target can be acquired. - "AttackRange" "200" // Range within a target can be attacked. - "ProjectileModel" "particles/base_attacks/ranged_goodguy.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "1000" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" // Experience earn. - "BountyGoldMin" "105" // Gold earned min. - "BountyGoldMax" "125" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_HERO" // Hull type used for navigation/locomotion. - "RingRadius" "60" - "HealthBarOffset" "300" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "320" // Speed - "MovementTurnRate" "1.0" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "30000" // Base health. - "StatusHealthRegen" "5" // Health regeneration rate. - "StatusMana" "250" // Base mana. - "StatusManaRegen" "5" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_LIGHT" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRONG" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1400" // Range of vision during day light. - "VisionNighttimeRange" "1400" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "DefaultState" "Invade" - - "OffensiveAbilities" - { - "Ability1" - { - "Name" "creature_ice_slam" - "AOE" "1" - "Radius" "375" - "MinimumTargets" "1" - } - } - } - } - - //================================================================================= - // Creature: Baby Roshan - //================================================================================= - "npc_dota_creature_baby_roshan" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/courier/baby_rosh/babyroshan_alt.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "440" - "AttackDamageMax" "465" - "AttackRate" "1.3" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "3000" - "AttackRange" "125" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "380" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1800" - "StatusHealthRegen" "2" - "StatusMana" "500" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - } - } - - - //================================================================================= - // Creature: Undead Woods Skeleton - //================================================================================= - "npc_dota_wraith_king_skeleton_warrior" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/wraith_king/arcana/wk_arcana_skeleton.vmdl" // Model. - "SoundSet" "Creep_Good_Melee" // Name of sound set. - "ModelScale" "1.3" - "Level" "1" - "IsSummoned" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "75" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "300" // Damage range min. - "AttackDamageMax" "350" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.2" // Speed of attack. - "AttackAnimationPoint" "0.56" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "500" // Range within a target can be acquired. - "AttackRange" "128" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALLEST" // Hull type used for navigation/locomotion. - "HealthBarOffset" "140" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "300" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "550" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "500" // Range of vision during day light. - "VisionNighttimeRange" "500" // Range of vision at night time. - } - - //================================================================================= - // Undead Woods Skeleton King - //================================================================================= - "npc_dota_undead_woods_skeleton_king" - { - // Script - "vscripts" "ai/skeleton_king.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/wraith_king/arcana/wraith_king_arcana.vmdl" - "IdleExpression" "scenes/skeleton_king/skeleton_king_exp_idle_01.vcd" - "SoundSet" "Hero_SkeletonKing" - "Level" "1" - "ModelScale" "2" - "ConsideredHero" "1" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "undead_woods_skeleton_king_hellfire_blast" - "Ability2" "aghsfort_skeleton_king_vampiric_aura" - "Ability3" "undead_woods_skeleton_king_mortal_strike" - "Ability4" "undead_woods_skeleton_king_reincarnation" - "Ability5" "skeleton_king_run_passive" - "Ability6" "ability_attack_speed_unslowable" - "Ability7" "creature_generic_high_status_resist_passive" - "Ability8" "" - "Ability9" "" - "Ability10" "" - "Ability11" "" - "Ability12" "" - "Ability13" "" - "Ability14" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "25" - "MagicalResistance" "25" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "800" - "AttackDamageMax" "900" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.56" - "AttackAcquisitionRange" "1800" - "AttackRange" "250" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "75" - "HealthBarOffset" "400" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "1000" - "BountyGoldMin" "500" - "BountyGoldMax" "1000" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "325" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "6500" - "StatusHealthRegen" "15" - "StatusMana" "25000" - "StatusManaRegen" "250" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1800" - "VisionNighttimeRange" "1800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "1" - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "13571" - } - "Wearable2" - { - "ItemDef" "13569" - } - "Wearable3" - { - "ItemDef" "13473" - } - "Wearable4" - { - "ItemDef" "13760" - } - "Wearable5" - { - "ItemDef" "13456" - } - "Wearable6" - { - "ItemDef" "13743" - } - } - } - } - - - //================================================================================= - // Creature: Dark Seer - //================================================================================= - "npc_dota_creature_dark_seer" - { - // Script - //"vscripts" "ai/dark_seer.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/dark_seer/dark_seer.vmdl" - "IdleExpression" "scenes/dark_seer/dark_seer_exp_idle_01.vcd" - "SoundSet" "Hero_DarkSeer" - "Level" "1" - "ModelScale" "1.5" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_dark_seer_vacuum" - "Ability2" "creature_dark_seer_wall_of_replica" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "15" - "MagicalResistance" "25" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "550" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.75" - "AttackAcquisitionRange" "1000" - "AttackRange" "128" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "140" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "280" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "8500" - "StatusHealthRegen" "2" - "StatusMana" "5000" - "StatusManaRegen" "5" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - //Inventory - "HasInventory" "1" - - //---------------------------------------------------------------- - "Creature" - { - "OffensiveAbilities" - { - "Ability1" - { - "Name" "creature_dark_seer_wall_of_replica" - "AOE" "1" - "Radius" "400" - "MinimumTargets" "2" - } - "Ability2" - { - "Name" "creature_dark_seer_vacuum" - "AOE" "1" - "Radius" "400" - "MinimumTargets" "2" - } - } - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "524" - } - "Wearable2" - { - "ItemDef" "348" - } - "Wearable3" - { - "ItemDef" "352" - } - "Wearable4" - { - "ItemDef" "351" - } - "Wearable5" - { - "ItemDef" "349" - } - "Wearable6" - { - "ItemDef" "350" - } - } - } - } - - //================================================================================= - // Frost Kobold - //================================================================================= - "npc_dota_creature_frost_kobold" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/creeps/neutral_creeps/n_creep_kobold/kobold_c/n_creep_kobold_frost.vmdl" // Model. - "SoundSet" "Creep_Bad_Melee_Mega" // Name of sound set. - "ModelScale" "1.2" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - "Ability6" "" // Ability 6 - Extra. - "Ability7" "" // Ability 7 - Extra. - "Ability8" "" // Ability 8 - Extra. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "8" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "175" // Damage range min. - "AttackDamageMax" "225" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1" // Speed of attack. - "AttackAnimationPoint" "0.38" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "900" // Range within a target can be acquired. - "AttackRange" "128" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "RingRadius" "45" - "HealthBarOffset" "200" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "335" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "650" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "850" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - - "PathfindingSearchDepthScale" "0.1" - } - - //================================================================================= - // Creature: Lich - //================================================================================= - "npc_dota_creature_lich" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/lich/lich.vmdl" - "SoundSet" "Hero_Lich" - "IdleSoundLoop" "Hero_Lich.IdleLoop" - "Level" "1" - "ModelScale" "1.5" - - "GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_lich.vsndevts" - - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_lich_chain_frost" - "Ability2" "creature_lich_sinister_gaze" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "50" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "150" - "AttackDamageMax" "200" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.46" - "AttackAcquisitionRange" "1000" - "AttackRange" "550" - "ProjectileModel" "particles/units/heroes/hero_lich/lich_base_attack.vpcf" - "ProjectileSpeed" "900" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "400" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "3000" - "StatusHealthRegen" "1" - "StatusMana" "4000" - "StatusManaRegen" "1.0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1000" - "VisionNighttimeRange" "1000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "OffensiveAbilities" - { - "Ability1" - { - "Name" "creature_lich_sinister_gaze" - } - "Ability2" - { - "Name" "creature_lich_chain_frost" - } - } - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "331" - } - "Wearable2" - { - "ItemDef" "332" - } - "Wearable3" - { - "ItemDef" "333" - } - "Wearable4" - { - "ItemDef" "571" - } - "Wearable5" - { - "ItemDef" "506" - } - "Wearable6" - { - "ItemDef" "334" - } - } - } - } - - //================================================================================================================= - // Breakable Cage - //================================================================================================================= - "npc_dota_cage" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_rotatable_building" - "Model" "models/gameplay/breakingcrate_dest.vmdl" - "SoundSet" "Creep_Good_Melee" - "Level" "1" - "ModelScale" "1.2" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "45" - "HealthBarOffset" "110" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - //"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - "PathfindingSearchDepthScale" "0.0" - } - - //================================================================================= - // Creature: Sheep Hostage - //================================================================================= - "npc_dota_creature_sheep_hostage" - { - // Script - "vscripts" "ai/sheep.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/items/hex/sheep_hex/sheep_hex.vmdl" - "SoundSet" "DireHound" - "Level" "1" - "ModelScale" "1" - - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ability_unselectable" - "Ability2" "modifier_invulnerable" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "45" - "HealthBarOffset" "90" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "20" - "BountyGoldMin" "11" - "BountyGoldMax" "15" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "300" - "StatusHealthRegen" "0.5" - "StatusMana" "100" - "StatusManaRegen" "1" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "EquippedItems" - { - "Travels" - { - "Item" "item_travel_boots" - } - } - } - } - - //================================================================================= - // Beastmaster Boss - //================================================================================= - "npc_dota_creature_beastmaster_boss" - { - // Script - "vscripts" "ai/beastmaster.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/beastmaster/beastmaster.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Beastmaster" - "Level" "1" - "ModelScale" "1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "beastmaster_wild_axes" - "Ability2" "beastmaster_primal_roar" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "125" - "AttackDamageMax" "175" - "AttackRate" "1.55" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "250" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1600" - "StatusHealthRegen" "10" - "StatusMana" "2000" - "StatusManaRegen" "10" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "4704" // weapons: default - } - "Wearable2" - { - "ItemDef" "4706" // head: default - } - "Wearable3" - { - "ItemDef" "4705" // shoulders: default - } - "Wearable4" - { - "ItemDef" "4716" // arms: default - } - "Wearable5" - { - "ItemDef" "4887" // belt: default - } - } - } - } - - //================================================================================= - // Creature: Beastmaster Boar - //================================================================================= - "npc_dota_creature_beastmaster_boar" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/beastmaster/beastmaster_beast.vmdl" - "SoundSet" "Beastmaster_Boar" - "Level" "1" - "ModelScale" "0.7" - "IsNeutralUnitType" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "33" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "100" // Damage range min. - "AttackDamageMax" "150" // Damage range max. - "AttackRate" "1.5" // Speed of attack. - "AttackAnimationPoint" "0.633" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "600" // Range within a target can be acquired. - "AttackRange" "550" // Range within a target can be attacked. - "ProjectileModel" "particles/units/heroes/hero_beastmaster/beastmaster_boar_attack.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "1500" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "160" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "35" - "BountyGoldMin" "20" - "BountyGoldMax" "24" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "250" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "700" - "StatusHealthRegen" "1" - "StatusMana" "500" - "StatusManaRegen" "1" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.1" - - // Creature Data - //---------------------------------------------------------------- - - } - - //================================================================================= - // Troll Warlord Boss Melee - //================================================================================= - "npc_dota_creature_troll_warlord_melee" - { - // Script - "vscripts" "ai/troll_warlord_melee.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/troll_warlord/troll_warlord.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_TrollWarlord" - "Level" "1" - "ModelScale" "1.5" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "troll_warlord_fervor" - "Ability2" "troll_warlord_whirling_axes_melee" - "Ability3" "skeleton_king_run_passive" - "Ability4" "troll_warlord_battle_trance" - "Ability5" "lone_druid_spirit_bear_entangle" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "450" - "AttackDamageMax" "500" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "150" - "ProjectileModel" "particles/units/heroes/hero_troll_warlord/troll_warlord_base_attack.vpcf" - "ProjectileSpeed" "1200" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "9000" - "StatusHealthRegen" "0" - "StatusMana" "5000" - "StatusManaRegen" "10" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "EquippedItems" - { - "BlackKingBar" - { - "Item" "item_creature_black_king_bar" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "9597" // weapon: default - } - "Wearable2" - { - "ItemDef" "9597" // offhand: default - } - "Wearable3" - { - "ItemDef" "9597" // melee: default - } - "Wearable4" - { - "ItemDef" "9597" // melee offhand: default - } - "Wearable5" - { - "ItemDef" "9676" // shoulders: default - } - "Wearable6" - { - "ItemDef" "9595" // head: default - } - "Wearable7" - { - "ItemDef" "9596" // armor: default - } - } - } - } - - //================================================================================= - // Troll Warlord Boss Ranged - //================================================================================= - "npc_dota_creature_troll_warlord_ranged" - { - // Script - "vscripts" "ai/troll_warlord_ranged.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/troll_warlord/troll_warlord.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_TrollWarlord" - "Level" "1" - "ModelScale" "1.5" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "troll_warlord_fervor" - "Ability2" "troll_warlord_whirling_axes_ranged" - "Ability3" "skeleton_king_run_passive" - "Ability4" "troll_warlord_battle_trance" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "350" - "AttackDamageMax" "450" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "1000" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_troll_warlord/troll_warlord_base_attack.vpcf" - "ProjectileSpeed" "1200" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "9000" - "StatusHealthRegen" "0" - "StatusMana" "5000" - "StatusManaRegen" "10" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "EquippedItems" - { - "BlackKingBar" - { - "Item" "item_creature_black_king_bar" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "373" // weapon: default - } - "Wearable2" - { - "ItemDef" "374" // offhand: default - } - "Wearable3" - { - "ItemDef" "379" // melee: default - } - "Wearable4" - { - "ItemDef" "380" // melee offhand: default - } - "Wearable5" - { - "ItemDef" "410" // shoulders: default - } - "Wearable6" - { - "ItemDef" "411" // head: default - } - "Wearable7" - { - "ItemDef" "412" // armor: default - } - } - } - } - - //================================================================================= - // Creature: Skywrath Mage Gladiator - //================================================================================= - "npc_dota_creature_skywrath_mage" - { - // Script - "vscripts" "ai/skywrath_mage.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/skywrath_mage/skywrath_mage.vmdl" - "IdleExpression" "scenes/skywrath_mage/skywrath_mage_exp_idle_01.vcd" - "SoundSet" "Hero_SkywrathMage" - "BaseClass" "npc_dota_creature" - "Level" "1" - "ModelScale" "1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "skywrath_mage_arcane_bolt" - "Ability2" "skywrath_mage_concussive_shot" - "Ability3" "skywrath_mage_mystic_flare" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "2" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "125" - "AttackDamageMax" "125" - "AttackRate" "1.35" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "800" - "AttackRange" "800" - "ProjectileModel" "particles/units/heroes/hero_skywrath_mage/skywrath_mage_base_attack.vpcf" - "ProjectileSpeed" "1000" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "50" - "HealthBarOffset" "300" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "30" - "BountyGoldMin" "21" - "BountyGoldMax" "24" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "295" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "800" - "StatusHealthRegen" "0" - "StatusMana" "1000" - "StatusManaRegen" "0" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "ParticleFile" "particles/units/heroes/hero_dazzle.pcf" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "DisableClumpingBehavior" "1" - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "4995" // gloves: default - } - "Wearable2" - { - "ItemDef" "4999" // staff: default - } - "Wearable3" - { - "ItemDef" "5000" // helmet: default - } - "Wearable4" - { - "ItemDef" "5001" // belt: default - } - "Wearable5" - { - "ItemDef" "5002" // armor: default - } - "Wearable6" - { - "ItemDef" "5003" // wings: default - } - } - } - } - - //================================================================================= - // Legion Commander Gladiator - //================================================================================= - "npc_dota_creature_legion_commander" - { - // Script - "vscripts" "ai/legion_commander.lua" - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/legion_commander/legion_commander.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_LegionCommander" - "Level" "1" - "ModelScale" "2" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "legion_commander_overwhelming_odds" - "Ability2" "legion_commander_duel" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "150" - "AttackDamageMax" "175" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.46" - "AttackAcquisitionRange" "600" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "350" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "55" - "BountyGoldMin" "29" - "BountyGoldMax" "35" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "2000" - "StatusHealthRegen" "10" - "StatusMana" "2000" - "StatusManaRegen" "10" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "DisableClumpingBehavior" "1" - "EquippedItems" - { - "Blademail" - { - "Item" "item_blade_mail" - } - } - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "8824" // helmet: default - } - "Wearable2" - { - "ItemDef" "8821" // shoulder: default - } - "Wearable3" - { - "ItemDef" "8822" // banner: default - } - "Wearable4" - { - "ItemDef" "8823" // weapon: default - } - "Wearable5" - { - "ItemDef" "8820" // bracers: default - } - } - } - } - - //================================================================================= - // Creature: Gladiator Creep - //================================================================================= - "npc_dota_creature_gladiator_creep" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/items/wraith_king/wk_ti8_creep/wk_ti8_creep_crimson.vmdl" - "SoundSet" "n_creep_Melee" - "Level" "1" - "ModelScale" "1.5" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "15" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "88" - "AttackDamageMax" "99" - "AttackRate" "1.1" - "AttackAnimationPoint" "0.36" - "AttackAcquisitionRange" "1000" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALLEST" - "RingRadius" "40" - "HealthBarOffset" "250" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "270" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "550" - "StatusHealthRegen" "1" - "StatusMana" "50" - "StatusManaRegen" "2" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "0.5" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - //================================================================================================================= - // Bonus Cog - //================================================================================================================= - "npc_dota_bonus_cog" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_rattletrap_cog" - "Model" "models/items/rattletrap/mechanised_pilgrim_cog/mechanised_pilgrim_cog.vmdl" - "SoundSet" "0" - "Level" "1" - "ModelScale" "2" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "modifier_invulnerable" - "Ability2" "ability_unselectable" - "Ability3" "no_health_bar" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.0" - "AttackAnimationPoint" "0" - "AttackAcquisitionRange" "0" - "AttackRange" "0" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" - "AttributeStrengthGain" "0" - "AttributeBaseIntelligence" "0" - "AttributeIntelligenceGain" "0" - "AttributeBaseAgility" "0" - "AttributeAgilityGain" "0" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - "RingRadius" "45" - "HealthBarOffset" "120" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "1.0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "99999" - "StatusHealthRegen" "0" - "StatusMana" "0" - "StatusStartingMana" "0" - "StatusManaRegen" "0" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1" - "VisionNighttimeRange" "1" - - "DisableDamageDisplay" "1" - "PathfindingSearchDepthScale" "0.0" - } - - //================================================================================= - // Creature: Bonus Greevil - //================================================================================= - "npc_dota_creature_bonus_greevil" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/courier/gold_mega_greevil/gold_mega_greevil.vmdl" - "SoundSet" "Greevil" - "ModelScale" "1.25" - "IsNeutralUnitType" "1" - "IsAncient" "1" - "ConsideredHero" "1" - "HasInventory" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "creature_bonus_greevil" - "Ability2" "no_health_bar" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "1" - "AttackDamageMax" "2" - "AttackRate" "1.45" - "AttackAnimationPoint" "0.33" - "AttackAcquisitionRange" "500" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "45" - "HealthBarOffset" "150" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "62" - "BountyGoldMin" "22" - "BountyGoldMax" "26" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "500" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1" - "StatusHealthRegen" "0.5" - "StatusMana" "60000" - "StatusManaRegen" "500" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "450" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "EquippedItems" - { - "Travels" - { - "Item" "item_travel_boots" - } - } - } - } - - //================================================================================= - // Creature: Evil Greevil - //================================================================================= - "npc_dota_creature_evil_greevil" - { - // Script - "vscripts" "ai/evil_greevil.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/courier/greevil/greevil.vmdl" - "SoundSet" "Miniboss_Greevil" - "ModelScale" "1.5" - "IsNeutralUnitType" "1" - "IsAncient" "1" - "ConsideredHero" "1" - "HasInventory" "1" - "AnimationModifier" "miniboss" - "skin" "7" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "evil_greevil_passive" - "Ability2" "obsidian_destroyer_astral_imprisonment" - "Ability3" "" - "Ability4" "no_health_bar" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "1" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "1" - "AttackDamageMax" "2" - "AttackRate" "1.45" - "AttackAnimationPoint" "0.33" - "AttackAcquisitionRange" "500" - "AttackRange" "100" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "45" - "HealthBarOffset" "150" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "100" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "10000" - "StatusHealthRegen" "0.5" - "StatusMana" "1000" - "StatusManaRegen" "500" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "450" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - "EquippedItems" - { - "Travels" - { - "Item" "item_travel_boots" - } - } - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "10071" // ears: default - } - "Wearable2" - { - "ItemDef" "10074" // hair: default - } - "Wearable3" - { - "ItemDef" "10075" // horns: default - } - "Wearable4" - { - "ItemDef" "10083" // tail: default - } - "Wearable5" - { - "ItemDef" "10084" // teeth: default - } - "Wearable6" - { - "ItemDef" "10130" // feathers: default - } - } - } - } - - //================================================================================= - // Observer Ward - Beach - //================================================================================= - - "npc_dota_observer_ward_beach" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/wards/esl_wardchest_rockshell_terrapin/esl_wardchest_rockshell_terrapin.vmdl" // Model. - "SoundSet" "" // Name of sound set. - "Level" "1" - "ModelScale" "1" - "MinimapIcon" "minimap_ward_obs" - "MinimapIconSize" "300" - "wearable" "7555" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "no_health_bar" - "Ability2" "ability_unselectable" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - "HealthBarOffset" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" // Experience earn. - "BountyGoldMin" "100" // Gold earned min. - "BountyGoldMax" "100" // Gold earned max. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_PIERCE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1600" // Range of vision during day light. - "VisionNighttimeRange" "1600" // Range of vision at night time. - } - - //================================================================================= - // Observer Ward - Journey - //================================================================================= - - "npc_dota_observer_ward_journey" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/wards/chinese_ward/chinese_ward.vmdl" // Model. - "SoundSet" "" // Name of sound set. - "Level" "1" - "ModelScale" "1" - "MinimapIcon" "minimap_ward_obs" - "MinimapIconSize" "300" - "wearable" "7555" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "no_health_bar" - "Ability2" "ability_unselectable" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - "HealthBarOffset" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" // Experience earn. - "BountyGoldMin" "100" // Gold earned min. - "BountyGoldMax" "100" // Gold earned max. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_PIERCE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1600" // Range of vision during day light. - "VisionNighttimeRange" "1600" // Range of vision at night time. - } - - //================================================================================= - // Observer Ward - Crypt - //================================================================================= - - "npc_dota_observer_ward_crypt" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/wards/dire_ward_eye/dire_ward_eye.vmdl" // Model. - "SoundSet" "" // Name of sound set. - "Level" "1" - "ModelScale" "1" - "MinimapIcon" "minimap_ward_obs" - "MinimapIconSize" "300" - "wearable" "7555" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "no_health_bar" - "Ability2" "ability_unselectable" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - "HealthBarOffset" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - - // Status - //---------------------------------------------------------------- - "StatusHealth" "100" // Base health. - "StatusHealthRegen" "0" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "100" // Experience earn. - "BountyGoldMin" "100" // Gold earned min. - "BountyGoldMax" "100" // Gold earned max. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_PIERCE" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1600" // Range of vision during day light. - "VisionNighttimeRange" "1600" // Range of vision at night time. - } - - //================================================================================= - // Aghanim - //================================================================================= - "npc_dota_boss_aghanim" - { - // Script - "vscripts" "ai/boss_aghanim.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/aghanim/aghanim_model.vmdl" - "SoundSet" "Hero_Oracle" - "IdleSoundLoop" "Hero_Oracle.IdleLoop" - "Level" "1" - "ModelScale" "1.8" - "ConsideredHero" "1" - "IsAncient" "1" - "IsBossMonster" "1" - "IdleExpression" "scenes/aghanim/aghanim_exp_idle.vcd" - "VoiceFile" "soundevents/voscripts/game_sounds_vo_aghanim.vsndevts" - - // Minimap - //---------------------------------------------------------------- - "MinimapIcon" "minimap_roshancamp" - "MinimapIconSize" "250" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghanim_crystal_attack" - "Ability2" "aghanim_staff_beams" - "Ability3" "aghanim_blink" - "Ability4" "aghanim_summon_portals" - "Ability5" "aghanim_spell_swap" - "Ability6" "aghanim_shard_attack" - "Ability7" "aghanim_passive" - "Ability8" "aghanim_spear" - "Ability9" "" - "Ability10" "" - "Ability11" "" - "Ability12" "" - "Ability13" "" - "Ability14" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "65" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "1500" - "AttackDamageMax" "1750" - "AttackRate" "1.7" - "AttackAnimationPoint" "0.53" - "AttackAcquisitionRange" "1800" - "AttackRange" "1000" - "ProjectileModel" "particles/units/heroes/hero_oracle/oracle_base_attack.vpcf" - "ProjectileSpeed" "1000" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "75" - "HealthBarOffset" "645" - "BoundsHullName" "DOTA_HULL_SIZE_HUGE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "450" - "MovementTurnRate" "0.5" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "135000" - "StatusHealthRegen" "0" - "StatusMana" "10000" - "StatusManaRegen" "250" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "5000" - "VisionNighttimeRange" "5000" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "1" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "AttachWearables" - { - } - - "HPGain" "22500" - } - } - - //================================================================================= - // Aghanim Crystal - //================================================================================= - "npc_dota_boss_aghanim_crystal" - { - // General - //---------------------------------------------------------------- - "Model" "models/gameplay/aghanim_crystal.vmdl" // Model. - "BaseClass" "npc_dota_base_additive" - "SoundSet" "Pugna_NetherWard" // Name of sound set. - "Level" "0" - "ModelScale" "2.5" - "ConsideredHero" "1" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" // Ability 1 - "Ability2" "" // Ability 2 - "Ability3" "" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackRate" "1.0" // Speed of attack. - "AttackAnimationPoint" "0.0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "HealthBarOffset" "145" - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_FLY" - "MovementSpeed" "0" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "10" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "600" // Range of vision during day light. - "VisionNighttimeRange" "600" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================= - // Aghanim Spear - //================================================================================= - "npc_dota_boss_aghanim_spear" - { - // General - //---------------------------------------------------------------- - "Model" "models/gameplay/aghanim_staff.vmdl" // Model. - - "BaseClass" "npc_dota_base_additive" - "SoundSet" "Pugna_NetherWard" // Name of sound set. - "Level" "0" - "ModelScale" "1.5" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" // Ability 1 - "Ability2" "" // Ability 2 - "Ability3" "" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackRate" "1.0" // Speed of attack. - "AttackAnimationPoint" "0.0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "HealthBarOffset" "145" - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_FLY" - "MovementSpeed" "0" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "10" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "300" // Range of vision during day light. - "VisionNighttimeRange" "300" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - //================================================================================= - // Aghanim Minion - //================================================================================= - "npc_dota_creature_aghanim_minion" - { - // General - // - "BaseClass" "npc_dota_creature" // Class of entity of link to. - "Model" "models/items/warlock/golem/ti_8_warlock_darkness_apostate_golem/ti_8_warlock_darkness_apostate_golem.vmdl" - "SoundSet" "Hero_WarlockGolem" // Name of sound set. - "ModelScale" "1.0" - "Level" "1" - - // Abilities - //---------------------------------------------------------------- - - "Ability1" "ghost_frost_attack" // Ability 1. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "25" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "1360" // Damage range min. - "AttackDamageMax" "1360" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "1.2" // Speed of attack. - "AttackAnimationPoint" "0.26" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "5000" // Range within a target can be acquired. - "AttackRange" "150" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "" // Speed of projectile. - - // Attributes - //---------------------------------------------------------------- - "AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" - "AttributeBaseStrength" "0" // Base strength - "AttributeStrengthGain" "0" // Strength bonus per level. - "AttributeBaseIntelligence" "0" // Base intelligence - "AttributeIntelligenceGain" "0" // Intelligence bonus per level. - "AttributeBaseAgility" "0" // Base agility - "AttributeAgilityGain" "0" // Agility bonus per level. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" // Hull type used for navigation/locomotion. - "RingRadius" "45" - "HealthBarOffset" "300" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" // Type of locomotion - ground, air - "MovementSpeed" "300" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1800" // Base health. - "StatusHealthRegen" "0.5" // Health regeneration rate. - "StatusMana" "75" // Base mana. - "StatusManaRegen" "1.0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "850" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - - // Creature Data - //---------------------------------------------------------------------------------------------------------------------- - "Creature" - { - } - } - - //================================================================================= - // Story Crystal - //================================================================================= - "npc_dota_story_crystal" - { - // General - //---------------------------------------------------------------- - "Model" "models/gameplay/aghanim_crystal.vmdl" // Model. - "BaseClass" "npc_dota_creature" - "SoundSet" "Pugna_NetherWard" // Name of sound set. - "Level" "1" - "ModelScale" "2.5" - "ConsideredHero" "1" - - - // Abilities - //---------------------------------------------------------------- - "Ability1" "story_crystal" // Ability 1 - "Ability2" "" // Ability 2 - "Ability3" "" // Ability 3 - "Ability4" "" // Ability 4 - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_NO_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackRate" "1.0" // Speed of attack. - "AttackAnimationPoint" "0.0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "0" // Range within a target can be acquired. - "AttackRange" "0" // Range within a target can be attacked. - "ProjectileModel" "" // Particle system model for projectile. - "ProjectileSpeed" "0" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "HealthBarOffset" "145" - "BoundsHullName" "DOTA_HULL_SIZE_SMALL" // Hull type used for navigation/locomotion. - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" // Experience earn. - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_FLY" - "MovementSpeed" "0" // Speed. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "10" // Base health. - "StatusHealthRegen" "0.0" // Health regeneration rate. - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "600" // Range of vision during day light. - "VisionNighttimeRange" "600" // Range of vision at night time. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_NEUTRALS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - } - - - //================================================================================= - // Creature: Mireska - //================================================================================= - "npc_dota_creature_mireska" - { - // Script - //"vscripts" "ai/mireska_ai.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/dark_willow/dark_willow.vmdl" - "IdleExpression" "scenes/sylph/sylph_exp_idle_01.vcd" - "SoundSet" "Hero_DarkWillow" - "IdleSoundLoop" "Hero_DarkWillow.IdleLoop" - "Level" "1" - "ModelScale" "1.2" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - //"Ability1" "aghsfort_mireska_mega_brambles" - //"Ability2" "aghsfort_mireska_terrorize" - - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "27" - "AttackDamageMax" "35" - "AttackRate" "1.500000" - "BaseAttackSpeed" "115" - "AttackSpeedActivityModifiers" - { - "fast" "200" - "faster" "300" - } - "AttackAnimationPoint" "0.30000" - "AttackAcquisitionRange" "800" - "AttackRange" "475" - "ProjectileModel" "particles/units/heroes/hero_dark_willow/dark_willow_base_attack.vpcf" - "ProjectileSpeed" "1200" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "310" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "1220" - "StatusHealthRegen" "1" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "CanRespawn" "0" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "100.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "DefaultState" "Invade" - } - } - - //------------------------------------------------------------------------- - // Creature Tiny - //------------------------------------------------------------------------- - "npc_dota_creature_elemental_tiny" - { - // Script - "vscripts" "ai/elemental_tiny_ai.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/tiny/tiny_03/tiny_03.vmdl" - "SoundSet" "Hero_Tiny" - "Level" "1" - "ModelScale" "1.2" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_elemental_tiny_toss" - "Ability2" "aghsfort_elemental_tiny_create_io" - "Ability3" "elemental_tiny_tree_attack" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "1000" - "AttackDamageMax" "1150" - "AttackRate" "1.500000" - "BaseAttackSpeed" "90" - "AttackAnimationPoint" "0.40000" - "AttackAcquisitionRange" "900" - "AttackRange" "170" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "300" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "23000" - "StatusHealthRegen" "1" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - "DisableResistance" "95.0" - - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "13551" - } - - } - } - - } - - //------------------------------------------------------------------------- - // Creature Elemental Io - //------------------------------------------------------------------------- - "npc_dota_creature_elemental_io" - { - // Script - "vscripts" "ai/elemental_io_ai.lua" - - // General - //---------------------------------------------------------------- - "BaseClass" "npc_dota_creature" - "Model" "models/heroes/wisp/wisp.vmdl" - "SoundSet" "Hero_Wisp" - "IdleSoundLoop" "Hero_Wisp.IdleLoop" - "Level" "1" - "ModelScale" "1" - "ConsideredHero" "0" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "aghsfort_wisp_tether" - "Ability2" "aghsfort_wisp_autoattack" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" - "MagicalResistance" "0" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "300" - "AttackDamageMax" "350" - "AttackRate" "1.800000" - "AttackAnimationPoint" "0.150000" - "AttackAcquisitionRange" "800" - "AttackRange" "500" - "ProjectileModel" "particles/units/heroes/hero_wisp/wisp_base_attack.vpcf" - "ProjectileSpeed" "1200" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "60" - "HealthBarOffset" "200" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "290" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "4000" - "StatusHealthRegen" "00" - "StatusMana" "200" - "StatusManaRegen" "4" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_BADGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_BASIC" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "PathfindingSearchDepthScale" "1.0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - //Basic AI State - //----------------------------------------------------------------- - "DefaultState" "Invade" - "States" - { - "Invade" - { - "Name" "Invade" - "Aggression" "50.0" - "Avoidance" "0.0" - "Support" "0.0" - } - } - - "AttachWearables" - { - "Wearable1" - { - "ItemDef" "536" - } - "Wearable2" - { - "ItemDef" "639" - } - - } - } - - } - - "npc_aghsfort_witch_doctor_death_ward" - { - // General - //---------------------------------------------------------------- - "BaseClass" "npc_aghsfort_witch_doctor_death_ward" // Class of entity of link to. - "Model" "models/heroes/witchdoctor/witchdoctor_ward.vmdl"// Model. - "SoundSet" "Hero_WitchDoctor_Ward" // Name of sound set. - "Level" "3" - "wearable" "602" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" // Ability 1. - "Ability2" "" // Ability 2. - "Ability3" "" // Ability 3. - "Ability4" "" // Ability 4. - "Ability5" "" // Ability 5. - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "0" // Physical protection. - "MagicalResistance" "0" // Magical protection. - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK" - "AttackDamageMin" "0" // Damage range min. - "AttackDamageMax" "0" // Damage range max. - "AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" - "AttackRate" "0.15" // Speed of attack. - "AttackAnimationPoint" "0.0" // Normalized time in animation cycle to attack. - "AttackAcquisitionRange" "700" // Range within a target can be acquired. - "AttackRange" "700" // Range within a target can be attacked. - "ProjectileModel" "particles/units/heroes/hero_witchdoctor/witchdoctor_ward_attack.vpcf" // Particle system model for projectile. - "ProjectileSpeed" "1000" // Speed of projectile. - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_SIEGE" // Hull type used for navigation/locomotion. - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Type of locomotion - ground, air - "MovementSpeed" "0" // Speed - "MovementTurnRate" "0.5" // Turning rate. - - // Bounty - //---------------------------------------------------------------- - "BountyGoldMin" "0" // Gold earned min. - "BountyGoldMax" "0" // Gold earned max. - - // Status - //---------------------------------------------------------------- - "StatusHealth" "135" // Base health. - "StatusHealthRegen" "0.25" // Health regeneration rate. - "StatusMana" "0" // Base mana. - "StatusManaRegen" "0" // Mana regeneration rate. - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" // Team name. - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_HERO" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_WARD" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "1200" // Range of vision during day light. - "VisionNighttimeRange" "800" // Range of vision at night time. - - //Inventory - "HasInventory" "0" - } - - //================================================================================= - // Mars Bulwark Soldier - //================================================================================= - "aghsfort_mars_bulwark_soldier" - { - // Script - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/mars/mars_soldier.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Mars" - "Level" "1" - "ModelScale" "1" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "23" - "AttackDamageMax" "27" - "AttackRate" "0.5" - "AttackAnimationPoint" "0.26" - "AttackAcquisitionRange" "300" - "AttackRange" "300" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "150" - "StatusHealthRegen" "10" - "StatusMana" "150" - "StatusManaRegen" "10" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - } - } - - //================================================================================= - // Shop - //================================================================================= - "boss_shop" - { - "BaseClass" "ent_dota_shop" - "Model" "models/heroes/bristleback/bristleback.vmdl" - "ModelScale" "1" - "MinimapIcon" "minimap_miscbuilding" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "20" - "MagicalResistance" "100" - "AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_INVULNERABLE" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Bounds - //---------------------------------------------------------------- - "BoundsHullName" "DOTA_HULL_SIZE_REGULAR" - "RingRadius" "150" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" - "MovementSpeed" "0" - "MovementTurnRate" "0" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "50" - "StatusHealthRegen" "0" - } - "aghsfort_ursa_minor" - { - // Script - - // General - //---------------------------------------------------------------- - "Model" "models/heroes/ursa/ursa.vmdl" - "BaseClass" "npc_dota_creature" - "SoundSet" "Hero_Ursa" - "Level" "1" - "ModelScale" "0.45" - "ConsideredHero" "1" - - // Abilities - //---------------------------------------------------------------- - "Ability1" "ability_unselectable" - "Ability2" "" - "Ability3" "" - "Ability4" "" - - // Armor - //---------------------------------------------------------------- - "ArmorPhysical" "3" - - // Attack - //---------------------------------------------------------------- - "AttackCapabilities" "DOTA_UNIT_CAP_MELEE_ATTACK" - "AttackDamageMin" "0" - "AttackDamageMax" "0" - "AttackRate" "1.0" - "AttackAnimationPoint" "0.3" - "AttackAcquisitionRange" "99999" - "AttackRange" "150" - "ProjectileModel" "" - "ProjectileSpeed" "0" - - // Bounds - //---------------------------------------------------------------- - "RingRadius" "70" - "HealthBarOffset" "170" - - // Bounty - //---------------------------------------------------------------- - "BountyXP" "0" - "BountyGoldMin" "0" - "BountyGoldMax" "0" - - // Movement - //---------------------------------------------------------------- - "MovementCapabilities" "DOTA_UNIT_CAP_MOVE_GROUND" - "MovementSpeed" "400" - - // Status - //---------------------------------------------------------------- - "StatusHealth" "150" - "StatusHealthRegen" "10" - "StatusMana" "150" - "StatusManaRegen" "10" - - // Vision - //---------------------------------------------------------------- - "VisionDaytimeRange" "800" - "VisionNighttimeRange" "800" - - // Team - //---------------------------------------------------------------- - "TeamName" "DOTA_TEAM_GOODGUYS" - "CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO" - "CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_BASIC" - "UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT" - - "HasInventory" "0" - - // Creature Data - //---------------------------------------------------------------- - "Creature" - { - } - } -} - diff --git a/aghanim_singleplayer/scripts/npc/portraits_custom.txt b/aghanim_singleplayer/scripts/npc/portraits_custom.txt deleted file mode 100755 index c4eee60..0000000 --- a/aghanim_singleplayer/scripts/npc/portraits_custom.txt +++ /dev/null @@ -1,1929 +0,0 @@ -"Portraits" -{ - "models/creeps/ogre_1/boss_ogre.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "285.532532 -157.419052 125.110092" - "PortraitAngles" "357.690033 149.630325 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "193.257233 71.127800 292.348755" - "PortraitLightAngles" "46.848206 -161.587860 -1.843557" - "PortraitLightFOV" "115.716003" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "159 211 246" - "PortraitLightScale" "3.619000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_oracle.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ogre_1/large_ogre.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "307.912964 -139.564285 20.279293" - "PortraitAngles" "341.690002 155.230209 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "95.904312 -85.244843 248.650040" - "PortraitLightAngles" "40.585789 153.034225 25.976814" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "123 135 137" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "0 0 0" - "PortraitShadowScale" "1.540000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.494 0.867 0.070" - "PortraitAmbientColor" "255 184 137" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "0.921569 0.572549 0.572549" - "PortraitBackgroundColor4" "0.462745 0.262745 0.262745" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_light.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ogre_1/small_ogre.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "425.931244 -53.044758 200.493240" - "PortraitAngles" "9.690046 172.030136 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "302.719849 142.602951 302.535004" - "PortraitLightAngles" "37.054520 -152.895279 6.741128" - "PortraitLightFOV" "85.966003" - "PortraitLightDistance" "608.989990" - "PortraitLightColor" "77 122 118" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "0.175 0.961 -0.214" - "PortraitAmbientColor" "145 161 154" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_graveyard.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/spiders/spider_kidnap.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "311.567780 -207.298904 -82.259613" - "PortraitAngles" "340.090027 146.430099 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "14.158791 -23.150000 345.279388" - "PortraitLightAngles" "54.789997 -151.152817 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "58 139 169" - "PortraitLightScale" "1.459000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.012 -0.740 0.672" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "3.763000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_oracle.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/spiders/spider_poison.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "440.821289 184.421082 118.411781" - "PortraitAngles" "7.690018 203.629974 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.000000 0.000000 0.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_graveyard.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/npc/npc_wisp/temple_wisp.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "362.306671 10.254235 206.463531" - "PortraitAngles" "19.290014 182.429947 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "3.295000" - "PortraitShadowColor" "78 237 255" - "PortraitShadowScale" "6.958000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.038 -0.217 -0.975" - "PortraitAmbientColor" "0 157 255" - "PortraitAmbientScale" "10.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.023529 0.690196 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.200000 0.733333 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_water.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/gameplay/journalpaper.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "86.001663 14.635841 48.204613" - "PortraitAngles" "19.690016 190.430115 0.000000" - "PortraitFOV" "10.256000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "1.805794 8.897464 53.885773" - "PortraitLightAngles" "64.053482 -178.772263 3.786871" - "PortraitLightFOV" "29.322001" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "217 216 216" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_courier_ground.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/npc/npc_folks/desert_folk001.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "218.308029 -58.210037 192.955902" - "PortraitAngles" "6.490023 166.030151 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "79.464294 -23.150000 269.867035" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "44.196999" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "4.150000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_desert.vmat" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/npc/npc_folks/desert_folk002.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "214.153183 -90.650284 144.909882" - "PortraitAngles" "356.490021 156.830261 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "79.464294 98.231102 269.867035" - "PortraitLightAngles" "54.789997 -122.334579 0.000000" - "PortraitLightFOV" "44.196999" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "4.348000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.210 -0.954 -0.214" - "PortraitAmbientColor" "250 162 39" - "PortraitAmbientScale" "2.575000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_desert.vmat" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/npc/npc_folks/desert_folk003.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "354.857513 -289.512756 211.193390" - "PortraitAngles" "6.090022 142.430252 0.000000" - "PortraitFOV" "7.675000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "79.464294 -23.150000 269.867035" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "44.196999" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "4.150000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.977 -0.022 -0.214" - "PortraitAmbientColor" "255 255 255" - "PortraitAmbientScale" "5.653000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_desert.vmat" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/npc/npc_folks/townsfolk.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "-24.529058 -159.713211 102.171181" - "PortraitAngles" "7.289993 111.229836 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "-111.232269 183.694397 205.360962" - "PortraitLightAngles" "48.574100 -125.365105 59.748795" - "PortraitLightFOV" "98.698997" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "253 176 100" - "PortraitLightScale" "6.121000" - "PortraitShadowColor" "48 48 48" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.955 -0.298 -0.007" - "PortraitAmbientColor" "32 138 251" - "PortraitAmbientScale" "2.260000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "0.313726 0.501961 0.878431" - "PortraitBackgroundColor3" "1.000000 0.768627 0.549020" - "PortraitBackgroundColor4" "0.211765 0.839216 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_forest_two.vmat" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - } - "models/npc/npc_bristlegrandpa/grandpa_bristleback.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "221.029953 -9.687691 146.264603" - "PortraitAngles" "14.490012 182.030014 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "128.886810 -23.150000 210.119583" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "245 204 163" - "PortraitLightScale" "4.411000" - "PortraitShadowColor" "149 162 160" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.739 -0.606 -0.294" - "PortraitAmbientColor" "226 156 116" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.411765 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.780392 0.337255 0.082353" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_desert.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/centaurs/centaur_002.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "275.331360 -202.780762 129.922104" - "PortraitAngles" "344.089996 141.230057 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "255 220 185" - "PortraitLightScale" "5.662000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 0.662745 0.254902" - "PortraitBackgroundColor3" "1.000000 0.529412 0.117647" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexterior.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/centaurs/centaur_003_shaman.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "312.618408 223.865875 323.244019" - "PortraitAngles" "16.090017 217.230057 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "172.023727 -23.150000 449.994629" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "220 215 210" - "PortraitLightScale" "2.503000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.860 0.462 -0.214" - "PortraitAmbientColor" "255 223 149" - "PortraitAmbientScale" "2.341000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.262745 0.000000 0.000000" - "PortraitBackgroundColor2" "0.925490 0.847059 0.549020" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_white.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/centaurs/centaur_001.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "591.053650 -213.619522 99.479233" - "PortraitAngles" "352.490021 158.830002 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "3.097000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.231373 0.027451 0.027451" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.000000 0.000000 0.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_desert.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/heroes/siltbreaker/siltbreaker.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "167.864029 -106.971283 91.027992" - "PortraitAngles" "342.078979 145.227020 0.720001" - "PortraitFOV" "22.716000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "-129.156662 173.248566 318.490112" - "PortraitLightAngles" "52.406750 -66.741592 -15.414065" - "PortraitLightFOV" "56.930000" - "PortraitLightDistance" "404.019989" - "PortraitLightColor" "255 157 65" - "PortraitLightScale" "3.619000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "3.493000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.093 -0.991 -0.094" - "PortraitAmbientColor" "56 120 173" - "PortraitAmbientScale" "10.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.231373 0.027451 0.027451" - "PortraitBackgroundColor2" "0.164706 0.266667 0.309804" - "PortraitBackgroundColor3" "0.254902 0.541176 0.556863" - "PortraitBackgroundColor4" "0.000000 0.000000 0.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/tuskfolk/tuskfolk001a_f.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "369.171082 45.326221 177.126129" - "PortraitAngles" "7.690009 187.230118 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_water.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/tuskfolk/tuskfolk001b_f.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "224.792770 -135.066467 276.588318" - "PortraitAngles" "29.290001 150.830124 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_water.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/tuskfolk/tuskfolk001c_f.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "281.950043 -75.401611 217.701248" - "PortraitAngles" "18.089998 166.830170 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexteriornight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/gameplay/wardenpaper.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "86.001663 14.635841 48.204613" - "PortraitAngles" "19.690016 190.430115 0.000000" - "PortraitFOV" "10.256000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "1.805794 8.897464 53.885773" - "PortraitLightAngles" "64.053482 -178.772263 3.786871" - "PortraitLightFOV" "29.322001" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "217 216 216" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.274510 0.913725 1.000000" - "PortraitBackgroundColor2" "0.274510 0.913725 1.000000" - "PortraitBackgroundColor3" "0.274510 0.913725 1.000000" - "PortraitBackgroundColor4" "0.274510 0.913725 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_purple.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/gaoler/darkreef_gaoler.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "522.468567 112.990021 325.938782" - "PortraitAngles" "15.690003 194.030075 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 34.019657 387.350006" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "255 210 155" - "PortraitLightScale" "1.648000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 0.454902 0.090196" - "PortraitBackgroundColor2" "0.341176 1.000000 0.694118" - "PortraitBackgroundColor3" "0.341176 1.000000 0.694118" - "PortraitBackgroundColor4" "1.000000 0.454902 0.090196" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_water.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/blob/darkreef_blob_01.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "100.056023 441.802124 181.071396" - "PortraitAngles" "12.090031 256.829956 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 34.019657 387.350006" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "35 120 48" - "PortraitLightScale" "3.295000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "2.728000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.678431 1.000000 0.184314" - "PortraitBackgroundColor2" "0.341176 1.000000 0.694118" - "PortraitBackgroundColor3" "0.341176 1.000000 0.694118" - "PortraitBackgroundColor4" "0.678431 1.000000 0.184314" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexteriornight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/blob/darkreef_blob_02_small.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "589.451294 340.209564 109.183395" - "PortraitAngles" "0.490028 210.430115 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 34.019657 387.350006" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "35 120 48" - "PortraitLightScale" "3.295000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "2.728000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "0.341176 1.000000 0.694118" - "PortraitBackgroundColor3" "0.341176 1.000000 0.694118" - "PortraitBackgroundColor4" "0.000000 0.000000 0.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexteriornight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/meranth_guard/meranth_guard.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "160.342834 -54.270111 244.286865" - "PortraitAngles" "31.483950 163.251785 -17.639999" - "PortraitFOV" "24.763000" - "PortraitFar" "994.000000" - } - } - "PortraitLightPosition" "66.208466 -33.883713 262.190643" - "PortraitLightAngles" "59.593109 172.040665 105.739372" - "PortraitLightFOV" "49.790001" - "PortraitLightDistance" "268.700012" - "PortraitLightColor" "151 192 243" - "PortraitLightScale" "2.305000" - "PortraitShadowColor" "35 55 0" - "PortraitShadowScale" "5.221000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-9.384 144.695 -43.888" - "PortraitAmbientColor" "30 182 183" - "PortraitAmbientScale" "5.734000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.149020 0.117647 0.117647" - "PortraitBackgroundColor2" "0.000000 0.498039 1.000000" - "PortraitBackgroundColor3" "0.000000 1.000000 0.815686" - "PortraitBackgroundColor4" "0.000000 0.133333 0.239216" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/prisoner_swoledar/prisoner_swoledar.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "258.820313 -39.034023 186.384750" - "PortraitAngles" "10.683962 172.851608 5.039993" - "PortraitFOV" "24.763000" - "PortraitFar" "994.000000" - } - } - "PortraitLightPosition" "66.208466 -33.883713 262.190643" - "PortraitLightAngles" "59.593109 172.040665 105.739372" - "PortraitLightFOV" "49.790001" - "PortraitLightDistance" "268.700012" - "PortraitLightColor" "116 116 116" - "PortraitLightScale" "2.305000" - "PortraitShadowColor" "35 55 0" - "PortraitShadowScale" "5.221000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-9.384 144.695 -43.888" - "PortraitAmbientColor" "131 117 106" - "PortraitAmbientScale" "1.234000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.149020 0.117647 0.117647" - "PortraitBackgroundColor2" "0.000000 0.498039 1.000000" - "PortraitBackgroundColor3" "0.000000 0.764706 1.000000" - "PortraitBackgroundColor4" "0.000000 0.133333 0.239216" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/prisoner_swoledar/prisoner_swoledar02.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "254.748489 -97.658119 170.065262" - "PortraitAngles" "7.883964 158.851761 5.039993" - "PortraitFOV" "24.763000" - "PortraitFar" "994.000000" - } - } - "PortraitLightPosition" "66.208466 -33.883713 262.190643" - "PortraitLightAngles" "59.593109 172.040665 105.739372" - "PortraitLightFOV" "49.790001" - "PortraitLightDistance" "268.700012" - "PortraitLightColor" "116 116 116" - "PortraitLightScale" "2.305000" - "PortraitShadowColor" "35 55 0" - "PortraitShadowScale" "5.221000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-9.384 144.695 -43.888" - "PortraitAmbientColor" "131 117 106" - "PortraitAmbientScale" "1.234000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.149020 0.117647 0.117647" - "PortraitBackgroundColor2" "0.000000 0.498039 1.000000" - "PortraitBackgroundColor3" "0.000000 0.764706 1.000000" - "PortraitBackgroundColor4" "0.000000 0.133333 0.239216" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_brokenlight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/prisoner_swoledar/prisoner_swoledar03.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "366.905670 5.333752 148.083664" - "PortraitAngles" "4.283964 180.851532 5.039993" - "PortraitFOV" "24.763000" - "PortraitFar" "994.000000" - } - } - "PortraitLightPosition" "66.208466 -33.883713 262.190643" - "PortraitLightAngles" "59.593109 172.040665 105.739372" - "PortraitLightFOV" "49.790001" - "PortraitLightDistance" "268.700012" - "PortraitLightColor" "116 116 116" - "PortraitLightScale" "2.305000" - "PortraitShadowColor" "35 55 0" - "PortraitShadowScale" "5.221000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-9.384 144.695 -43.888" - "PortraitAmbientColor" "198 102 102" - "PortraitAmbientScale" "1.234000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.149020 0.117647 0.117647" - "PortraitBackgroundColor2" "1.000000 0.000000 0.031373" - "PortraitBackgroundColor3" "0.913725 0.000000 1.000000" - "PortraitBackgroundColor4" "0.000000 0.133333 0.239216" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/prisoner_swoledar/prisoner_swoledar04.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "211.065170 222.482635 175.869308" - "PortraitAngles" "9.883963 227.651489 5.039993" - "PortraitFOV" "24.763000" - "PortraitFar" "994.000000" - } - } - "PortraitLightPosition" "66.208466 -33.883713 262.190643" - "PortraitLightAngles" "59.593109 172.040665 105.739372" - "PortraitLightFOV" "49.790001" - "PortraitLightDistance" "268.700012" - "PortraitLightColor" "116 116 116" - "PortraitLightScale" "2.305000" - "PortraitShadowColor" "35 55 0" - "PortraitShadowScale" "5.221000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-9.384 144.695 -43.888" - "PortraitAmbientColor" "131 117 106" - "PortraitAmbientScale" "1.234000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.149020 0.117647 0.117647" - "PortraitBackgroundColor2" "0.000000 0.498039 1.000000" - "PortraitBackgroundColor3" "0.000000 0.764706 1.000000" - "PortraitBackgroundColor4" "0.000000 0.133333 0.239216" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/forest_bear/forest_bear.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "601.071899 -234.016907 106.335442" - "PortraitAngles" "1.190000 157.750061 0.000000" - "PortraitFOV" "15.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "254 249 240" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "239 167 167" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "0.300000 0.300000 0.300000" - "PortraitBackgroundColor3" "0.700000 0.700000 0.700000" - "PortraitBackgroundColor4" "0.300000 0.300000 0.300000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_forest.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/diregull/diregull.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "459.369995 -76.199997 142.399994" - "PortraitAngles" "9.190000 169.750000 0.000000" - "PortraitFOV" "15.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "221 255 252" - "PortraitLightScale" "1.585000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.129412 0.317647 0.023529" - "PortraitBackgroundColor2" "0.300008 0.300008 0.300008" - "PortraitBackgroundColor3" "0.709804 0.933333 0.874510" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexterior.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/darkreef/prisoner_crab/darkreef_prisoner_crab.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "349.377197 -114.488297 332.253479" - "PortraitAngles" "38.090019 159.630371 5.039993" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "58.985580 -23.150000 292.959351" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "217 167 247" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.555 -0.810 -0.187" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_purple.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/frostbitten/n_creep_frostbitten_shaman01.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "649.956177 126.472054 318.315338" - "PortraitAngles" "17.589989 193.349854 0.000000" - "PortraitFOV" "15.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "179 199 221" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/frostbitten/n_creep_frostbitten_swollen01.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "352.023315 83.781914 244.603638" - "PortraitAngles" "17.589987 193.349854 0.000000" - "PortraitFOV" "15.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "179 199 221" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "27 22 22" - "PortraitShadowScale" "1.756000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.515 0.830 -0.214" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "4.465000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/giant/ice_giant01.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "705.156006 -134.714417 -138.242218" - "PortraitAngles" "340.389984 169.750000 0.000000" - "PortraitFOV" "12.837000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "64.665001" - "PortraitLightDistance" "336.359985" - "PortraitLightColor" "202 202 202" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "45 31 31" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.000000 0.498039 0.835294" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluesky_gyro.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/ogreseal/ogreseal.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "291.250702 199.080109 345.397705" - "PortraitAngles" "20.789995 221.350098 0.000000" - "PortraitFOV" "24.229000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "167.996323 -26.108185 421.442078" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "179 199 221" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/ogreseal/ogreseal_undead.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "291.250702 199.080109 345.397705" - "PortraitAngles" "20.789995 221.350098 0.000000" - "PortraitFOV" "24.229000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "167.996323 -26.108185 421.442078" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "179 199 221" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "0.000000 1.000000 0.600000" - "PortraitBackgroundColor3" "0.980392 0.380392 0.858824" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_bluebloom.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/penguin/penguin.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "67.086113 51.671745 81.598038" - "PortraitAngles" "20.789993 221.350098 0.000000" - "PortraitFOV" "24.229000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "167.996323 -26.108185 421.442078" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "179 199 221" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_coolinterior.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/relict/relict.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "258.925323 -169.467941 57.042080" - "PortraitAngles" "349.190002 143.350067 0.000000" - "PortraitFOV" "24.229000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "167.996323 -26.108185 421.442078" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "179 199 221" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "5.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_slark.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/storegga/storegga.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "252.929169 219.337494 161.700378" - "PortraitAngles" "5.590010 222.149918 0.000000" - "PortraitFOV" "24.229000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "167.996323 -26.108185 421.442078" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "69.000000" - "PortraitLightDistance" "377.000000" - "PortraitLightColor" "179 199 221" - "PortraitLightScale" "2.850000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "5.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.904 0.371 -0.214" - "PortraitAmbientColor" "3 93 167" - "PortraitAmbientScale" "6.202000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.300008 0.300008 0.300008" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_underwater.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/undeadtusk/undead_tuskskeleton01.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "410.226532 79.388649 200.932877" - "PortraitAngles" "13.690006 189.630371 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor2" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor3" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor4" "0.388235 0.388235 0.388235" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexteriornight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/undeadtusk/undead_tuskskeleton02.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "158.483231 370.042816 196.657455" - "PortraitAngles" "14.090014 246.430573 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "1.000000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor2" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor3" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor4" "0.388235 0.388235 0.388235" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexteriornight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/undeadtusk/undead_tuskskeleton_armor01.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "342.096802 -322.455048 35.410965" - "PortraitAngles" "352.890015 136.830353 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "72 215 255" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor2" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor3" "0.388235 0.388235 0.388235" - "PortraitBackgroundColor4" "0.388235 0.388235 0.388235" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexteriornight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_biome/yak/yakyok.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "348.165314 199.353378 106.218689" - "PortraitAngles" "5.290011 210.830490 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "3.817000" - "PortraitShadowColor" "167 203 235" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.914 0.344 -0.214" - "PortraitAmbientColor" "71 181 255" - "PortraitAmbientScale" "6.445000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.000000 0.000000 0.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_whiteexteriornight.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/creeps/ice_boss/ice_boss_egg.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "-57.487949 212.053238 34.660862" - "PortraitAngles" "359.690002 285.230225 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "140.898422 2.266296 296.776184" - "PortraitLightAngles" "54.789997 -166.331360 0.000000" - "PortraitLightFOV" "49.076000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "242 255 253" - "PortraitLightScale" "3.160000" - "PortraitShadowColor" "115 177 232" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.914 0.344 -0.214" - "PortraitAmbientColor" "34 125 187" - "PortraitAmbientScale" "6.445000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.000000 0.000000 0.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_underwater.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/npc/npc_folks/chef_folk001.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "215.757019 -15.945593 71.186996" - "PortraitAngles" "334.090027 172.830414 11.160004" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 233.000000" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "223 226 255" - "PortraitLightScale" "5.527000" - "PortraitShadowColor" "20 19 19" - "PortraitShadowScale" "1.864000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-0.976 0.193 -0.096" - "PortraitAmbientColor" "46 143 196" - "PortraitAmbientScale" "4.393000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_purple.vmat" - "PortraitAnimationActivity" "ACT_DOTA_IDLE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/props_structures/aghanim_outpost.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "483.367493 37.716194 812.176086" - "PortraitAngles" "37.690010 184.430054 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "279.904907 -133.021133 721.532715" - "PortraitLightAngles" "54.790001 139.855438 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "1.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "1.000000 1.000000 1.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_gradient_top.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitPlayIdleExpression" "0" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } - "models/heroes/aghanim/aghanim_model.vmdl" - { - "cameras" - { - "Default" - { - "PortraitPosition" "363.305603 -0.790975 278.112701" - "PortraitAngles" "350.352570 179.537857 0.000000" - "PortraitFOV" "16.000000" - "PortraitFar" "1000.000000" - } - } - "PortraitLightPosition" "202.699997 -23.150000 308.170013" - "PortraitLightAngles" "54.790001 171.699997 0.000000" - "PortraitLightFOV" "120.000000" - "PortraitLightDistance" "336.000000" - "PortraitLightColor" "254 248 242" - "PortraitLightScale" "2.000000" - "PortraitShadowColor" "74 74 74" - "PortraitShadowScale" "10.000000" - "PortraitGroundShadowScale" "1.500000" - "PortraitAmbientDirection" "-79.070 -84.150 -25.320" - "PortraitAmbientColor" "79 108 108" - "PortraitAmbientScale" "1.000000" - "PortraitSpecularColor" "251 74 84" - "PortraitSpecularDirection" "0.000000 0.000000 -1.000000" - "PortraitSpecularPower" "16.000000" - "PortraitBackgroundColor1" "0.000000 0.000000 0.000000" - "PortraitBackgroundColor2" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor3" "1.000000 1.000000 1.000000" - "PortraitBackgroundColor4" "0.000000 0.000000 0.000000" - "PortraitBackgroundTexture" "materials/vgui/hud/heroportraits/portraitbackground_laboratory.vmat" - "PortraitAnimationActivity" "ACT_DOTA_CAPTURE" - "PortraitAnimationCycle" "0.000000" - "PortraitAnimationRate" "1.000000" - "PortraitPlayIdleExpression" "0" - "PortraitHideHero" "0" - "PortraitHideParticles" "0" - "PortraitHideDropShadow" "0" - "PortraitDesaturateParticles" "0" - "PortraitDesaturateHero" "1" - } -} diff --git a/aghanim_singleplayer/scripts/shops.txt b/aghanim_singleplayer/scripts/shops.txt deleted file mode 100755 index b1b022e..0000000 --- a/aghanim_singleplayer/scripts/shops.txt +++ /dev/null @@ -1,282 +0,0 @@ -"dota_shops" -{ - "consumables" - { - "item" "item_tpscroll" - "item" "item_clarity" - "item" "item_greater_clarity" - "item" "item_faerie_fire" - "item" "item_smoke_of_deceit" - "item" "item_ward_observer" - "item" "item_ward_sentry" - "item" "item_enchanted_mango" - "item" "item_flask" - "item" "item_greater_salve" - "item" "item_tango" - "item" "item_tome_of_knowledge" - "item" "item_dust" - "item" "item_bottle" - } - - "attributes" - { - "item" "item_branches" - - "item" "item_gauntlets" - "item" "item_slippers" - "item" "item_mantle" - - "item" "item_circlet" - - "item" "item_belt_of_strength" - "item" "item_boots_of_elves" - "item" "item_robe" - - "item" "item_crown" - - "item" "item_ogre_axe" - "item" "item_blade_of_alacrity" - "item" "item_staff_of_wizardry" - "item" "item_river_painter7" - "item" "item_river_painter6" - "item" "item_river_painter5" - "item" "item_river_painter4" - "item" "item_river_painter3" - "item" "item_river_painter2" - "item" "item_river_painter" - } - - "weapons_armor" - { - "item" "item_ring_of_protection" - "item" "item_stout_shield" - "item" "item_quelling_blade" - "item" "item_infused_raindrop" - "item" "item_orb_of_venom" - "item" "item_blight_stone" - "item" "item_blades_of_attack" - "item" "item_chainmail" - "item" "item_quarterstaff" - "item" "item_helm_of_iron_will" - "item" "item_broadsword" - "item" "item_javelin" - "item" "item_claymore" - "item" "item_mithril_hammer" - } - - "misc" - { - "item" "item_magic_stick" - "item" "item_wind_lace" - "item" "item_ring_of_regen" - "item" "item_sobi_mask" - "item" "item_boots" - "item" "item_gloves" - "item" "item_cloak" - "item" "item_ring_of_tarrasque" - "item" "item_gem" - "item" "item_lifesteal" - "item" "item_shadow_amulet" - "item" "item_ghost" - "item" "item_blink" - } - - // Level 1 - Green Recipes - "basics" - { - "item" "item_magic_wand" - "item" "item_null_talisman" - "item" "item_wraith_band" - "item" "item_bracer" - "item" "item_soul_ring" - "item" "item_power_treads" - "item" "item_phase_boots" - "item" "item_oblivion_staff" - "item" "item_pers" - "item" "item_mask_of_madness" - "item" "item_helm_of_the_dominator" - "item" "item_hand_of_midas" - "item" "item_travel_boots" - "item" "item_moon_shard" - } - - // Level 2 - Blue Recipes - "support" - { - "item" "item_ring_of_basilius" - "item" "item_headdress" - "item" "item_buckler" - "item" "item_urn_of_shadows" - "item" "item_tranquil_boots" - "item" "item_medallion_of_courage" - "item" "item_arcane_boots" - "item" "item_ancient_janggo" - "item" "item_vladmir" - "item" "item_mekansm" - "item" "item_holy_locket" - "item" "item_spirit_vessel" - "item" "item_pipe" - "item" "item_guardian_greaves" - } - - "magics" - { - "item" "item_glimmer_cape" - "item" "item_veil_of_discord" - "item" "item_force_staff" - "item" "item_aether_lens" - "item" "item_necronomicon" - "item" "item_dagon" - "item" "item_cyclone" - "item" "item_rod_of_atos" - "item" "item_solar_crest" - "item" "item_orchid" - "item" "item_ultimate_scepter" - "item" "item_nullifier" - "item" "item_refresher" - "item" "item_sheepstick" - "item" "item_octarine_core" - } - - // Level 3 - Purple Recipes - "defense" - { - "item" "item_hood_of_defiance" - "item" "item_vanguard" - "item" "item_blade_mail" - "item" "item_soul_booster" - "item" "item_aeon_disk" - "item" "item_crimson_guard" - "item" "item_lotus_orb" - "item" "item_black_king_bar" - "item" "item_hurricane_pike" - "item" "item_shivas_guard" - "item" "item_manta" - "item" "item_bloodstone" - "item" "item_sphere" - "item" "item_heart" - "item" "item_assault" - } - - "weapons" - { - "item" "item_lesser_crit" - "item" "item_armlet" - "item" "item_meteor_hammer" - "item" "item_invis_sword" - "item" "item_basher" - "item" "item_monkey_king_bar" - "item" "item_bfury" - "item" "item_ethereal_blade" - "item" "item_radiance" - "item" "item_greater_crit" - "item" "item_butterfly" - "item" "item_silver_edge" - "item" "item_rapier" - "item" "item_abyssal_blade" - "item" "item_bloodthorn" - } - - // Level 4 - Orange / Orb / Artifacts - "artifacts" - { - "item" "item_dragon_lance" - "item" "item_sange" - "item" "item_yasha" - "item" "item_kaya" - "item" "item_echo_sabre" - "item" "item_maelstrom" - "item" "item_diffusal_blade" - "item" "item_heavens_halberd" - "item" "item_desolator" - "item" "item_kaya_and_sange" - "item" "item_sange_and_yasha" - "item" "item_yasha_and_kaya" - "item" "item_satanic" - "item" "item_skadi" - "item" "item_mjollnir" - } - - "sideshop1" - { - "item" "item_tpscroll" - "item" "item_magic_stick" - "item" "item_quelling_blade" - "item" "item_boots" - "item" "item_boots_of_elves" - "item" "item_belt_of_strength" - "item" "item_robe" - "item" "item_crown" - } - - "sideshop2" - { - "item" "item_gloves" - "item" "item_chainmail" - "item" "item_cloak" - "item" "item_void_stone" - "item" "item_helm_of_iron_will" - "item" "item_energy_booster" - "item" "item_vitality_booster" - "item" "item_lifesteal" - "item" "item_broadsword" - "item" "item_blink" - } - - "secretshop" - { - "item" "item_ring_of_health" - "item" "item_void_stone" - "item" "item_energy_booster" - "item" "item_vitality_booster" - "item" "item_point_booster" - "item" "item_platemail" - "item" "item_talisman_of_evasion" - "item" "item_hyperstone" - "item" "item_ultimate_orb" - "item" "item_demon_edge" - "item" "item_mystic_staff" - "item" "item_reaver" - "item" "item_eagle" - "item" "item_relic" - } - - "pregame" - { - "item" "item_clarity" - "item" "item_faerie_fire" - "item" "item_enchanted_mango" - "item" "item_tango" - "item" "item_flask" - "item" "item_smoke_of_deceit" - "item" "item_dust" - "item" "item_courier" - "item" "item_ward_observer" - "item" "item_ward_sentry" - "item" "item_branches" - "item" "item_gauntlets" - "item" "item_slippers" - "item" "item_mantle" - "item" "item_circlet" - "item" "item_recipe_magic_wand" - "item" "item_ring_of_protection" - "item" "item_stout_shield" - "item" "item_quelling_blade" - "item" "item_blight_stone" - "item" "item_orb_of_venom" - "item" "item_wind_lace" - "item" "item_magic_stick" - "item" "item_sobi_mask" - "item" "item_ring_of_regen" - "item" "item_boots" - "item" "item_gloves" - "item" "item_crown" - "item" "item_wraith_band" - "item" "item_null_talisman" - "item" "item_bracer" - "item" "item_blades_of_attack" - "item" "item_ring_of_basilius" - "item" "item_buckler" - "item" "item_headdress" - } -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/shops/main_shops.txt b/aghanim_singleplayer/scripts/shops/main_shops.txt deleted file mode 100755 index 2d4b65c..0000000 --- a/aghanim_singleplayer/scripts/shops/main_shops.txt +++ /dev/null @@ -1,289 +0,0 @@ -"dota_shops" -{ - "custom" - { - "boss_shop" - { - "1" - { - "item" "item_life_rune" - "item" "item_small_scepter_fragment" - "item" "item_book_of_strength" - "item" "item_book_of_agility" - "item" "item_book_of_intelligence" - "item" "item_purification_potion" - "item" "item_ravage_potion" - "item" "item_echo_slam_potion" - "item" "item_arcanist_potion" - "item" "item_dragon_potion" - } - "2" - { - - } - } - } - - - "attributes" - { - "item" "item_branches" - - "item" "item_gauntlets" - "item" "item_slippers" - "item" "item_mantle" - - "item" "item_circlet" - - "item" "item_belt_of_strength" - "item" "item_boots_of_elves" - "item" "item_robe" - - "item" "item_crown" - - "item" "item_ogre_axe" - "item" "item_blade_of_alacrity" - "item" "item_staff_of_wizardry" - "item" "item_river_painter7" - "item" "item_river_painter6" - "item" "item_river_painter5" - "item" "item_river_painter4" - "item" "item_river_painter3" - "item" "item_river_painter2" - "item" "item_river_painter" - } - - "weapons_armor" - { - "item" "item_ring_of_protection" - "item" "item_stout_shield" - "item" "item_quelling_blade" - "item" "item_infused_raindrop" - "item" "item_orb_of_venom" - "item" "item_blight_stone" - "item" "item_blades_of_attack" - "item" "item_chainmail" - "item" "item_quarterstaff" - "item" "item_helm_of_iron_will" - "item" "item_broadsword" - "item" "item_javelin" - "item" "item_claymore" - "item" "item_mithril_hammer" - } - - "misc" - { - "item" "item_magic_stick" - "item" "item_wind_lace" - "item" "item_ring_of_regen" - "item" "item_sobi_mask" - "item" "item_boots" - "item" "item_gloves" - "item" "item_cloak" - "item" "item_ring_of_tarrasque" - "item" "item_gem" - "item" "item_lifesteal" - "item" "item_shadow_amulet" - "item" "item_ghost" - "item" "item_blink" - } - - // Level 1 - Green Recipes - "basics" - { - "item" "item_magic_wand" - "item" "item_null_talisman" - "item" "item_wraith_band" - "item" "item_bracer" - "item" "item_soul_ring" - "item" "item_power_treads" - "item" "item_phase_boots" - "item" "item_oblivion_staff" - "item" "item_pers" - "item" "item_mask_of_madness" - "item" "item_helm_of_the_dominator" - "item" "item_hand_of_midas" - "item" "item_travel_boots" - "item" "item_moon_shard" - } - - // Level 2 - Blue Recipes - "support" - { - "item" "item_ring_of_basilius" - "item" "item_headdress" - "item" "item_buckler" - "item" "item_urn_of_shadows" - "item" "item_tranquil_boots" - "item" "item_medallion_of_courage" - "item" "item_arcane_boots" - "item" "item_ancient_janggo" - "item" "item_vladmir" - "item" "item_mekansm" - "item" "item_holy_locket" - "item" "item_spirit_vessel" - "item" "item_pipe" - "item" "item_guardian_greaves" - } - - "magics" - { - "item" "item_glimmer_cape" - "item" "item_veil_of_discord" - "item" "item_force_staff" - "item" "item_aether_lens" - "item" "item_necronomicon" - "item" "item_dagon" - "item" "item_cyclone" - "item" "item_rod_of_atos" - "item" "item_solar_crest" - "item" "item_orchid" - "item" "item_ultimate_scepter" - "item" "item_nullifier" - "item" "item_refresher" - "item" "item_sheepstick" - "item" "item_octarine_core" - } - - // Level 3 - Purple Recipes - "defense" - { - "item" "item_hood_of_defiance" - "item" "item_vanguard" - "item" "item_blade_mail" - "item" "item_soul_booster" - "item" "item_aeon_disk" - "item" "item_crimson_guard" - "item" "item_lotus_orb" - "item" "item_black_king_bar" - "item" "item_hurricane_pike" - "item" "item_shivas_guard" - "item" "item_manta" - "item" "item_bloodstone" - "item" "item_sphere" - "item" "item_heart" - "item" "item_assault" - } - - "weapons" - { - "item" "item_lesser_crit" - "item" "item_armlet" - "item" "item_meteor_hammer" - "item" "item_invis_sword" - "item" "item_basher" - "item" "item_monkey_king_bar" - "item" "item_bfury" - "item" "item_ethereal_blade" - "item" "item_radiance" - "item" "item_greater_crit" - "item" "item_butterfly" - "item" "item_silver_edge" - "item" "item_rapier" - "item" "item_abyssal_blade" - "item" "item_bloodthorn" - } - - // Level 4 - Orange / Orb / Artifacts - "artifacts" - { - "item" "item_dragon_lance" - "item" "item_sange" - "item" "item_yasha" - "item" "item_kaya" - "item" "item_echo_sabre" - "item" "item_maelstrom" - "item" "item_diffusal_blade" - "item" "item_heavens_halberd" - "item" "item_desolator" - "item" "item_kaya_and_sange" - "item" "item_sange_and_yasha" - "item" "item_yasha_and_kaya" - "item" "item_satanic" - "item" "item_skadi" - "item" "item_mjollnir" - } - - "sideshop1" - { - "item" "item_tpscroll" - "item" "item_magic_stick" - "item" "item_quelling_blade" - "item" "item_boots" - "item" "item_boots_of_elves" - "item" "item_belt_of_strength" - "item" "item_robe" - "item" "item_crown" - } - - "sideshop2" - { - "item" "item_gloves" - "item" "item_chainmail" - "item" "item_cloak" - "item" "item_void_stone" - "item" "item_helm_of_iron_will" - "item" "item_energy_booster" - "item" "item_vitality_booster" - "item" "item_lifesteal" - "item" "item_broadsword" - "item" "item_blink" - } - - "secretshop" - { - "item" "item_ring_of_health" - "item" "item_void_stone" - "item" "item_energy_booster" - "item" "item_vitality_booster" - "item" "item_point_booster" - "item" "item_platemail" - "item" "item_talisman_of_evasion" - "item" "item_hyperstone" - "item" "item_ultimate_orb" - "item" "item_demon_edge" - "item" "item_mystic_staff" - "item" "item_reaver" - "item" "item_eagle" - "item" "item_relic" - } - - "pregame" - { - "item" "item_clarity" - "item" "item_faerie_fire" - "item" "item_enchanted_mango" - "item" "item_tango" - "item" "item_flask" - "item" "item_smoke_of_deceit" - "item" "item_dust" - "item" "item_courier" - "item" "item_ward_observer" - "item" "item_ward_sentry" - "item" "item_branches" - "item" "item_gauntlets" - "item" "item_slippers" - "item" "item_mantle" - "item" "item_circlet" - "item" "item_recipe_magic_wand" - "item" "item_ring_of_protection" - "item" "item_stout_shield" - "item" "item_quelling_blade" - "item" "item_blight_stone" - "item" "item_orb_of_venom" - "item" "item_wind_lace" - "item" "item_magic_stick" - "item" "item_sobi_mask" - "item" "item_ring_of_regen" - "item" "item_boots" - "item" "item_gloves" - "item" "item_crown" - "item" "item_wraith_band" - "item" "item_null_talisman" - "item" "item_bracer" - "item" "item_blades_of_attack" - "item" "item_ring_of_basilius" - "item" "item_buckler" - "item" "item_headdress" - } -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/soundscapes_aghanim.txt b/aghanim_singleplayer/scripts/soundscapes_aghanim.txt deleted file mode 100755 index 3f70830..0000000 --- a/aghanim_singleplayer/scripts/soundscapes_aghanim.txt +++ /dev/null @@ -1,27 +0,0 @@ - -//default -"default_aghanim" -{ - "dsp" "0" - "fadetime" "3" - "Soundmixer" "Aghanim_Mix" - - "playlooping" - { - "volume" ".4" - "pitch" "100" - "wave" "sounds/ambient/soundscapes/temple_lp.vsnd" - } - "playrandom" - { - "volume" "0.4, 0.6" - "pitch" "95, 105" - "time" "18, 24" - "position" "random" - "rndwave" - { - "wave" "sounds/ambient/soundscapes/temple_drone.vsnd" - "wave" "sounds/ambient/soundscapes/deathmaze_drone.vsnd" - } - } -} diff --git a/aghanim_singleplayer/scripts/soundscapes_manifest.txt b/aghanim_singleplayer/scripts/soundscapes_manifest.txt deleted file mode 100755 index 40533db..0000000 --- a/aghanim_singleplayer/scripts/soundscapes_manifest.txt +++ /dev/null @@ -1,8 +0,0 @@ -soundscapes_manifest -{ - // List additional soundscape files here - - "file" "scripts/soundscapes_aghanim.txt" - "file" "scripts/soundscapes_dota.txt" -} - diff --git a/aghanim_singleplayer/scripts/talker/response_rules_aghanim.txt b/aghanim_singleplayer/scripts/talker/response_rules_aghanim.txt deleted file mode 100755 index 9d46022..0000000 --- a/aghanim_singleplayer/scripts/talker/response_rules_aghanim.txt +++ /dev/null @@ -1,222 +0,0 @@ -criterion "Isaghanim" "classname" "npc_dota_boss_aghanim" weight 5 required -criterion "IsEnemyaghanim" "targetclassname" "npc_dota_boss_aghanim" weight 5 required -criterion "IsAllyaghanim" "nearby_ally" "npc_dota_boss_aghanim" weight 5 required -criterion "IsBossIntro" "announce_event" "boss_intro" weight 5 required -criterion "IsBested" "announce_event" "bested" weight 5 required -criterion "IsLaugh" "announce_event" "laugh" weight 5 required -criterion "IsAbilityUse" "announce_event" "ability_use" weight 5 required -criterion "IsCrystalAttack" "ability_name" "aghanim_crystal_attack" weight 5 required -criterion "IsStaffBeams" "ability_name" "aghanim_staff_beams" weight 5 required -criterion "IsBlink" "ability_name" "aghanim_blink" weight 5 required -criterion "IsSummonPortals" "ability_name" "aghanim_summon_portals" weight 5 required -criterion "IsSpellSwap" "ability_name" "aghanim_spell_swap" weight 5 required -criterion "IsShardAttack" "ability_name" "aghanim_shard_attack" weight 5 required - -Response aghanim_CustomIsBossIntro -{ - scene "scenes/aghanim/aghanim_aghs_battle_intro_01.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_battle_intro_03.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_battle_intro_04.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_battle_intro_05.vcd" nodelay noscene -} - -Rule aghanim_CustomIsBossIntro_Rule -{ - criteria Custom Isaghanim IsBossIntro - response aghanim_CustomIsBossIntro -} - -Response aghanim_CustomIsBossIntroChance_10% -{ - scene "scenes/aghanim/aghanim_aghs_battle_intro_02.vcd" nodelay noscene -} - -Rule aghanim_CustomIsBossIntroChance_10%_Rule -{ - criteria Custom Isaghanim IsBossIntro Chance_10% - response aghanim_CustomIsBossIntroChance_10% -} - -Response aghanim_CustomIsAbilityUseIsCrystalAttack -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_01.vcd" nodelay noscene defaultdelay respeakdelay 60 - scene "scenes/aghanim/aghanim_aghs_conjures_magic_01.vcd" nodelay noscene defaultdelay respeakdelay 60 -} - -Rule aghanim_CustomIsAbilityUseIsCrystalAttack_Rule -{ - criteria Custom Isaghanim IsAbilityUse IsCrystalAttack - response aghanim_CustomIsAbilityUseIsCrystalAttack -} - -Response aghanim_CustomIsAbilityUse -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_02.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_battle_bark_06.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_battle_bark_07.vcd" nodelay noscene defaultdelay respeakdelay 20 -} - -Rule aghanim_CustomIsAbilityUse_Rule -{ - criteria Custom Isaghanim IsAbilityUse - response aghanim_CustomIsAbilityUse -} - -Response aghanim_CustomIsAbilityUseIsSpellSwap -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_03.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_teleportation_03.vcd" nodelay noscene defaultdelay respeakdelay 20 -} - -Rule aghanim_CustomIsAbilityUseIsSpellSwap_Rule -{ - criteria Custom Isaghanim IsAbilityUse IsSpellSwap - response aghanim_CustomIsAbilityUseIsSpellSwap -} - -Response aghanim_CustomIsAbilityUseIsShardAttack -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_04.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_teleportation_02.vcd" nodelay noscene defaultdelay respeakdelay 20 -} - -Rule aghanim_CustomIsAbilityUseIsShardAttack_Rule -{ - criteria Custom Isaghanim IsAbilityUse IsShardAttack - response aghanim_CustomIsAbilityUseIsShardAttack -} - -Response aghanim_CustomIsAbilityUseIsBlink -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_05.vcd" nodelay noscene defaultdelay respeakdelay 60 - scene "scenes/aghanim/aghanim_aghs_teleportation_01.vcd" nodelay noscene defaultdelay respeakdelay 20 -} - -Rule aghanim_CustomIsAbilityUseIsBlink_Rule -{ - criteria Custom Isaghanim IsAbilityUse IsBlink - response aghanim_CustomIsAbilityUseIsBlink -} - -Response aghanim_CustomIsAbilityUseIsStaffBeams -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_08.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_conjures_magic_02.vcd" nodelay noscene defaultdelay respeakdelay 20 -} - -Rule aghanim_CustomIsAbilityUseIsStaffBeams_Rule -{ - criteria Custom Isaghanim IsAbilityUse IsStaffBeams - response aghanim_CustomIsAbilityUseIsStaffBeams -} - -Response aghanim_CustomIsAbilityUseIsSummonPortals -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_09.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_conjures_magic_03.vcd" nodelay noscene defaultdelay respeakdelay 20 -} - -Rule aghanim_CustomIsAbilityUseIsSummonPortals_Rule -{ - criteria Custom Isaghanim IsAbilityUse IsSummonPortals - response aghanim_CustomIsAbilityUseIsSummonPortals -} - -Response aghanim_CustomIsLaugh -{ - scene "scenes/aghanim/aghanim_aghs_battle_bark_laugh_01.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_battle_bark_laugh_02.vcd" nodelay noscene defaultdelay respeakdelay 20 - scene "scenes/aghanim/aghanim_aghs_battle_bark_laugh_03.vcd" nodelay noscene defaultdelay respeakdelay 20 -} - -Rule aghanim_CustomIsLaugh_Rule -{ - criteria Custom Isaghanim IsLaugh - response aghanim_CustomIsLaugh -} - -Response aghanim_CustomIsHeroKilled -{ - scene "scenes/aghanim/aghanim_aghs_kills_hero_final_battle_01.vcd" nodelay noscene speakonce - scene "scenes/aghanim/aghanim_aghs_kills_hero_final_battle_02.vcd" nodelay noscene speakonce - scene "scenes/aghanim/aghanim_aghs_kills_hero_final_battle_03.vcd" nodelay noscene speakonce - scene "scenes/aghanim/aghanim_aghs_kills_hero_final_battle_04.vcd" nodelay noscene speakonce -} - -Rule aghanim_CustomIsHeroKilled_Rule -{ - criteria Custom Isaghanim IsHeroKilled - response aghanim_CustomIsHeroKilled -} - -Response aghanim_CustomIsBested -{ - scene "scenes/aghanim/aghanim_aghs_bested_noise_01.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_bested_noise_02.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_bested_noise_final_01.vcd" nodelay noscene -} - -Rule aghanim_CustomIsBested_Rule -{ - criteria Custom Isaghanim IsBested - response aghanim_CustomIsBested -} - -Response aghanim_CustomIsTeamWipe -{ - scene "scenes/aghanim/aghanim_aghs_beats_player_01.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_beats_player_02.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_beats_player_03.vcd" nodelay noscene -} - -Rule aghanim_CustomIsTeamWipe_Rule -{ - criteria Custom Isaghanim IsTeamWipe - response aghanim_CustomIsTeamWipe -} - -Response aghanim_CustomIsAghanimLosesIsAscension0 -{ - scene "scenes/aghanim/aghanim_aghs_player_beats_aghs_lvl_1_01.vcd" nodelay noscene -} - -Rule aghanim_CustomIsAghanimLosesIsAscension0_Rule -{ - criteria Custom Isaghanim IsAghanimLoses IsAscension0 - response aghanim_CustomIsAghanimLosesIsAscension0 -} - -Response aghanim_CustomIsAghanimLosesIsAscension1 -{ - scene "scenes/aghanim/aghanim_aghs_player_beats_aghs_lvl_2_01.vcd" nodelay noscene -} - -Rule aghanim_CustomIsAghanimLosesIsAscension1_Rule -{ - criteria Custom Isaghanim IsAghanimLoses IsAscension1 - response aghanim_CustomIsAghanimLosesIsAscension1 -} - -Response aghanim_CustomIsAghanimLosesIsAscension2 -{ - scene "scenes/aghanim/aghanim_aghs_player_beats_aghs_lvl_3_01.vcd" nodelay noscene - scene "scenes/aghanim/aghanim_aghs_player_beats_aghs_lvl_4_01.vcd" nodelay noscene -} - -Rule aghanim_CustomIsAghanimLosesIsAscension2_Rule -{ - criteria Custom Isaghanim IsAghanimLoses IsAscension2 - response aghanim_CustomIsAghanimLosesIsAscension2 -} - -Response aghanim_CustomIsAghanimLosesIsAscension3 -{ - scene "scenes/aghanim/aghanim_aghs_player_beats_aghs_lvl_5_01.vcd" nodelay noscene -} - -Rule aghanim_CustomIsAghanimLosesIsAscension3_Rule -{ - criteria Custom Isaghanim IsAghanimLoses IsAscension3 - response aghanim_CustomIsAghanimLosesIsAscension3 -} - diff --git a/aghanim_singleplayer/scripts/talker/response_rules_announcer_aghanim.txt b/aghanim_singleplayer/scripts/talker/response_rules_announcer_aghanim.txt deleted file mode 100755 index 8ecde84..0000000 --- a/aghanim_singleplayer/scripts/talker/response_rules_announcer_aghanim.txt +++ /dev/null @@ -1,1463 +0,0 @@ -criterion "Isannouncer_aghanim" "classname" "npc_dota_announcer_aghanim" weight 5 required -criterion "IsEnemyannouncer_aghanim" "targetclassname" "npc_dota_announcer_aghanim" weight 5 required -criterion "IsAllyannouncer_aghanim" "nearby_ally" "npc_dota_announcer_aghanim" weight 5 required -criterion "IsDisabled" "disabled" "1" weight 5 required -criterion "NoNewPlayers" "has_new_players" "0" weight 5 required -criterion "HasNewPlayers" "has_new_players" "1" weight 5 required -criterion "IsStartingHeroSelection" "announce_event" "hero_selection" weight 5 required -criterion "IsHeroSelected" "announce_event" "hero_selected" weight 5 required -criterion "IsGameStart" "announce_event" "game_started" weight 5 required -criterion "IsRoomSuccess" "announce_event" "encounter_completed" weight 5 required -criterion "IsRoomChoice" "announce_event" "encounter_selected" weight 5 required -criterion "IsRoomStarted" "announce_event" "encounter_started" weight 5 required -criterion "IsNormalRoom" "encounter_type" "2" weight 5 required -criterion "IsTrapRoom" "encounter_type" "3" weight 5 required -criterion "IsBossRoom" "encounter_type" "4" weight 5 required -criterion "IsEmptyRoom" "encounter_type" "5" weight 5 required -criterion "IsRewardRoom" "encounter_type" "6" weight 5 required -criterion "IsTeamWipe" "announce_event" "game_lost" weight 5 required -criterion "IsVictory" "announce_event" "game_won" weight 5 required -criterion "IsItemPurchase" "announce_event" "item_purchased" weight 5 required -criterion "IsRewardSelectionAvailable" "announce_event" "select_rewards" weight 5 required -criterion "IsRewardSelected" "announce_event" "reward_selected" weight 5 required -criterion "IsMajorAbilityUpgrade" "reward_type" "REWARD_TYPE_ABILITY_UPGRADE" weight 5 required -criterion "IsMinorAbilityUpgrade" "reward_type" "REWARD_TYPE_MINOR_ABILITY_UPGRADE" weight 5 required -criterion "IsMinorStatsUpgrade" "reward_type" "REWARD_TYPE_MINOR_STATS_UPGRADE" weight 5 required -criterion "IsDepth1" "depth" "1" weight 5 required -criterion "IsDepth2" "depth" "2" weight 5 required -criterion "IsDepth3" "depth" "3" weight 5 required -criterion "IsAscension0" "ascension_level" "0" weight 5 required -criterion "IsAscension1" "ascension_level" "1" weight 5 required -criterion "IsAscension2" "ascension_level" "2" weight 5 required -criterion "IsAscension3" "ascension_level" "3" weight 5 required -criterion "IsTournamentMode" "tournament_mode" "1" weight 5 required -criterion "IsCreatureKilled" "announce_event" "creature_killed" weight 5 required -criterion "IsBoss" "boss" "1" weight 5 required -criterion "IsCaptain" "captain" "1" weight 5 required -criterion "IsHeroSniper" "hero_name" "npc_dota_hero_sniper" weight 5 required -criterion "IsHeroWeaver" "hero_name" "npc_dota_hero_weaver" weight 5 required -criterion "IsHeroDisruptor" "hero_name" "npc_dota_hero_disruptor" weight 5 required -criterion "IsHeroUrsa" "hero_name" "npc_dota_hero_ursa" weight 5 required -criterion "IsHeroMars" "hero_name" "npc_dota_hero_mars" weight 5 required -criterion "IsHeroViper" "hero_name" "npc_dota_hero_viper" weight 5 required -criterion "IsHeroTusk" "hero_name" "npc_dota_hero_tusk" weight 5 required -criterion "IsHeroSnapfire" "hero_name" "npc_dota_hero_snapfire" weight 5 required -criterion "IsHeroOmniknight" "hero_name" "npc_dota_hero_omniknight" weight 5 required -criterion "IsHeroWinterWyvern" "hero_name" "npc_dota_hero_winter_wyvern" weight 5 required -criterion "IsHeroMagnus" "hero_name" "npc_dota_hero_magnataur" weight 5 required -criterion "IsHeroWitchDoctor" "hero_name" "npc_dota_hero_witch_doctor" weight 5 required -criterion "IsIntroEncounter" "encounter_name" "encounter_starting_room" weight 5 required -criterion "IsQuillBoarEncounter" "encounter_name" "encounter_quill_beasts" weight 5 required -criterion "IsDazzleEncounter" "encounter_name" "encounter_wildwings" weight 5 required -criterion "IsScarabEncounter" "encounter_name" "encounter_zealot_scarabs" weight 5 required -criterion "IsMorphlingEncounter" "encounter_name" "encounter_morphlings_b" weight 5 required -criterion "IsTuskSkeletonEncounter" "encounter_name" "encounter_tusk_skeletons" weight 5 required -criterion "IsBomberEncounter" "encounter_name" "encounter_bombers" weight 5 required -criterion "IsOgreSealEncounter" "encounter_name" "encounter_ogre_seals" weight 5 required -criterion "IsTempleGuardiansEncounter" "encounter_name" "encounter_temple_guardians" weight 5 required -criterion "IsTimbersawBossEncounter" "encounter_name" "encounter_boss_timbersaw" weight 5 required -criterion "IsStoreggaBossEncounter" "encounter_name" "encounter_storegga" weight 5 required -criterion "IsDireSiegeEncounter" "encounter_name" "encounter_dire_siege" weight 5 required -criterion "IsWarlocksEncounter" "encounter_name" "encounter_warlocks" weight 5 required -criterion "IsChickenEncounter" "encounter_name" "encounter_bonus_chicken" weight 5 required -criterion "IsRockGolemEncounter" "encounter_name" "encounter_rock_golems" weight 5 required -criterion "IsRoshanEncounter" "encounter_name" "encounter_fire_roshan" weight 5 required -criterion "IsPickNumber4" "pick_number" "4" weight 5 required -criterion "IsMushroomMinesEncounter" "encounter_name" "encounter_mushroom_mines" weight 5 required -criterion "IsBombSquadEncounter" "encounter_name" "encounter_bomb_squad" weight 5 required -criterion "IsPudge" "encounter_name" "encounter_pudge_miniboss" weight 5 required -criterion "IsAghanimEncounter" "encounter_name" "encounter_aghanim" weight 5 required -criterion "IsVoidSpiritBossEncounter" "encounter_name" "encounter_boss_void_spirit" weight 5 required -criterion "IsMortyEncounter" "encounter_name" "encounter_morty_transition" weight 5 required -criterion "IsTempleGuardian" "unit" "npc_dota_creature_temple_guardian" weight 5 required -criterion "IsElite" "elite" "1" weight 5 required -criterion "IsHeroKilled" "announce_event" "hero_killed" weight 5 required -criterion "IsLastLife" "respawns_remaining" "0" weight 5 required -criterion "IsActBossStoregga" "act_boss" "npc_dota_creature_storegga" weight 5 required -criterion "IsActBossVoidSpirit" "act_boss" "npc_dota_boss_void_spirit" weight 5 required -criterion "IsCowardly" "announce_event" "hero_cowardly" weight 5 required -criterion "IsAghanimLoses" "announce_event" "victory_speech" weight 5 required -criterion "IsLagging" "announce_event" "lagging_hero" weight 5 required -criterion "IsNotElite" "elite" "0" weight 5 required -criterion "IsEncounterFireMaze" "encounter_name" "encounter_jungle_fire_maze" weight 5 required - -Response announcer_aghanim_CustomIsRewardSelectionAvailableNoNewPlayersIsAscension0IsDepth1 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_intro_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectionAvailableNoNewPlayersIsAscension0IsDepth1_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelectionAvailable NoNewPlayers IsAscension0 IsDepth1 - response announcer_aghanim_CustomIsRewardSelectionAvailableNoNewPlayersIsAscension0IsDepth1 -} - -Response announcer_aghanim_CustomIsGameStartIsAscension0HasNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_abridged_pt3_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsGameStartIsAscension0HasNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsGameStart IsAscension0 HasNewPlayers - response announcer_aghanim_CustomIsGameStartIsAscension0HasNewPlayers -} - -Response announcer_aghanim_CustomIsStartingHeroSelection -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_hero_select_start_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_hero_select_start_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_hero_select_start_04.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_hero_select_start_05.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_hero_select_start_06.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsStartingHeroSelection_Rule -{ - criteria Custom Isannouncer_aghanim IsStartingHeroSelection - response announcer_aghanim_CustomIsStartingHeroSelection -} - -Response announcer_aghanim_CustomIsDisabled -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_hero_select_start_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_fire_maze_02.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_agh_story_time_1_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_story_time_2_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_story_time_3_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_story_time_4_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_story_time_5_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_shopkeeper_bristleback_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_fire_maze_03.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_intro_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_intro_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_intro_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_intro_01_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_intro_02_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_intro_03_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_room_choice_mystery_encounter_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_room_choice_mystery_encounter_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_room_choice_mystery_encounter_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_mushroom_mines_intro_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_choose_difficulty_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_choose_difficulty_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_choose_difficulty_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_choose_difficulty_04.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_choose_difficulty_05.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_ii_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_temple_guardians_intro_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_morphlings_intro_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_morphlings_intro_01_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_morphlings_intro_01_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_01_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_03.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_03_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_04.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_05.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_06.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_06_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_07.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_07_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_08.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_ability_select_09.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_explain_room_choice_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_explain_room_choice_01_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_fire_maze_follow_up_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_temple_arena_intro_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_temple_arena_success_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsDisabled_Rule -{ - criteria Custom Isannouncer_aghanim IsDisabled - response announcer_aghanim_CustomIsDisabled -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroWeaverNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_weaver_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_weaver_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroWeaverNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroWeaver NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroWeaverNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroWinterWyvernNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_wyvern_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_wyvern_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroWinterWyvernNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroWinterWyvern NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroWinterWyvernNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroTuskNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_tusk_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroTuskNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroTusk NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroTuskNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroMarsNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_mars_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroMarsNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroMars NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroMarsNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroWitchDoctorNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_witch_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_witch_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroWitchDoctorNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroWitchDoctor NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroWitchDoctorNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroMagnusNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_magnus_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroMagnusNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroMagnus NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroMagnusNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroMagnusChance_25%NoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_magnus_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroMagnusChance_25%NoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroMagnus Chance_25% NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroMagnusChance_25%NoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroSnapfireNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_snapfire_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroSnapfireNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroSnapfire NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroSnapfireNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroSnapfireChance_25%NoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_snapfire_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroSnapfireChance_25%NoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroSnapfire Chance_25% NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroSnapfireChance_25%NoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroSniperNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_sniper_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroSniperNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroSniper NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroSniperNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroUrsaNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_ursa_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_ursa_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroUrsaNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroUrsa NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroUrsaNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroViperNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_viper_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_viper_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroViperNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroViper NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroViperNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroOmniknightNoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_omni_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_omni_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroOmniknightNoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroOmniknight NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroOmniknightNoNewPlayers -} - -Response announcer_aghanim_CustomIsHeroSelectedIsHeroOmniknightIsPickNumber4NoNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pick_omni_03.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsHeroSelectedIsHeroOmniknightIsPickNumber4NoNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroSelected IsHeroOmniknight IsPickNumber4 NoNewPlayers - response announcer_aghanim_CustomIsHeroSelectedIsHeroOmniknightIsPickNumber4NoNewPlayers -} - -Response announcer_aghanim_CustomIsStartingHeroSelectionHasNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_abridged_pt1_01.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 1.5 -} - -Rule announcer_aghanim_CustomIsStartingHeroSelectionHasNewPlayers_Rule -{ - criteria Custom Isannouncer_aghanim IsStartingHeroSelection HasNewPlayers - response announcer_aghanim_CustomIsStartingHeroSelectionHasNewPlayers -} - -Response announcer_aghanim_CustomIsGameStartIsAscension0 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_01.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_02.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_01.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_05.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_03.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_04.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 -} - -Rule announcer_aghanim_CustomIsGameStartIsAscension0_Rule -{ - criteria Custom Isannouncer_aghanim IsGameStart IsAscension0 - response announcer_aghanim_CustomIsGameStartIsAscension0 -} - -Response announcer_aghanim_CustomIsGameStartIsAscension1 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascension_i_01.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascenion_ii_01.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascenion_ii_02.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 -} - -Rule announcer_aghanim_CustomIsGameStartIsAscension1_Rule -{ - criteria Custom Isannouncer_aghanim IsGameStart IsAscension1 - response announcer_aghanim_CustomIsGameStartIsAscension1 -} - -Response announcer_aghanim_CustomIsGameStartIsAscension2 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascenion_iii_01.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascenion_iii_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsGameStartIsAscension2_Rule -{ - criteria Custom Isannouncer_aghanim IsGameStart IsAscension2 - response announcer_aghanim_CustomIsGameStartIsAscension2 -} - -Response announcer_aghanim_CustomIsGameStartIsAscension3 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascenion_iv_01.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 0.75 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascenion_v_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_player_return_ascenion_v_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsGameStartIsAscension3_Rule -{ - criteria Custom Isannouncer_aghanim IsGameStart IsAscension3 - response announcer_aghanim_CustomIsGameStartIsAscension3 -} - -Response announcer_aghanim_CustomIsRoomChoiceIsDepth1IsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_choice_select_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsDepth1IsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsDepth1 IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsDepth1IsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceHasNewPlayersIsDepth2 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_explain_room_choice_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceHasNewPlayersIsDepth2_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice HasNewPlayers IsDepth2 - response announcer_aghanim_CustomIsRoomChoiceHasNewPlayersIsDepth2 -} - -Response announcer_aghanim_CustomIsRoomChoiceIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_02.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_03.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_04.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_05.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_06.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_07.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_08.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_09.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_generic_room_intro_10.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsQuillBoarEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_quill_boars_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsQuillBoarEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsQuillBoarEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsQuillBoarEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsDazzleEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_dazzles_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsDazzleEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsDazzleEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsDazzleEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsScarabEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_zealot_scarabs_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsScarabEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsScarabEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsScarabEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsTuskSkeletonEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_tusk_skeleton_mages_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsTuskSkeletonEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsTuskSkeletonEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsTuskSkeletonEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsBomberEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_bombers_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsBomberEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsBomberEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsBomberEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsOgreSealEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_walruses_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsOgreSealEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsOgreSealEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsOgreSealEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsTempleGuardiansEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_temple_guardians_intro_01_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsTempleGuardiansEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsTempleGuardiansEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomChoiceIsTempleGuardiansEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsTimbersawBossEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_rizz_rick_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsTimbersawBossEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsTimbersawBossEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomChoiceIsTimbersawBossEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsStoreggaBossEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_storegga_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsStoreggaBossEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsStoreggaBossEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomChoiceIsStoreggaBossEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsDireSiegeEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_siege_wagons_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsDireSiegeEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsDireSiegeEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsDireSiegeEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsWarlocksEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_scored_plains_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsWarlocksEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsWarlocksEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsWarlocksEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsChickenEncounterIsRewardRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_chicken_intro_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_chicken_intro_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsChickenEncounterIsRewardRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsChickenEncounter IsRewardRoom - response announcer_aghanim_CustomIsRoomChoiceIsChickenEncounterIsRewardRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsRoshanEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_roshans_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsRoshanEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsRoshanEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsRoshanEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsRockGolemEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_rock_golems_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsRockGolemEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsRockGolemEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsRockGolemEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsMortyEncounterIsRewardRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_leaping_lizards_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsMortyEncounterIsRewardRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsMortyEncounter IsRewardRoom - response announcer_aghanim_CustomIsRoomChoiceIsMortyEncounterIsRewardRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsMushroomMinesEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_mushroom_mines_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsMushroomMinesEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsMushroomMinesEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsMushroomMinesEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsPudgeIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_pudge_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsPudgeIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsPudge IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsPudgeIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsRewardRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_treasure_room_intro_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsRewardRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsRewardRoom - response announcer_aghanim_CustomIsRoomChoiceIsRewardRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsEliteIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_elite_encounter_intro_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_elite_encounter_intro_02.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_elite_encounter_intro_03.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_elite_encounter_intro_04.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsEliteIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsElite IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsEliteIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsVoidSpiritBossEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_room_choice_void_spirit_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsVoidSpiritBossEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsVoidSpiritBossEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomChoiceIsVoidSpiritBossEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsBombSquadEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_room_choice_walrus_hooks_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsBombSquadEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsBombSquadEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomChoiceIsBombSquadEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsEncounterFireMazeIsTrapRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_fire_maze_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsEncounterFireMazeIsTrapRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsEncounterFireMaze IsTrapRoom - response announcer_aghanim_CustomIsRoomChoiceIsEncounterFireMazeIsTrapRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessHasNewPlayersIsDepth1 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_explain_room_choice_01_03.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomSuccessHasNewPlayersIsDepth1_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess HasNewPlayers IsDepth1 - response announcer_aghanim_CustomIsRoomSuccessHasNewPlayersIsDepth1 -} - -Response announcer_aghanim_CustomIsRoomSuccessIsQuillBoarEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_quill_boars_success_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsQuillBoarEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsQuillBoarEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsQuillBoarEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsDazzleEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_dazzles_success_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsDazzleEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsDazzleEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsDazzleEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsCreatureKilledIsCaptainIsScarabEncounter -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_zealot_scarabs_bark_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsCreatureKilledIsCaptainIsScarabEncounter_Rule -{ - criteria Custom Isannouncer_aghanim IsCreatureKilled IsCaptain IsScarabEncounter - response announcer_aghanim_CustomIsCreatureKilledIsCaptainIsScarabEncounter -} - -Response announcer_aghanim_CustomIsRoomSuccessIsScarabEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_zealot_scarabs_success_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsScarabEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsScarabEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsScarabEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsTuskSkeletonEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_tusk_skeleton_mages_success_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsTuskSkeletonEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsTuskSkeletonEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsTuskSkeletonEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsOgreSealEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_walruses_success_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsOgreSealEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsOgreSealEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsOgreSealEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsChickenEncounterIsRewardRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_chicken_success_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsChickenEncounterIsRewardRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsChickenEncounter IsRewardRoom - response announcer_aghanim_CustomIsRoomSuccessIsChickenEncounterIsRewardRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_10.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_10_02.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_11.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_12.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_02.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_03.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_04.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_05.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_06.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_07.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_08.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_success_09.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsStoreggaBossEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_storegga_success_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_i_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsStoreggaBossEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsStoreggaBossEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomSuccessIsStoreggaBossEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsTimbersawBossEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_i_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_i_04.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_i_05.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsTimbersawBossEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsTimbersawBossEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomSuccessIsTimbersawBossEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsTempleGuardiansEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_i_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_ii_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_ii_04.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsTempleGuardiansEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsTempleGuardiansEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomSuccessIsTempleGuardiansEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsVoidSpiritBossEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_progress_act_ii_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsVoidSpiritBossEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsVoidSpiritBossEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomSuccessIsVoidSpiritBossEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsRockGolemEncounterIsNormalRoomIsNotElite -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_rock_golems_outro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsRockGolemEncounterIsNormalRoomIsNotElite_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsRockGolemEncounter IsNormalRoom IsNotElite - response announcer_aghanim_CustomIsRoomSuccessIsRockGolemEncounterIsNormalRoomIsNotElite -} - -Response announcer_aghanim_CustomIsRoomSuccessIsMortyEncounterIsRewardRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_leaping_lizards_outro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsMortyEncounterIsRewardRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsMortyEncounter IsRewardRoom - response announcer_aghanim_CustomIsRoomSuccessIsMortyEncounterIsRewardRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsMushroomMinesEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_mushroom_mines_outro_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsMushroomMinesEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsMushroomMinesEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsMushroomMinesEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsPudgeIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghs_pudge_outro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsPudgeIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsPudge IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsPudgeIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsBombSquadEncounterIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_room_choice_walrus_hooks_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_room_success_walrus_hooks_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsBombSquadEncounterIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsBombSquadEncounter IsNormalRoom - response announcer_aghanim_CustomIsRoomSuccessIsBombSquadEncounterIsNormalRoom -} - -Response announcer_aghanim_CustomIsRoomSuccessIsRewardRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_treasure_room_outro_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRoomSuccessIsRewardRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomSuccess IsRewardRoom - response announcer_aghanim_CustomIsRoomSuccessIsRewardRoom -} - -Response announcer_aghanim_CustomIsRoomChoiceIsAghanimEncounterIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pre_aghs_room_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pre_aghs_room_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pre_aghs_room_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_pre_aghs_room_04.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsRoomChoiceIsAghanimEncounterIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsRoomChoice IsAghanimEncounter IsBossRoom - response announcer_aghanim_CustomIsRoomChoiceIsAghanimEncounterIsBossRoom -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWeaver -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_weaver_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_weaver_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWeaver_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroWeaver - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWeaver -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWinterWyvern -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_wyvern_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_wyvern_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWinterWyvern_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroWinterWyvern - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWinterWyvern -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroMars -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_mars_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_mars_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroMars_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroMars - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroMars -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroSniper -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_sniper_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_sniper_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroSniper_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroSniper - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroSniper -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroViper -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_viper_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_viper_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroViper_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroViper - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroViper -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroOmniknight -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_omniknight_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_omniknight_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroOmniknight_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroOmniknight - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroOmniknight -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroTusk -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_tusk_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_tusk_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroTusk_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroTusk - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroTusk -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWitchDoctor -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_witch_doctor_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_witch_doctor_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWitchDoctor_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroWitchDoctor - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroWitchDoctor -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroUrsa -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_ursa_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_ursa_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroUrsa_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroUrsa - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroUrsa -} - -Response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroSnapfire -{ - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_snapfire_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_ability_select_snapfire_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroSnapfire_Rule -{ - criteria Custom Isannouncer_aghanim IsRewardSelected Chance_25% IsHeroSnapfire - response announcer_aghanim_CustomIsRewardSelectedChance_25%IsHeroSnapfire -} - -Response announcer_aghanim_CustomIsCreatureKilledIsBossIsTempleGuardian -{ - scene "scenes/announcer_aghanim/announcer_aghanim_first_temple_guardian_dies_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsCreatureKilledIsBossIsTempleGuardian_Rule -{ - criteria Custom Isannouncer_aghanim IsCreatureKilled IsBoss IsTempleGuardian - response announcer_aghanim_CustomIsCreatureKilledIsBossIsTempleGuardian -} - -Response announcer_aghanim_CustomIsCowardly -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_attack_not_in_room_01.vcd" nodelay noscene speakonce respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_attack_not_in_room_02.vcd" nodelay noscene speakonce respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_attack_not_in_room_04.vcd" nodelay noscene speakonce respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_attack_not_in_room_05.vcd" nodelay noscene speakonce respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_attack_not_in_room_06.vcd" nodelay noscene speakonce respeakdelay 10 -} - -Rule announcer_aghanim_CustomIsCowardly_Rule -{ - criteria Custom Isannouncer_aghanim IsCowardly - response announcer_aghanim_CustomIsCowardly -} - -Response announcer_aghanim_CustomIsCowardlyIsHeroOmniknight -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_attack_not_in_room_03.vcd" nodelay noscene speakonce respeakdelay 10 -} - -Rule announcer_aghanim_CustomIsCowardlyIsHeroOmniknight_Rule -{ - criteria Custom Isannouncer_aghanim IsCowardly IsHeroOmniknight - response announcer_aghanim_CustomIsCowardlyIsHeroOmniknight -} - -Response announcer_aghanim_CustomIsLagging -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_players_lag_behind_01.vcd" nodelay noscene respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_players_lag_behind_02.vcd" nodelay noscene respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_players_lag_behind_03.vcd" nodelay noscene respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_players_lag_behind_04.vcd" nodelay noscene respeakdelay 10 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_players_lag_behind_05.vcd" nodelay noscene respeakdelay 10 -} - -Rule announcer_aghanim_CustomIsLagging_Rule -{ - criteria Custom Isannouncer_aghanim IsLagging - response announcer_aghanim_CustomIsLagging -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWeaver -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_weaver_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWeaver_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroWeaver - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWeaver -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroMars -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_mars_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroMars_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroMars - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroMars -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWitchDoctor -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_witch_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWitchDoctor_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroWitchDoctor - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWitchDoctor -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroTusk -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_tusk_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroTusk_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroTusk - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroTusk -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroSniper -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_sniper_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroSniper_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroSniper - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroSniper -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroViper -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_viper_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroViper_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroViper - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroViper -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWinterWyvern -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_wyvern_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWinterWyvern_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroWinterWyvern - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroWinterWyvern -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroOmniknight -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_omni_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroOmniknight_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroOmniknight - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroOmniknight -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroUrsa -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_ursa_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroUrsa_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroUrsa - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroUrsa -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroSnapfire -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_snapfire_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroSnapfire_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroSnapfire - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroSnapfire -} - -Response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroMagnus -{ - scene "scenes/announcer_aghanim/announcer_aghanim_character_death_magnus_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroMagnus_Rule -{ - criteria Custom Isannouncer_aghanim IsHeroKilled IsLastLife IsHeroMagnus - response announcer_aghanim_CustomIsHeroKilledIsLastLifeIsHeroMagnus -} - -Response announcer_aghanim_CustomIsItemPurchaseChance_25% -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_shopkeeper_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_agh_shopkeeper_02.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_agh_shopkeeper_03.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsItemPurchaseChance_25%_Rule -{ - criteria Custom Isannouncer_aghanim IsItemPurchase Chance_25% - response announcer_aghanim_CustomIsItemPurchaseChance_25% -} - -Response announcer_aghanim_CustomIsItemPurchaseHasNewPlayersIsDepth2 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_shopkeeper_intro_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsItemPurchaseHasNewPlayersIsDepth2_Rule -{ - criteria Custom Isannouncer_aghanim IsItemPurchase HasNewPlayers IsDepth2 - response announcer_aghanim_CustomIsItemPurchaseHasNewPlayersIsDepth2 -} - -Response announcer_aghanim_CustomIsTeamWipe -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_01_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_03_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_04.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_05.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_06.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_07.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_team_wipe_08.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsTeamWipe_Rule -{ - criteria Custom Isannouncer_aghanim IsTeamWipe - response announcer_aghanim_CustomIsTeamWipe -} - -Response announcer_aghanim_CustomIsTournamentModeIsStartingHeroSelection -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_intro_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsTournamentModeIsStartingHeroSelection_Rule -{ - criteria Custom Isannouncer_aghanim IsTournamentMode IsStartingHeroSelection - response announcer_aghanim_CustomIsTournamentModeIsStartingHeroSelection -} - -Response announcer_aghanim_CustomIsTournamentModeIsGameStart -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_intro_follow_up_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_intro_follow_up_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_intro_follow_up_03.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsTournamentModeIsGameStart_Rule -{ - criteria Custom Isannouncer_aghanim IsTournamentMode IsGameStart - response announcer_aghanim_CustomIsTournamentModeIsGameStart -} - -Response announcer_aghanim_CustomIsTournamentModeIsRoomSuccessIsBossRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_first_boss_bad_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_first_boss_good_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_first_boss_neut_01.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsTournamentModeIsRoomSuccessIsBossRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsTournamentMode IsRoomSuccess IsBossRoom - response announcer_aghanim_CustomIsTournamentModeIsRoomSuccessIsBossRoom -} - -Response announcer_aghanim_CustomIsTournamentModeIsTeamWipe -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_team_wipe_01.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_team_wipe_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_team_wipe_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_team_wipe_04.vcd" nodelay noscene then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 1.5 -} - -Rule announcer_aghanim_CustomIsTournamentModeIsTeamWipe_Rule -{ - criteria Custom Isannouncer_aghanim IsTournamentMode IsTeamWipe - response announcer_aghanim_CustomIsTournamentModeIsTeamWipe -} - -Response announcer_aghanim_CustomIsTournamentModeIsHeroKilledIsLastLife -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_hero_death_01.vcd" nodelay noscene respeakdelay 7 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_hero_death_02.vcd" nodelay noscene respeakdelay 7 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_hero_death_03.vcd" nodelay noscene respeakdelay 7 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_hero_death_04.vcd" nodelay noscene respeakdelay 7 - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_hero_death_05.vcd" nodelay noscene respeakdelay 7 -} - -Rule announcer_aghanim_CustomIsTournamentModeIsHeroKilledIsLastLife_Rule -{ - criteria Custom Isannouncer_aghanim IsTournamentMode IsHeroKilled IsLastLife - response announcer_aghanim_CustomIsTournamentModeIsHeroKilledIsLastLife -} - -Response announcer_aghanim_CustomIsTournamentModeIsRoomChoiceIsEliteIsNormalRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_room_choice_elite_01.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_room_choice_elite_02.vcd" nodelay noscene speakonce - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_room_choice_elite_03.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_CustomIsTournamentModeIsRoomChoiceIsEliteIsNormalRoom_Rule -{ - criteria Custom Isannouncer_aghanim IsTournamentMode IsRoomChoice IsElite IsNormalRoom - response announcer_aghanim_CustomIsTournamentModeIsRoomChoiceIsEliteIsNormalRoom -} - -Response announcer_aghanim_CustomIsDisabledIsRoomChoiceHasNewPlayersIsDepth2 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_explain_room_choice_02_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsDisabledIsRoomChoiceHasNewPlayersIsDepth2_Rule -{ - criteria Custom Isannouncer_aghanim IsDisabled IsRoomChoice HasNewPlayers IsDepth2 - response announcer_aghanim_CustomIsDisabledIsRoomChoiceHasNewPlayersIsDepth2 -} - -Response announcer_aghanim_CustomIsDisabledIsRoomChoice -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_room_choice_select_01_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_CustomIsDisabledIsRoomChoice_Rule -{ - criteria Custom Isannouncer_aghanim IsDisabled IsRoomChoice - response announcer_aghanim_CustomIsDisabledIsRoomChoice -} - -Response announcer_aghanim_Followup_GenericIsStartingHeroSelectionHasNewPlayers -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_abridged_pt2_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_Followup_GenericIsStartingHeroSelectionHasNewPlayers_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsStartingHeroSelection HasNewPlayers - response announcer_aghanim_Followup_GenericIsStartingHeroSelectionHasNewPlayers -} - -Response announcer_aghanim_Followup_GenericIsGameStartIsAscension0 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_02.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_03.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_08.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_09.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_10.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_11.vcd" nodelay noscene -} - -Rule announcer_aghanim_Followup_GenericIsGameStartIsAscension0_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsGameStart IsAscension0 - response announcer_aghanim_Followup_GenericIsGameStartIsAscension0 -} - -Response announcer_aghanim_Followup_GenericIsGameStartIsAscension2 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_04.vcd" nodelay noscene -} - -Rule announcer_aghanim_Followup_GenericIsGameStartIsAscension2_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsGameStart IsAscension2 - response announcer_aghanim_Followup_GenericIsGameStartIsAscension2 -} - -Response announcer_aghanim_Followup_GenericIsGameStartIsAscension1 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_05.vcd" nodelay noscene - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_07.vcd" nodelay noscene -} - -Rule announcer_aghanim_Followup_GenericIsGameStartIsAscension1_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsGameStart IsAscension1 - response announcer_aghanim_Followup_GenericIsGameStartIsAscension1 -} - -Response announcer_aghanim_Followup_GenericIsGameStartIsAscension3 -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_intro_player_return_follow_up_06.vcd" nodelay noscene -} - -Rule announcer_aghanim_Followup_GenericIsGameStartIsAscension3_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsGameStart IsAscension3 - response announcer_aghanim_Followup_GenericIsGameStartIsAscension3 -} - -Response announcer_aghanim_Followup_GenericIsRoomStartedIsEncounterFireMazeIsTrapRoom -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_fire_maze_follow_up_01_02.vcd" nodelay noscene speakonce -} - -Rule announcer_aghanim_Followup_GenericIsRoomStartedIsEncounterFireMazeIsTrapRoom_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsRoomStarted IsEncounterFireMaze IsTrapRoom - response announcer_aghanim_Followup_GenericIsRoomStartedIsEncounterFireMazeIsTrapRoom -} - -Response announcer_aghanim_Followup_GenericIsDisabled -{ - scene "scenes/announcer_aghanim/announcer_aghanim_aghanim_fire_maze_follow_up_02.vcd" nodelay noscene -} - -Rule announcer_aghanim_Followup_GenericIsDisabled_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsDisabled - response announcer_aghanim_Followup_GenericIsDisabled -} - -Response announcer_aghanim_Followup_GenericIsTournamentModeIsTeamWipe -{ - scene "scenes/announcer_aghanim/announcer_aghanim_agh_timetrial_team_wipe_follow_up_01.vcd" nodelay noscene -} - -Rule announcer_aghanim_Followup_GenericIsTournamentModeIsTeamWipe_Rule -{ - criteria Followup_Generic Isannouncer_aghanim IsTournamentMode IsTeamWipe - response announcer_aghanim_Followup_GenericIsTournamentModeIsTeamWipe -} - diff --git a/aghanim_singleplayer/scripts/talker/response_rules_custom.txt b/aghanim_singleplayer/scripts/talker/response_rules_custom.txt deleted file mode 100755 index c6e4949..0000000 --- a/aghanim_singleplayer/scripts/talker/response_rules_custom.txt +++ /dev/null @@ -1,164 +0,0 @@ -// This is the base rule script file for the AI response system for Expressive AI's who speak based on certain "Concepts" -// You can think of a concept as a high level state that the code is trying to convey, such as say hello, or say you're mad, etc. -// -// The format of this file is that there are five main types of commands: -// 1) #include "filename" // This just causes the included scriptfile to be parsed and added to the database -// 2) enumeration: this declares an enumerated type so that comparisons can be matched against the string versions of the type -// 3) response: this specifies a response to issue. A response consists of a weighted set of options and can recursively reference -// other responses by name -// 4) criterion: This is a match condition -// 5) rule: a rule consists of one or more criteria and a response -// -// In general, the system is presented with a criteria set, which is a set of key value pairs generated by the game code and -// various entity I/O and keyfields. For instance, the following criteria set was created in a map with a train terminal -// "speaker" entity wishing to fire random station announcements -// concept = 'train_speaker' (weight 5.000000) ; the high level concept for the search request -// map = 'terminal_pa' ; the name of the map -// classname = 'speaker' ; the classname and name of the "speaking" entity -// name = 'terminal_pa' -// health = '10' ; the absolute health of the speaking entity -// healthfrac = '0.000' ; the health fraction (health/maxhealth) of the speaking entity -// playerhealth = '100' ; similar data related to the current player: -// playerhealthfrac = '1.000' -// playerweapon = 'none' ; the name of the weapon the player is carrying -// playeractivity = 'ACT_WALK' ; animating activity of the player -// playerspeed = '0.000' ; how fast the player is moving -// -// Based on such a criteria set, the system checks each rule against the set. To do this, each criterion of the rule is -// given a numeric score as follows: -// score = 0 if criteria doesn't match or, criterion weight * keyvaliue weight if it does match -// The final score for a rule is the sum of all of the scores of its criteria. The best rule is the one with the highest -// score. Once a best rule is selected, then a response is looked up based on the response definitions and the engine is -// asked to dispatch that response. -// -// The specific syntax for the various keywords is as follows: -// -// ENUMERATIONS: -// -// enumeration -// { -// "key1" "value1" -// "key2" "value2" -// ...etc. -// } -// The code and criteria refer to enumerations with square brackets and a double colon separator, e.g.: -// [enumerationname::key1] -// -// -// RESPONSES: -// -// Single line: -// response [nodelay | defaultdelay | delay interval ] [speakonce] [noscene] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] responsetype parameters -// Multiple lines -// response -// { -// [permitrepeats] ; optional parameter, by default we visit all responses in group before repeating any -// [sequential] ; optional parameter, by default we randomly choose responses, but with this we walk through the list starting at the first and going to the last -// [norepeat] ; Once we've run through all of the entries, disable the response group -// responsetype1 parameters1 [nodelay | defaultdelay | delay interval ] [speakonce] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] [displayfirst] [ displaylast ] weight nnn -// responsetype2 parameters2 [nodelay | defaultdelay | delay interval ] [speakonce] [odds nnn] [respeakdelay interval] [soundelvel "SNDLVL_xxx"] [displayfirst] [ displaylast ] weight nnn -// etc. -// } -// Where: -// interval = "startnumber,endnumber" or "number" (e.g., "2.8,3.2" or "3.2") -// responsetype =: -// speak ; it's an entry in sounds.txt -// sentence ; it's a sentence name from sentences.txt -// scene ; it's a .vcd file -// response ; it's a reference to another response group by name -// print ; print the text in developer 2 (for placeholder responses) -// nodelay = an additional delay of 0 after speaking -// defaultdelay = an additional delay of 2.8 to 3.2 seconds after speaking -// delay interval = an additional delay based on a random sample from the interval after speaking -// predelay interval = delays the speech for the time interval. NOTE: Only works on scenes (i.e. no sentences/speak/print) -// speakonce = don't use this response more than one time (default off) -// noscene = For an NPC, play the sound immediately using EmitSound, don't play it through the scene system. Good for playing sounds on dying or dead NPCs. -// odds = if this response is selected, if odds < 100, then there is a chance that nothing will be said (default 100) -// respeakdelay = don't use this response again for at least this long (default 0) -// soundlevel = use this soundlevel for the speak/sentence (default SNDLVL_TALKING) -// weight = if there are multiple responses, this is a selection weighting so that certain responses are favored over others in the group (default 1) -// displayfirst/displaylast : this should be the first/last item selected (ignores weight) -// -// CRITERIA: -// -// criterion weight nnn required -// Where: -// matchkey matches one of the criteria in the set as shown above -// matchvalue is a string or number value or a range, the following are all valid: -// "0" ; numeric match to value 0 -// "1" ; numeric match to value 1 -// "weapon_smg1" ; string match to weapon_smg1 string -// "[npcstate::idle]" ; match enumeration by looking up numeric value -// ">0" ; match if greater than zero -// ">10,<=50" ; match if greater than ten and less than or equal to 50 -// ">0,<[npcstate::alert]" ; match if greater than zer and les then value of enumeration for alert -// "!=0" ; match if not equal to zero -// weight = floating point weighting for score assuming criteria match (default value 1.0) -// required: if a rule has one or more criteria with the required flag set, then if any such criteria -// fail, the entire rule receives a score of zero -// -// RULE: -// -// rule -// { -// criteria name1 [name2 name3 etc.] -// response responsegroupname [responsegroupname2 etc.] -// [matchonce] ; optional parameter -// [ weight nnn required ] -// } -// Where: -// criteria just lies one more more criterion names from above and response list one or more of the response -// names from above (usually just one) -// matchonce (off by default): means that the rule is deactivated after the first time it is matched -// Note that additional "unnamed" criteria can be specified inline in the rule using the same syntax -// as for defining a criterion, except for the criterion keyword and the criterion name keys -// -// Interaction with entity I/O system -// CBaseEntity contains an inputfunc called "DispatchResponse" which accepts a string which is a concept name -// Thus, a game entity can fire this input on another entity with a concept string and a criteria set will -// be generated and searched against the entities current response system rule set. -// Right now only the speaker entity and NPC_Talker derived NPCs have any response rules loaded -// In addition, map placed entities have up to three "context" keypairs that can be specified. -// They take the form: "key:value" (key, single colon separator, value) -// When an entity with any such context keypairs is asked to dispatch a response, the keypairs are added to the -// criteria set passed to the rule system. Thus, map placed entities and triggers can specify their -// own context keypairs and these can be hooked up to response rules to do map-specific and appropriate -// responses -// In addition, entity I/O can be used to add, remove and clear any such context keypairs via the -// AddContext, RemoveContext, and ClearContext input functions. -// AddContext takes a keypair of the "key:value" format, while RemoveContext take just the "key" -// ClearContext removes all context keypairs -// The game .dll code can enumerate context keypairs and change them via code based methods -// -// The player and the world have their context added with the string player or world as a prefix, e.g.: -// "playerkey:value" or "worldkey:value" to differentiate world/player context from the context of the -// responding entity. - -criterion "Custom" "Concept" "TLK_DOTA_CUSTOM" required -criterion "Followup_Positive" "Concept" "TLK_DOTA_FOLLOWUP_POSITIVE" required -criterion "Followup_Negative" "Concept" "TLK_DOTA_FOLLOWUP_NEGATIVE" required -criterion "Followup_Negative_Ongoing" "Concept" "TLK_DOTA_FOLLOWUP_NEGATIVE_ONGOING" required -criterion "Followup_Generic" "Concept" "TLK_DOTA_FOLLOWUP_GENERIC" required - -criterion "Chance_1%" "randomnum" "99" required -criterion "Chance_2%" "randomnum" ">=97,<=98" required -criterion "Chance_3%" "randomnum" ">=94,<=96" required -criterion "Chance_5%" "randomnum" ">=89,<=93" required -criterion "Chance_10%" "randomnum" ">=79,<=88" required -criterion "Chance_12%" "randomnum" "<=12" required -criterion "Chance_15%" "randomnum" ">=64,<=78" required -criterion "Chance_20%" "randomnum" "<=20" required -criterion "Chance_25%" "randomnum" "<=25" required -criterion "Chance_30%" "randomnum" "<=30" required -criterion "Chance_35%" "randomnum" "<=35" required -criterion "Chance_40%" "randomnum" "<=40" required -criterion "Chance_45%" "randomnum" "<=45" required -criterion "Chance_50%" "randomnum" "<=50" required -criterion "Chance_55%" "randomnum" "<=55" required -criterion "Chance_60%" "randomnum" "<=60" required -criterion "Chance_65%" "randomnum" "<=65" required -criterion "Chance_70%" "randomnum" "<=70" required -criterion "Chance_75%" "randomnum" "<=75" required - -#include "talker/response_rules_announcer_aghanim.txt" -#include "talker/response_rules_aghanim.txt" diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ability_absolute_no_cc.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ability_absolute_no_cc.lua deleted file mode 100755 index e39e7fb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ability_absolute_no_cc.lua +++ /dev/null @@ -1,11 +0,0 @@ -ability_absolute_no_cc = class( {} ) - -LinkLuaModifier( "modifier_absolute_no_cc", "modifiers/modifier_absolute_no_cc", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ability_absolute_no_cc:GetIntrinsicModifierName() - return "modifier_absolute_no_cc" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ability_ascension.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ability_ascension.lua deleted file mode 100755 index 36503ef..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ability_ascension.lua +++ /dev/null @@ -1,11 +0,0 @@ -ability_ascension = class( {} ) - -LinkLuaModifier( "modifier_ascension", "modifiers/modifier_ascension", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ability_ascension:GetIntrinsicModifierName() - return "modifier_ascension" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ability_attack_speed_unslowable.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ability_attack_speed_unslowable.lua deleted file mode 100755 index 83ef6a9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ability_attack_speed_unslowable.lua +++ /dev/null @@ -1,9 +0,0 @@ -ability_attack_speed_unslowable = class( {} ) - -LinkLuaModifier( "modifier_attack_speed_unslowable", "modifiers/modifier_attack_speed_unslowable", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ability_attack_speed_unslowable:GetIntrinsicModifierName() - return "modifier_attack_speed_unslowable" -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ability_move_speed_unslowable.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ability_move_speed_unslowable.lua deleted file mode 100755 index 563c57b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ability_move_speed_unslowable.lua +++ /dev/null @@ -1,9 +0,0 @@ -ability_move_speed_unslowable = class( {} ) - -LinkLuaModifier( "modifier_move_speed_unslowable", "modifiers/modifier_move_speed_unslowable", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ability_move_speed_unslowable:GetIntrinsicModifierName() - return "modifier_move_speed_unslowable" -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/aggro_on_damage.lua b/aghanim_singleplayer/scripts/vscripts/abilities/aggro_on_damage.lua deleted file mode 100755 index 525bfd0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/aggro_on_damage.lua +++ /dev/null @@ -1,8 +0,0 @@ -aggro_on_damage = class({}) -LinkLuaModifier( "modifier_aggro_on_damage", "modifiers/modifier_aggro_on_damage", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function aggro_on_damage:GetIntrinsicModifierName() - return "modifier_aggro_on_damage" -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_armor.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_armor.lua deleted file mode 100755 index cc8e2ec..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_armor.lua +++ /dev/null @@ -1,11 +0,0 @@ -ascension_armor = class( {} ) - -LinkLuaModifier( "modifier_ascension_armor", "modifiers/modifier_ascension_armor", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ascension_armor:GetIntrinsicModifierName() - return "modifier_ascension_armor" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_armor_sapping.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_armor_sapping.lua deleted file mode 100755 index fa33810..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_armor_sapping.lua +++ /dev/null @@ -1,70 +0,0 @@ - -ascension_armor_sapping = class({}) -LinkLuaModifier( "modifier_ascension_armor_sapping", "modifiers/modifier_ascension_armor_sapping", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_ascension_armor_sapping_display", "modifiers/modifier_ascension_armor_sapping_display", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_ascension_armor_sapping_instance", "modifiers/modifier_ascension_armor_sapping_instance", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_armor_sapping:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_undying/undying_decay_strength_xfer.vpcf", context ) - PrecacheResource( "particle", "particles/ascension/ascension_armor_sapping_target.vpcf", context ) - PrecacheResource( "particle", "particles/items2_fx/medallion_of_courage.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_armor_sapping:Spawn() - -- So the modifier can be seen - if IsServer() == true then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ascension_armor_sapping_display", nil ) - end -end - --------------------------------------------------------------------------------- - -function ascension_armor_sapping:OnSpellStart() - - if not IsServer() then - return - end - - local hTarget = self:GetCursorTarget() - if hTarget == nil then - return - end - - local nSapFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_undying/undying_decay_strength_xfer.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nSapFX, 0, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetAbsOrigin(), true )-- CP0: Target - ParticleManager:SetParticleControlEnt( nSapFX, 1, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetAbsOrigin(), true )-- CP1: Caster - ParticleManager:SetParticleControlEnt( nSapFX, 2, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetAbsOrigin(), true )-- CP2: Caster's hand - ParticleManager:ReleaseParticleIndex( nSapFX ); - - local nSapTargetFX = ParticleManager:CreateParticle( "particles/ascension/ascension_armor_sapping_target.vpcf", PATTACH_ABSORIGIN_FOLLOW, hTarget ) - ParticleManager:ReleaseParticleIndex( nSapTargetFX ); - - EmitSoundOn( "Ability.ArmorSapping.Target", hTarget ); - - local nDuration = self:GetSpecialValueFor( "duration" ) - - local kv = - { - duration = nDuration - } - local hDebuff = hTarget:AddNewModifier( self:GetCaster(), self, "modifier_ascension_armor_sapping_instance", kv ) - if hDebuff == nil then - return - end - - -- add debuff counter - local hDebuffCounter = hTarget:FindModifierByName( "modifier_ascension_armor_sapping" ) - if hDebuffCounter == nil then - hDebuffCounter = hTarget:AddNewModifier( self:GetCaster(), self, "modifier_ascension_armor_sapping", nil ) - end - - if hDebuffCounter ~= nil then - hDebuffCounter:SetDuration( nDuration, true ); - hDebuffCounter:SetStackCount( hDebuffCounter:GetStackCount() + 1 ) - end - -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_attack_speed.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_attack_speed.lua deleted file mode 100755 index 497b15e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_attack_speed.lua +++ /dev/null @@ -1,23 +0,0 @@ -ascension_attack_speed = class( {} ) - -LinkLuaModifier( "modifier_ascension_attack_speed", "modifiers/modifier_ascension_attack_speed", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_attack_speed:Precache( context ) - PrecacheResource( "particle", "particles/items2_fx/mask_of_madness.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_attack_speed:OnSpellStart() - - if not IsServer() then - return - end - - local flDuration = self:GetSpecialValueFor( "duration" ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ascension_attack_speed", { duration = flDuration } ) - -end - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_bomb.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_bomb.lua deleted file mode 100755 index d315259..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_bomb.lua +++ /dev/null @@ -1,28 +0,0 @@ - -ascension_bomb = class({}) -LinkLuaModifier( "modifier_bomber_death_explosion", "modifiers/creatures/modifier_bomber_death_explosion", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_bomb:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_techies/techies_remote_mines_detonate.vpcf", context ) - PrecacheResource( "particle", "particles/dark_moon/darkmoon_calldown_marker_ring.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_gyrocopter/gyro_guided_missile_target.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_bomb:OnSpellStart() - - if not IsServer() then - return - end - - local hTarget = self:GetCursorTarget() - if hTarget == nil then - return - end - - hTarget:AddNewModifier( hTarget, self, "modifier_bomber_death_explosion", {} ) - -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_chilling_touch.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_chilling_touch.lua deleted file mode 100755 index 48c49a2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_chilling_touch.lua +++ /dev/null @@ -1,18 +0,0 @@ -ascension_chilling_touch = class( {} ) - -LinkLuaModifier( "modifier_ascension_chilling_touch", "modifiers/modifier_ascension_chilling_touch", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_chilling_touch:Precache( context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_slowed_cold.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_frost.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_chilling_touch:GetIntrinsicModifierName() - return "modifier_ascension_chilling_touch" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_crit.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_crit.lua deleted file mode 100755 index a57ec41..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_crit.lua +++ /dev/null @@ -1,19 +0,0 @@ -ascension_crit = class( {} ) - -LinkLuaModifier( "modifier_ascension_crit", "modifiers/modifier_ascension_crit", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ascension_crit:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function ascension_crit:GetIntrinsicModifierName() - return "modifier_ascension_crit" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_damage.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_damage.lua deleted file mode 100755 index 67911ec..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_damage.lua +++ /dev/null @@ -1,11 +0,0 @@ -ascension_damage = class( {} ) - -LinkLuaModifier( "modifier_ascension_damage", "modifiers/modifier_ascension_damage", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ascension_damage:GetIntrinsicModifierName() - return "modifier_ascension_damage" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_drunken.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_drunken.lua deleted file mode 100755 index de7baba..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_drunken.lua +++ /dev/null @@ -1,40 +0,0 @@ -ascension_drunken = class( {} ) - -LinkLuaModifier( "modifier_ascension_drunken_display", "modifiers/modifier_ascension_drunken_display", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_drunken:Precache( hContext ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_brewmaster.vsndevts", hContext ) - PrecacheResource( "particle", "particles/status_fx/status_effect_drunken_brawler.vpcf", hContext ) - PrecacheResource( "particle", "particles/units/heroes/hero_brewmaster/brewmaster_drunkenbrawler_evade.vpcf", hContext ) - PrecacheResource( "particle", "particles/units/heroes/hero_brewmaster/brewmaster_drunkenbrawler_crit.vpcf", hContext ) -end - --------------------------------------------------------------------------------- - -function ascension_drunken:Spawn() - -- So the modifier can be seen - if IsServer() == true then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ascension_drunken_display", nil ) - end -end - - --------------------------------------------------------------------------------- - -function ascension_drunken:OnSpellStart() - - if not IsServer() then - return - end - - --print( "casting drunken ") - - EmitSoundOn( "Hero_Brewmaster.Brawler.Cast", self:GetCaster() ) - - local flDuration = self:GetSpecialValueFor( "duration" ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_brewmaster_drunken_brawler", { duration = flDuration } ) - -end - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_extra_fast.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_extra_fast.lua deleted file mode 100755 index 7703638..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_extra_fast.lua +++ /dev/null @@ -1,18 +0,0 @@ -ascension_extra_fast = class( {} ) - -LinkLuaModifier( "modifier_ascension_extra_fast", "modifiers/modifier_ascension_extra_fast", LUA_MODIFIER_MOTION_NONE ) - - -function ascension_extra_fast:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_dark_seer/dark_seer_surge.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_extra_fast:GetIntrinsicModifierName() - return "modifier_ascension_extra_fast" -end - --------------------------------------------------------------------------------- - - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_flicker.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_flicker.lua deleted file mode 100755 index b2d762a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_flicker.lua +++ /dev/null @@ -1,55 +0,0 @@ -ascension_flicker = class( {} ) - -LinkLuaModifier( "modifier_ascension_flicker_display", "modifiers/modifier_ascension_flicker_display", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_flicker:Precache( context ) - PrecacheResource( "particle", "particles/items_fx/blink_dagger_start.vpcf", context ) - PrecacheResource( "particle", "particles/items_fx/blink_dagger_end.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_flicker:Spawn() - -- So the modifier can be seen - if IsServer() == true then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ascension_flicker_display", nil ) - end -end - --------------------------------------------------------------------------------- - -function ascension_flicker:OnSpellStart() - - if not IsServer() then - return - end - - local range = self:GetSpecialValueFor( "range" ) - local nAttempts = 0 - local vEndPos = self:GetCaster():GetAbsOrigin() + RandomVector( 1 ) * range; - while ( ( not GridNav:CanFindPath( self:GetCaster():GetOrigin(), vEndPos ) ) and ( nAttempts < 5 ) ) do - vEndPos = self:GetCaster():GetOrigin() + RandomVector( 1 ) * range; - nAttempts = nAttempts + 1 - - if nAttempts >= 5 then - vEndPos = self:GetCaster():GetAbsOrigin() - end - end - - - - local nFXStart = ParticleManager:CreateParticle( "particles/items_fx/blink_dagger_start.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXStart, 0, self:GetCaster():GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXStart ) - - FindClearSpaceForUnit( self:GetCaster(), vEndPos, true ) - ProjectileManager:ProjectileDodge( self:GetCaster() ) - EmitSoundOn( "DOTA_Item.BlinkDagger.Activate", self:GetCaster() ) - self:GetCaster():Purge( false, true, false, false, false ) - - local nFXEnd = ParticleManager:CreateParticle( "particles/items_fx/blink_dagger_end.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:ReleaseParticleIndex( nFXEnd ) -end - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_heal_suppression.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_heal_suppression.lua deleted file mode 100755 index 49feb0c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_heal_suppression.lua +++ /dev/null @@ -1,18 +0,0 @@ - -ascension_heal_suppression = class({}) -LinkLuaModifier( "modifier_ascension_heal_suppression", "modifiers/modifier_ascension_heal_suppression", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_ascension_heal_suppression_aura", "modifiers/modifier_ascension_heal_suppression_aura", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_heal_suppression:Precache( context ) - PrecacheResource( "particle", "particles/items4_fx/spirit_vessel_damage.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_necrolyte_spirit.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_necrolyte/necrolyte_spirit.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_heal_suppression:GetIntrinsicModifierName() - return "modifier_ascension_heal_suppression_aura" -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_magic_immunity.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_magic_immunity.lua deleted file mode 100755 index 4331c44..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_magic_immunity.lua +++ /dev/null @@ -1,24 +0,0 @@ -ascension_magic_immunity = class( {} ) - -LinkLuaModifier( "modifier_ascension_magic_immunity", "modifiers/modifier_ascension_magic_immunity", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_magic_immunity:Precache( hContext ) - PrecacheResource( "particle", "particles/items_fx/black_king_bar_avatar.vpcf", hContext ) - PrecacheResource( "particle", "particles/status_fx/status_effect_avatar.vpcf", hContext ) -end - --------------------------------------------------------------------------------- - -function ascension_magic_immunity:OnSpellStart() - - if not IsServer() then - return - end - - local flDuration = self:GetSpecialValueFor( "duration" ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ascension_magic_immunity", { duration = flDuration } ) - -end - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_magic_resist.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_magic_resist.lua deleted file mode 100755 index 8f7a833..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_magic_resist.lua +++ /dev/null @@ -1,11 +0,0 @@ -ascension_magic_resist = class( {} ) - -LinkLuaModifier( "modifier_ascension_magic_resist", "modifiers/modifier_ascension_magic_resist", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ascension_magic_resist:GetIntrinsicModifierName() - return "modifier_ascension_magic_resist" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_vampiric.lua b/aghanim_singleplayer/scripts/vscripts/abilities/ascension_vampiric.lua deleted file mode 100755 index fc8c039..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/ascension_vampiric.lua +++ /dev/null @@ -1,28 +0,0 @@ -ascension_vampiric = class( {} ) - -LinkLuaModifier( "modifier_ascension_vampiric", "modifiers/modifier_ascension_vampiric", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function ascension_vampiric:Precache( context ) - PrecacheResource( "particle", "particles/items2_fx/satanic_buff.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_life_stealer_rage.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_life_stealer/life_stealer_rage.vpcf", context ) - PrecacheResource( "particle", "particles/items3_fx/octarine_core_lifesteal.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_lifesteal.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ascension_vampiric:OnSpellStart() - - if not IsServer() then - return - end - - EmitSoundOn( "DOTA_Item.Satanic.Activate", self:GetCaster() ) - - local flDuration = self:GetSpecialValueFor( "duration" ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ascension_vampiric", { duration = flDuration } ) -end - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/breakable_container.lua b/aghanim_singleplayer/scripts/vscripts/abilities/breakable_container.lua deleted file mode 100755 index 21887b1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/breakable_container.lua +++ /dev/null @@ -1,11 +0,0 @@ - -breakable_container = class({}) -LinkLuaModifier( "modifier_breakable_container", "modifiers/modifier_breakable_container", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function breakable_container:GetIntrinsicModifierName() - return "modifier_breakable_container" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_announcer_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_announcer_passive.lua deleted file mode 100755 index dfb380c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_announcer_passive.lua +++ /dev/null @@ -1,13 +0,0 @@ - -aghanim_announcer_passive = class({}) - -LinkLuaModifier( "modifier_aghanim_announcer_passive", "modifiers/creatures/modifier_aghanim_announcer_passive", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function aghanim_announcer_passive:GetIntrinsicModifierName() - return "modifier_aghanim_announcer_passive" -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_blink.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_blink.lua deleted file mode 100755 index 86e679c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_blink.lua +++ /dev/null @@ -1,75 +0,0 @@ -aghanim_blink = class{} - ----------------------------------------------------------------------------------------- - -function aghanim_blink:Precache( context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_preimage.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_faceless_void.vsndevts", context ) -end - ----------------------------------------------------------------------------------------- - -function aghanim_blink:OnSpellStart() - if IsServer() == false then - return - end - - local vPos = self:GetCursorPosition() - local vDirection = vPos - self:GetCaster():GetOrigin() - local flDist = vDirection:Length2D() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - --local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_preimage.vpcf", PATTACH_CUSTOMORIGIN, nil )-- - --ParticleManager:SetParticleControl( nFXIndex, 0, self:GetCaster():GetAbsOrigin() ) - --ParticleManager:SetParticleControl( nFXIndex, 1, vPos ) - --ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetAbsOrigin(), true ) - --ParticleManager:SetParticleFoWProperties( nFXIndex, 0, 2, 64.0 ) - --ParticleManager:ReleaseParticleIndex( nFXIndex ) - - self.vStartLocation = self:GetCaster():GetAbsOrigin() - - local info = - { - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = 0, - fEndRadius = 0, - vVelocity = vDirection * flDist, - fDistance = flDist, - Source = self:GetCaster(), - --iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_NONE, - --iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, - } - - ProjectileManager:CreateLinearProjectile( info ) - EmitSoundOn( "Hero_FacelessVoid.TimeWalk", self:GetCaster() ) -end - ----------------------------------------------------------------------------------------- - -function aghanim_blink:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - local vDirection = vLocation - self:GetCaster():GetAbsOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - EmitSoundOn( "Hero_FacelessVoid.TimeWalk", self:GetCaster() ) - - FindClearSpaceForUnit( self:GetCaster(), vLocation, true ) - --self:GetCaster():FaceTowards( self:GetCaster().vHomePosition ) - - ProjectileManager:ProjectileDodge( self:GetCaster() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_preimage.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self.vStartLocation ) - ParticleManager:SetParticleControl( nFXIndex, 1, self:GetCaster():GetAbsOrigin() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self.vStartLocation, true ) - ParticleManager:SetParticleFoWProperties( nFXIndex, 0, 2, 64.0 ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - - return true -end - ----------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_crystal_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_crystal_attack.lua deleted file mode 100755 index ace0cc3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_crystal_attack.lua +++ /dev/null @@ -1,170 +0,0 @@ -aghanim_crystal_attack = class({}) - -_G.CRYSTAL_ATTACKS_PHASE = {} -_G.CRYSTAL_ATTACKS_PHASE[1] = 0 -_G.CRYSTAL_ATTACKS_PHASE[2] = 1 -_G.CRYSTAL_ATTACKS_PHASE[3] = 2 -_G.CRYSTAL_ATTACKS_PHASE[4] = 0 -_G.CRYSTAL_ATTACKS_PHASE[5] = 1 -_G.CRYSTAL_ATTACKS_PHASE[6] = 2 - - -_G.CRYSTAL_ATTACKS_COOLDOWN = 10.0 - - -LinkLuaModifier( "modifier_aghanim_crystal_attack_active", "modifiers/creatures/modifier_aghanim_crystal_attack_active", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_aghanim_crystal_attack_debuff", "modifiers/creatures/modifier_aghanim_crystal_attack_debuff", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function aghanim_crystal_attack:Precache( context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_attack.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_attack_telegraph.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_attack_impact.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_iceblast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ancient_apparition/ancient_apparition_ice_blast_debuff.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_winter_wyvern.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_mars.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_leshrac.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_lich.vsndevts", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_self_dmg.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_pulse_nova.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_pulse_ambient.vpcf", context ) - self.nPhase = 1 -end - --------------------------------------------------------------------------------- - -function aghanim_crystal_attack:OnSpellStart() - if IsServer() then - if self.nPhase == 1 then - self.hActiveBuff = self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_aghanim_crystal_attack_active", {} ) - end - - self.attack_time = self:GetSpecialValueFor( "attack_time" ) - self.attack_damage = self:GetSpecialValueFor( "attack_damage" ) - self.explosion_radius = self:GetSpecialValueFor( "explosion_radius" ) - self.pulse_radius = self:GetSpecialValueFor( "pulse_radius" ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), nil, 10000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_FARTHEST, false ) - - local nCrystalsLeft = CRYSTAL_ATTACKS_PHASE[ self.nPhase ] + 1 - for _,enemy in pairs( enemies ) do - local flDist = ( enemy:GetAbsOrigin() - self:GetCaster():GetAbsOrigin() ):Length2D() - if flDist > self.pulse_radius then - self:LaunchCrystals( enemy:GetAbsOrigin() + ( enemy:GetForwardVector() * self.pulse_radius * 0.5 ) ) - nCrystalsLeft = nCrystalsLeft - 1 - if nCrystalsLeft == 0 then - break - end - end - end - - self.nPhase = self.nPhase + 1 - if self.hActiveBuff then - self.hActiveBuff:Pulse() - end - - if self.nPhase > 6 then - self.nPhase = 1 - self:StartCooldown( CRYSTAL_ATTACKS_COOLDOWN ) - self.hActiveBuff:Destroy() - end - end -end - --------------------------------------------------------------------------------- - -function aghanim_crystal_attack:LaunchCrystals( vPos ) - local vDirection = vPos - self:GetCaster():GetAttachmentOrigin( self:GetCaster():ScriptLookupAttachment( "attach_staff_fx" ) ) - local flDist2d = vDirection:Length2D() - local flDist = vDirection:Length() - vDirection = vDirection:Normalized() - vDirection.z = 0.0 - - local flSpeed = flDist / self.attack_time - - local info = - { - EffectName = "particles/creatures/aghanim/aghanim_crystal_attack.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetAttachmentOrigin( self:GetCaster():ScriptLookupAttachment( "attach_staff_fx" ) ), - fStartRadius = 0, - fEndRadius = 0, - vVelocity = vDirection * flSpeed, - fDistance = flDist2d, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - ProjectileManager:CreateLinearProjectile( info ) - EmitSoundOn( "Hero_Winter_Wyvern.SplinterBlast.Splinter", self:GetCaster() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_crystal_attack_telegraph.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, vPos ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.explosion_radius, self.attack_time, self.attack_time ) ) - ParticleManager:SetParticleControl( nFXIndex, 15, Vector( 214, 236, 239 ) ) - ParticleManager:SetParticleControl( nFXIndex, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) -end - --------------------------------------------------------------------------------- - -function aghanim_crystal_attack:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil then - return false - end - - local knockback_duration = self:GetSpecialValueFor( "knockback_duration" ) - local knockback_distance = self:GetSpecialValueFor( "knockback_distance" ) - local knockback_height = self:GetSpecialValueFor( "knockback_height" ) - local debuff_duration = self:GetSpecialValueFor( "debuff_duration" ) - - local vPosOnGround = GetGroundPosition( vLocation, self:GetCaster() ) - - EmitSoundOnLocationWithCaster( vPosOnGround, "Hero_Winter_Wyvern.SplinterBlast.Target", self:GetCaster() ) - - local nDetonationFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_crystal_attack_impact.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nDetonationFX, 0, vPosOnGround ) - ParticleManager:SetParticleControl( nDetonationFX, 1, Vector( self.explosion_radius, self.explosion_radius, self.explosion_radius ) ) - ParticleManager:ReleaseParticleIndex( nDetonationFX ) - - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), vPosOnGround, nil, self.explosion_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy:IsMagicImmune() == false then - local kv = - { - center_x = vPosOnGround.x, - center_y = vPosOnGround.y, - center_z = vPosOnGround.z, - should_stun = true, - duration = knockback_duration, - knockback_duration = knockback_duration, - knockback_distance = knockback_distance, - knockback_height = knockback_height, - } - - enemy:AddNewModifier( self:GetCaster(), self, "modifier_knockback", kv ) - --enemy:AddNewModifier( self:GetCaster(), self, "modifier_aghanim_crystal_attack_debuff", { duration = debuff_duration } ) - - local damage = { - victim = enemy, - attacker = self:GetCaster(), - damage = self.attack_damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self - } - - ApplyDamage( damage ) - end - end - end - - return true -end - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_passive.lua deleted file mode 100755 index a0d4112..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_passive.lua +++ /dev/null @@ -1,17 +0,0 @@ -aghanim_passive = class( {} ) - -LinkLuaModifier( "modifier_aghanim_passive", "modifiers/creatures/modifier_aghanim_passive", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function aghanim_passive:Precache( context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_outro_linger.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function aghanim_passive:GetIntrinsicModifierName() - return "modifier_aghanim_passive" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_shard_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_shard_attack.lua deleted file mode 100755 index 4d1b748..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_shard_attack.lua +++ /dev/null @@ -1,326 +0,0 @@ -aghanim_shard_attack = class( {} ) - -LinkLuaModifier( "modifier_aghanim_shard_attack", "modifiers/creatures/modifier_aghanim_shard_attack", LUA_MODIFIER_MOTION_NONE ) - -_G.PATTERN_SPIRAL = 0 -_G.PATTERN_REBOUND = 1 -_G.PATTERN_JITTER = 2 -_G.CAST_ESCLATION_PCT = 17 - -_G.FAST_COLOR = Vector( 0, 0, 255 ) -_G.SLOW_COLOR = Vector( 350, 0, 0 ) -- looks weird, but it's because it can't go to 0 speed -_G.HEAL_COLOR = Vector( 0, 255, 0 ) - ----------------------------------------------------------------------------------------- - -function aghanim_shard_attack:Precache( context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_shard_channel.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_shard_proj.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_lich/lich_frost_nova.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_dark_willow.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_silencer.vsndevts", context ) - - self.nPattern = PATTERN_SPIRAL - self.nCastCount = 0 - self.Projectiles = {} -end - ----------------------------------------------------------------------------------------- - -function aghanim_shard_attack:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function aghanim_shard_attack:OnAbilityPhaseStart() - if IsServer() then - StartSoundEventFromPositionReliable( "Aghanim.ShardAttack.Channel", self:GetCaster():GetAbsOrigin() ) - self.nChannelFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_shard_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - end - return true -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:OnChannelThink( flInterval ) - if IsServer() then - if self.nPattern == PATTERN_SPIRAL then - self:ThinkSpirals( flInterval ) - end - end -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:OnChannelFinish( bInterrupted ) - if IsServer() then - StopSoundOn( "Aghanim.ShardAttack.Loop", self:GetCaster() ) - ParticleManager:DestroyParticle( self.nChannelFX, false ) - self.nCastCount = self.nCastCount + 1 - end -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:OnSpellStart() - if IsServer() then - EmitSoundOn( "Aghanim.ShardAttack.Loop", self:GetCaster() ) - if self.nPattern == PATTERN_SPIRAL then - self:BeginSpirals() - end - if self.nPattern == PATTERN_REBOUND then - self:BeginRebound() - end - if self.nPattern == PATTERN_JITTER then - self:BeginJitter() - end - end -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:BeginSpirals() - self.Projectiles = {} - - self.spiral_projectiles = self:GetSpecialValueFor( "spiral_projectiles" ) - self.spiral_projectile_waves = self:GetSpecialValueFor( "spiral_projectile_waves" ) - self.spiral_projectile_speed = self:GetSpecialValueFor( "spiral_projectile_speed" ) - - self.spiral_projectiles = math.min( self.spiral_projectiles * 2, math.floor( self.spiral_projectiles + ( self.spiral_projectiles * CAST_ESCLATION_PCT * self.nCastCount / 100 ) ) ) - self.spiral_projectile_waves = math.min( self.spiral_projectile_waves * 2, math.floor( self.spiral_projectile_waves + ( self.spiral_projectile_waves * CAST_ESCLATION_PCT * self.nCastCount / 100 ) ) ) - self.spiral_projectile_speed = math.min( self.spiral_projectile_speed * 2, math.floor( self.spiral_projectile_speed + ( self.spiral_projectile_speed * CAST_ESCLATION_PCT * self.nCastCount / 100 ) ) ) - - self.spiral_projectile_rotation_speed = self:GetSpecialValueFor( "spiral_projectile_rotation_speed" ) - self.spiral_projectile_width = self:GetSpecialValueFor( "spiral_projectile_width" ) - self.spiral_projectile_damage = self:GetSpecialValueFor( "spiral_projectile_damage" ) - self.spiral_projectile_speed_change_interval = self:GetSpecialValueFor( "spiral_projectile_speed_change_interval" ) - - self.flSpiralYaw = RandomInt( 0, 360 ) - self.flSpiralWaveInterval = self:GetChannelTime() / self.spiral_projectile_waves - self.flSpiralNextWaveTime = GameRules:GetGameTime() - self.flSpiralYawStep = 360 / self.spiral_projectiles - self.bReverse = false - - if RandomInt( 0, 1 ) == 1 then - self.bReverse = true - end - - self.flSpiralSpeedToggleTime = GameRules:GetGameTime() + self.spiral_projectile_speed_change_interval - self.bSpiralSpeedingUp = true - self.flCurSpeed = self.spiral_projectile_speed - self.nToggleCount = 0 -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:ThinkSpirals( flInterval ) - local flNow = GameRules:GetGameTime() - if flNow > self.flSpiralSpeedToggleTime then - self.flSpiralSpeedToggleTime = flNow + self.spiral_projectile_speed_change_interval - self.bSpiralSpeedingUp = not self.bSpiralSpeedingUp - self.nToggleCount = self.nToggleCount + 1 - if self.nToggleCount == 2 then - self.bReverse = not self.bReverse - self.nToggleCount = 0 - end - end - - local flRate = ( self.spiral_projectile_speed / self.spiral_projectile_speed_change_interval ) * flInterval - if self.bSpiralSpeedingUp then - self.flCurSpeed = math.min( self.spiral_projectile_speed, self.flCurSpeed + flRate ) - else - self.flCurSpeed = math.max( 100, self.flCurSpeed - flRate ) - end - - if self.flSpiralNextWaveTime > flNow then - return - end - - self.flSpiralNextWaveTime = flNow + self.flSpiralWaveInterval - EmitSoundOn( "Aghanim.ShardAttack.Wave", self:GetCaster() ) - - for i=1,self.spiral_projectiles do - local Angle = QAngle( 0, self.flSpiralYaw, 0 ) - local vVelocity = ( RotatePosition( Vector( 0, 0, 0 ), Angle, Vector( 1, 0, 0 ) ) ) * self.flCurSpeed - local nProjectileHandle = self:LaunchCrystals( vVelocity, 5000, self.spiral_projectile_width ) - - local ProjectileInfo = {} - ProjectileInfo.nHandle = nProjectileHandle - ProjectileInfo.flYaw = self.flSpiralYaw - ProjectileInfo.nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_shard_proj.vpcf", PATTACH_CUSTOMORIGIN, nil ) - - local vLoc = self:GetCaster():GetAbsOrigin() - vLoc.z = GetGroundHeight( vLoc, self:GetCaster() ) + 50 - ProjectileInfo.attachEnt = CreateUnitByName( "npc_dota_wisp_spirit", vLoc, false, self:GetCaster(), self:GetCaster(), DOTA_TEAM_GOODGUYS ) - if ProjectileInfo.attachEnt ~= nil then - ProjectileInfo.attachEnt:AddNewModifier( self:GetCaster(), self, "modifier_wisp_spirit_invulnerable", {} ) - end - ParticleManager:SetParticleControlEnt( ProjectileInfo.nFXIndex, 0, ProjectileInfo.attachEnt, PATTACH_ABSORIGIN_FOLLOW, nil, vLoc, false ) - ParticleManager:SetParticleControl( ProjectileInfo.nFXIndex, 1, Vector( self.spiral_projectile_width, self.spiral_projectile_width, self.spiral_projectile_width ) ) - ParticleManager:SetParticleControl( ProjectileInfo.nFXIndex, 2, Vector( 6, 6, 6 ) ) - - --local flSpeedColorFactor = self.flCurSpeed / self.spiral_projectile_speed - --local vColor = LerpVectors( SLOW_COLOR, FAST_COLOR, flSpeedColorFactor ) - --ParticleManager:SetParticleControl( ProjectileInfo.nFXIndex, 15, vColor ) - - table.insert( self.Projectiles, ProjectileInfo ) - - if self.bReverse then - self.flSpiralYaw = self.flSpiralYaw - self.flSpiralYawStep - else - self.flSpiralYaw = self.flSpiralYaw + self.flSpiralYawStep - end - end - - self.flSpiralYaw = self.flSpiralYaw + self.flSpiralYawStep * 0.5 -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:ThinkSpiralProjectile( info ) - if self:IsChanneling() then - local flNewYaw = 0 - if self.bReverse then - flNewYaw = info.flYaw - self.spiral_projectile_rotation_speed - else - flNewYaw = info.flYaw + self.spiral_projectile_rotation_speed - end - - info.flYaw = flNewYaw - - local Angle = QAngle( 0, flNewYaw, 0 ) - local vNewVelocity = ( RotatePosition( Vector( 0, 0, 0 ), Angle, Vector( 1, 0, 0 ) ) ) * self.flCurSpeed - ProjectileManager:UpdateLinearProjectileDirection( info.nHandle, vNewVelocity, 5000 ) - end - - - local vLoc = ProjectileManager:GetLinearProjectileLocation( info.nHandle ) - vLoc.z = GetGroundHeight( vLoc, self:GetCaster() ) + 50 - info.attachEnt:SetAbsOrigin( vLoc ) - --ParticleManager:SetParticleControl( info.nFXIndex, 0, vLoc ) - - --local flSpeedColorFactor = self.flCurSpeed / self.spiral_projectile_speed ---local vColor = LerpVectors( SLOW_COLOR, FAST_COLOR, flSpeedColorFactor ) - --ParticleManager:SetParticleControl( info.nFXIndex, 15, vColor ) - - --rint( "setting new velocity on spiral projectile" ) -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:BeginRebound() -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:ThinkRebound( flInterval ) -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:ThinkReboundProjectile( info ) -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:BeginJitter() -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:ThinkJitter( flInterval ) -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:ThinkJitterProjectile( info ) -end - --------------------------------------------------------------------------------- - -function aghanim_shard_attack:LaunchCrystals( vVel, flDist, flRadius ) - local info = - { - Ability = self, - vSpawnOrigin = self:GetCaster():GetAbsOrigin(), - fStartRadius = flRadius, - fEndRadius = flRadius, - vVelocity = vVel, - fDistance = flDist, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - fExpireTime = GameRules:GetGameTime() + 10.0, - } - - return ProjectileManager:CreateLinearProjectile( info ) -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:OnProjectileThinkHandle( iProjectileHandle ) - if IsServer() then - local info = nil - for _,v in pairs ( self.Projectiles ) do - if v.nHandle == iProjectileHandle then - info = v - break - end - end - - if info == nil then - return - end - - if self.nPattern == PATTERN_SPIRAL then - self:ThinkSpiralProjectile( info ) - end - end -end - -------------------------------------------------------------------------------- - -function aghanim_shard_attack:OnProjectileHitHandle( hTarget, vLocation, iProjectileHandle ) - if IsServer() then - local info = nil - for _,v in pairs ( self.Projectiles ) do - if v.nHandle == iProjectileHandle then - info = v - break - end - end - - if info == nil then - return false - end - - if self.nPattern == PATTERN_SPIRAL then - ParticleManager:DestroyParticle( info.nFXIndex, false ) - UTIL_Remove( info.attachEnt ) - info.attachEnt = nil - end - - if hTarget and not hTarget:IsMagicImmune() and not hTarget:IsInvulnerable() then - local damage = - { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.spiral_projectile_damage, - damage_type = DAMAGE_TYPE_PURE, - ability = self, - } - - ApplyDamage( damage ) - - EmitSoundOn( "Hero_Silencer.LastWord.Damage", hTarget ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_lich/lich_frost_nova.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, hTarget:GetAbsOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.spiral_projectile_width, self.spiral_projectile_width, self.spiral_projectile_width ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - - return true -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_spell_swap.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_spell_swap.lua deleted file mode 100755 index 280bc76..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_spell_swap.lua +++ /dev/null @@ -1,146 +0,0 @@ - -aghanim_spell_swap = class({}) - -LinkLuaModifier( "modifier_aghanim_spell_swap", "modifiers/creatures/modifier_aghanim_spell_swap", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_aghanim_spell_swap_crystal", "modifiers/creatures/modifier_aghanim_spell_swap_crystal", LUA_MODIFIER_MOTION_BOTH ) - ----------------------------------------------------------------------------------------- - -function aghanim_spell_swap:Precache( context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_beam_channel.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_spell_swap_beam.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_wisp/wisp_tether_hit.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_wisp/wisp_guardian_explosion.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_spellswap_replenish.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_spellswap_ambient.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_destroy.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_impact.vpcf", context ) - - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_warlock.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_pugna.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_wisp.vsndevts", context ) - - PrecacheResource( "model", "models/gameplay/aghanim_crystal.vmdl", context ) -end - --------------------------------------------------------------------------------- - -function aghanim_spell_swap:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function aghanim_spell_swap:OnAbilityPhaseStart() - if IsServer() then - self.nChannelFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_beam_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - end - return true -end - - -------------------------------------------------------------------------------- - -function aghanim_spell_swap:GetChannelTime() - if IsServer() then - local flChannelTime = self.BaseClass.GetChannelTime( self ) - local nHealthPct = self:GetCaster():GetHealthPercent() - if nHealthPct < 50 then - flChannelTime = flChannelTime - 1.0 - end - if nHealthPct < 25 then - flChannelTime = flChannelTime - 1.0 - end - return flChannelTime - end - return self.BaseClass.GetChannelTime( self ) -end - -------------------------------------------------------------------------------- - -function aghanim_spell_swap:OnChannelThink( flInterval ) - if IsServer() then - end -end - -------------------------------------------------------------------------------- - -function aghanim_spell_swap:OnChannelFinish( bInterrupted ) - if IsServer() then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - - for _,nFXIndex in pairs ( self.nBeamFXIndices ) do - ParticleManager:DestroyParticle( nFXIndex, true ) - end - - StopSoundOn( "Hero_Pugna.LifeDrain.Loop", self:GetCaster() ) - - for k,hHero in pairs ( self.Heroes ) do - if hHero ~= nil and hHero:IsRealHero() then - hHero:RemoveModifierByName( "modifier_arc_warden_spark_wraith_purge" ) - hHero:AddNewModifier( self:GetCaster(), self, "modifier_aghanim_spell_swap", {} ) - end - end - end -end - --------------------------------------------------------------------------------- - -function aghanim_spell_swap:OnSpellStart() - if IsServer() then - self.nBeamFXIndices = {} - - local hSummonPortals = self:GetCaster():FindAbilityByName( "aghanim_summon_portals" ) - if hSummonPortals then - local kv = - { - duration = self:GetChannelTime(), - mode = hSummonPortals.PORTAL_MODE_ALL_ENEMIES, - depth = 0, - target_entindex = -1, - } - - local vRightPos = self:GetCaster():GetAbsOrigin() + self:GetCaster():GetRightVector() * 300 - local vLeftPos = self:GetCaster():GetAbsOrigin() - self:GetCaster():GetRightVector() * 300 - CreateModifierThinker( self:GetCaster(), self, "modifier_aghanim_summon_portals_thinker", kv, vRightPos, self:GetCaster():GetTeamNumber(), false ) - CreateModifierThinker( self:GetCaster(), self, "modifier_aghanim_summon_portals_thinker", kv, vLeftPos, self:GetCaster():GetTeamNumber(), false ) - end - - EmitSoundOn( "Hero_Pugna.LifeDrain.Cast", self:GetCaster() ) - EmitSoundOn( "Hero_Pugna.LifeDrain.Loop", self:GetCaster() ) - - self.Heroes = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - for k,hHero in pairs ( self.Heroes ) do - if hHero ~= nil and hHero:IsRealHero() then - - local nNumAghDummies = 0 - for j=1,4 do - local szName = tostring( "aghanim_empty_spell" .. j ) - local hDummyAbility = hHero:FindAbilityByName( szName ) - if hDummyAbility then - nNumAghDummies = nNumAghDummies + 1 - end - end - - if nNumAghDummies == 4 then - print( "I have 4 agh dummies! Getting slowed." ) - hHero:AddNewModifier( self:GetCaster(), self, "modifier_arc_warden_spark_wraith_purge", { duration = self:GetChannelTime() } ) - end - - local nBeamFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_spell_swap_beam.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - - local szAttachment = "attach_hand_R" - if RandomInt( 0, 1 ) == 1 then - szAttachment = "attach_lower_hand_R" - end - ParticleManager:SetParticleControlEnt( nBeamFX, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, szAttachment, self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nBeamFX, 1, hHero, PATTACH_POINT_FOLLOW, "attach_hitloc", hHero:GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nBeamFX, 11, Vector( 1, 0, 0 ) ) - - table.insert( self.nBeamFXIndices, nBeamFX ) - end - end - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_staff_beams.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_staff_beams.lua deleted file mode 100755 index 34ab548..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_staff_beams.lua +++ /dev/null @@ -1,147 +0,0 @@ - -aghanim_staff_beams = class({}) - -LinkLuaModifier( "modifier_aghanim_staff_beams_thinker", "modifiers/creatures/modifier_aghanim_staff_beams_thinker", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_aghanim_staff_beams_linger_thinker", "modifiers/creatures/modifier_aghanim_staff_beams_linger_thinker", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_aghanim_staff_beams_debuff", "modifiers/creatures/modifier_aghanim_staff_beams_debuff", LUA_MODIFIER_MOTION_NONE ) - - ----------------------------------------------------------------------------------------- - -function aghanim_staff_beams:Precache( context ) - PrecacheResource( "particle", "particles/creatures/aghanim/staff_beam.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_beam_channel.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_beam_burn.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/staff_beam_linger.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/staff_beam_tgt_ring.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_debug_ring.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_phoenix.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_huskar.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_jakiro.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function aghanim_staff_beams:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function aghanim_staff_beams:OnAbilityPhaseStart() - if IsServer() then - StartSoundEventFromPositionReliable( "Aghanim.StaffBeams.WindUp", self:GetCaster():GetAbsOrigin() ) - self.nChannelFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_beam_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - self.vecTargets = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - for k,enemy in pairs ( self.vecTargets ) do - if enemy ~= nil then - enemy.nWarningFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_debug_ring.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( enemy.nWarningFXIndex, 0, enemy:GetAbsOrigin() ) - enemy.vSourceLoc = enemy:GetAbsOrigin() - end - end - end - return true -end - --------------------------------------------------------------------------------- - -function aghanim_staff_beams:OnSpellStart() - if IsServer() then - --EmitSoundOn( "Aghanim.ShardAttack.Channel", self:GetCaster() ) - EmitSoundOn( "Hero_Phoenix.SunRay.Cast", self:GetCaster() ) - EmitSoundOn( "Hero_Phoenix.SunRay.Loop", self:GetCaster() ) - - self.Projectiles = {} - - for k,enemy in pairs ( self.vecTargets ) do - if enemy ~= nil then - local hBeamThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_aghanim_staff_beams_thinker", { duration = self:GetChannelTime() }, enemy.vSourceLoc, self:GetCaster():GetTeamNumber(), false ) - ParticleManager:DestroyParticle( enemy.nWarningFXIndex, false ) - local projectile = - { - Target = enemy, - Source = hBeamThinker, - Ability = self, - EffectName = "", - iMoveSpeed = self:GetSpecialValueFor( "beam_speed" ), - vSourceLoc = enemy.vSourceLoc, - bDodgeable = false, - bProvidesVision = false, - flExpireTime = GameRules:GetGameTime() + self:GetChannelTime(), - bIgnoreObstructions = true, - bSuppressTargetCheck = true, - } - - projectile.hThinker = hBeamThinker - - local nProjectileHandle = ProjectileManager:CreateTrackingProjectile( projectile ) - projectile.nProjectileHandle = nProjectileHandle - - local nBeamFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/staff_beam.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nBeamFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_staff_fx", self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nBeamFXIndex, 1, projectile.hThinker, PATTACH_ABSORIGIN_FOLLOW, nil, projectile.hThinker:GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nBeamFXIndex, 2, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, projectile.hThinker:GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nBeamFXIndex, 9, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetAbsOrigin(), true ) - projectile.nFXIndex = nBeamFXIndex - - table.insert( self.Projectiles, projectile ) - end - end - --self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_aghanim_staff_beams", kv ) - end -end - -------------------------------------------------------------------------------- - -function aghanim_staff_beams:OnProjectileThinkHandle( nProjectileHandle ) - if IsServer() then - local Projectile = nil - for k,v in pairs( self.Projectiles ) do - if v.nProjectileHandle == nProjectileHandle then - Projectile = v - break - end - end - - if Projectile == nil then - return - end - - local vLocation = ProjectileManager:GetTrackingProjectileLocation( nProjectileHandle ) - if Projectile.hThinker ~= nil and not Projectile.hThinker:IsNull() then - vLocation = GetGroundPosition( vLocation, Projectile.hThinker ) - Projectile.hThinker:SetOrigin( vLocation ) - - ParticleManager:SetParticleControlFallback( Projectile.nFXIndex, 0, self:GetCaster():GetAbsOrigin() ) - ParticleManager:SetParticleControlFallback( Projectile.nFXIndex, 1, vLocation ) - ParticleManager:SetParticleControlFallback( Projectile.nFXIndex, 9, self:GetCaster():GetAbsOrigin() ) - end - end -end - -------------------------------------------------------------------------------- - -function aghanim_staff_beams:OnChannelThink( flInterval ) - if IsServer() then - end -end - -------------------------------------------------------------------------------- - -function aghanim_staff_beams:OnChannelFinish( bInterrupted ) - if IsServer() then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - StopSoundOn( "Hero_Phoenix.SunRay.Cast", self:GetCaster() ) - StopSoundOn( "Hero_Phoenix.SunRay.Loop", self:GetCaster() ) - EmitSoundOn( "Hero_Phoenix.SunRay.Stop", self:GetCaster() ) - - for _,v in pairs ( self.Projectiles ) do - ParticleManager:DestroyParticle( v.nFXIndex, false ) - if v.hThinker and v.hThinker:IsNull() == false then - UTIL_Remove( v.hThinker ) - end - end - --self:GetCaster():RemoveModifierByName( "modifier_aghanim_staff_beams" ) - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_summon_portals.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_summon_portals.lua deleted file mode 100755 index 46eb766..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_summon_portals.lua +++ /dev/null @@ -1,315 +0,0 @@ -aghanim_summon_portals = class( {} ) - -LinkLuaModifier( "modifier_aghanim_portal_spawn_effect", "modifiers/creatures/modifier_aghanim_portal_spawn_effect", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_aghanim_summon_portals_thinker", "modifiers/creatures/modifier_aghanim_summon_portals_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function aghanim_summon_portals:Precache( context ) - PrecacheResource( "particle", "particles/econ/events/ti10/portal/portal_open_bad.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/portal_summon.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_portal_summon.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_portal_emit.vpcf", context ) - PrecacheResource( "particle", "particles/econ/events/ti10/portal/portal_emit_large.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_pugna/pugna_decrepify.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_ghost.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_stomp_magical.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_impact_magical.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_elder_titan.vsndevts", context ) - - PrecacheUnitByNameSync( "npc_dota_creature_aghanim_minion", context, -1 ) - PrecacheUnitByNameSync( "npc_dota_boss_aghanim_spear", context, -1 ) - - self.PORTAL_MODE_ALL_SPEARS = 0 - self.PORTAL_MODE_ALL_ENEMIES = 1 - self.PORTAL_MODE_BOTH = 2 - - self.nLastPortalMode = self.PORTAL_MODE_ALL_ENEMIES - self.nMode = 0 - self.nDepthRemaining = 20 - self.nPortals = 0 - self.nNumPortalsThisCast = 0 - self.flPortalSummmonTime = self:GetSpecialValueFor( "portal_time" ) - self.flStartGestureTime = 999999999999 - - self.bSynchedPortalRelease = false -end - --------------------------------------------------------------------------------- - -function aghanim_summon_portals:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function aghanim_summon_portals:OnAbilityPhaseStart() - if IsServer() then - self.nPortals = self:GetPortalCount() - self.flPortalSummmonTime = self:GetSpecialValueFor( "portal_time" ) - - self.nChannelFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_portal_summon.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - EmitSoundOn( "Hero_ElderTitan.EchoStomp.Channel", self:GetCaster() ) - - self.staff_crush_radius = self:GetSpecialValueFor( "staff_crush_radius" ) - self.staff_crush_damage = self:GetSpecialValueFor( "staff_crush_damage" ) - self.staff_crush_stun_duration = self:GetSpecialValueFor( "staff_crush_stun_duration" ) - self.staff_crush_delay = self:GetSpecialValueFor( "staff_crush_delay" ) - - - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetAbsOrigin() - vToTarget.z = 0 - vToTarget = vToTarget:Normalized() - - self.vStaffEndPos = self:GetCaster():GetAbsOrigin() + ( vToTarget * 200.0 )--+ ( self:GetCaster():GetRightVector() * -30 ) - self.vStaffEndPos = GetGroundPosition( self.vStaffEndPos, self:GetCaster() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_crystal_attack_telegraph.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self.vStaffEndPos ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.staff_crush_radius, 1.6, 1.6 ) ) - ParticleManager:SetParticleControl( nFXIndex, 15, Vector( 255, 0, 0 ) ) - ParticleManager:SetParticleControl( nFXIndex, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - return true -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:OnChannelThink( flInterval ) - if IsServer() then - if self.nPortals > 0 and GameRules:GetGameTime() > self.flNextPortalTime then - self.flNextPortalTime = GameRules:GetGameTime() + self.flPortalInterval - if self.nNumPortalsInLine > 0 then - self:CreateNextPortalAlongLine() - self.nNumPortalsInLine = self.nNumPortalsInLine - 1 - self.nNumPortalsThisCast = self.nNumPortalsThisCast + 1 - end - - if self.nNumPortalsNearHeroes > 0 then - self:CreateNearHeroPortal() - self.nNumPortalsNearHeroes = self.nNumPortalsNearHeroes - 1 - self.nNumPortalsThisCast = self.nNumPortalsThisCast + 1 - end - end - - if self.bHasStaffCrushed == false then - self.staff_crush_delay = self.staff_crush_delay - flInterval - if self.staff_crush_delay < 0 then - self.bHasStaffCrushed = true - self:StaffCrush() - end - end - - if GameRules:GetGameTime() > self.flStartGestureTime then - self:GetCaster():StartGesture( ACT_DOTA_IDLE ) - self.flStartGestureTime = 9999999999999 - end - end -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:OnChannelFinish( bInterrupted ) - if IsServer() then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - self:GetCaster():RemoveGesture( ACT_DOTA_IDLE ) - end -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:OnSpellStart() - if IsServer() then - self.flStartGestureTime = GameRules:GetGameTime() + 2.5 - self.bHasStaffCrushed = false - - self.flPortalInterval = self:GetChannelTime() / self.nPortals - self.flNextPortalTime = -1 - self.nDepthRemaining = self:GetSpecialValueFor( "total_portal_depth" ) - self.nLastPortalMode = self.nMode - self.nMode = self:GetPortalMode() - - self.nNumPortalsThisCast = 0 - - self.nNumPortalsInLine = self:GetSpecialValueFor( "base_portals" ) - self.nNumPortalsNearHeroes = self.nPortals - self.nNumPortalsInLine - - if self.nMode == self.PORTAL_MODE_ALL_SPEARS then - local vMidPoint = nil - - local vLineDir = nil - self.Heroes = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - - vMidPoint = self:GetCaster():GetAbsOrigin() + self:GetCaster():GetForwardVector() * 500 - vLineDir = self:GetCaster():GetRightVector() - - vLineDir.z = 0.0 - vLineDir = vLineDir:Normalized() - - local nPortalsRemaining = self.nNumPortalsInLine - 1 - local flLineStep = 450 - local flTotalLineDist = flLineStep * self.nNumPortalsInLine - local vFirstPortalPos = vMidPoint - ( vLineDir * ( flLineStep * nPortalsRemaining / 2 ) ) - - self.SpearLinePositions = {} - table.insert( self.SpearLinePositions, vFirstPortalPos ) - - for i=1,nPortalsRemaining do - local vNewPortalPos = vFirstPortalPos + ( vLineDir * i * flLineStep ) - table.insert( self.SpearLinePositions, vNewPortalPos ) - end - end - end -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:StaffCrush() - if IsServer() then - - local nFXCastIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_stomp_magical.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXCastIndex, 0, self.vStaffEndPos ) - ParticleManager:SetParticleControl( nFXCastIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXCastIndex ) - - EmitSoundOn( "Hero_ElderTitan.EchoStomp", self:GetCaster() ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self.vStaffEndPos, self:GetCaster(), self.staff_crush_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.staff_crush_damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - - enemy:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.staff_crush_stun_duration } ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_impact_magical.vpcf", PATTACH_ABSORIGIN_FOLLOW, enemy ) - local vDirection = enemy:GetOrigin() - self.vStaffEndPos - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, vDirection ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - end -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:GetPortalCount() - if IsServer() then - local nBasePortals = self:GetSpecialValueFor( "base_portals" ) - local nHealthPctPerPortal = self:GetSpecialValueFor( "portal_health_pct" ) - local nAdditionalPortals = math.floor( ( 100 - self:GetCaster():GetHealthPercent() ) / nHealthPctPerPortal ) - - return nBasePortals + nAdditionalPortals - end - - return 0 -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:GetPortalMode() - if IsServer() then - return self.PORTAL_MODE_ALL_SPEARS - end - return 0 -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:CreateNearHeroPortal() - if IsServer() then - local nCountLeft = self.nNumPortalsNearHeroes - if nCountLeft <= 0 then - return - end - - local Heroes = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - if #Heroes == 0 then - return - end - - local hTarget = Heroes[ RandomInt( 1, #Heroes ) ] - if hTarget == nil then - return - end - - local vToAghanim = self:GetCaster():GetAbsOrigin() - hTarget:GetAbsOrigin() - vToAghanim.z = 0.0 - vToAghanim = vToAghanim:Normalized() - - local vPos = hTarget:GetAbsOrigin() - vToAghanim * RandomFloat( self:GetSpecialValueFor( "min_portal_offset" ), self:GetSpecialValueFor( "max_portal_offset" ) ) - if GridNav:CanFindPath( hTarget:GetAbsOrigin(), vPos ) == false then - return - end - - local flDuration = 0.5 + ( self:GetChannelStartTime() + self:GetChannelTime() ) - GameRules:GetGameTime() - ( nCountLeft * 0.3 ) - - local kv = - { - duration = flDuration, - mode = self.PORTAL_MODE_ALL_SPEARS, - depth = 0, - target_entindex = hTarget:entindex(), - } - - CreateModifierThinker( self:GetCaster(), self, "modifier_aghanim_summon_portals_thinker", kv, vPos, self:GetCaster():GetTeamNumber(), false ) - end -end - -------------------------------------------------------------------------------- - -function aghanim_summon_portals:CreateNextPortalAlongLine() - if IsServer() then - local nCountLeft = #self.SpearLinePositions - if nCountLeft == 0 then - return - end - - local vPos = self.SpearLinePositions[ 1 ] - - local hTarget = nil - if #self.Heroes == 0 then - local Heroes = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - if #Heroes == 0 then - return - end - hTarget = Heroes[ RandomInt( 1, #Heroes ) ] - else - local nIndex = RandomInt( 1, #self.Heroes ) - hTarget = self.Heroes[ nIndex ] - table.remove( self.Heroes, nIndex ) - end - - if hTarget == nil then - return - end - - local flDuration = 0.5 + ( self:GetChannelStartTime() + self:GetChannelTime() ) - GameRules:GetGameTime() - ( nCountLeft * 0.3 ) - table.remove( self.SpearLinePositions, 1 ) - - local kv = - { - duration = flDuration, - mode = self.PORTAL_MODE_ALL_SPEARS, - depth = 0, - target_entindex = hTarget:entindex(), - } - - CreateModifierThinker( self:GetCaster(), self, "modifier_aghanim_summon_portals_thinker", kv, vPos, self:GetCaster():GetTeamNumber(), false ) - end -end - -------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_brewmaster_primal_split.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_brewmaster_primal_split.lua deleted file mode 100755 index 33f026c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_brewmaster_primal_split.lua +++ /dev/null @@ -1,37 +0,0 @@ -aghsfort_brewmaster_primal_split = class({}) -LinkLuaModifier( "modifier_brewmaster_split", "modifiers/creatures/modifier_brewmaster_split", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function aghsfort_brewmaster_primal_split:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_brewmaster/brewmaster_primal_split.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_brewmaster_earth_unit", context, -1 ) - PrecacheUnitByNameSync( "npc_dota_brewmaster_storm_unit", context, -1 ) - PrecacheUnitByNameSync( "npc_dota_brewmaster_fire_unit", context, -1 ) -end - --------------------------------------------------------------------------------- - -function aghsfort_brewmaster_primal_split:OnAbilityPhaseStart() - if IsServer() then - local hLines = { "Hero_Brewmaster.PrimalSplit.VO6", "Hero_Brewmaster.PrimalSplit.VO7", "Hero_Brewmaster.PrimalSplit.VO8", } - local nRandomInt = RandomInt(1,3) - local hSplitLine = hLines[nRandomInt] - EmitSoundOn( hSplitLine, self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function aghsfort_brewmaster_primal_split:OnSpellStart() - if IsServer() == false then - return - end - - EmitSoundOn( "Hero_Brewmaster.PrimalSplit.Cast", self:GetCaster() ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_brewmaster_split", { duration = self:GetSpecialValueFor( "split_duration" ) } ) -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_brewmaster_thunderclap.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_brewmaster_thunderclap.lua deleted file mode 100755 index b616df3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_brewmaster_thunderclap.lua +++ /dev/null @@ -1,76 +0,0 @@ -aghsfort_brewmaster_thunderclap = class({}) - ----------------------------------------------------------------------------------------- - -function aghsfort_brewmaster_thunderclap:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_brewmaster/brewmaster_thunder_clap.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function aghsfort_brewmaster_thunderclap:OnAbilityPhaseStart() - if IsServer() then - self.radius = self:GetSpecialValueFor( "radius" ) - self.duration = self:GetSpecialValueFor( "duration" ) - self.damage = self:GetSpecialValueFor( "damage" ) - self.speed = self:GetSpecialValueFor( "speed" ) - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( radius, radius, radius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - - EmitSoundOn( "Hero_Brewmaster.ThunderClap.Target", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function aghsfort_brewmaster_thunderclap:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function aghsfort_brewmaster_thunderclap:GetPlaybackRateOverride() - return 0.5 -end - --------------------------------------------------------------------------------- - -function aghsfort_brewmaster_thunderclap:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_brewmaster/brewmaster_thunder_clap.vpcf", PATTACH_ABSORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetCaster():GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Hero_Brewmaster.ThunderClap", self:GetCaster() ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), nil, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - ApplyDamage( damageInfo ) - enemy:AddNewModifier( self:GetCaster(), self, "modifier_polar_furbolg_ursa_warrior_thunder_clap", { duration = self.duration } ) - end - end - - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_elemental_tiny_create_io.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_elemental_tiny_create_io.lua deleted file mode 100755 index ea176eb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_elemental_tiny_create_io.lua +++ /dev/null @@ -1,83 +0,0 @@ - -aghsfort_elemental_tiny_create_io = class({}) -LinkLuaModifier( "modifier_elemental_tiny_create_io_dummy", "modifiers/creatures/modifier_elemental_tiny_create_io_dummy", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_create_io:Precache( context ) - - PrecacheUnitByNameSync( "npc_dota_creature_elemental_io", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_create_io:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_create_io:OnSpellStart() - if not IsServer() then - return - end - - if self:GetCaster() == nil or self:GetCaster():IsNull() then - return - end - - local nSummonCount = self:GetSpecialValueFor( "spawn_count" ) - local nMaxSummons = self:GetSpecialValueFor( "max_summons" ) - local flSpawnDistance = self:GetSpecialValueFor( "spawn_distance" ) - - local flDeltaAngle = 360 / nSummonCount - local vAngles = QAngle( 0, math.random( 0, flDeltaAngle ), 0 ) - - --first time we spawn, create 2 the hIos - if not self:GetCaster():FindModifierByName( "modifier_elemental_tiny_create_io_dummy" ) then - nSummonCount = 2 - local kv2 = {} - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_elemental_tiny_create_io_dummy", kv2 ) - end - - for i = 1,nSummonCount do - - local vSpawnPosition = nil - for s = 1,36 do - - local vDir = AnglesToVector( vAngles ) - local vTest = self:GetCaster():GetAbsOrigin() + vDir * flSpawnDistance + math.random( -25, 25 ) - - if GameRules.Aghanim:GetCurrentRoom():IsValidSpawnPoint( vTest ) then - vSpawnPosition = vTest - break - end - - vAngles.y = vAngles.y + 10 - - end - - vAngles.y = vAngles.y + flDeltaAngle + math.random( -20, 20 ) - - if vSpawnPosition ~= nil then - - local kv = - { - vLocX = vSpawnPosition.x, - vLocY = vSpawnPosition.y, - vLocZ = vSpawnPosition.z, - } - local hIo = CreateUnitByName( "npc_dota_creature_elemental_io", self:GetCaster():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hIo ~= nil then - hIo:AddNewModifier( self:GetCaster(), self, "modifier_frostivus2018_broodbaby_launch", kv ) - hIo:SetOwner(self:GetCaster()) - table.insert( self:GetCaster().hIos, hIo ) - end - end - - end - -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_elemental_tiny_toss.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_elemental_tiny_toss.lua deleted file mode 100755 index d20f4a0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_elemental_tiny_toss.lua +++ /dev/null @@ -1,129 +0,0 @@ - -aghsfort_elemental_tiny_toss = class({}) -LinkLuaModifier( "modifier_elemental_tiny_grab", "modifiers/creatures/modifier_elemental_tiny_grab", LUA_MODIFIER_MOTION_HORIZONTAL ) ----------------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_toss:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_tiny/tiny_toss_blur.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_attack_telegraph.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_wisp/wisp_tether.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_wisp/wisp_tether_hit.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/target_telegraph_attack.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/elemental_tiny_ping.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_toss:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_toss:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 50, 50, 50 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 0, 0 ) ) - - self.hProjectile = nil - -- We want to find an Io to toss - self:FindProjectile() - if self.hProjectile ~= nil then - return true - end - - end - return false - -end --------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_toss:OnAbilityPhaseInterrupted() - - if IsServer() then - -- We were interrupted. Drop our Io and stop our warnings - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - self.hProjectile:RemoveModifierByName( "modifier_elemental_tiny_grab" ) - self.hProjectile = nil - end -end - --------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_toss:FindProjectile() - - if IsServer() then - self.grab_radius = self:GetSpecialValueFor( "grab_radius" ) - - local entities = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), self:GetCaster(), self.grab_radius, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, FIND_CLOSEST, false ) - - for _, hAlly in pairs( entities ) do - if hAlly ~= nil and not hAlly:IsNull() and hAlly:IsAlive() == true and hAlly:GetUnitName() == "npc_dota_creature_elemental_io" then - if not hAlly:FindModifierByName("modifier_tiny_toss") and not hAlly:FindModifierByName("modifier_elemental_tiny_grab") then - -- We found an Io, it's going to be our projectile - self.hProjectile = hAlly - end - end - end - - if self.hProjectile ~= nil then - -- Position Io into our hand - self.hProjectile:AddNewModifier( self:GetCaster(), self, "modifier_elemental_tiny_grab", nil ) - - local nDestinationPreviewFX = ParticleManager:CreateParticle( "particles/creatures/elemental_tiny_ping.vpcf", PATTACH_CUSTOMORIGIN, nil ) - --local nDestinationPreviewFX = ParticleManager:CreateParticle( "particles/ui_mouseactions/ping_retreat.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nDestinationPreviewFX, 0, self:GetCaster():GetCursorPosition() ) - --ParticleManager:SetParticleControl( nDestinationPreviewFX, 1, Vector( 275, 1.8, 1.8 ) ) - ParticleManager:SetParticleControl( nDestinationPreviewFX, 7, Vector( 255, 10, 10 ) ) - --ParticleManager:SetParticleControl( nDestinationPreviewFX, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( nDestinationPreviewFX ) - EmitSoundOnLocationWithCaster( self:GetCaster():GetCursorPosition(), "General.PingWarning", self:GetCaster() ) - - AddFOWViewer( DOTA_TEAM_GOODGUYS, self:GetCaster():GetCursorPosition(), self:GetSpecialValueFor( "radius" ), self:GetSpecialValueFor( "duration" ) + 0.5, false ) - - - else - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - self:StartCooldown(2) - end - end -end - --------------------------------------------------------------------------------- - -function aghsfort_elemental_tiny_toss:OnSpellStart() - - if IsServer() then - - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local kv = { - x = vPos.x, - y = vPos.y, - z = vPos.z - } - if self.hProjectile ~= nil and self.hProjectile:IsAlive() then - -- Leave our hand, Io - self.hProjectile:RemoveModifierByName( "modifier_elemental_tiny_grab" ) - -- And fly like the wind! - self.hProjectile:AddNewModifier( self:GetCaster(), self, "modifier_tiny_toss", kv ) - self:GetCaster():StartGesture( ACT_TINY_TOSS ) - - - - EmitSoundOn( "Ability.TossThrow", self:GetCaster() ) - - end - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_enraged_wildwing_tornado_blast.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_enraged_wildwing_tornado_blast.lua deleted file mode 100755 index d293c8d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_enraged_wildwing_tornado_blast.lua +++ /dev/null @@ -1,150 +0,0 @@ -aghsfort_enraged_wildwing_tornado_blast = class({}) - ----------------------------------------------------------------------------------------- - -function aghsfort_enraged_wildwing_tornado_blast:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_invoker/invoker_tornado.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/wildwing_tornado_blast_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - -end --------------------------------------------------------------------------------- - -function aghsfort_enraged_wildwing_tornado_blast:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 175, 175, 175 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 140, 0 ) ) - end - return true -end - --------------------------------------------------------------------------------- - -function aghsfort_enraged_wildwing_tornado_blast:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function aghsfort_enraged_wildwing_tornado_blast:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - local vDirection = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.travel_speed = self:GetSpecialValueFor( "travel_speed" ) - self.area_of_effect = self:GetSpecialValueFor( "area_of_effect" ) - self.damage = self:GetSpecialValueFor( "damage" ) - self.disable_duration = self:GetSpecialValueFor( "disable_duration" ) - self.travel_distance = self:GetSpecialValueFor( "travel_distance" ) - self.spawns_per_blast = self:GetSpecialValueFor( "spawns_per_blast" ) - self.harpy_spawn_amount = self:GetSpecialValueFor( "harpy_spawn_amount" ) - - self.spawn_interval = (self.travel_distance / self.travel_speed) / self.harpy_spawn_amount - 0.1 - - local info = { - EffectName = "particles/units/heroes/hero_invoker/invoker_tornado.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.area_of_effect, - fEndRadius = self.area_of_effect, - vVelocity = vDirection * self.travel_speed, - fDistance = self.travel_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, - iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES - } - - - self.flLastThinkTime = GameRules:GetGameTime() - self.nProjID = ProjectileManager:CreateLinearProjectile( info ) - EmitSoundOn( "Ability.TornadoBlast.Cast" , self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function aghsfort_enraged_wildwing_tornado_blast:OnProjectileThink( vLocation ) - if GameRules:GetGameTime() - self.flLastThinkTime >= self.spawn_interval then - self.flLastThinkTime = GameRules:GetGameTime() - - if self:GetCaster().Encounter and self:GetCaster().Encounter:GetRoom() and self:GetCaster().Encounter:GetRoom():IsInRoomBounds( vLocation ) then - self:SpawnHarpy(vLocation) - end - end -end - - --------------------------------------------------------------------------------- - -function aghsfort_enraged_wildwing_tornado_blast:OnProjectileHit( hTarget, vLocation ) - if hTarget ~= nil then - local damage = { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = this, - } - - ApplyDamage( damage ) - if not hTarget:FindModifierByName("modifier_aghsfort_wildwing_tornado_blast_debuff") then - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_aghsfort_wildwing_tornado_blast_debuff", { duration = self.disable_duration} ) - end - end - - return false -end - --------------------------------------------------------------------------------- - - --------------------------------------------------------------------------------- - -function aghsfort_enraged_wildwing_tornado_blast:SpawnHarpy( vLocation ) - if IsServer() then - - for i = 1, self.harpy_spawn_amount do - local hHarpy = CreateUnitByName( "npc_aghsfort_creature_tornado_harpy", vLocation, true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - local nMaxDistance = 200 - local vLoc = FindPathablePositionNearby(vLocation, 150, nMaxDistance ) - if hHarpy ~= nil then - hHarpy:SetInitialGoalEntity( self:GetCaster().hInitialGoalEntity ) - hHarpy:SetDeathXP( 0 ) - hHarpy:SetMinimumGoldBounty( 0 ) - hHarpy:SetMaximumGoldBounty( 0 ) - - local kv = - { - vLocX = vLoc.x, - vLocY = vLoc.y, - vLocZ = vLoc.z, - } - hHarpy:AddNewModifier( self:GetCaster(), self, "modifier_frostivus2018_broodbaby_launch", kv ) - end - end - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_CUSTOMORIGIN, nil, vLocation, true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 100, 100, 100 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 29, 55, 184 ) ) - - - self.flLastHarpyTime = GameRules:GetGameTime() - EmitSoundOn( "Creature_Bomb_Squad.LandMine.Plant", hHarpy ) - - end - - return -end - --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_naga_siren_mirror_image.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_naga_siren_mirror_image.lua deleted file mode 100755 index 6189565..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_naga_siren_mirror_image.lua +++ /dev/null @@ -1,37 +0,0 @@ -aghsfort_naga_siren_mirror_image = class({}) - --------------------------------------------------------------------------------- - -function aghsfort_naga_siren_mirror_image:Precache( context ) - -end - --------------------------------------------------------------------------------- - -function aghsfort_naga_siren_mirror_image:OnSpellStart() - print("Mirror Image") - local caster = self:GetCaster() - local vPos = caster:GetOrigin() - - local effect_name = "particles/units/heroes/hero_siren/naga_siren_mirror_image.vpcf" - local hEffects = ParticleManager:CreateParticle( effect_name, PATTACH_CUSTOMORIGIN, caster ) - caster:SetContextThink( "KillEffects", function() return self:KillEffects( hEffects ) end, 2 ) - EmitSoundOn( "Hero_NagaSiren.MirrorImage", self:GetCaster() ) - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vPos, nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - - local illusion_name = "npc_dota_creature_naga_siren_illusion" - local illusion_origin = vPos - local illusion = CreateUnitByName(illusion_name, illusion_origin, true, caster, nil, DOTA_TEAM_BADGUYS) - illusion:SetInitialGoalEntity( enemies ) - -end - --------------------------------------------------------------------------------- - -function aghsfort_naga_siren_mirror_image:KillEffects( hEffects ) - if hEffects ~= nil then - ParticleManager:DestroyParticle( hEffects, false ) - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_waveblaster_summon_ghost.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_waveblaster_summon_ghost.lua deleted file mode 100755 index 37ec19d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_waveblaster_summon_ghost.lua +++ /dev/null @@ -1,69 +0,0 @@ - -aghsfort_waveblaster_summon_ghost = class({}) -LinkLuaModifier( "modifier_aghsfort_waveblaster_summon_ghost_thinker", "modifiers/creatures/modifier_aghsfort_waveblaster_summon_ghost_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function aghsfort_waveblaster_summon_ghost:Precache( context ) - - PrecacheResource( "particle", "particles/themed_fx/tower_dragon_black_smokering.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", context ) - PrecacheResource( "particle", "particles/nyx_swarm_explosion/nyx_swarm_explosion.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_exit.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_creature_zealot_mound", context, -1 ) - PrecacheUnitByNameSync( "npc_dota_creature_zealot_scarab", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function aghsfort_waveblaster_summon_ghost:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function aghsfort_waveblaster_summon_ghost:OnSpellStart() - if not IsServer() then - return - end - - if self:GetCaster() == nil or self:GetCaster():IsNull() then - return - end - - local nSummonCount = self:GetSpecialValueFor( "spawn_count" ) - local flSpawnDistance = self:GetSpecialValueFor( "spawn_distance" ) - local flDuration = self:GetSpecialValueFor( "spawn_delay" ) - local flDeltaAngle = 360 / nSummonCount - local vAngles = QAngle( 0, math.random( 0, flDeltaAngle ), 0 ) - - for i = 1,nSummonCount do - - local vSpawnPosition = nil - for s = 1,36 do - - local vDir = AnglesToVector( vAngles ) - local vTest = self:GetCaster():GetAbsOrigin() + vDir * flSpawnDistance + math.random( -25, 25 ) - - if GameRules.Aghanim:GetCurrentRoom():IsValidSpawnPoint( vTest ) then - vSpawnPosition = vTest - break - end - - vAngles.y = vAngles.y + 10 - - end - - vAngles.y = vAngles.y + flDeltaAngle + math.random( -20, 20 ) - - if vSpawnPosition ~= nil then - - CreateModifierThinker( self:GetCaster(), self, "modifier_aghsfort_waveblaster_summon_ghost_thinker", {duration = flDuration }, self:GetCaster():GetAbsOrigin(), self:GetCaster():GetTeamNumber(), false ) - - end - - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_wisp_autoattack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_wisp_autoattack.lua deleted file mode 100755 index cf6659c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghsfort_wisp_autoattack.lua +++ /dev/null @@ -1,11 +0,0 @@ - -aghsfort_wisp_autoattack = class({}) -LinkLuaModifier( "modifier_aghsfort_wisp_autoattack", "modifiers/creatures/modifier_aghsfort_wisp_autoattack", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function aghsfort_wisp_autoattack:GetIntrinsicModifierName() - return "modifier_aghsfort_wisp_autoattack" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_broodmother_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_broodmother_passive.lua deleted file mode 100755 index d953c03..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_broodmother_passive.lua +++ /dev/null @@ -1,26 +0,0 @@ - -baby_broodmother_passive = class({}) - -LinkLuaModifier( "modifier_baby_broodmother_passive", "modifiers/creatures/modifier_baby_broodmother_passive", LUA_MODIFIER_MOTION_NONE ) ---LinkLuaModifier( "modifier_baby_broodmother_venom_pool", "modifiers/creatures/modifier_baby_broodmother_venom_pool", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function baby_broodmother_passive:Precache( context ) - - PrecacheResource( "particle", "particles/baby_brood_venom_pool.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_viper/viper_nethertoxin_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_silenced_lanecreeps.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_silenced.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_break.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function baby_broodmother_passive:GetIntrinsicModifierName() - return "modifier_baby_broodmother_passive" -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_magi_area_ignite.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_magi_area_ignite.lua deleted file mode 100755 index 32edd70..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_magi_area_ignite.lua +++ /dev/null @@ -1,57 +0,0 @@ - -baby_ogre_magi_area_ignite = class ({}) -LinkLuaModifier( "modifier_ogre_magi_area_ignite_thinker", "modifiers/creatures/modifier_ogre_magi_area_ignite_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function baby_ogre_magi_area_ignite:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/black_dragon_fireball.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_burn.vpcf", context ) - -end - ----------------------------------------------------------------------------------------- - -function baby_ogre_magi_area_ignite:OnSpellStart() - if IsServer() then - self.hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_magi_area_ignite_thinker", { duration = -1 }, self:GetCursorPosition(), self:GetCaster():GetTeamNumber(), false ) - if self.hThinker ~= nil then - local projectile = - { - Target = self.hThinker, - Source = self:GetCaster(), - Ability = self, - EffectName = "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite.vpcf", - iMoveSpeed = self:GetSpecialValueFor( "projectile_speed" ), - vSourceLoc = self:GetCaster():GetOrigin(), - bDodgeable = false, - bProvidesVision = false, - } - - ProjectileManager:CreateTrackingProjectile( projectile ) - - EmitSoundOn( "OgreMagi.Ignite.Cast", self:GetCaster() ) - end - end -end - ----------------------------------------------------------------------------------------- - -function baby_ogre_magi_area_ignite:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if self.hThinker ~= nil then - local hBuff = self.hThinker:FindModifierByName( "modifier_ogre_magi_area_ignite_thinker" ) - if hBuff ~= nil then - hBuff:OnIntervalThink() - end - self.hThinker = nil; - end - end - - return true -end - ----------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_tank_jump_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_tank_jump_smash.lua deleted file mode 100755 index 1ea20ed..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_tank_jump_smash.lua +++ /dev/null @@ -1,35 +0,0 @@ - -baby_ogre_tank_jump_smash = class({}) -LinkLuaModifier( "modifier_ogre_tank_melee_smash_thinker", "modifiers/creatures/modifier_ogre_tank_melee_smash_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function baby_ogre_tank_jump_smash:Precache( context ) - - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - -end - ------------------------------------------------------------------------------ - -function baby_ogre_tank_jump_smash:ProcsMagicStick() - return false -end - ------------------------------------------------------------------------------ - -function baby_ogre_tank_jump_smash:GetPlaybackRateOverride() - return 0.75 -end - - ------------------------------------------------------------------------------ - -function baby_ogre_tank_jump_smash:OnSpellStart() - if IsServer() then - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = self:GetSpecialValueFor( "jump_speed") }, self:GetCaster():GetOrigin(), self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_tank_melee_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_tank_melee_smash.lua deleted file mode 100755 index 77b2490..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/baby_ogre_tank_melee_smash.lua +++ /dev/null @@ -1,44 +0,0 @@ - -baby_ogre_tank_melee_smash = class({}) - ----------------------------------------------------------------------------------------- - -function baby_ogre_tank_melee_smash:Precache( context ) - - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - -end - ------------------------------------------------------------------------------ - -function baby_ogre_tank_melee_smash:ProcsMagicStick() - return false -end - ------------------------------------------------------------------------------ - -function baby_ogre_tank_melee_smash:GetCooldown( iLevel ) - return self.BaseClass.GetCooldown( self, self:GetLevel() ) / self:GetCaster():GetHasteFactor() -end - ------------------------------------------------------------------------------ - -function baby_ogre_tank_melee_smash:GetPlaybackRateOverride() - return math.min( 2.0, math.max( self:GetCaster():GetHasteFactor(), 0.75 ) ) -end - ------------------------------------------------------------------------------ - -function baby_ogre_tank_melee_smash:OnSpellStart() - if IsServer() then - EmitSoundOn( "OgreTank.Grunt", self:GetCaster() ) - local flSpeed = self:GetSpecialValueFor( "base_swing_speed" ) / self:GetPlaybackRateOverride() - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vTarget = self:GetCaster():GetOrigin() + vToTarget * self:GetCastRange( self:GetCaster():GetOrigin(), nil ) - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = flSpeed }, vTarget, self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bandit_archer_arrow.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bandit_archer_arrow.lua deleted file mode 100755 index c8d8e09..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bandit_archer_arrow.lua +++ /dev/null @@ -1,137 +0,0 @@ - -bandit_archer_arrow = class({}) - -LinkLuaModifier( "modifier_bandit_archer_arrow_debuff", "modifiers/creatures/modifier_bandit_archer_arrow_debuff", LUA_MODIFIER_MOTION_BOTH ) - --------------------------------------------------------------------------------- - -function bandit_archer_arrow:Precache( context ) - PrecacheResource( "particle", "particles/dungeon_bandit_archer_crescent_arrow.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function bandit_archer_arrow:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function bandit_archer_arrow:OnAbilityPhaseStart() - if IsServer() then - --[[ - self.nPreviewFX = ParticleManager:CreateParticle( "particles/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 60, 60, 60 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 188, 26, 26 ) ) - ]] - - --EmitSoundOn( "Dungeon.ArcherPullArrow", self:GetCaster() ) - - --self:GetCaster():AddNewModifier( self:GetCaster(), nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - return true -end - --------------------------------------------------------------------------------- - -function bandit_archer_arrow:OnAbilityPhaseInterrupted() - if IsServer() then - --ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - --StopSoundOn( "Dungeon.ArcherPullArrow", self:GetCaster() ) - end -end - ------------------------------------------------------------------------------ - ---[[ -function bandit_archer_arrow:GetPlaybackRateOverride() - return 0.75 -end -]] - --------------------------------------------------------------------------------- - -function bandit_archer_arrow:OnSpellStart() - if IsServer() then - --ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - --StopSoundOn( "Dungeon.ArcherPullArrow", self:GetCaster() ) - - self.attack_speed = self:GetSpecialValueFor( "attack_speed" ) - self.attack_width_initial = self:GetSpecialValueFor( "attack_width_initial" ) - self.attack_width_end = self:GetSpecialValueFor( "attack_width_end" ) - self.attack_distance = self:GetSpecialValueFor( "attack_distance" ) - self.attack_damage = self:GetSpecialValueFor( "attack_damage" ) - self.duration = self:GetSpecialValueFor( "duration" ) - self.break_duration = self:GetSpecialValueFor( "break_duration" ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.attack_speed = self.attack_speed * ( self.attack_distance / ( self.attack_distance - self.attack_width_initial ) ) - - local info = { - EffectName = "particles/dungeon_bandit_archer_crescent_arrow.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.attack_width_initial, - fEndRadius = self.attack_width_end, - vVelocity = vDirection * self.attack_speed, - fDistance = self.attack_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO, - } - - ProjectileManager:CreateLinearProjectile( info ) - - EmitSoundOn( "Dungeon.ArcherShootArrow", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function bandit_archer_arrow:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - local damage = { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.attack_damage, - damage_type = self:GetAbilityDamageType(), - ability = self - } - ApplyDamage( damage ) - - hTarget:AddNewModifier( self:GetCaster(), nil, "modifier_bandit_archer_arrow_debuff", { duration = self.break_duration } ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, hTarget:GetOrigin() ) - if self:GetCaster() then - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - end - ParticleManager:SetParticleControlEnt( nFXIndex, 10, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", hTarget ) - end - - return true - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bandit_stifling_dagger.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bandit_stifling_dagger.lua deleted file mode 100755 index 5ce6e7f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bandit_stifling_dagger.lua +++ /dev/null @@ -1,133 +0,0 @@ - -bandit_stifling_dagger = class({}) -LinkLuaModifier( "modifier_phantom_assassin_stiflingdagger_caster", "modifiers/creatures/modifier_phantom_assassin_stiflingdagger_caster", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_phantom_assassin_stiflingdagger", "modifiers/creatures/modifier_phantom_assassin_stiflingdagger", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function bandit_stifling_dagger:Precache( context ) - PrecacheResource( "particle", "particles/creatures/bandit_captain/phantom_assassin_linear_dagger.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function bandit_stifling_dagger:OnAbilityPhaseStart() - if IsServer() then - local nRadius = 100 - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( nRadius, nRadius, nRadius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - - EmitSoundOn( "Creature.StartCast", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function bandit_stifling_dagger:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - StopSoundOn( "Creature.StartCast", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function bandit_stifling_dagger:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - StopSoundOn( "Creature.StartCast", self:GetCaster() ) - end - - self.duration = self:GetSpecialValueFor( "duration" ) - self.dagger_speed = self:GetSpecialValueFor( "dagger_speed" ) - self.dagger_offset = self:GetSpecialValueFor( "dagger_offset" ) - self.dagger_count = self:GetSpecialValueFor( "dagger_count" ) - self.dagger_rate = self:GetSpecialValueFor( "dagger_rate" ) - self.dagger_range = self:GetSpecialValueFor( "dagger_range" ) - - self.vTargetLocation = self:GetCursorPosition() - self.flAccumulatedTime = 0.0 - self.vDirection = self.vTargetLocation - self:GetCaster():GetOrigin() - self.nDaggersThrown = 0 - - local vDirection = self.vTargetLocation - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self:ThrowDagger( vDirection ) -end - --------------------------------------------------------------------------------- - -function bandit_stifling_dagger:OnChannelThink( flInterval ) - self.flAccumulatedTime = self.flAccumulatedTime + flInterval - if self.flAccumulatedTime >= self.dagger_rate then - self.flAccumulatedTime = self.flAccumulatedTime - self.dagger_rate - - local vOffset = RandomVector( self.dagger_offset ) - vOffset.z = 0.0 - - local vDirection = ( self.vTargetLocation + vOffset ) - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self:ThrowDagger( vDirection ) - end -end - --------------------------------------------------------------------------------- - -function bandit_stifling_dagger:OnProjectileHit( hTarget, vLocation ) - if hTarget ~= nil and ( not hTarget:IsInvulnerable() ) then - local kv = {} - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_phantom_assassin_stiflingdagger_caster", kv ) - self:GetCaster():PerformAttack( hTarget, false, true, true, true, true, false, true ) - self:GetCaster():RemoveModifierByName( "modifier_phantom_assassin_stiflingdagger_caster" ) - - local kv = - { - duration = self.duration, - } - - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_phantom_assassin_stiflingdagger", kv) - EmitSoundOn( "Dungeon.BanditDagger.Target", hTarget ) - end - - return true -end - --------------------------------------------------------------------------------- - -function bandit_stifling_dagger:ThrowDagger( vDirection ) - local info = - { - EffectName = "particles/creatures/bandit_captain/phantom_assassin_linear_dagger.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = 50.0, - fEndRadius = 50.0, - vVelocity = vDirection * self.dagger_speed, - fDistance = self.dagger_range, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - ProjectileManager:CreateLinearProjectile( info ) - EmitSoundOn( "Dungeon.BanditDagger.Cast", self:GetCaster() ) - - self.nDaggersThrown = self.nDaggersThrown + 1 - if self.nDaggersThrown >= self.dagger_count then - self:EndChannel( false ) - else - self:GetCaster():StartGestureWithPlaybackRate( ACT_DOTA_CAST_ABILITY_1, 1.33 ) - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_landmine_detonate.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_landmine_detonate.lua deleted file mode 100755 index 5979640..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_landmine_detonate.lua +++ /dev/null @@ -1,26 +0,0 @@ -bomb_squad_landmine_detonate = class({}) -LinkLuaModifier( "modifier_bomb_squad_landmine_detonate", "modifiers/creatures/modifier_bomb_squad_landmine_detonate", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_bomb_squad_landmine_intrinsic", "modifiers/creatures/modifier_bomb_squad_landmine_intrinsic", LUA_MODIFIER_MOTION_NONE ) - - ----------------------------------------------------------------------------------------- - -function bomb_squad_landmine_detonate:Precache( context ) - PrecacheResource( "particle", "particles/econ/events/darkmoon_2017/darkmoon_calldown_marker_ring.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_techies/techies_land_mine_explode.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function bomb_squad_landmine_detonate:GetIntrinsicModifierName() - return "modifier_bomb_squad_landmine_intrinsic" -end - --------------------------------------------------------------------------------- - -function bomb_squad_landmine_detonate:OnSpellStart() - if IsServer() then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_bomb_squad_landmine_detonate", { duration = self:GetSpecialValueFor( "duration" ) } ) - end -end - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_mine_charge.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_mine_charge.lua deleted file mode 100755 index d8b7463..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_mine_charge.lua +++ /dev/null @@ -1,51 +0,0 @@ - -bomb_squad_mine_charge = class({}) -LinkLuaModifier( "modifier_bomb_squad_mine_charge", "modifiers/creatures/modifier_bomb_squad_mine_charge", LUA_MODIFIER_MOTION_HORIZONTAL ) - ----------------------------------------------------------------------------------------- - -function bomb_squad_mine_charge:Precache( context ) - -end - - --------------------------------------------------------------------------------- - -function bomb_squad_mine_charge:OnAbilityPhaseStart() - if IsServer() then - self:GetCaster():StartGesture( ACT_DOTA_CAST_ABILITY_2 ) - end - - return true -end - --------------------------------------------------------------------------------- - -function bomb_squad_mine_charge:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveGesture( ACT_DOTA_CAST_ABILITY_2 ) - end -end - --------------------------------------------------------------------------------- - -function bomb_squad_mine_charge:OnSpellStart() - if IsServer() then - local vTarget = self:GetCursorPosition() - local flDist = (vTarget - self:GetCaster():GetOrigin()):Length2D() - self.speed = self:GetSpecialValueFor( "speed" ) - local flDuration = flDist / self.speed - - local kv = - { - vLocX = vTarget.x, - vLocY = vTarget.y, - vLocZ = vTarget.z, - duration = flDuration - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_bomb_squad_mine_charge", kv ) - EmitSoundOn( "OgreTank.Grunt", self:GetCaster() ) - end -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_self_cast.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_self_cast.lua deleted file mode 100755 index 02881b2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_self_cast.lua +++ /dev/null @@ -1,16 +0,0 @@ - --- - -bomb_squad_self_cast = class({}) -LinkLuaModifier( "modifier_bomb_squad_self_cast", "modifiers/creatures/modifier_bomb_squad_self_cast", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function bomb_squad_self_cast:OnSpellStart() - if IsServer() then - local kv - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_bomb_squad_self_cast", kv ) - end -end - ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_stasis_launch.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_stasis_launch.lua deleted file mode 100755 index c035b62..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomb_squad_stasis_launch.lua +++ /dev/null @@ -1,38 +0,0 @@ -bomb_squad_stasis_launch = class({}) -LinkLuaModifier( "modifier_bomb_squad_stasis_trap", "modifiers/creatures/modifier_bomb_squad_stasis_trap", LUA_MODIFIER_MOTION_NONE ) --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- - -function bomb_squad_stasis_launch:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_techies/techies_stasis_trap_plant.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_techies/techies_stasis_trap_explode.vpcf", context ) - PrecacheResource("model", "models/heroes/techies/fx_techiesfx_stasis.vmdl", context) -end - - - - - -function bomb_squad_stasis_launch:OnSpellStart() - if IsServer() then - - self.vTarget = self:GetCursorPosition() - local hMine = CreateUnitByName( "npc_aghsfort_creature_bomb_squad_stasis_trap", self:GetCaster():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - hMine:AddNewModifier( self:GetCaster(), self, "modifier_bomb_squad_stasis_trap", { duration = self:GetSpecialValueFor( "mine_lifetime" ) } ) - - - hMine:SetDeathXP( 0 ) - hMine:SetMinimumGoldBounty( 0 ) - hMine:SetMaximumGoldBounty( 0 ) - - local kv = - { - vLocX = self.vTarget.x, - vLocY = self.vTarget.y, - vLocZ = self.vTarget.z, - } - hMine:SetAbsAngles( 0 , self.vTarget.y, 0 ) - hMine:AddNewModifier( self:GetCaster(), self, "modifier_frostivus2018_broodbaby_launch", kv ) - - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomber_death_explosion.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomber_death_explosion.lua deleted file mode 100755 index b12a708..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomber_death_explosion.lua +++ /dev/null @@ -1,19 +0,0 @@ - -bomber_death_explosion = class({}) -LinkLuaModifier( "modifier_bomber_death_explosion_trigger", "modifiers/creatures/modifier_bomber_death_explosion_trigger", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_bomber_death_explosion", "modifiers/creatures/modifier_bomber_death_explosion", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function bomber_death_explosion:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_techies/techies_remote_mines_detonate.vpcf", context ) - PrecacheResource( "particle", "particles/dark_moon/darkmoon_calldown_marker_ring.vpcf", context ) -end - ------------------------------------------------------------------------------------------ - -function bomber_death_explosion:GetIntrinsicModifierName() - return "modifier_bomber_death_explosion_trigger" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomber_suicide_on_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomber_suicide_on_attack.lua deleted file mode 100755 index 47066ec..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/bomber_suicide_on_attack.lua +++ /dev/null @@ -1,11 +0,0 @@ - -bomber_suicide_on_attack = class({}) -LinkLuaModifier( "modifier_bomber_suicide_on_attack", "modifiers/creatures/modifier_bomber_suicide_on_attack", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function bomber_suicide_on_attack:GetIntrinsicModifierName() - return "modifier_bomber_suicide_on_attack" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_chakram_dance.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_chakram_dance.lua deleted file mode 100755 index a060de9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_chakram_dance.lua +++ /dev/null @@ -1,143 +0,0 @@ - -require( "utility_functions" ) - -boss_timbersaw_chakram_dance = class({}) -LinkLuaModifier( "modifier_boss_timbersaw_chakram_dance", "modifiers/creatures/modifier_boss_timbersaw_chakram_dance", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_chakram_aghs.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/dungeon_sand_king_channel.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_chakram_hit.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_iceblast_half.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_chakram.vpcf", context ) -end - -------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:OnAbilityPhaseStart() - if IsServer() then - --EmitSoundOn( "SandKingBoss.Epicenter.spell", self:GetCaster() ) - if IsGlobalAscensionCaster( self:GetCaster() ) == false then - self.nChannelFX = ParticleManager:CreateParticle( "particles/test_particle/dungeon_sand_king_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - end - end - return true -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:OnAbilityPhaseInterrupted() - if IsServer() then - if self.nChannelFX ~= nil then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - end - end -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:GetChannelAnimation() - return ACT_DOTA_GENERIC_CHANNEL_1 -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:GetPlaybackRateOverride() - return 1 -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:OnSpellStart() - if IsServer() then - self.hChakramAbility = self:GetCaster():FindAbilityByName( "shredder_chakram" ) - if self.hChakramAbility == nil then - self.hChakramAbility = self - end - self.pass_slow_duration = self.hChakramAbility:GetSpecialValueFor( "pass_slow_duration" ) - self.pass_damage = self.hChakramAbility:GetSpecialValueFor( "pass_damage" ) - self.radius = self.hChakramAbility:GetSpecialValueFor( "radius" ) - self.is_ascension_ability = 0 - if IsGlobalAscensionCaster( self:GetCaster() ) == true then - self.is_ascension_ability = 1 - end - - local kv = {} - kv[ "is_ascension_ability" ] = self.is_ascension_ability - kv[ "radius"] = self.radius - self.hBuff = self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_boss_timbersaw_chakram_dance", kv ) - end -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:OnChannelFinish( bInterrupted ) - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_boss_timbersaw_chakram_dance" ) - self.hBuff = nil - if self.nChannelFX ~= nil then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - end - end -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:OnProjectileThink( vLocation ) - if IsServer() then - GridNav:DestroyTreesAroundPoint( vLocation, self.radius, true ) - end -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_chakram_dance:OnProjectileHitHandle( hTarget, vLocation, nProjectileHandle ) - if IsServer() then - if hTarget == nil then - if self.hBuff == nil then - return true - end - local Chakram = self.hBuff:GetChakram( nProjectileHandle ) - if Chakram == nil then - -- print( "error, chakram is nil? ") - return true - end - if Chakram.bReturning == false then - self.hBuff:ReturnChakram( Chakram, vLocation ) - return true - end - elseif hTarget:IsMagicImmune() == false and hTarget:IsInvulnerable() == false then - local damageInfo = - { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.pass_damage, - damage_type = DAMAGE_TYPE_PURE, - ability = self.hChakramAbility, - } - if self.is_ascension_ability == 1 then - damageInfo.damage = damageInfo.damage * hTarget:GetMaxHealth() / 100.0 - end - - ApplyDamage( damageInfo ) - - hTarget:AddNewModifier( self:GetCaster(), self.hChakramAbility, "modifier_shredder_chakram_debuff", { duration = self.pass_slow_duration } ) - EmitSoundOn( "Boss_Timbersaw.Chakram.Target", hTarget ) - if hTarget:IsHero() then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_shredder/shredder_chakram_hit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - return false - end - end - - return true -end - ------------------------------------------------------------------------------ - -ascension_timbersaw_chakram_dance = boss_timbersaw_chakram_dance \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_reactive_armor.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_reactive_armor.lua deleted file mode 100755 index 2f797e0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_reactive_armor.lua +++ /dev/null @@ -1,26 +0,0 @@ - -boss_timbersaw_reactive_armor = class({}) -LinkLuaModifier( "modifier_boss_timbersaw_reactive_armor", "modifiers/creatures/modifier_boss_timbersaw_reactive_armor", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function boss_timbersaw_reactive_armor:Precache( context ) - - PrecacheResource( "particle", "particles/items2_fx/vanguard_active_launch.vpcf", context ) - PrecacheResource( "particle", "particles/items2_fx/pipe_of_insight_launch.vpcf", context ) - PrecacheResource( "particle", "particles/items2_fx/vanguard_active.vpcf", context ) - PrecacheResource( "particle", "particles/items2_fx/pipe_of_insight.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/boss_timbersaw/shredder_armor_lyr1.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/boss_timbersaw/shredder_armor_lyr2.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/boss_timbersaw/shredder_armor_lyr3.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/boss_timbersaw/shredder_armor_lyr4.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_reactive_hit.vpcf", context ) -end - ------------------------------------------------------------------------------------------ - -function boss_timbersaw_reactive_armor:GetIntrinsicModifierName() - return "modifier_boss_timbersaw_reactive_armor" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_timber_chain.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_timber_chain.lua deleted file mode 100755 index e52bf78..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_timber_chain.lua +++ /dev/null @@ -1,181 +0,0 @@ -boss_timbersaw_timber_chain = class({}) - ----------------------------------------------------------------------------------------- - -function boss_timbersaw_timber_chain:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_timberchain.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_timber_chain_tree.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_timber_chain_trail.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_timber_dmg.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_tree_dmg.vpcf", context ) - -end - --------------------------------------------------------------------------------- ---[[ -function boss_timbersaw_timber_chain:OnAbilityPhaseStart() - if IsServer() then - self.chain_radius = self:GetSpecialValueFor( "chain_radius" ) - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( self.chain_radius, self.chain_radius, self.chain_radius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 0, 0, 200 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_timber_chain:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end -]]-- --------------------------------------------------------------------------------- - -function boss_timbersaw_timber_chain:OnSpellStart() - if IsServer() then - --ParticleManager:DestroyParticle( self.nPreviewFX, false ) - self.chain_radius = self:GetSpecialValueFor( "chain_radius" ) - self.radius = self:GetSpecialValueFor( "radius" ) - self.speed = self:GetSpecialValueFor( "speed" ) - self.range = self:GetSpecialValueFor( "range" ) - self.stun_duration = self:GetSpecialValueFor( "stun_duration" ) - self.bRetracting = false - self.hHitTargets = {} - - local vDirection = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - local vTargetPos = self:GetCaster():GetAbsOrigin() + ( vDirection * self.range ) + Vector( 0, 0, 96 ) - self.vVelocity = vDirection * self.speed - local info = - { - Ability = self, - vSpawnOrigin = self:GetCaster():GetAbsOrigin(), - fStartRadius = self.chain_radius, - fEndRadius = self.chain_radius, - vVelocity = self.vVelocity, - fDistance = self.range, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_BOTH, - iUnitTargetType = DOTA_UNIT_TARGET_TREE, - } - - ProjectileManager:CreateLinearProjectile( info ) - - self.nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_shredder/shredder_timberchain.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetCaster():GetAbsOrigin() + Vector( 0, 0, 96 ), true ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, vTargetPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 2, Vector( self.speed, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 3, Vector( 10, 0, 0 ) ) - - EmitSoundOn( "Hero_Shredder.TimberChain.Cast", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_timber_chain:OnProjectileThink( vLocation ) - if IsServer() then - - if self.bRetracting == false then - local hTrees = GridNav:GetAllTreesAroundPoint( vLocation, self.chain_radius, true ) - if #hTrees > 0 then - for _,Tree in pairs ( hTrees ) do - if Tree and Tree:IsStanding() then - local vTreeOrigin = Tree:GetAbsOrigin() - if self:GetCaster().Encounter and self:GetCaster().Encounter:GetRoom() and self:GetCaster().Encounter:GetRoom():IsInRoomBounds( vTreeOrigin ) then - self:OnProjectileHit( Tree, vTreeOrigin ) - return - end - end - end - end - else - if self:GetCaster():FindModifierByName( "modifier_shredder_timber_chain" ) then - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), me, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, 0, 0, false ) - if #enemies > 0 then - for _,enemy in pairs( enemies ) do - if enemy and self:HasHitTarget( enemy ) == false then - table.insert( self.hHitTargets, enemy ) - enemy:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.stun_duration } ) - end - end - end - end - end - end -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_timber_chain:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if self.bRetracting == false then - StopSoundOn( "Hero_Shredder.TimberChain.Cast", self:GetCaster() ) - - if hTarget ~= nil then - print( "found a tree" ) - EmitSoundOnLocationWithCaster( vLocation, "Hero_Shredder.TimberChain.Impact", self:GetCaster() ) - local nTreeFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_shredder/shredder_timber_chain_tree.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nTreeFX, 0, vLocation + Vector( 0, 0, 96 ) ) - ParticleManager:ReleaseParticleIndex( nTreeFX ) - - local flDist = ( vLocation - self:GetCaster():GetAbsOrigin() ):Length2D() - local flDuration = flDist / self.speed - local kv = {} - kv[ "duration" ] = flDuration - kv[ "tree_index" ] = hTarget:entindex() - - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_shredder_timber_chain", kv ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, vLocation + Vector( 0, 0, 96 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 3, Vector( flDuration * 2 - 0.1, 0, 0 ) ) - else - ParticleManager:SetParticleControlEnt( self.nFXIndex, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, "attach_attack1", self:GetCaster():GetAbsOrigin() + Vector( 0, 0, 96 ), true ) - - local flFailChainDuration = ( self.range * 2 ) / self.speed - ParticleManager:SetParticleControl( self.nFXIndex, 3, Vector( flFailChainDuration - 0.1, 0, 0 ) ) - end - - EmitSoundOn( "Hero_Shredder.TimberChain.Retract", self:GetCaster() ) - - self.bRetracting = true - ParticleManager:ReleaseParticleIndex( self.nFXIndex ) - - local info = - { - Ability = self, - vSpawnOrigin = vLocation, - vVelocity = self.vVelocity * -1, - fDistance = self.range, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_BOTH, - iUnitTargetType = DOTA_UNIT_TARGET_TREE, - } - - ProjectileManager:CreateLinearProjectile( info ) - else - self.hHitTargets = {} - end - end - - return true -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_timber_chain:HasHitTarget( hTarget ) - for _, target in pairs( self.hHitTargets ) do - if target == hTarget then - return true - end - end - - return false -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_whirling_death.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_whirling_death.lua deleted file mode 100755 index 08618bc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_timbersaw_whirling_death.lua +++ /dev/null @@ -1,84 +0,0 @@ -boss_timbersaw_whirling_death = class({}) - ----------------------------------------------------------------------------------------- - -function boss_timbersaw_whirling_death:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/boss_timbersaw/boss_timbersaw_whirling_death.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_whirling_death_debuff.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_whirling_death:OnAbilityPhaseStart() - if IsServer() then - self.whirling_radius = self:GetSpecialValueFor( "whirling_radius" ) - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( self.whirling_radius, self.whirling_radius, self.whirling_radius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - - EmitSoundOn( "Hero_Shredder.WhirlingDeath.Cast", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_whirling_death:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function boss_timbersaw_whirling_death:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - self.duration = self:GetSpecialValueFor( "duration" ) - self.whirling_damage = self:GetSpecialValueFor( "whirling_damage" ) - self.tree_damage_scale = self:GetSpecialValueFor( "tree_damage_scale" ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/boss_timbersaw/boss_timbersaw_whirling_death.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( self.whirling_radius, self.whirling_radius, self.whirling_radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Hero_Shredder.WhirlingDeath.Cast", self:GetCaster() ) - - local nTreeBonusDmg = 0 - local hTrees = GridNav:GetAllTreesAroundPoint( self:GetCaster():GetAbsOrigin(), self.whirling_radius, true ) - for _,Tree in pairs ( hTrees ) do - if Tree.IsStanding and Tree:IsStanding() then - nTreeBonusDmg = nTreeBonusDmg + self.tree_damage_scale - Tree:CutDown( self:GetTeamNumber() ) - end - end - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), nil, self.whirling_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - enemy:AddNewModifier( self:GetCaster(), self, "modifier_shredder_whirling_death_debuff", { duration = self.duration } ) - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.whirling_damage + nTreeBonusDmg, - damage_type = DAMAGE_TYPE_PURE, - ability = self, - } - ApplyDamage( damageInfo ) - end - end - - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_familiar_stone_form.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_familiar_stone_form.lua deleted file mode 100755 index 898bd64..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_familiar_stone_form.lua +++ /dev/null @@ -1,34 +0,0 @@ - -boss_visage_familiar_stone_form = class({}) -LinkLuaModifier( "modifier_boss_visage_familiar_stone_form_buff", "modifiers/creatures/modifier_boss_visage_familiar_stone_form_buff", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_boss_visage_familiar_statue_stone_form", "modifiers/creatures/modifier_boss_visage_familiar_statue_stone_form", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_boss_visage_familiar_passive", "modifiers/creatures/modifier_boss_visage_familiar_passive", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function boss_visage_familiar_stone_form:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_stone_form.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_earth_spirit_petrify.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_visage.vsndevts", context ) -end - ------------------------------------------------------------------------------ - -function boss_visage_familiar_stone_form:GetIntrinsicModifierName() - return "modifier_boss_visage_familiar_passive" -end - ------------------------------------------------------------------------------ - -function boss_visage_familiar_stone_form:OnSpellStart() - if IsServer() then - local szBuffName = "modifier_boss_visage_familiar_stone_form_buff" - if self:GetCaster():GetUnitName() == "npc_dota_boss_visage_familiar_statue" then - szBuffName = "modifier_boss_visage_familiar_statue_stone_form" - end - self:GetCaster():AddNewModifier( self:GetCaster(), self, szBuffName, {} ) - self:GetCaster():StartGesture( ACT_DOTA_CAST_ABILITY_1 ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_grave_chill.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_grave_chill.lua deleted file mode 100755 index 33d6322..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_grave_chill.lua +++ /dev/null @@ -1,145 +0,0 @@ -boss_visage_grave_chill = class({}) - - ----------------------------------------------------------------------------------------- - -function boss_visage_grave_chill:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_base_attack.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_visage.vsndevts", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_necrolyte/necrolyte_pulse_enemy.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_vengeful/vengeful_wave_of_terror.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function boss_visage_grave_chill:OnAbilityPhaseStart() - if IsServer() then - EmitSoundOn( "Hero_Visage.preAttack", self:GetCaster() ) - end - return true -end - --------------------------------------------------------------------------------- - -function boss_visage_grave_chill:OnSpellStart() - if IsServer() then - self.chill_speed = self:GetSpecialValueFor( "chill_speed" ) - self.chill_radius = self:GetSpecialValueFor( "chill_radius" ) - self.chill_count = self:GetSpecialValueFor( "chill_count" ) - self.chill_damage = self:GetSpecialValueFor( "chill_damage" ) - - if self:GetCaster():GetHealthPercent() < 60 then - self.chill_speed = self.chill_speed * 2 - self.chill_count = self.chill_count + 2 - end - - if self.bStatuesInit == nil then - --print( "setting statue pairs ") - --print ( "Num east statues " .. #self:GetCaster().EastStatues ) - --print ( "Num west statues " .. #self:GetCaster().WestStatues ) - for k,v in pairs ( self:GetCaster().EastStatues ) do - local flShortestDist = 9999999 - local nPairIndex = nil - for i,j in pairs ( self:GetCaster().WestStatues ) do - local flDist = ( v:GetAbsOrigin() - j:GetAbsOrigin() ):Length2D() - if flDist < flShortestDist then - flShortestDist = flDist - nPairIndex = i - end - end - --print( "East statue at key " .. k .. " has partner in west at key " .. nPairIndex ) - v.nTargetPairIndex = nPairIndex - self:GetCaster().WestStatues[ nPairIndex ].nTargetPairIndex = k - end - self.bStatuesInit = true - end - - local bEast = true - local EastStatues = deepcopy( self:GetCaster().EastStatues ) - local WestStatues = deepcopy( self:GetCaster().WestStatues ) - for i=1,self.chill_count do - local hSource = nil - local hTarget = nil - local k = nil - if bEast then - k = RandomInt( 1, #EastStatues ) - hSource = EastStatues[ k ] - hTarget = WestStatues[ hSource.nTargetPairIndex ] - table.remove( EastStatues, k ) - table.remove( WestStatues, hSource.nTargetPairIndex ) - else - k = RandomInt( 1, #WestStatues ) - hSource = WestStatues[ k ] - hTarget = EastStatues[ hSource.nTargetPairIndex ] - table.remove( WestStatues, k ) - table.remove( EastStatues, hSource.nTargetPairIndex ) - end - - if hTarget ~= nil and hSource ~= nil then - local vDirection = hTarget:GetAbsOrigin() - hSource:GetAbsOrigin() - local flDist = vDirection:Length2D() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - local info = - { - EffectName = "particles/units/heroes/hero_vengeful/vengeful_wave_of_terror.vpcf", - Ability = self, - vSpawnOrigin = hSource:GetAbsOrigin(), - fStartRadius = self.chill_radius, - fEndRadius = self.chill_radius, - vVelocity = vDirection * self.chill_speed, - fDistance = flDist, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, - } - - ProjectileManager:CreateLinearProjectile( info ) - EmitSoundOn( "Hero_Visage.Attack", hSource ) - end - - bEast = not bEast - end - end -end - --------------------------------------------------------------------------------- - -function boss_visage_grave_chill:OnProjectileThinkHandle( nProjectileHandle ) - if IsServer() then - local vLocation = ProjectileManager:GetTrackingProjectileLocation( nProjectileHandle ) - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), vLocation, nil, self.chill_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - if #enemies == 0 then - return - end - - - ProjectileManager:DestroyTrackingProjectile( nProjectileHandle ) - end -end - ----------------------------------------------------------------------------------------- - -function boss_visage_grave_chill:OnProjectileHitHandle( hTarget, vLocation, nProjectileHandle ) - if IsServer() then - if hTarget and hTarget:IsMagicImmune() == false and hTarget:IsInvulnerable() == false then - self.chill_duration = self:GetSpecialValueFor( "chill_duration" ) - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_visage_grave_chill_debuff", { duration = self.chill_duration } ) - EmitSoundOn( "Hero_Visage.GraveChill.Target", hTarget ) - - local damage = - { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.chill_damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - - ApplyDamage( damage ) - end - end - return true -end - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_passive.lua deleted file mode 100755 index 83789a0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_passive.lua +++ /dev/null @@ -1,69 +0,0 @@ -boss_visage_passive = class({}) - -LinkLuaModifier( "modifier_boss_visage_passive", "modifiers/creatures/modifier_boss_visage_passive", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function boss_visage_passive:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_soul_assumption_bolt6.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_earth_spirit_petrify.vpcf", context ) - PrecacheResource( "particle", "particles/act_2/storegga_channel.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_visage.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_visage.vsndevts", context ) -end - ----------------------------------------------------------------------------------------- - -function boss_visage_passive:GetIntrinsicModifierName() - return "modifier_boss_visage_passive" -end - -------------------------------------------------------------------------------- - -function boss_visage_passive:OnProjectileThinkHandle( nProjectileHandle ) - if IsServer() and self:GetCaster() ~= nil then - self.soul_assumption_radius = self:GetSpecialValueFor( "soul_assumption_radius" ) - local vLocation = ProjectileManager:GetTrackingProjectileLocation( nProjectileHandle ) - local hFamiliars = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), vLocation, nil, self.soul_assumption_radius, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - for _,Familiar in pairs ( hFamiliars ) do - if Familiar ~= nil and Familiar:GetUnitName() == "npc_dota_boss_visage_familiar" then - self:WakeFamiliar( Familiar ) - ProjectileManager:DestroyTrackingProjectile( nProjectileHandle ) - end - end - end -end - --------------------------------------------------------------------------------- - -function boss_visage_passive:WakeFamiliar( hFamiliar ) - if IsServer() then - print( "Waking familiar!" ) - hFamiliar:RemoveModifierByName( "modifier_boss_visage_familiar_stone_form_buff" ) - end -end - --------------------------------------------------------------------------------- - -function boss_visage_passive:OnProjectileHit( hTarget, vLocation ) - if IsServer() == false or hTarget == nil then - return true - end - - if hTarget:IsMagicImmune() == false and hTarget:IsInvulnerable() == false then - local damageInfo = - { - victim = hTarget, - attacker = self:GetCaster(), - damage = self:GetSpecialValueFor( "soul_assumption_damage" ), - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - - EmitSoundOn( "Hero_Visage.SoulAssumption.Target", hTarget ) - end - - return true -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_ranged_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_ranged_attack.lua deleted file mode 100755 index 21e5e97..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/boss_visage_ranged_attack.lua +++ /dev/null @@ -1,93 +0,0 @@ -boss_visage_ranged_attack = class({}) - ----------------------------------------------------------------------------------------- - -function boss_visage_ranged_attack:Precache( context ) - PrecacheResource( "particle", "particles/creatures/visage_boss_base_attack.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/quill_beast/test_model_cluster_linear_projectile.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_bristleback/bristleback_quill_spray_impact.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_visage.vsndevts", context ) - - self.Projectiles = {} -end - --------------------------------------------------------------------------------- - -function boss_visage_ranged_attack:OnAbilityPhaseStart() - if IsServer() then - EmitSoundOn( "Hero_Visage.preAttack", self:GetCaster() ) - end - return true -end - --------------------------------------------------------------------------------- - -function boss_visage_ranged_attack:OnSpellStart() - if IsServer() then - self.attack_speed = self:GetSpecialValueFor( "attack_speed" ) - self.attack_width_initial = self:GetSpecialValueFor( "attack_width_initial" ) - self.attack_width_end = self:GetSpecialValueFor( "attack_width_end" ) - self.attack_distance = self:GetSpecialValueFor( "attack_distance" ) - self.attack_damage = self:GetSpecialValueFor( "attack_damage" ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.attack_speed = self.attack_speed * ( self.attack_distance / ( self.attack_distance - self.attack_width_initial ) ) - - local info = { - EffectName = "particles/creatures/quill_beast/test_model_cluster_linear_projectile.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetAttachmentOrigin( self:GetCaster():ScriptLookupAttachment( "attach_attack1" ) ), - fStartRadius = self.attack_width_initial, - fEndRadius = self.attack_width_end, - vVelocity = vDirection * self.attack_speed, - fDistance = self.attack_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, - } - - ProjectileManager:CreateLinearProjectile( info ) - EmitSoundOn( "Hero_Visage.Attack", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function boss_visage_ranged_attack:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - local damage = { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.attack_damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self - } - - ApplyDamage( damage ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_bristleback/bristleback_quill_spray_impact.vpcf", PATTACH_CUSTOMORIGIN, hTarget ); - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ); - ParticleManager:SetParticleControlEnt( nFXIndex, 1, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetOrigin(), true ); - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ); - ParticleManager:ReleaseParticleIndex( nFXIndex ); - - EmitSoundOn( "Hero_Visage.projectileImpact", hTarget ) - end - - return true - end -end - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/brewmaster_unit_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/brewmaster_unit_passive.lua deleted file mode 100755 index 49f62de..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/brewmaster_unit_passive.lua +++ /dev/null @@ -1,12 +0,0 @@ - -brewmaster_unit_passive = class({}) -LinkLuaModifier( "modifier_brewmaster_unit_passive", "modifiers/creatures/modifier_brewmaster_unit_passive", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function brewmaster_unit_passive:GetIntrinsicModifierName() - return "modifier_brewmaster_unit_passive" -end - ------------------------------------------------------------------------------------------ - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_accrue_children.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_accrue_children.lua deleted file mode 100755 index 512eb54..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_accrue_children.lua +++ /dev/null @@ -1,22 +0,0 @@ - -broodmother_accrue_children = class({}) -LinkLuaModifier( "modifier_broodmother_accrue_children", "modifiers/creatures/modifier_broodmother_accrue_children", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_broodmother_generate_children", "modifiers/creatures/modifier_broodmother_generate_children", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function broodmother_accrue_children:Precache( context ) - - PrecacheUnitByNameSync( "npc_dota_dummy_caster", context, -1 ) - PrecacheResource( "particle", "particles/baby_brood_venom_pool.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_creature_broodmother_baby_c", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function broodmother_accrue_children:GetIntrinsicModifierName() - return "modifier_broodmother_accrue_children" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_generate_children.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_generate_children.lua deleted file mode 100755 index 4f7e14d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_generate_children.lua +++ /dev/null @@ -1,22 +0,0 @@ - --- Note: this ability gets added by hand to the dummy unit that Broodmother creates. - -broodmother_generate_children = class({}) -LinkLuaModifier( "modifier_broodmother_generate_children", "modifiers/creatures/modifier_broodmother_generate_children", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function broodmother_generate_children:Precache( context ) - - PrecacheResource( "particle", "particles/baby_brood_venom_pool.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_creature_broodmother_baby_c", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function broodmother_generate_children:GetIntrinsicModifierName() - return "modifier_broodmother_generate_children" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_web.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_web.lua deleted file mode 100755 index 6dac21f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/broodmother_web.lua +++ /dev/null @@ -1,123 +0,0 @@ - -broodmother_web = class({}) -LinkLuaModifier( "modifier_broodmother_web", "modifiers/creatures/modifier_broodmother_web", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function broodmother_web:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_venomancer/venomancer_venomous_gale.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_venomancer/venomancer_venomous_gale_impact.vpcf", context ) - PrecacheResource( "particle", "particles/items2_fx/rod_of_atos.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function broodmother_web:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function broodmother_web:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 100, 100, 100 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 0, 100 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function broodmother_web:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function broodmother_web:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - self.projectile_distance = self:GetSpecialValueFor( "projectile_distance" ) - self.projectile_speed = self:GetSpecialValueFor( "projectile_speed" ) - self.projectile_radius = self:GetSpecialValueFor( "projectile_radius" ) - self.damage = self:GetSpecialValueFor( "damage" ) - self.root_duration = self:GetSpecialValueFor( "root_duration" ) - - self.knockback_distance = self:GetSpecialValueFor( "knockback_distance" ) - self.knockback_height = self:GetSpecialValueFor( "knockback_height" ) - self.knockback_duration = self:GetSpecialValueFor( "knockback_duration" ) - - local vPos = self:GetCursorPosition() - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - local info = { - EffectName = "particles/units/heroes/hero_venomancer/venomancer_venomous_gale.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.projectile_radius, - fEndRadius = self.projectile_radius, - vVelocity = vDirection * self.projectile_speed, - fDistance = self.projectile_distance, - Source = self:GetCaster(), - iUnitTargetTeam = self:GetAbilityTargetTeam(), - iUnitTargetType = self:GetAbilityTargetType(), - } - - ProjectileManager:CreateLinearProjectile( info ) - - EmitSoundOn( "Spider.PoisonSpit", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function broodmother_web:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - local damage = - { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = self:GetAbilityDamageType(), - ability = self, - } - ApplyDamage( damage ) - - local kv_knockback = - { - center_x = vLocation.x, - center_y = vLocation.y, - center_z = vLocation.z, - should_stun = false, - duration = self.knockback_duration, - knockback_duration = self.knockback_duration, - knockback_distance = self.knockback_distance, - knockback_height = self.knockback_height, - } - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_knockback", kv_knockback ) - - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_broodmother_web", { duration = self.root_duration } ) - - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/units/heroes/hero_venomancer/venomancer_venomous_gale_impact.vpcf", PATTACH_ABSORIGIN_FOLLOW, hTarget ) ) - - EmitSoundOn( "Spider.PoisonSpit.Impact", self:GetCaster() ) - end - - return true - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/burrower_big_explosion.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/burrower_big_explosion.lua deleted file mode 100755 index 60bce7c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/burrower_big_explosion.lua +++ /dev/null @@ -1,75 +0,0 @@ - -burrower_big_explosion = class({}) - ----------------------------------------------------------------------------------------- - -function burrower_big_explosion:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/nyx_swarm_explosion/nyx_swarm_explosion.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function burrower_big_explosion:OnAbilityPhaseStart() - if IsServer() then - self.radius = self:GetSpecialValueFor( "radius" ) - --self.duration = self:GetSpecialValueFor( "duration" ) - self.damage = self:GetSpecialValueFor( "damage" ) - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( radius, radius, radius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - - EmitSoundOn( "Burrower.PreSuicide", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function burrower_big_explosion:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function burrower_big_explosion:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/nyx_swarm_explosion/nyx_swarm_explosion.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex2, 2, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - - EmitSoundOn( "Burrower.Explosion", self:GetCaster() ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), nil, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for _,hEnemy in pairs( enemies ) do - if hEnemy ~= nil and hEnemy:IsAlive() and hEnemy:IsInvulnerable() == false then - local damageInfo = - { - victim = hEnemy, - attacker = self:GetCaster(), - damage = self.damage, - --damage_type = DAMAGE_TYPE_MAGICAL, - damage_type = self:GetAbilityDamageType(), - ability = self, - } - ApplyDamage( damageInfo ) - --hEnemy:AddNewModifier( self:GetCaster(), self, "modifier_polar_furbolg_ursa_warrior_thunder_clap", { duration = self.duration } ) - end - end - - self:GetCaster():ForceKill( false ) - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_bonus_chicken.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_bonus_chicken.lua deleted file mode 100755 index 0485b29..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_bonus_chicken.lua +++ /dev/null @@ -1,14 +0,0 @@ -creature_bonus_chicken = class({}) -LinkLuaModifier( "modifier_creature_bonus_chicken", "modifiers/modifier_creature_bonus_chicken", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function creature_bonus_chicken:Precache( context ) - PrecacheItemByNameSync( "item_bag_of_gold", context ) -end - --------------------------------------------------------------------------------- - -function creature_bonus_chicken:GetIntrinsicModifierName() - return "modifier_creature_bonus_chicken" -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_bonus_greevil.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_bonus_greevil.lua deleted file mode 100755 index d305ad1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_bonus_greevil.lua +++ /dev/null @@ -1,14 +0,0 @@ -creature_bonus_greevil = class({}) -LinkLuaModifier( "modifier_creature_bonus_greevil", "modifiers/modifier_creature_bonus_greevil", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function creature_bonus_greevil:Precache( context ) - PrecacheItemByNameSync( "item_bag_of_gold", context ) -end - --------------------------------------------------------------------------------- - -function creature_bonus_greevil:GetIntrinsicModifierName() - return "modifier_creature_bonus_greevil" -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_generic_high_status_resist_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_generic_high_status_resist_passive.lua deleted file mode 100755 index 7142c43..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_generic_high_status_resist_passive.lua +++ /dev/null @@ -1,8 +0,0 @@ -creature_generic_high_status_resist_passive = class({}) -LinkLuaModifier( "modifier_creature_generic_high_status_resist_passive", "modifiers/creatures/modifier_creature_generic_high_status_resist_passive", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function creature_generic_high_status_resist_passive:GetIntrinsicModifierName() - return "modifier_creature_generic_high_status_resist_passive" -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_landmine_detonate.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_landmine_detonate.lua deleted file mode 100755 index 12b7b7a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_landmine_detonate.lua +++ /dev/null @@ -1,10 +0,0 @@ -creature_landmine_detonate = class({}) -LinkLuaModifier( "modifier_creature_landmine_detonate", "modifiers/creatures/modifier_creature_landmine_detonate", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function creature_landmine_detonate:OnSpellStart() - if IsServer() then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_creature_landmine_detonate", { duration = self:GetSpecialValueFor( "duration" ) } ) - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_pudge_miniboss_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_pudge_miniboss_passive.lua deleted file mode 100755 index cea7456..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_pudge_miniboss_passive.lua +++ /dev/null @@ -1,8 +0,0 @@ -creature_pudge_miniboss_passive = class({}) -LinkLuaModifier( "modifier_creature_pudge_miniboss_passive", "modifiers/creatures/modifier_creature_pudge_miniboss_passive", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function creature_pudge_miniboss_passive:GetIntrinsicModifierName() - return "modifier_creature_pudge_miniboss_passive" -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_shadow_wave.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_shadow_wave.lua deleted file mode 100755 index ef2d22e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_shadow_wave.lua +++ /dev/null @@ -1,156 +0,0 @@ -creature_shadow_wave = class({}) - ----------------------------------------------------------------------------------------- - -function creature_shadow_wave:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_dazzle/dazzle_shadow_wave.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_dazzle/dazzle_shadow_wave_impact_damage.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function creature_shadow_wave:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 75, 75, 75 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 230, 100, 223 ) ) - end - return true -end - --------------------------------------------------------------------------------- - -function creature_shadow_wave:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end --------------------------------------------------------------------------------- - -function creature_shadow_wave:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - local hTarget = self:GetCursorTarget() - if hTarget ~= nil then - self.bounce_radius = self:GetSpecialValueFor( "bounce_radius" ) - self.damage_radius = self:GetSpecialValueFor( "damage_radius" ) - self.damage = self:GetSpecialValueFor( "damage" ) - self.max_targets = self:GetSpecialValueFor( "max_targets" ) - - self.nCurJumpCount = 1 - self.hHitEntities = {} - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_dazzle/dazzle_shadow_wave.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( self.damage_radius, 0, 0 ) ) - ParticleManager:SetParticleControlEnt( nFXIndex, 3, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - self.vTargetLoc = self:GetCaster():GetOrigin() - - self:DoHealAndDamage( self:GetCaster() ) - table.insert( self.hHitEntities, self:GetCaster() ) - - EmitSoundOn( "Wildwing.Shadow_Wave", self:GetCaster() ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/units/heroes/hero_dazzle/dazzle_shadow_wave.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex2, 0, self:GetCaster():GetOrigin() ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 1, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex2, 2, Vector( self.damage_radius, 0, 0 ) ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 3, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - - self.vTargetLoc = hTarget:GetOrigin() - if self:GetCaster() ~= hTarget then - self:DoHealAndDamage( hTarget ) - - local nFXIndex3 = ParticleManager:CreateParticle( "particles/units/heroes/hero_dazzle/dazzle_shadow_wave.vpcf", PATTACH_CUSTOMORIGIN, hTarget ) - ParticleManager:SetParticleControl( nFXIndex3, 0, self.vTargetLoc ) - ParticleManager:SetParticleControlEnt( nFXIndex3, 1, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex3, 2, Vector( self.damage_radius, 0, 0 ) ) - ParticleManager:SetParticleControlEnt( nFXIndex3, 3, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex3 ) - - self.vTargetLoc = hTarget:GetOrigin() - table.insert( self.hHitEntities, hTarget ) - else - self.nCurJumpCount = self.nCurJumpCount - 1 - end - - while self.nCurJumpCount < self.max_targets do - local hBestJumpTarget = nil - - local friendlies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self.vTargetLoc, self:GetCaster(), self.bounce_radius, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,friendly in pairs(friendlies) do - if friendly ~= nil and not self:HasHitTarget( friendly ) then - hBestJumpTarget = friendly - end - end - - if hBestJumpTarget ~= nil then - - self:DoHealAndDamage( hBestJumpTarget ) - - local nFXIndex4 = ParticleManager:CreateParticle( "particles/units/heroes/hero_dazzle/dazzle_shadow_wave.vpcf", PATTACH_CUSTOMORIGIN, hBestJumpTarget ) - ParticleManager:SetParticleControl( nFXIndex4, 0, self.vTargetLoc ) - ParticleManager:SetParticleControlEnt( nFXIndex4, 1, hBestJumpTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hBestJumpTarget:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex4, 2, Vector( self.damage_radius, 0, 0 ) ) - ParticleManager:SetParticleControlEnt( nFXIndex4, 3, hBestJumpTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hBestJumpTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex4 ) - - self.vTargetLoc = hBestJumpTarget:GetOrigin() - table.insert( self.hHitEntities, hTarget ) - end - self.nCurJumpCount = self.nCurJumpCount + 1 - end - end - end -end - --------------------------------------------------------------------------------- - -function creature_shadow_wave:DoHealAndDamage( hTarget ) - if IsServer() then - hTarget:Heal( self.damage, self ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), hTarget:GetOrigin(), self:GetCaster(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies > 0 then - for _,enemy in pairs(enemies) do - if enemy ~= nil then - local damage = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - damage_flags = DOTA_DAMAGE_FLAG_BYPASSES_BLOCK, - ability = self - } - ApplyDamage( damage ) - local vDir = enemy:GetOrigin() - hTarget:GetOrigin() - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_dazzle/dazzle_shadow_wave_impact_damage.vpcf", PATTACH_CUSTOMORIGIN, enemy ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, vDir ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function creature_shadow_wave:HasHitTarget( hTarget ) - for _,hHitTarget in pairs ( self.hHitEntities ) do - if hHitTarget == hTarget then - return true - end - end - - return false -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_techies_land_mine.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_techies_land_mine.lua deleted file mode 100755 index 3fbc7b7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/creature_techies_land_mine.lua +++ /dev/null @@ -1,13 +0,0 @@ - -creature_techies_land_mine = class({}) -LinkLuaModifier( "modifier_creature_techies_land_mine", "modifiers/creatures/modifier_creature_techies_land_mine", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function creature_techies_land_mine:OnSpellStart() - if IsServer() then - - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/dummy_caster_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/dummy_caster_passive.lua deleted file mode 100755 index fdfa122..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/dummy_caster_passive.lua +++ /dev/null @@ -1,13 +0,0 @@ - -dummy_caster_passive = class({}) - -LinkLuaModifier( "modifier_dummy_caster_passive", "modifiers/creatures/modifier_dummy_caster_passive", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function dummy_caster_passive:GetIntrinsicModifierName() - return "modifier_dummy_caster_passive" -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/dummy_target_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/dummy_target_passive.lua deleted file mode 100755 index 1580b65..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/dummy_target_passive.lua +++ /dev/null @@ -1,13 +0,0 @@ - -dummy_target_passive = class({}) - -LinkLuaModifier( "modifier_dummy_target_passive", "modifiers/creatures/modifier_dummy_target_passive", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function dummy_target_passive:GetIntrinsicModifierName() - return "modifier_dummy_target_passive" -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/earth_spirit_statue_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/earth_spirit_statue_passive.lua deleted file mode 100755 index ec7409b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/earth_spirit_statue_passive.lua +++ /dev/null @@ -1,18 +0,0 @@ - -earth_spirit_statue_passive = class({}) -LinkLuaModifier( "modifier_earth_spirit_statue_passive", "modifiers/creatures/modifier_earth_spirit_statue_passive", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_earth_spirit_statue_stoneform", "modifiers/creatures/modifier_earth_spirit_statue_stoneform", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function earth_spirit_statue_passive:Precache( context ) - PrecacheModel( "models/heroes/attachto_ghost/attachto_ghost.vmdl", context ) -end - ------------------------------------------------------------------------------------------ - -function earth_spirit_statue_passive:GetIntrinsicModifierName() - return "modifier_earth_spirit_statue_passive" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/elemental_tiny_tree_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/elemental_tiny_tree_attack.lua deleted file mode 100755 index 668c3c1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/elemental_tiny_tree_attack.lua +++ /dev/null @@ -1,15 +0,0 @@ - -elemental_tiny_tree_attack = class({}) - - -function elemental_tiny_tree_attack:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_tiny/tiny_craggy_cleave.vpcf", context ) -end - ------------------------------------------------------------------------------------------ - -function elemental_tiny_tree_attack:GetIntrinsicModifierName() - return "modifier_tiny_tree_grab" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ember_spirit_fireball.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ember_spirit_fireball.lua deleted file mode 100755 index c867c02..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ember_spirit_fireball.lua +++ /dev/null @@ -1,107 +0,0 @@ - -ember_spirit_fireball = class({}) - --------------------------------------------------------------------------------- - -function ember_spirit_fireball:Precache( context ) - PrecacheResource( "particle", "particles/lycanboss_ruptureball_gale.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function ember_spirit_fireball:GetPlaybackRateOverride() - return 0.3333 -end - --------------------------------------------------------------------------------- - -function ember_spirit_fireball:OnAbilityPhaseStart() - if IsServer() then - --EmitSoundOn( "lycan_lycan_attack_09", self:GetCaster() ) - - self.preview_fx_radius = self:GetSpecialValueFor( "preview_fx_radius" ) - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( self.preview_fx_radius, self.preview_fx_radius, self.preview_fx_radius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 247, 86, 9 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function ember_spirit_fireball:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function ember_spirit_fireball:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - self.projectile_speed = self:GetSpecialValueFor( "projectile_speed" ) - self.projectile_width_initial = self:GetSpecialValueFor( "projectile_width_initial" ) - self.projectile_width_end = self:GetSpecialValueFor( "projectile_width_end" ) - self.projectile_distance = self:GetSpecialValueFor( "projectile_distance" ) - self.impact_damage = self:GetSpecialValueFor( "impact_damage" ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.projectile_speed = self.projectile_speed * ( self.projectile_distance / ( self.projectile_distance - self.projectile_width_initial ) ) - - local info = { - EffectName = "particles/lycanboss_ruptureball_gale.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.projectile_width_initial, - fEndRadius = self.projectile_width_end, - vVelocity = vDirection * self.projectile_speed, - fDistance = self.projectile_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO, - } - - ProjectileManager:CreateLinearProjectile( info ) - --EmitSoundOn( "Lycan.RuptureBall", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function ember_spirit_fireball:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - --EmitSoundOn( "Lycan.RuptureBall.Impact", hTarget ); - - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_disarmed", { duration = self:GetSpecialValueFor( "disarm_duration" ) } ) - - local damage = { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.impact_damage, - damage_type = self:GetAbilityDamageType(), - ability = self - } - ApplyDamage( damage ) - end - - return true - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/enraged_wildkin_tornado_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/enraged_wildkin_tornado_passive.lua deleted file mode 100755 index 93ed3da..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/enraged_wildkin_tornado_passive.lua +++ /dev/null @@ -1,11 +0,0 @@ - -enraged_wildkin_tornado_passive = class({}) -LinkLuaModifier( "modifier_enraged_wildkin_tornado_passive", "modifiers/creatures/modifier_enraged_wildkin_tornado_passive", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function enraged_wildkin_tornado_passive:GetIntrinsicModifierName() - return "modifier_enraged_wildkin_tornado_passive" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/enraged_wildwing_create_tornado.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/enraged_wildwing_create_tornado.lua deleted file mode 100755 index fc217f9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/enraged_wildwing_create_tornado.lua +++ /dev/null @@ -1,95 +0,0 @@ - -enraged_wildwing_create_tornado = class({}) -LinkLuaModifier( "modifier_enraged_wildkin_tornado_passive", "modifiers/creatures/modifier_enraged_wildkin_tornado_passive", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_enraged_wildkin_tornado_passive_debuff", "modifiers/creatures/modifier_enraged_wildkin_tornado_passive_debuff", LUA_MODIFIER_MOTION_NONE ) - -require( "aghanim_utility_functions" ) --------------------------------------------------------------------- - -function enraged_wildwing_create_tornado:Precache( context ) - - PrecacheResource( "particle", "particles/neutral_fx/tornado_ambient.vpcf", context ) - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/enraged_wildkin/enraged_wildkin_tornado.vpcf", context ) - PrecacheUnitByNameSync( "npc_aghsfort_creature_enraged_wildwing_tornado", context, -1 ) -end - --------------------------------------------------------------------------------- - -function enraged_wildwing_create_tornado:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 175, 175, 175 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 140, 0 ) ) - end - return true -end - --------------------------------------------------------------------------------- - -function enraged_wildwing_create_tornado:OnAbilityPhaseInterrupted() - if IsServer() then - --ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - ---function enraged_wildwing_create_tornado:GetChannelAnimation() --- return ACT_DOTA_CHANNEL_ABILITY_1 ---end - --------------------------------------------------------------------------------- - -function enraged_wildwing_create_tornado:OnSpellStart() - if IsServer() then - - - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - local vPos = self:GetCaster():GetAbsOrigin() - for i=1,32 do - local vLoc = FindPathablePositionNearby(self:GetCaster():GetAbsOrigin(), 400, 800 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - vPos = vLoc - break - end - end - - local hTornado = CreateUnitByName( "npc_aghsfort_creature_enraged_wildwing_tornado", vPos, true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - hTornado:EmitSound( "n_creep_Wildkin.Tornado" ) - - local szAbilityName = "enraged_wildkin_tornado_passive" - local hAbility = hTornado:FindAbilityByName(szAbilityName) - if hAbility == nil then - hAbility = hTornado:AddAbility(szAbilityName) - end - hAbility:UpgradeAbility( true ) - - - - --local kv = { - -- movespeed_pct = self:GetSpecialValueFor( "movespeed_pct" ), - -- damage = self:GetSpecialValueFor( "damage" ), - --} - --hTornado:AddNewModifier( self:GetCaster(), self, "modifier_enraged_wildkin_tornado_passive", kv ) - - --self.m_hTornado = hTornado - end -end - - --------------------------------------------------------------------------------- --- ---function enraged_wildwing_create_tornado:OnChannelFinish( bInterrupted ) --- if IsServer() then --- if self.m_hTornado ~= nil then --- self.m_hTornado:StopSound( "n_creep_Wildkin.Tornado" ) --- self.m_hTornado:RemoveModifierByName("modifier_enraged_wildkin_tornado_passive") --- self.m_hTornado:ForceKill( false ) --- end --- ParticleManager:DestroyParticle( self.nPreviewFX, false ) --- end ---end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/evil_greevil_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/evil_greevil_passive.lua deleted file mode 100755 index 90270e1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/evil_greevil_passive.lua +++ /dev/null @@ -1,12 +0,0 @@ - -evil_greevil_passive = class({}) -LinkLuaModifier( "modifier_evil_greevil_passive", "modifiers/creatures/modifier_evil_greevil_passive", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function evil_greevil_passive:GetIntrinsicModifierName() - return "modifier_evil_greevil_passive" -end - ------------------------------------------------------------------------------------------ - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/friendly_ogreseal_flop.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/friendly_ogreseal_flop.lua deleted file mode 100755 index 63c9013..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/friendly_ogreseal_flop.lua +++ /dev/null @@ -1,103 +0,0 @@ - -friendly_ogreseal_flop = class({}) -LinkLuaModifier( "modifier_ogreseal_flop", "modifiers/creatures/modifier_ogreseal_flop", LUA_MODIFIER_MOTION_BOTH ) - ----------------------------------------------------------------------------------------- - -function friendly_ogreseal_flop:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre_seal/ogre_seal_warcry.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function friendly_ogreseal_flop:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function friendly_ogreseal_flop:OnAbilityPhaseStart() - if IsServer() then - self:GetCaster():StartGesture( ACT_DOTA_CAST_ABILITY_2 ) - end - - return true -end - --------------------------------------------------------------------------------- - -function friendly_ogreseal_flop:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveGesture( ACT_DOTA_CAST_ABILITY_2 ) - self:GetCaster():RemoveModifierByName( "modifier_techies_suicide_leap_animation" ) - end -end - --------------------------------------------------------------------------------- - -function friendly_ogreseal_flop:OnSpellStart() - if IsServer() then - self.stun_duration = self:GetSpecialValueFor("stun_duration") - - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vLocation = self:GetCaster():GetOrigin() + vToTarget * 25 - local kv = - { - vLocX = vLocation.x, - vLocY = vLocation.y, - vLocZ = vLocation.z - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ogreseal_flop", kv ) - EmitSoundOn( "OgreTank.Grunt", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function friendly_ogreseal_flop:TryToDamage() - if IsServer() then - local radius = self:GetSpecialValueFor( "radius" ) - local damage = self:GetSpecialValueFor( "damage" ) - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), self:GetCaster(), radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - for _,enemy in pairs(enemies) do - if enemy ~= nil and enemy:IsNull() == false and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - ability = self, - damage = damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - } - ApplyDamage( DamageInfo ) - if enemy:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", enemy ) - else - enemy:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.stun_duration } ) - end - end - end - end - - EmitSoundOnLocationWithCaster( self:GetCaster():GetOrigin(), "OgreTank.GroundSmash", self:GetCaster() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetCaster():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - GridNav:DestroyTreesAroundPoint( self:GetCaster():GetOrigin(), radius, false ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/hellbear_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/hellbear_smash.lua deleted file mode 100755 index 0a80b20..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/hellbear_smash.lua +++ /dev/null @@ -1,76 +0,0 @@ -hellbear_smash = class({}) - ----------------------------------------------------------------------------------------- - -function hellbear_smash:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/ursa_thunderclap.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function hellbear_smash:OnAbilityPhaseStart() - if IsServer() then - self.radius = self:GetSpecialValueFor( "radius" ) - self.duration = self:GetSpecialValueFor( "duration" ) - self.damage = self:GetSpecialValueFor( "damage" ) - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( radius, radius, radius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - - EmitSoundOn( "n_creep_Ursa.Clap", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function hellbear_smash:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function hellbear_smash:GetPlaybackRateOverride() - return 0.5 -end - --------------------------------------------------------------------------------- - -function hellbear_smash:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/neutral_fx/ursa_thunderclap.vpcf", PATTACH_ABSORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetCaster():GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Hellbear.Smash", self:GetCaster() ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), nil, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - ApplyDamage( damageInfo ) - enemy:AddNewModifier( self:GetCaster(), self, "modifier_polar_furbolg_ursa_warrior_thunder_clap", { duration = self.duration } ) - end - end - - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_brood_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_brood_passive.lua deleted file mode 100755 index f68342f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_brood_passive.lua +++ /dev/null @@ -1,11 +0,0 @@ - -huge_brood_passive = class({}) -LinkLuaModifier( "modifier_huge_brood_passive", "modifiers/creatures/modifier_huge_brood_passive", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function huge_brood_passive:GetIntrinsicModifierName() - return "modifier_huge_brood_passive" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_brood_summon_eggs.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_brood_summon_eggs.lua deleted file mode 100755 index 72c03b9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_brood_summon_eggs.lua +++ /dev/null @@ -1,132 +0,0 @@ - -huge_brood_summon_eggs = class({}) - --------------------------------------------------------------------------------- - -function huge_brood_summon_eggs:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", context ) - - PrecacheUnitByNameSync( "npc_dota_creature_broodmother_baby_d", context, -1 ) -end - --------------------------------------------------------------------------------- - -function huge_brood_summon_eggs:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 150, 150, 150 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function huge_brood_summon_eggs:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function huge_brood_summon_eggs:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - if self.hSummonedUnits == nil then - self.hSummonedUnits = {} - end - - self.egg_spawns = self:GetSpecialValueFor( "egg_spawns" ) - self.spider_spawns = self:GetSpecialValueFor( "spider_spawns" ) - self.max_summoned_units = self:GetSpecialValueFor( "max_summoned_units" ) - self.summon_radius = self:GetSpecialValueFor( "summon_radius" ) - - EmitSoundOn( "Creature.Summon", self:GetCaster() ) - - for i = 1, self.egg_spawns do - if #self.hSummonedUnits + 1 < self.max_summoned_units then - local nMaxDistance = self.summon_radius - local vSpawnLoc = nil - - local nMaxAttempts = 5 - local nAttempts = 0 - - repeat - if nAttempts > nMaxAttempts then - vSpawnLoc = nil - printf( "WARNING - huge_brood_summon_eggs - failed to find valid spawn loc for egg" ) - break - end - - local vPos = self:GetCaster():GetAbsOrigin() + RandomVector( nMaxDistance ) - vSpawnLoc = FindPathablePositionNearby( vPos, 0, 50 ) - nAttempts = nAttempts + 1 - until ( GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vSpawnLoc ) ) - - if vSpawnLoc == nil then - vSpawnLoc = self:GetCaster():GetAbsOrigin() - end - - local hEgg = CreateUnitByName( "npc_dota_spider_sac", vSpawnLoc, true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hEgg ~= nil then - table.insert( self.hSummonedUnits, hEgg ) - --local vRandomOffset = Vector( RandomInt( -self.summon_radius, self.summon_radius ), RandomInt( -self.summon_radius, self.summon_radius ), 0 ) - --local vSpawnPoint = self:GetCaster():GetAbsOrigin() + vRandomOffset - FindClearSpaceForUnit( hEgg, vSpawnLoc, true ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, vSpawnLoc ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - end - - for i = 1, self.spider_spawns do - if #self.hSummonedUnits + 1 < self.max_summoned_units then - local nMaxDistance = self.summon_radius - local vSpawnLoc = nil - - local nMaxAttempts = 5 - local nAttempts = 0 - - repeat - if nAttempts > nMaxAttempts then - vSpawnLoc = nil - printf( "WARNING - huge_brood_summon_eggs - failed to find valid spawn loc for spider" ) - break - end - - local vPos = self:GetCaster():GetAbsOrigin() + RandomVector( nMaxDistance ) - vSpawnLoc = FindPathablePositionNearby( vPos, 0, 50 ) - nAttempts = nAttempts + 1 - until ( GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vSpawnLoc ) ) - - if vSpawnLoc == nil then - vSpawnLoc = self:GetCaster():GetAbsOrigin() - end - - if vSpawnLoc ~= nil then - local hSummonedSpider = CreateUnitByName( "npc_dota_creature_broodmother_baby_d", vSpawnLoc, true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hSummonedSpider ~= nil then - table.insert( self.hSummonedUnits, hSummonedSpider ) - hSummonedSpider:SetInitialGoalEntity( self:GetCaster():GetInitialGoalEntity() ) - - --local vRandomOffset = Vector( RandomInt( -600, 600 ), RandomInt( -600, 600 ), 0 ) - --local vSpawnPoint = self:GetCaster():GetAbsOrigin() + vRandomOffset - FindClearSpaceForUnit( hSummonedSpider, vSpawnLoc, true ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, vSpawnLoc ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_broodmother_accrue_children.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_broodmother_accrue_children.lua deleted file mode 100755 index 4aab30e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_broodmother_accrue_children.lua +++ /dev/null @@ -1,22 +0,0 @@ - -huge_broodmother_accrue_children = class({}) -LinkLuaModifier( "modifier_huge_broodmother_accrue_children", "modifiers/creatures/modifier_huge_broodmother_accrue_children", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_huge_broodmother_generate_children_thinker", "modifiers/creatures/modifier_huge_broodmother_generate_children_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function huge_broodmother_accrue_children:Precache( context ) - - PrecacheUnitByNameSync( "npc_dota_dummy_caster", context, -1 ) - PrecacheResource( "particle", "particles/baby_brood_venom_pool.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_creature_broodmother_baby_d", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function huge_broodmother_accrue_children:GetIntrinsicModifierName() - return "modifier_huge_broodmother_accrue_children" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_broodmother_generate_children.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_broodmother_generate_children.lua deleted file mode 100755 index 14a4cee..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/huge_broodmother_generate_children.lua +++ /dev/null @@ -1,22 +0,0 @@ - --- Note: this ability gets added by hand to the dummy unit that Broodmother creates. - -huge_broodmother_generate_children = class({}) -LinkLuaModifier( "modifier_huge_broodmother_generate_children_thinker", "modifiers/creatures/modifier_huge_broodmother_generate_children_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function huge_broodmother_generate_children:Precache( context ) - - PrecacheResource( "particle", "particles/baby_brood_venom_pool.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_creature_broodmother_baby_d", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function huge_broodmother_generate_children:GetIntrinsicModifierName() - return "modifier_huge_broodmother_generate_children_thinker" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/kidnap_spider_summon_eggs.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/kidnap_spider_summon_eggs.lua deleted file mode 100755 index 6bbfa2f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/kidnap_spider_summon_eggs.lua +++ /dev/null @@ -1,88 +0,0 @@ - -kidnap_spider_summon_eggs = class({}) - --------------------------------------------------------------------------------- - -function kidnap_spider_summon_eggs:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function kidnap_spider_summon_eggs:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 150, 150, 150 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function kidnap_spider_summon_eggs:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function kidnap_spider_summon_eggs:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - if self.hSummonedUnits == nil then - self.hSummonedUnits = {} - end - - self.egg_spawns = self:GetSpecialValueFor( "egg_spawns" ) - self.spider_spawns = self:GetSpecialValueFor( "spider_spawns" ) - self.max_summoned_units = self:GetSpecialValueFor( "max_summoned_units" ) - self.summon_radius = self:GetSpecialValueFor( "summon_radius" ) - - EmitSoundOn( "Creature.Summon", self:GetCaster() ) - - for i = 1, self.egg_spawns do - if #self.hSummonedUnits + 1 < self.max_summoned_units then - local nMaxDistance = self.summon_radius - local vSpawnLoc = nil - - local nMaxAttempts = 5 - local nAttempts = 0 - - repeat - if nAttempts > nMaxAttempts then - vSpawnLoc = nil - printf( "WARNING - kidnap_spider_summon_eggs - failed to find valid spawn loc for egg" ) - break - end - - local vPos = self:GetCaster():GetAbsOrigin() + RandomVector( nMaxDistance ) - vSpawnLoc = FindPathablePositionNearby( vPos, 0, 50 ) - nAttempts = nAttempts + 1 - until ( GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vSpawnLoc ) ) - - if vSpawnLoc == nil then - vSpawnLoc = self:GetCaster():GetAbsOrigin() - end - - local hEgg = CreateUnitByName( "npc_dota_spider_sac", vSpawnLoc, true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hEgg ~= nil then - table.insert( self.hSummonedUnits, hEgg ) - --local vRandomOffset = Vector( RandomInt( -self.summon_radius, self.summon_radius ), RandomInt( -self.summon_radius, self.summon_radius ), 0 ) - --local vSpawnPoint = self:GetCaster():GetAbsOrigin() + vRandomOffset - FindClearSpaceForUnit( hEgg, vSpawnLoc, true ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, vSpawnLoc ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/kunkka_torrent_dm.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/kunkka_torrent_dm.lua deleted file mode 100755 index d0ddec2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/kunkka_torrent_dm.lua +++ /dev/null @@ -1,21 +0,0 @@ - -kunkka_torrent_dm = class({}) - --------------------------------------------------------------------------------- - -function kunkka_torrent_dm:OnSpellStart() - if IsServer() then - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_kunkka_torrent_thinker", {}, self:GetCursorPosition(), self:GetCaster():GetTeamNumber(), false ) - if hThinker ~= nil then - local hBuff = hThinker:FindModifierByName( "modifier_kunkka_torrent_thinker" ) - if hBuff ~= nil then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_kunkka/kunkka_spell_torrent_bubbles.vpcf", PATTACH_ABSORIGIN, hThinker ) - hBuff:AddParticle( nFXIndex, false, false, -1, false, false ) - end - - EmitSoundOn( "Ability.pre.Torrent", self:GetCaster() ) - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/lifestealer_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/lifestealer_passive.lua deleted file mode 100755 index 3432d91..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/lifestealer_passive.lua +++ /dev/null @@ -1,21 +0,0 @@ - -lifestealer_passive = class({}) -LinkLuaModifier( "modifier_lifestealer_passive", "modifiers/creatures/modifier_lifestealer_passive", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_lifestealer_damage_counter", "modifiers/creatures/modifier_lifestealer_damage_counter", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_lifestealer_enraged", "modifiers/creatures/modifier_lifestealer_enraged", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function lifestealer_passive:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_life_stealer/life_stealer_rage.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_life_stealer_rage.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/lifestealer/lifestealer_damage_counter_overhead.vpcf", context ) -end - ------------------------------------------------------------------------------------------ - -function lifestealer_passive:GetIntrinsicModifierName() - return "modifier_lifestealer_passive" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/mini_spider_slow_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/mini_spider_slow_attack.lua deleted file mode 100755 index fc27d58..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/mini_spider_slow_attack.lua +++ /dev/null @@ -1,12 +0,0 @@ - -mini_spider_slow_attack = class({}) -LinkLuaModifier( "modifier_mini_spider_slow_attack", "modifiers/creatures/modifier_mini_spider_slow_attack", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_mini_spider_slow_attack_debuff", "modifiers/creatures/modifier_mini_spider_slow_attack_debuff", LUA_MODIFIER_MOTION_NONE ) - -------------------------------------------------------------------------- - -function mini_spider_slow_attack:GetIntrinsicModifierName() - return "modifier_mini_spider_slow_attack" -end - -------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/mushroom_split.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/mushroom_split.lua deleted file mode 100755 index c200110..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/mushroom_split.lua +++ /dev/null @@ -1,24 +0,0 @@ -mushroom_split = class({}) - -LinkLuaModifier( "modifier_rock_golem_split", "modifiers/creatures/modifier_rock_golem_split", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function mushroom_split:Precache( context ) - - self.strSplitFx = "particles/creature_splitter/splitter_a.vpcf" - self.strSummonedUnit = "npc_dota_creature_shroomling" - - PrecacheResource( "particle", self.strSplitFx, context ) - PrecacheUnitByNameSync( self.strSummonedUnit, context, -1 ) - -end - --------------------------------------------------------------------------------- - -function mushroom_split:GetIntrinsicModifierName() - return "modifier_rock_golem_split" -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/nyx_suicide_heal.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/nyx_suicide_heal.lua deleted file mode 100755 index 5d70a30..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/nyx_suicide_heal.lua +++ /dev/null @@ -1,28 +0,0 @@ - -nyx_suicide_heal = class({}) -LinkLuaModifier( "modifier_nyx_suicide_heal", "modifiers/creatures/modifier_nyx_suicide_heal", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function nyx_suicide_heal:Precache( context ) - - PrecacheResource( "particle", "particles/items3_fx/fish_bones_active.vpcf", context ) - PrecacheResource( "particle", "particles/nyx_swarm_explosion/nyx_swarm_explosion.vpcf", context ) - -end - --------------------------------------------------------------- - -function nyx_suicide_heal:GetIntrinsicModifierName() - return "modifier_nyx_suicide_heal" -end - --------------------------------------------------------------- - -function nyx_suicide_heal:OnSpellStart() - if IsServer() then - self:GetCaster():ForceKill( false ) - end -end - --------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_magi_area_ignite.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_magi_area_ignite.lua deleted file mode 100755 index 9541d1b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_magi_area_ignite.lua +++ /dev/null @@ -1,55 +0,0 @@ - -ogre_magi_area_ignite = class ({}) -LinkLuaModifier( "modifier_ogre_magi_area_ignite_thinker", "modifiers/creatures/modifier_ogre_magi_area_ignite_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function ogre_magi_area_ignite:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite_cast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/black_dragon_fireball.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_burn.vpcf", context ) -end - ----------------------------------------------------------------------------------------- - -function ogre_magi_area_ignite:OnSpellStart() - if IsServer() then - self.hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_magi_area_ignite_thinker", { duration = -1 }, self:GetCursorPosition(), self:GetCaster():GetTeamNumber(), false ) - if self.hThinker ~= nil then - local projectile = - { - Target = self.hThinker, - Source = self:GetCaster(), - Ability = self, - EffectName = "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite.vpcf", - iMoveSpeed = self:GetSpecialValueFor( "projectile_speed" ), - vSourceLoc = self:GetCaster():GetOrigin(), - bDodgeable = false, - bProvidesVision = false, - } - - ProjectileManager:CreateTrackingProjectile( projectile ) - EmitSoundOn( "OgreMagi.Ignite.Cast", self:GetCaster() ) - end - end -end - ----------------------------------------------------------------------------------------- - -function ogre_magi_area_ignite:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if self.hThinker ~= nil then - local hBuff = self.hThinker:FindModifierByName( "modifier_ogre_magi_area_ignite_thinker" ) - if hBuff ~= nil then - hBuff:OnIntervalThink() - end - self.hThinker = nil; - end - end - - return true -end - ----------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_magi_channelled_bloodlust.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_magi_channelled_bloodlust.lua deleted file mode 100755 index d32bf49..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_magi_channelled_bloodlust.lua +++ /dev/null @@ -1,58 +0,0 @@ - -ogre_magi_channelled_bloodlust = class({}) -LinkLuaModifier( "modifier_ogre_magi_channelled_bloodlust", "modifiers/creatures/modifier_ogre_magi_channelled_bloodlust", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function ogre_magi_channelled_bloodlust:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_cast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_buff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_pugna/pugna_life_drain.vpcf", context ) - -end - ------------------------------------------------------------------------------ - -function ogre_magi_channelled_bloodlust:OnSpellStart() - if IsServer() then - local hTarget = self:GetCursorTarget() - if hTarget ~= nil then - self.hTarget = hTarget - self.hTarget:AddNewModifier( self:GetCaster(), self, "modifier_ogre_magi_channelled_bloodlust", { duration = -1 } ) - - EmitSoundOn( "OgreMagi.Bloodlust.Target", self.hTarget ) - EmitSoundOn( "OgreMagi.Bloodlust.Target.FP", self.hTarget ) - EmitSoundOn( "OgreMagi.Bloodlust.Loop", self:GetCaster() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_cast.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self.hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", self.hTarget:GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 3, self.hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, self.hTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end -end - ------------------------------------------------------------------------------ - -function ogre_magi_channelled_bloodlust:OnChannelFinish( bInterrupted ) - if IsServer() then - if bInterrupted then - self:StartCooldown( self:GetSpecialValueFor( "interrupted_cooldown" ) ) - end - - if self.hTarget ~= nil then - local hMyBuff = self.hTarget:FindModifierByNameAndCaster( "modifier_ogre_magi_channelled_bloodlust", self:GetCaster() ) - if hMyBuff then - hMyBuff:Destroy() - end - StopSoundOn( "OgreMagi.Bloodlust.Loop", self:GetCaster() ) - self.hTarget = nil - end - end -end - ------------------------------------------------------------------------------ - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_seer_area_ignite.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_seer_area_ignite.lua deleted file mode 100755 index 087bbe4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_seer_area_ignite.lua +++ /dev/null @@ -1,66 +0,0 @@ - -ogre_seer_area_ignite = class ({}) -LinkLuaModifier( "modifier_ogre_seer_area_ignite_thinker", "modifiers/creatures/modifier_ogre_seer_area_ignite_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function ogre_seer_area_ignite:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite_cast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/black_dragon_fireball.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_burn.vpcf", context ) -end - ----------------------------------------------------------------------------------------- - -function ogre_seer_area_ignite:OnSpellStart() - if IsServer() then - local vTargetPositions = { } - vTargetPositions[ 1 ] = self:GetCursorPosition() - vTargetPositions[ 2 ] = self:GetCursorPosition() + RandomVector( RandomFloat( 250, 300 ) ) - vTargetPositions[ 3 ] = self:GetCursorPosition() + RandomVector( RandomFloat( 250, 300 ) ) - - self.hThinkers = { } - - for i, vTargetPos in ipairs( vTargetPositions ) do - self.hThinkers[ i ] = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_seer_area_ignite_thinker", { duration = -1 }, vTargetPos, self:GetCaster():GetTeamNumber(), false ) - if self.hThinkers[ i ] ~= nil then - local projectile = - { - Target = self.hThinkers[ i ], - Source = self:GetCaster(), - Ability = self, - EffectName = "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite.vpcf", - iMoveSpeed = self:GetSpecialValueFor( "projectile_speed" ), - vSourceLoc = self:GetCaster():GetOrigin(), - bDodgeable = false, - bProvidesVision = false, - } - - ProjectileManager:CreateTrackingProjectile( projectile ) - EmitSoundOn( "OgreMagi.Ignite.Cast", self:GetCaster() ) - end - end - end -end - ----------------------------------------------------------------------------------------- - -function ogre_seer_area_ignite:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - for i, hThinker in pairs( self.hThinkers ) do - if hThinker ~= nil then - local hBuff = hThinker:FindModifierByName( "modifier_ogre_seer_area_ignite_thinker" ) - if hBuff ~= nil then - hBuff:OnIntervalThink() - end - hThinker = nil; - end - end - end - - return true -end - ----------------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_boss_jump_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_boss_jump_smash.lua deleted file mode 100755 index 2c58559..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_boss_jump_smash.lua +++ /dev/null @@ -1,26 +0,0 @@ - -ogre_tank_boss_jump_smash = class({}) -LinkLuaModifier( "modifier_ogre_tank_melee_smash_thinker", "modifiers/creatures/modifier_ogre_tank_melee_smash_thinker", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------ - -function ogre_tank_boss_jump_smash:ProcsMagicStick() - return false -end - ------------------------------------------------------------------------------ - -function ogre_tank_boss_jump_smash:GetPlaybackRateOverride() - return 0.9 -- keep this proportional to jump_speed -end - - ------------------------------------------------------------------------------ - -function ogre_tank_boss_jump_smash:OnSpellStart() - if IsServer() then - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = self:GetSpecialValueFor( "jump_speed") }, self:GetCaster():GetOrigin(), self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_boss_melee_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_boss_melee_smash.lua deleted file mode 100755 index b274094..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_boss_melee_smash.lua +++ /dev/null @@ -1,42 +0,0 @@ - -ogre_tank_boss_melee_smash = class({}) - ------------------------------------------------------------------------------ - -function ogre_tank_boss_melee_smash:Precache( context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) -end - ------------------------------------------------------------------------------ - -function ogre_tank_boss_melee_smash:ProcsMagicStick() - return false -end - ------------------------------------------------------------------------------ - -function ogre_tank_boss_melee_smash:GetCooldown( iLevel ) - return self.BaseClass.GetCooldown( self, self:GetLevel() ) / self:GetCaster():GetHasteFactor() -end - ------------------------------------------------------------------------------ - -function ogre_tank_boss_melee_smash:GetPlaybackRateOverride() - return math.min( 2.0, math.max( self:GetCaster():GetHasteFactor(), 1.0 ) ) -end - ------------------------------------------------------------------------------ - -function ogre_tank_boss_melee_smash:OnSpellStart() - if IsServer() then - EmitSoundOn( "OgreTank.Grunt", self:GetCaster() ) - local flSpeed = self:GetSpecialValueFor( "base_swing_speed" ) / self:GetPlaybackRateOverride() - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vTarget = self:GetCaster():GetOrigin() + vToTarget * self:GetCastRange( self:GetCaster():GetOrigin(), nil ) - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = flSpeed }, vTarget, self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_jump_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_jump_smash.lua deleted file mode 100755 index 76a2126..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_jump_smash.lua +++ /dev/null @@ -1,35 +0,0 @@ - -ogre_tank_jump_smash = class({}) -LinkLuaModifier( "modifier_ogre_tank_melee_smash_thinker", "modifiers/creatures/modifier_ogre_tank_melee_smash_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function ogre_tank_jump_smash:Precache( context ) - - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - -end - ------------------------------------------------------------------------------ - -function ogre_tank_jump_smash:ProcsMagicStick() - return false -end - ------------------------------------------------------------------------------ - -function ogre_tank_jump_smash:GetPlaybackRateOverride() - return 0.75 -end - - ------------------------------------------------------------------------------ - -function ogre_tank_jump_smash:OnSpellStart() - if IsServer() then - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = self:GetSpecialValueFor( "jump_speed") }, self:GetCaster():GetOrigin(), self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_melee_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_melee_smash.lua deleted file mode 100755 index c5add47..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogre_tank_melee_smash.lua +++ /dev/null @@ -1,42 +0,0 @@ - -ogre_tank_melee_smash = class({}) - ----------------------------------------------------------------------------------------- - -function ogre_tank_melee_smash:Precache( context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) -end - ------------------------------------------------------------------------------ - -function ogre_tank_melee_smash:ProcsMagicStick() - return false -end - ------------------------------------------------------------------------------ - -function ogre_tank_melee_smash:GetCooldown( iLevel ) - return self.BaseClass.GetCooldown( self, self:GetLevel() ) / self:GetCaster():GetHasteFactor() -end - ------------------------------------------------------------------------------ - -function ogre_tank_melee_smash:GetPlaybackRateOverride() - return math.min( 2.0, math.max( self:GetCaster():GetHasteFactor(), 0.75 ) ) -end - ------------------------------------------------------------------------------ - -function ogre_tank_melee_smash:OnSpellStart() - if IsServer() then - EmitSoundOn( "OgreTank.Grunt", self:GetCaster() ) - local flSpeed = self:GetSpecialValueFor( "base_swing_speed" ) / self:GetPlaybackRateOverride() - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vTarget = self:GetCaster():GetOrigin() + vToTarget * self:GetCastRange( self:GetCaster():GetOrigin(), nil ) - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = flSpeed }, vTarget, self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogreseal_flop.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogreseal_flop.lua deleted file mode 100755 index 722758d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ogreseal_flop.lua +++ /dev/null @@ -1,106 +0,0 @@ - -ogreseal_flop = class({}) -LinkLuaModifier( "modifier_ogreseal_flop", "modifiers/creatures/modifier_ogreseal_flop", LUA_MODIFIER_MOTION_BOTH ) - ----------------------------------------------------------------------------------------- - -function ogreseal_flop:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre_seal/ogre_seal_warcry.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function ogreseal_flop:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function ogreseal_flop:OnAbilityPhaseStart() - if IsServer() then - self:GetCaster():StartGesture( ACT_DOTA_CAST_ABILITY_2 ) - end - - return true -end - --------------------------------------------------------------------------------- - -function ogreseal_flop:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveGesture( ACT_DOTA_CAST_ABILITY_2 ) - self:GetCaster():RemoveModifierByName( "modifier_techies_suicide_leap_animation" ) - end -end - --------------------------------------------------------------------------------- - -function ogreseal_flop:OnSpellStart() - if IsServer() then - self.stun_duration = self:GetSpecialValueFor("stun_duration") - - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vLocation = self:GetCaster():GetOrigin() + vToTarget * 25 - local kv = - { - vLocX = vLocation.x, - vLocY = vLocation.y, - vLocZ = vLocation.z - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ogreseal_flop", kv ) - EmitSoundOn( "OgreTank.Grunt", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function ogreseal_flop:TryToDamage() - if IsServer() then - local radius = self:GetSpecialValueFor( "radius" ) - local damage = self:GetSpecialValueFor( "damage" ) - local silence_duration = self:GetSpecialValueFor( "silence_duration" ) - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), self:GetCaster(), radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - for _,enemy in pairs(enemies) do - if enemy ~= nil and enemy:IsNull() == false and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - ability = self, - damage = damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - } - ApplyDamage( DamageInfo ) - if enemy:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", enemy ) - else - enemy:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.stun_duration } ) - end - end - end - end - - EmitSoundOnLocationWithCaster( self:GetCaster():GetOrigin(), "OgreTank.GroundSmash", self:GetCaster() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetCaster():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - GridNav:DestroyTreesAroundPoint( self:GetCaster():GetOrigin(), radius, false ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/phoenix_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/phoenix_passive.lua deleted file mode 100755 index 4340996..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/phoenix_passive.lua +++ /dev/null @@ -1,11 +0,0 @@ -phoenix_passive = class( {} ) - -LinkLuaModifier( "modifier_phoenix_passive", "modifiers/creatures/modifier_phoenix_passive", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function phoenix_passive:GetIntrinsicModifierName() - return "modifier_phoenix_passive" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/preview_intrinsic.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/preview_intrinsic.lua deleted file mode 100755 index e8320d0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/preview_intrinsic.lua +++ /dev/null @@ -1,11 +0,0 @@ - -preview_intrinsic = class({}) -LinkLuaModifier( "modifier_ability_cast_warning", "modifiers/modifier_ability_cast_warning", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function preview_intrinsic:GetIntrinsicModifierName() - return "modifier_ability_cast_warning" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/puck_flying_bomb.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/puck_flying_bomb.lua deleted file mode 100755 index 818568c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/puck_flying_bomb.lua +++ /dev/null @@ -1,64 +0,0 @@ - -puck_flying_bomb = class({}) -LinkLuaModifier( "modifier_puck_flying_bomb", "modifiers/creatures/modifier_puck_flying_bomb", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function puck_flying_bomb:Precache( context ) - PrecacheResource( "particle", "particles/test_particle/generic_attack_charge.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/puck/puck_flying_bomb.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/puck/puck_bomb_detonation.vpcf", context ) - --PrecacheResource( "particle", "particles/test_particle/omniknight_wildaxe.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_beastmaster/beastmaster_wildaxes_hit.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_beastmaster_axe", context, -1 ) -end - --------------------------------------------------------------------------------- - -function puck_flying_bomb:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/test_particle/generic_attack_charge.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 135, 192, 235 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( self.nPreviewFX ) - - EmitSoundOn( "TempleGuardian.PreAttack", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function puck_flying_bomb:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, true ) - end -end - --------------------------------------------------------------------------------- - -function puck_flying_bomb:GetPlaybackRateOverride() - return 0.75 -end - --------------------------------------------------------------------------------- - -function puck_flying_bomb:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - local vLocation = self:GetCursorPosition() - - local kv = - { - x = vLocation.x, - y = vLocation.y, - duration = self:GetSpecialValueFor( "flight_duration" ), - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_puck_flying_bomb", kv ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ranged_quill_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ranged_quill_attack.lua deleted file mode 100755 index fb953da..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/ranged_quill_attack.lua +++ /dev/null @@ -1,85 +0,0 @@ -ranged_quill_attack = class({}) - ----------------------------------------------------------------------------------------- - -function ranged_quill_attack:Precache( context ) - - PrecacheResource( "particle", "particles/creatures/quill_beast/test_model_cluster_linear_projectile.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/black_dragon_fireball.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_ignite_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_burn.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_bristleback/bristleback_quill_spray_impact.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function ranged_quill_attack:OnSpellStart() - if IsServer() then - self.attack_speed = self:GetSpecialValueFor( "attack_speed" ) - self.attack_width_initial = self:GetSpecialValueFor( "attack_width_initial" ) - self.attack_width_end = self:GetSpecialValueFor( "attack_width_end" ) - self.attack_distance = self:GetSpecialValueFor( "attack_distance" ) - self.attack_damage = self:GetSpecialValueFor( "attack_damage" ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.attack_speed = self.attack_speed * ( self.attack_distance / ( self.attack_distance - self.attack_width_initial ) ) - - local info = { - EffectName = "particles/creatures/quill_beast/test_model_cluster_linear_projectile.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.attack_width_initial, - fEndRadius = self.attack_width_end, - vVelocity = vDirection * self.attack_speed, - fDistance = self.attack_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, - } - - ProjectileManager:CreateLinearProjectile( info ) - EmitSoundOn( "Hound.QuillAttack.Cast", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function ranged_quill_attack:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - local damage = { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.attack_damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self - } - - ApplyDamage( damage ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_bristleback/bristleback_quill_spray_impact.vpcf", PATTACH_CUSTOMORIGIN, hTarget ); - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ); - ParticleManager:SetParticleControlEnt( nFXIndex, 1, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetOrigin(), true ); - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ); - ParticleManager:ReleaseParticleIndex( nFXIndex ); - - EmitSoundOn( "Hound.QuillAttack.Target", hTarget ); - end - - return true - end -end - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/rock_golem_split_a.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/rock_golem_split_a.lua deleted file mode 100755 index 76907f8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/rock_golem_split_a.lua +++ /dev/null @@ -1,26 +0,0 @@ -rock_golem_split_a = class({}) - -LinkLuaModifier( "modifier_rock_golem_split", "modifiers/creatures/modifier_rock_golem_split", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function rock_golem_split_a:Precache( context ) - - self.strSplitFx = "particles/creature_splitter/splitter_a.vpcf" - self.strSummonedUnit = "npc_dota_creature_rock_golem_b" - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_caustic_finale_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_caustic_finale_explode.vpcf", context ) - PrecacheResource( "particle", self.strSplitFx, context ) - PrecacheUnitByNameSync( self.strSummonedUnit, context, -1 ) - -end - --------------------------------------------------------------------------------- - -function rock_golem_split_a:GetIntrinsicModifierName() - return "modifier_rock_golem_split" -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/rock_golem_split_b.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/rock_golem_split_b.lua deleted file mode 100755 index eefee15..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/rock_golem_split_b.lua +++ /dev/null @@ -1,23 +0,0 @@ -rock_golem_split_b = class({}) - -LinkLuaModifier( "modifier_rock_golem_split", "modifiers/creatures/modifier_rock_golem_split", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function rock_golem_split_b:Precache( context ) - - self.strSplitFx = "particles/units/heroes/hero_life_stealer/life_stealer_infest_cast_mid.vpcf" - self.strSummonedUnit = "npc_dota_creature_rock_golem_c" - - PrecacheResource( "particle", self.strSplitFx, context ) - PrecacheUnitByNameSync( self.strSummonedUnit, context, -1 ) - -end - --------------------------------------------------------------------------------- - -function rock_golem_split_b:GetIntrinsicModifierName() - return "modifier_rock_golem_split" -end --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_burrow.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_burrow.lua deleted file mode 100755 index 3f22e7a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_burrow.lua +++ /dev/null @@ -1,44 +0,0 @@ - -sand_king_boss_burrow = class({}) -LinkLuaModifier( "modifier_sand_king_boss_burrow", "modifiers/creatures/modifier_sand_king_boss_burrow", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------- - -function sand_king_boss_burrow:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_inground.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_huskar/huskar_inner_vitality.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_creature_healing_burrower", context, -1 ) - PrecacheUnitByNameSync( "npc_dota_creature_big_exploding_burrower", context, -1 ) - -end - --------------------------------------------------------------------- - -function sand_king_boss_burrow:OnAbilityPhaseStart() - if IsServer() then - EmitSoundOn( "Hero_NyxAssassin.Burrow.In", self:GetCaster() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetCaster():GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 0, self:GetCaster():GetForwardVector() ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_boss_burrow:GetPlaybackRateOverride() - return 0.75 -end - --------------------------------------------------------------------- - -function sand_king_boss_burrow:OnSpellStart() - if IsServer() then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_boss_burrow", {} ) - self:GetCaster().nBurrowFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_inground.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControl( self:GetCaster().nBurrowFXIndex, 0, self:GetCaster():GetOrigin() ) - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_burrowstrike.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_burrowstrike.lua deleted file mode 100755 index 56a1149..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_burrowstrike.lua +++ /dev/null @@ -1,75 +0,0 @@ - -sand_king_boss_burrowstrike = class({}) -LinkLuaModifier( "modifier_sand_king_boss_burrowstrike", "modifiers/creatures/modifier_sand_king_boss_burrowstrike", LUA_MODIFIER_MOTION_HORIZONTAL ) -LinkLuaModifier( "modifier_sand_king_boss_burrowstrike_end", "modifiers/creatures/modifier_sand_king_boss_burrowstrike_end", LUA_MODIFIER_MOTION_HORIZONTAL ) - --------------------------------------------------------------------- - -function sand_king_boss_burrowstrike:Precache( context ) - - PrecacheResource( "particle", "particles/test_particle/sandking_burrowstrike_no_models.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_inground.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_physical.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_impact_physical.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function sand_king_boss_burrowstrike:OnAbilityPhaseStart() - if IsServer() then - end - - return true -end - --------------------------------------------------------------------------------- - -function sand_king_boss_burrowstrike:OnAbilityPhaseInterrupted() - if IsServer() then - end -end - --------------------------------------------------------------------------------- - -function sand_king_boss_burrowstrike:GetCastPoint() - return 1.0625 - ( 0.53125 * ( 1 - ( self:GetCaster():GetHealthPercent() / 100 ) ) ) -end - --------------------------------------------------------------------------------- - -function sand_king_boss_burrowstrike:GetPlaybackRateOverride() - return 0.3045 + ( 0.3045 * ( 1 - ( self:GetCaster():GetHealthPercent() / 100 ) ) ) -end - --------------------------------------------------------------------------------- - -function sand_king_boss_burrowstrike:OnSpellStart() - if IsServer() then - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - local flDist = RandomFloat( 1000.0, 2000.0 ) - local vDir = vToTarget:Normalized() - vDir.z = 0.0 - - local vTarget = self:GetCaster():GetOrigin() + vDir * flDist - - local flHealthPct = self:GetCaster():GetHealthPercent() / 100 - local kv = - { - x = vTarget.x, - y = vTarget.y, - z = vTarget.z, - duration = flDist / ( self:GetSpecialValueFor( "speed" ) + ( self:GetSpecialValueFor( "scaling_speed" ) * ( 1 - flHealthPct ) ) ) - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_boss_burrowstrike", kv ) - EmitSoundOn( "SandKingBoss.BurrowStrike", self:GetCaster() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/sandking_burrowstrike_no_models.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetCaster():GetOrigin() + self:GetCaster():GetForwardVector() * 225 ) - ParticleManager:SetParticleControl( nFXIndex, 1, self:GetCaster():GetOrigin() + self:GetCaster():GetForwardVector() * 225 ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_epicenter.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_epicenter.lua deleted file mode 100755 index 0ebbaf6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_epicenter.lua +++ /dev/null @@ -1,170 +0,0 @@ - -sand_king_boss_epicenter = class({}) -LinkLuaModifier( "modifier_sand_king_boss_epicenter", "modifiers/creatures/modifier_sand_king_boss_epicenter", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------- - -function sand_king_boss_epicenter:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/dungeon_sand_king_channel.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/dungeon_sand_king_blocker.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/sand_king_projectile.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_tail", self:GetCaster():GetOrigin(), true ) - EmitSoundOn( "SandKingBoss.Epicenter.spell", self:GetCaster() ) - self.nChannelFX = ParticleManager:CreateParticle( "particles/test_particle/dungeon_sand_king_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:GetChannelAnimation() - return ACT_DOTA_CAST_ABILITY_4 -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:GetPlaybackRateOverride() - return 1 -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:OnSpellStart() - if IsServer() then - self.Projectiles = {} - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_boss_epicenter", {} ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:OnChannelFinish( bInterrupted ) - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_boss_epicenter" ) - ParticleManager:DestroyParticle( self.nChannelFX, false ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:OnProjectileThinkHandle( nProjectileHandle ) - if IsServer() then - local projectile = nil - for _,proj in pairs( self.Projectiles ) do - if proj ~= nil and proj.handle == nProjectileHandle then - projectile = proj - end - end - if projectile ~= nil then - local flRadius = ProjectileManager:GetLinearProjectileRadius( nProjectileHandle ) - ParticleManager:SetParticleControl( projectile.nFXIndex, 2, Vector( flRadius, flRadius, 0 ) ) - end - end -end - --------------------------------------------------------------------------------- - -function sand_king_boss_epicenter:OnProjectileHitHandle( hTarget, vLocation, nProjectileHandle ) - if IsServer() then - if hTarget ~= nil then - local blocker_radius = self:GetSpecialValueFor( "blocker_radius" ) - - - local vFromCaster = vLocation - self:GetCaster():GetOrigin() - vFromCaster = vFromCaster:Normalized() - local vToCasterPerp = Vector( -vFromCaster.y, vFromCaster.x, 0 ) - - local vLoc1 = vLocation + vFromCaster * 200 - local vLoc2 = vLocation + vFromCaster * 200 + vToCasterPerp * 65 - local vLoc3 = vLocation + vFromCaster * 200 + vToCasterPerp * -65 - - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_earthshaker_fissure", {}, vLoc1, self:GetCaster():GetTeamNumber(), true ) - local hThinker2 = CreateModifierThinker( self:GetCaster(), self, "modifier_earthshaker_fissure", {}, vLoc2, self:GetCaster():GetTeamNumber(), true ) - local hThinker3 = CreateModifierThinker( self:GetCaster(), self, "modifier_earthshaker_fissure", {}, vLoc3, self:GetCaster():GetTeamNumber(), true ) - if hThinker ~= nil then - hThinker:SetHullRadius( 65 ) - local nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/dungeon_sand_king_blocker.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, vLoc1 ) - ParticleManager:SetParticleControl( nFXIndex, 1, vLoc1 ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 99999, 0, 0 ) ) - - end - if hThinker2 ~= nil then - hThinker2:SetHullRadius( 65 ) - local nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/dungeon_sand_king_blocker.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, vLoc2 ) - ParticleManager:SetParticleControl( nFXIndex, 1, vLoc2 ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 99999, 0, 0 ) ) - end - if hThinker3 ~= nil then - hThinker3:SetHullRadius( 65 ) - local nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/dungeon_sand_king_blocker.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, vLoc3 ) - ParticleManager:SetParticleControl( nFXIndex, 1, vLoc3 ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 99999, 0, 0 ) ) - end - EmitSoundOn( "SandKingBoss.Epicenter.Impact", hTarget ) - - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), hTarget:GetOrigin(), self:GetCaster(), blocker_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy:IsMagicImmune() == false then - local kv = - { - center_x = hTarget:GetOrigin().x, - center_y = hTarget:GetOrigin().y, - center_z = hTarget:GetOrigin().z, - should_stun = true, - duration = 0.25, - knockback_duration = 0.25, - knockback_distance = 250, - knockback_height = 125, - } - enemy:AddNewModifier( self:GetCaster(), self, "modifier_knockback", kv ) - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self:GetSpecialValueFor( "damage" ), - damage_type = DAMAGE_TYPE_PURE, - ability = self, - } - ApplyDamage( damageInfo ) - end - end - end - - local projectile = nil - for _,proj in pairs( self.Projectiles ) do - if proj ~= nil and proj.handle == nProjectileHandle then - projectile = proj - end - end - if projectile ~= nil then - ParticleManager:DestroyParticle( projectile.nFXIndex, false ) - end - end - - return true -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_back.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_back.lua deleted file mode 100755 index f1530dd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_back.lua +++ /dev/null @@ -1,26 +0,0 @@ - -sand_king_boss_move_back = class({}) - ------------------------------------------------------------------ - -function sand_king_boss_move_back:OnAbilityPhaseStart() - if IsServer() then - local flMin = self:GetSpecialValueFor( "minimum_duration" ) - local flMax = self:GetSpecialValueFor( "maximum_duration" ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_boss_directional_move", { duration = RandomFloat( flMin, flMax ) } ) - end - return true -end - ------------------------------------------------------------------------------ - -function sand_king_boss_move_back:GetPlaybackRateOverride() - return 0.6 -end - ------------------------------------------------------------------ - -function sand_king_boss_move_back:OnSpellStart() - if IsServer() then - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_left.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_left.lua deleted file mode 100755 index a4a07bb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_left.lua +++ /dev/null @@ -1,27 +0,0 @@ - -sand_king_boss_move_left = class({}) -LinkLuaModifier( "modifier_sand_king_boss_directional_move", "modifiers/creatures/modifier_sand_king_boss_directional_move", LUA_MODIFIER_MOTION_HORIZONTAL ) - ------------------------------------------------------------------ - -function sand_king_boss_move_left:OnAbilityPhaseStart() - if IsServer() then - local flMin = self:GetSpecialValueFor( "minimum_duration" ) - local flMax = self:GetSpecialValueFor( "maximum_duration" ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_boss_directional_move", { duration = RandomFloat( flMin, flMax ) } ) - end - return true -end - ------------------------------------------------------------------------------ - -function sand_king_boss_move_left:GetPlaybackRateOverride() - return 1 -end - ------------------------------------------------------------------ - -function sand_king_boss_move_left:OnSpellStart() - if IsServer() then - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_right.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_right.lua deleted file mode 100755 index c61e873..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_move_right.lua +++ /dev/null @@ -1,27 +0,0 @@ - -sand_king_boss_move_right = class({}) - ------------------------------------------------------------------ - -function sand_king_boss_move_right:OnAbilityPhaseStart() - if IsServer() then - local flMin = self:GetSpecialValueFor( "minimum_duration" ) - local flMax = self:GetSpecialValueFor( "maximum_duration" ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_boss_directional_move", { duration = RandomFloat( flMin, flMax ) } ) - end - return true -end - - ------------------------------------------------------------------------------ - -function sand_king_boss_move_right:GetPlaybackRateOverride() - return 1 -end - ------------------------------------------------------------------ - -function sand_king_boss_move_right:OnSpellStart() - if IsServer() then - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_passive.lua deleted file mode 100755 index 7f0da6f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_passive.lua +++ /dev/null @@ -1,20 +0,0 @@ - -sand_king_boss_passive = class({}) -LinkLuaModifier( "modifier_sand_king_boss_passive", "modifiers/creatures/modifier_sand_king_boss_passive", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------- - -function sand_king_boss_passive:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_caustic_finale_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_caustic_finale_explode.vpcf", context ) - -end - ------------------------------------------------------------------------------------------ - -function sand_king_boss_passive:GetIntrinsicModifierName() - return "modifier_sand_king_boss_passive" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_sandstorm.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_sandstorm.lua deleted file mode 100755 index 504deaa..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_sandstorm.lua +++ /dev/null @@ -1,191 +0,0 @@ - -sand_king_boss_sandstorm = class({}) - --------------------------------------------------------------------- - -function sand_king_boss_sandstorm:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/sand_king_cyclone.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_sand_king_sandstorm", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function sand_king_boss_sandstorm:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 325, 325, 325 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 140, 0 ) ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_boss_sandstorm:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_boss_sandstorm:GetChannelAnimation() - return ACT_DOTA_OVERRIDE_ABILITY_2 -end - --------------------------------------------------------------------------------- - -function sand_king_boss_sandstorm:GetPlaybackRateOverride() - return 0.5 -end - --------------------------------------------------------------------------------- - -function sand_king_boss_sandstorm:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - self:GetCaster().bInSandStorm = true - - if self.nCastCount == nil then - self.nCastCount = 0 - else - self.nCastCount = self.nCastCount + 1 - end - - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sandking_sand_storm", { duration = self:GetSpecialValueFor( "channel_time" ) } ) - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sandking_sand_storm_invis", { duration = self:GetSpecialValueFor( "channel_time" ) } ) - self.storm_count_per_player = self:GetSpecialValueFor( "storm_count_per_player" ) - self.storm_angle_step = self:GetSpecialValueFor( "storm_angle_step" ) - self.storm_speed = self:GetSpecialValueFor( "storm_speed" ) + self:GetSpecialValueFor( "storm_speed_step" ) * self.nCastCount - self.spiral_storm_count = self:GetSpecialValueFor( "spiral_storm_count" ) - - local bReverse = RandomInt( 0, 1 ) - if bReverse == 1 then - self.storm_angle_step = self.storm_angle_step * -1 - end - - self.Storms = {} - - local angle = QAngle( 0, 0, 0 ) - - local Heroes = HeroList:GetAllHeroes() - for _,Hero in pairs( Heroes ) do - if Hero ~= nil then - for i=1,self.storm_count_per_player do - local hStorm = CreateUnitByName( "npc_dota_sand_king_sandstorm", self:GetCaster():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hStorm ~= nil then - if self:GetCaster().zone ~= nil then - self:GetCaster().zone:AddEnemyToZone( hStorm ) - end - hStorm.hParent = self:GetCaster() - - hStorm:AddNewModifier( Hero, nil, "modifier_provides_vision", {} ) - hStorm.nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/sand_king_cyclone.vpcf", PATTACH_ABSORIGIN_FOLLOW, hStorm ) - - hStorm:SetForceAttackTarget( Hero ) - hStorm.Target = Hero - hStorm.storm_speed = self.storm_speed - local vSpawnPoint = Hero:GetOrigin() + RandomVector( 1 ) * 2000 - FindClearSpaceForUnit( hStorm, vSpawnPoint, true ) - - - - hStorm:AddNewModifier( hStorm, hStorm:FindAbilityByName( "sand_king_boss_sandstorm_storm_passive" ), "modifier_sand_king_boss_sandstorm", {} ) - - table.insert( self.Storms, hStorm ) - end - end - end - end - - for i=1, self.spiral_storm_count do - local hStorm = CreateUnitByName( "npc_dota_sand_king_sandstorm", self:GetCaster():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hStorm ~= nil then - if self:GetCaster().zone ~= nil then - self:GetCaster().zone:AddEnemyToZone( hStorm ) - end - hStorm.hParent = self:GetCaster() - - hStorm:AddNewModifier( Hero, nil, "modifier_provides_vision", {} ) - hStorm.nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/sand_king_cyclone.vpcf", PATTACH_ABSORIGIN_FOLLOW, hStorm ) - local vSpawnPoint = self:GetCaster():GetOrigin() - FindClearSpaceForUnit( hStorm, vSpawnPoint, true ) - - local info = - { - EffectName = "", - Ability = self, - vSpawnOrigin = vSpawnPoint, - fDistance = 5000, - fStartRadius = 50, - fEndRadius = 50, - Source = self:GetCaster(), - } - - info.vVelocity = ( RotatePosition( Vector( 0, 0, 0 ), angle, Vector( 1, 0, 0 ) ) ) * self.storm_speed - - hStorm.nProjHandle = ProjectileManager:CreateLinearProjectile( info ) - hStorm.y = angle.y - angle.y = angle.y + self.storm_angle_step - - hStorm.flAngleUpdate = 3.0 - if bReverse then - hStorm.flAngleUpdate = hStorm.flAngleUpdate * -1 - hStorm.bReverse = bReverse - end - hStorm:AddNewModifier( hStorm, hStorm:FindAbilityByName( "sand_king_boss_sandstorm_storm_passive" ), "modifier_sand_king_boss_sandstorm", {} ) - table.insert( self.Storms, hStorm ) - end - end - end -end - -------------------------------------------------------------------------------- - -function sand_king_boss_sandstorm:OnProjectileThinkHandle( iProjectileHandle ) - if IsServer() then - if self:GetCaster() and self:GetCaster():IsChanneling() == false then - return - end - - for _,Storm in pairs( self.Storms ) do - if Storm ~= nil and Storm.nProjHandle == iProjectileHandle then - Storm.y = Storm.y + Storm.flAngleUpdate - if Storm.bReverse then - Storm.flAngleUpdate = math.min( Storm.flAngleUpdate + 0.03, -1 ) - else - Storm.flAngleUpdate = math.max( Storm.flAngleUpdate - 0.03, 1 ) - end - - local angle = QAngle( 0, Storm.y, 0 ) - local vVelocity = ( RotatePosition( Vector( 0, 0, 0 ), angle, Vector( 1, 0, 0 ) ) ) * self.storm_speed - ProjectileManager:UpdateLinearProjectileDirection( iProjectileHandle, vVelocity, 5000 ) - - end - end - end -end - --------------------------------------------------------------------------------- - -function sand_king_boss_sandstorm:OnChannelFinish( bInterrupted ) - if IsServer() then - for _,Storm in pairs( self.Storms ) do - if Storm ~= nil then - if Storm.nProjHandle ~= nil then - ProjectileManager:DestroyLinearProjectile( Storm.nProjHandle ) - end - - ParticleManager:DestroyParticle( Storm.nFXIndex, false ) - Storm:ForceKill( false ) - end - end - - self:GetCaster().bInSandStorm = false - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_sandstorm_storm_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_sandstorm_storm_passive.lua deleted file mode 100755 index 36c5ec2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_sandstorm_storm_passive.lua +++ /dev/null @@ -1,13 +0,0 @@ - -sand_king_boss_sandstorm_storm_passive = class({}) -LinkLuaModifier( "modifier_sand_king_boss_sandstorm", "modifiers/creatures/modifier_sand_king_boss_sandstorm", LUA_MODIFIER_MOTION_HORIZONTAL ) -LinkLuaModifier( "modifier_sand_king_boss_sandstorm_effect", "modifiers/creatures/modifier_sand_king_boss_sandstorm_effect", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_sand_king_boss_sandstorm_blind", "modifiers/creatures/modifier_sand_king_boss_sandstorm_blind", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function sand_king_boss_sandstorm_storm_passive:GetIntrinsicModifierName() - return "modifier_sand_king_boss_sandstorm" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_unburrow.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_unburrow.lua deleted file mode 100755 index 06dcb1d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_boss_unburrow.lua +++ /dev/null @@ -1,42 +0,0 @@ - -sand_king_boss_unburrow = class({}) - --------------------------------------------------------------------- - -function sand_king_boss_unburrow:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_exit.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_huskar/huskar_inner_vitality.vpcf", context ) - -end - --------------------------------------------------------------------- - -function sand_king_boss_unburrow:OnAbilityPhaseStart() - if IsServer() then - if self:GetCaster().nBurrowFXIndex == nil then - return true - end - ParticleManager:DestroyParticle( self:GetCaster().nBurrowFXIndex, false ) - - EmitSoundOn( "Hero_NyxAssassin.Burrow.Out", self:GetCaster() ) - local nFXIndex = ParticleManager:CreateParticle("particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_exit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetCaster():GetOrigin() ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_boss_unburrow:GetPlaybackRateOverride() - return 0.5 -end - --------------------------------------------------------------------- - -function sand_king_boss_unburrow:OnSpellStart() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_boss_burrow" ) - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_burrowed_backward_strike.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_burrowed_backward_strike.lua deleted file mode 100755 index a0838e9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_burrowed_backward_strike.lua +++ /dev/null @@ -1,52 +0,0 @@ - -sand_king_burrowed_backward_strike = class({}) - --------------------------------------------------------------------- - -function sand_king_burrowed_backward_strike:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_backward_strike:OnAbilityPhaseStart() - if IsServer() then - self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_tail_swipe", kv ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_backward_strike:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_tail_swipe" ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_backward_strike:GetPlaybackRateOverride() - return 0.38 -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_backward_strike:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_sand_king_tail_swipe" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_burrowed_forward_strike.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_burrowed_forward_strike.lua deleted file mode 100755 index 1f6e728..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_burrowed_forward_strike.lua +++ /dev/null @@ -1,52 +0,0 @@ - -sand_king_burrowed_forward_strike = class({}) - --------------------------------------------------------------------- - -function sand_king_burrowed_forward_strike:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_forward_strike:OnAbilityPhaseStart() - if IsServer() then - self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_tail_swipe", kv ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_forward_strike:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_tail_swipe" ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_forward_strike:GetPlaybackRateOverride() - return 0.70 -end - --------------------------------------------------------------------------------- - -function sand_king_burrowed_forward_strike:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_sand_king_tail_swipe" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_claw_attack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_claw_attack.lua deleted file mode 100755 index 1ff283d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_claw_attack.lua +++ /dev/null @@ -1,44 +0,0 @@ - -sand_king_claw_attack = class({}) -LinkLuaModifier( "modifier_sand_king_claw_attack", "modifiers/creatures/modifier_sand_king_claw_attack", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function sand_king_claw_attack:OnAbilityPhaseStart() - if IsServer() then - self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_claw_attack", kv ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_claw_attack:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_claw_attack" ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_claw_attack:GetPlaybackRateOverride() - return 0.6 -end - --------------------------------------------------------------------------------- - -function sand_king_claw_attack:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_sand_king_claw_attack" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe.lua deleted file mode 100755 index 1aa30f6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe.lua +++ /dev/null @@ -1,53 +0,0 @@ - -sand_king_tail_swipe_left = class({}) -LinkLuaModifier( "modifier_sand_king_tail_swipe", "modifiers/creatures/modifier_sand_king_tail_swipe", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------- - -function sand_king_tail_swipe_left:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:OnAbilityPhaseStart() - if IsServer() then - self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_tail_swipe", kv ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_tail_swipe" ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:GetPlaybackRateOverride() - return 0.75 -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_sand_king_tail_swipe" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe_left.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe_left.lua deleted file mode 100755 index ffcedfa..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe_left.lua +++ /dev/null @@ -1,53 +0,0 @@ - -sand_king_tail_swipe_left = class({}) -LinkLuaModifier( "modifier_sand_king_tail_swipe", "modifiers/creatures/modifier_sand_king_tail_swipe", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------- - -function sand_king_tail_swipe_left:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:OnAbilityPhaseStart() - if IsServer() then - self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_tail_swipe", kv ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_tail_swipe" ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:GetPlaybackRateOverride() - return 0.6 -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_left:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_sand_king_tail_swipe" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe_right.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe_right.lua deleted file mode 100755 index ec61ba5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/sand_king_tail_swipe_right.lua +++ /dev/null @@ -1,52 +0,0 @@ - -sand_king_tail_swipe_right = class({}) - --------------------------------------------------------------------- - -function sand_king_tail_swipe_right:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_right:OnAbilityPhaseStart() - if IsServer() then - self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_sand_king_tail_swipe", kv ) - end - return true -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_right:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_sand_king_tail_swipe" ) - end -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_right:GetPlaybackRateOverride() - return 0.6 -end - --------------------------------------------------------------------------------- - -function sand_king_tail_swipe_right:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_sand_king_tail_swipe" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/scarab_priest_summon_zealots.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/scarab_priest_summon_zealots.lua deleted file mode 100755 index 0a7be82..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/scarab_priest_summon_zealots.lua +++ /dev/null @@ -1,85 +0,0 @@ - -scarab_priest_summon_zealots = class({}) -LinkLuaModifier( "modifier_scarab_priest_summon_mound", "modifiers/creatures/modifier_scarab_priest_summon_mound", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function scarab_priest_summon_zealots:Precache( context ) - - PrecacheResource( "particle", "particles/themed_fx/tower_dragon_black_smokering.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", context ) - PrecacheResource( "particle", "particles/nyx_swarm_explosion/nyx_swarm_explosion.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_exit.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_creature_zealot_mound", context, -1 ) - PrecacheUnitByNameSync( "npc_dota_creature_zealot_scarab", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function scarab_priest_summon_zealots:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function scarab_priest_summon_zealots:OnSpellStart() - if not IsServer() then - return - end - - if self:GetCaster() == nil or self:GetCaster():IsNull() then - return - end - --- print( "scarab_priest_summon_zealots:OnSpellStart " ) - - local nSummonCount = self:GetSpecialValueFor( "spawn_count" ) - local flSpawnDistance = self:GetSpecialValueFor( "spawn_distance" ) - local flDuration = self:GetSpecialValueFor( "mound_duration" ) - local flDeltaAngle = 360 / nSummonCount - local vAngles = QAngle( 0, math.random( 0, flDeltaAngle ), 0 ) - - for i = 1,nSummonCount do - - local vSpawnPosition = nil - for s = 1,36 do - - local vDir = AnglesToVector( vAngles ) - local vTest = self:GetCaster():GetAbsOrigin() + vDir * flSpawnDistance + math.random( -25, 25 ) - - if GameRules.Aghanim:GetCurrentRoom():IsValidSpawnPoint( vTest ) then - vSpawnPosition = vTest - break - end - - vAngles.y = vAngles.y + 10 - - end - - vAngles.y = vAngles.y + flDeltaAngle + math.random( -20, 20 ) - - if vSpawnPosition ~= nil then - - EmitSoundOn( "Hero_NyxAssassin.Vendetta", self:GetCaster() ) - - local hMound = CreateUnitByName( "npc_dota_creature_zealot_mound", vSpawnPosition, true, - self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - - if hMound ~= nil then - hMound:AddNewModifier( self:GetCaster(), self, "modifier_scarab_priest_summon_mound", - { - duration = flDuration, - summoned_unit = "npc_dota_creature_zealot_scarab" - } ) - hMound:AddNewModifier( self:GetCaster(), self, "modifier_provides_fow_position", { duration = -1 } ) - hMound:AddNewModifier( self:GetCaster(), self, "modifier_fixed_number_of_hits_to_kill", { duration = -1 } ) - end - - end - - end - -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/skeleton_king_run_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/skeleton_king_run_passive.lua deleted file mode 100755 index e75e831..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/skeleton_king_run_passive.lua +++ /dev/null @@ -1,13 +0,0 @@ - -skeleton_king_run_passive = class({}) - -LinkLuaModifier( "modifier_skeleton_king_boss_run", "modifiers/creatures/modifier_skeleton_king_boss_run", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function skeleton_king_run_passive:GetIntrinsicModifierName() - return "modifier_skeleton_king_boss_run" -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/spider_egg_sack.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/spider_egg_sack.lua deleted file mode 100755 index 943aa91..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/spider_egg_sack.lua +++ /dev/null @@ -1,18 +0,0 @@ - -spider_egg_sack = class({}) -LinkLuaModifier( "modifier_spider_egg_sack", "modifiers/creatures/modifier_spider_egg_sack", LUA_MODIFIER_MOTION_NONE ) - -------------------------------------------------------------------------- - -function spider_egg_sack:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_venomancer/venomancer_poison_nova.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_venomancer/venomancer_poison_debuff_nova.vpcf", context ) - - PrecacheUnitByNameSync( "npc_dota_creature_newborn_spider", context, -1 ) -end - --------------------------------------------------------------------------------- - -function spider_egg_sack:GetIntrinsicModifierName() - return "modifier_spider_egg_sack" -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_arm_slam.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_arm_slam.lua deleted file mode 100755 index 145df4d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_arm_slam.lua +++ /dev/null @@ -1,60 +0,0 @@ - -storegga_arm_slam = class({}) -LinkLuaModifier( "modifier_storegga_arm_slam", "modifiers/creatures/modifier_storegga_arm_slam", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function storegga_arm_slam:Precache( context ) - - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function storegga_arm_slam:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function storegga_arm_slam:OnAbilityPhaseStart() - if IsServer() then - --self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self:GetCastPoint() - --kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_storegga_arm_slam", kv ) - end - return true -end - --------------------------------------------------------------------------------- - -function storegga_arm_slam:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_storegga_arm_slam" ) - end -end - --------------------------------------------------------------------------------- - -function storegga_arm_slam:GetPlaybackRateOverride() - return 0.55 -end - --------------------------------------------------------------------------------- - -function storegga_arm_slam:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_storegga_arm_slam" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_avalanche.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_avalanche.lua deleted file mode 100755 index 13b37b2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_avalanche.lua +++ /dev/null @@ -1,81 +0,0 @@ - -storegga_avalanche = class({}) -LinkLuaModifier( "modifier_storegga_avalanche_thinker", "modifiers/creatures/modifier_storegga_avalanche_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function storegga_avalanche:Precache( context ) - - PrecacheResource( "particle", "particles/act_2/storegga_channel.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/storegga/storegga_avalanche.vpcf", context ) - -end - ------------------------------------------------------------------------ - -function storegga_avalanche:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function storegga_avalanche:GetChannelAnimation() - return ACT_DOTA_CHANNEL_ABILITY_1 -end - --------------------------------------------------------------------------------- - -function storegga_avalanche:GetPlaybackRateOverride() - return 1 -end - --------------------------------------------------------------------------------- - -function storegga_avalanche:OnAbilityPhaseStart() - if IsServer() then - self.nChannelFX = ParticleManager:CreateParticle( "particles/act_2/storegga_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - end - - return true -end - ------------------------------------------------------------------------ - -function storegga_avalanche:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - end -end - ------------------------------------------------------------------------ - -function storegga_avalanche:OnSpellStart() - if IsServer() then - self.flChannelTime = 0.0 - self.hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_storegga_avalanche_thinker", { duration = self:GetChannelTime() }, self:GetCaster():GetOrigin(), self:GetCaster():GetTeamNumber(), false ) - end -end - --------------------------------------------------------------------------------- - -function storegga_avalanche:OnChannelThink( flInterval ) - if IsServer() then - self.flChannelTime = self.flChannelTime + flInterval - if self.flChannelTime > 9.2 and self.bStartedGesture ~= true then - self.bStartedGesture = true - self:GetCaster():StartGesture( ACT_DOTA_CAST_ABILITY_2_END ) - end - end -end - ------------------------------------------------------------------------ - -function storegga_avalanche:OnChannelFinish( bInterrpted ) - if IsServer() then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - if self.hThinker ~= nil and self.hThinker:IsNull() == false then - self.hThinker:ForceKill( false ) - end - - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_grab.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_grab.lua deleted file mode 100755 index 910c383..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_grab.lua +++ /dev/null @@ -1,68 +0,0 @@ - -storegga_grab = class({}) -LinkLuaModifier( "modifier_storegga_grab", "modifiers/creatures/modifier_storegga_grab", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_storegga_grabbed_buff", "modifiers/creatures/modifier_storegga_grabbed_buff", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_storegga_grabbed_debuff", "modifiers/creatures/modifier_storegga_grabbed_debuff", LUA_MODIFIER_MOTION_BOTH ) - ----------------------------------------------------------------------------------------- - -function storegga_grab:Precache( context ) - - PrecacheResource( "particle", "particles/test_particle/generic_attack_crit_blur.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function storegga_grab:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function storegga_grab:OnAbilityPhaseStart() - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_storegga_grabbed_buff" ) ~= nil then - return false - end - self.animation_time = self:GetSpecialValueFor( "animation_time" ) - self.initial_delay = self:GetSpecialValueFor( "initial_delay" ) - - local kv = {} - kv["duration"] = self.animation_time - kv["initial_delay"] = self.initial_delay - local hBuff = self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_storegga_grab", kv ) - if hBuff ~= nil then - hBuff.hTarget = self:GetCursorTarget() - end - end - return true -end - --------------------------------------------------------------------------------- - -function storegga_grab:OnAbilityPhaseInterrupted() - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_storegga_grab" ) - end -end - --------------------------------------------------------------------------------- - ---[[ -function storegga_grab:GetPlaybackRateOverride() - return 0.35 -end -]] - --------------------------------------------------------------------------------- - -function storegga_grab:GetCastRange( vLocation, hTarget ) - if IsServer() then - if self:GetCaster():FindModifierByName( "modifier_storegga_grab" ) ~= nil then - return 99999 - end - end - - return self.BaseClass.GetCastRange( self, vLocation, hTarget ) -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_grab_throw.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_grab_throw.lua deleted file mode 100755 index c60d860..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_grab_throw.lua +++ /dev/null @@ -1,214 +0,0 @@ - -storegga_grab_throw = class({}) - ----------------------------------------------------------------------------------------- - -function storegga_grab_throw:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function storegga_grab_throw:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function storegga_grab_throw:OnAbilityPhaseStart() - if IsServer() then - - end - return true -end - --------------------------------------------------------------------------------- - -function storegga_grab_throw:OnAbilityPhaseInterrupted() - if IsServer() then - --ParticleManager:DestroyParticle( self.nTargetFX, false ) - end -end - --------------------------------------------------------------------------------- - ---[[ -function storegga_grab_throw:GetPlaybackRateOverride() - return 0.7 -end -]] - --------------------------------------------------------------------------------- - -function storegga_grab_throw:OnSpellStart() - if IsServer() then - self.hBuff = self:GetCaster():FindModifierByName( "modifier_storegga_grabbed_buff" ) - if self.hBuff == nil then - return false - end - - self.hThrowTarget = self.hBuff.hThrowObject - if self.hThrowTarget == nil then - self:GetCaster():RemoveModifierByName( "modifier_storegga_grabbed_buff" ) - return false - end - - self.hThrowBuff = self.hThrowTarget:FindModifierByName( "modifier_storegga_grabbed_debuff" ) - if self.hThrowBuff == nil then - self:GetCaster():RemoveModifierByName( "modifier_storegga_grabbed_buff" ) - return false - end - - self.throw_speed = self:GetSpecialValueFor( "throw_speed" ) - self.impact_radius = self:GetSpecialValueFor( "impact_radius" ) - self.stun_duration = self:GetSpecialValueFor( "stun_duration" ) - self.knockback_duration = self:GetSpecialValueFor( "knockback_duration" ) - self.knockback_distance = self:GetSpecialValueFor( "knockback_distance" ) - self.knockback_damage = self:GetSpecialValueFor( "knockback_damage" ) - self.knockback_height = self:GetSpecialValueFor( "knockback_height" ) - - if self.hThrowTarget:GetUnitName() == "npc_dota_storegga_rock" then - self.throw_speed = self.throw_speed * 1.4 - self.impact_radius = self.impact_radius * 0.75 - self.knockback_damage = self.knockback_damage * 1 - end - if self.hThrowTarget:GetUnitName() == "npc_dota_storegga_rock2" then - self.throw_speed = self.throw_speed * 1 - self.impact_radius = self.impact_radius * 1.25 - self.knockback_damage = self.knockback_damage * 2 - end - if self.hThrowTarget:GetUnitName() == "npc_dota_storegga_rock3" then - self.throw_speed = self.throw_speed * 0.6 - self.impact_radius = self.impact_radius * 1.5 - self.knockback_damage = self.knockback_damage * 3 - end - - self.attach = self:GetCaster():ScriptLookupAttachment( "attach_attack2" ) - self.vSpawnLocation = self:GetCaster():GetAttachmentOrigin( self.attach ) - - self.vDirection = self:GetCursorPosition() - self.vSpawnLocation - self.flDist = self.vDirection:Length2D() - --self.vDirection = self:GetCursorPosition() - self:GetCaster():GetOrigin() - --self.flDist = self.vDirection:Length2D() - 300 -- the direction is offset due to the attachment point - self.vDirection.z = 0.0 - self.vDirection = self.vDirection:Normalized() - - self.vEndPos = self.vSpawnLocation + self.vDirection * self.flDist - - local info = { - EffectName = "", - Ability = self, - vSpawnOrigin = self.vSpawnLocation, - fStartRadius = self.impact_radius, - fEndRadius = self.impact_radius, - vVelocity = self.vDirection * self.throw_speed, - fDistance = self.flDist, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO, - } - - self.hThrowBuff.nProjHandle = ProjectileManager:CreateLinearProjectile( info ) - self.hThrowBuff.flHeight = self.vSpawnLocation.z - GetGroundHeight( self:GetCaster():GetOrigin(), self:GetCaster() ) - self.hThrowBuff.flTime = self.flDist / self.throw_speed - self:GetCaster():RemoveModifierByName( "modifier_storegga_grabbed_buff" ) - EmitSoundOn( "Hero_Tiny.Toss.Target", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function storegga_grab_throw:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil then - return - end - - --ParticleManager:DestroyParticle( self.nTargetFX, false ) - - EmitSoundOnLocationWithCaster( vLocation, "Ability.TossImpact", self:GetCaster() ) - EmitSoundOnLocationWithCaster( vLocation, "OgreTank.GroundSmash", self:GetCaster() ) - - if self.hThrowTarget ~= nil then - self.hThrowBuff:Destroy() - if self.hThrowTarget:IsRealHero() then - local damageInfo = - { - victim = self.hThrowTarget, - attacker = self:GetCaster(), - damage = self.knockback_damage * 0.6, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - if self.hThrowTarget:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self.hThrowTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", self.hThrowTarget:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, self.hThrowTarget:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, self.hThrowTarget, PATTACH_ABSORIGIN_FOLLOW, nil, self.hThrowTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", self.hThrowTarget ) - else - self.hThrowTarget:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.stun_duration } ) - end - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, GetGroundPosition( vLocation, self.hThrowTarget ) ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.impact_radius, self.impact_radius, self.impact_radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), vLocation, self:GetCaster(), self.impact_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy ~= self.hThrowTarget then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.knockback_damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - if enemy:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", enemy ) - else - local kv = - { - center_x = vLocation.x, - center_y = vLocation.y, - center_z = vLocation.z, - should_stun = true, - duration = self.knockback_duration, - knockback_duration = self.knockback_duration, - knockback_distance = self.knockback_distance, - knockback_height = self.knockback_height, - } - enemy:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.knockback_duration } ) - end - - end - end - end - - - - return false - end -end - ------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_ground_pound.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_ground_pound.lua deleted file mode 100755 index 486ee33..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_ground_pound.lua +++ /dev/null @@ -1,98 +0,0 @@ - -storegga_ground_pound = class({}) -LinkLuaModifier( "modifier_storegga_ground_pound_thinker", "modifiers/creatures/modifier_storegga_ground_pound_thinker", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function storegga_ground_pound:Precache( context ) - PrecacheResource( "particle", "particles/test_particle/dungeon_sand_king_channel.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function storegga_ground_pound:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function storegga_ground_pound:GetChannelAnimation() - return ACT_DOTA_CHANNEL_ABILITY_1 -end - --------------------------------------------------------------------------------- - -function storegga_ground_pound:GetPlaybackRateOverride() - if IsServer() then - if self.fChannelTime == nil then - return self.cast_point_playback_rate - else - return self.channel_playback_rate - end - end -end - --------------------------------------------------------------------------------- - -function storegga_ground_pound:OnAbilityPhaseStart() - if IsServer() then - self.cast_point_playback_rate = self:GetSpecialValueFor( "cast_point_playback_rate" ) - self.channel_playback_rate = self:GetSpecialValueFor( "channel_playback_rate" ) - - local hArm = self:GetCaster():ScriptLookupAttachment( "attach_attack1" ) - local vArmPos = self:GetCaster():GetAttachmentOrigin( hArm ) - self.nPreviewFX = ParticleManager:CreateParticle( "particles/test_particle/dungeon_sand_king_channel.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( self.nPreviewFX, 0, vArmPos ) - end - - return true -end - ------------------------------------------------------------------------ - -function storegga_ground_pound:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function storegga_ground_pound:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - self.fChannelTime = 0.0 - - local hArm = self:GetCaster():ScriptLookupAttachment( "attach_attack1" ) - local vArmPos = self:GetCaster():GetAttachmentOrigin( hArm ) - self.hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_storegga_ground_pound_thinker", { duration = self:GetChannelTime() }, vArmPos, self:GetCaster():GetTeamNumber(), false ) - end -end - --------------------------------------------------------------------------------- - -function storegga_ground_pound:OnChannelThink( flInterval ) - if IsServer() then - self.fChannelTime = self.fChannelTime + flInterval - local fFirstAnimDuration = 2.2321 --2.5 - if self.fChannelTime > fFirstAnimDuration and self.bStartedGesture ~= true then - self.bStartedGesture = true - self:GetCaster():StartGesture( ACT_DOTA_CAST_ABILITY_2_END ) - end - end -end - --------------------------------------------------------------------------------- - -function storegga_ground_pound:OnChannelFinish( bInterrpted ) - if IsServer() then - if self.hThinker ~= nil and self.hThinker:IsNull() == false then - self.hThinker:ForceKill( false ) - end - - self.fChannelTime = nil - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_passive.lua deleted file mode 100755 index 358886e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/storegga_passive.lua +++ /dev/null @@ -1,11 +0,0 @@ - -storegga_passive = class({}) -LinkLuaModifier( "modifier_storegga_passive", "modifiers/creatures/modifier_storegga_passive", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function storegga_passive:GetIntrinsicModifierName() - return "modifier_storegga_passive" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/story_crystal.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/story_crystal.lua deleted file mode 100755 index 11e512a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/story_crystal.lua +++ /dev/null @@ -1,18 +0,0 @@ -story_crystal = class( {} ) - -LinkLuaModifier( "modifier_story_crystal", "modifiers/creatures/modifier_story_crystal", LUA_MODIFIER_MOTION_VERTICAL ) - --------------------------------------------------------------------------------- - -function story_crystal:Precache( context ) - PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_spellswap_ambient.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_wisp.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function story_crystal:GetIntrinsicModifierName() - return "modifier_story_crystal" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_hammer_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_hammer_smash.lua deleted file mode 100755 index 4f65d2e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_hammer_smash.lua +++ /dev/null @@ -1,41 +0,0 @@ - -temple_guardian_hammer_smash = class({}) -LinkLuaModifier( "modifier_ogre_tank_melee_smash_thinker", "modifiers/creatures/modifier_ogre_tank_melee_smash_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function temple_guardian_hammer_smash:Precache( context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function temple_guardian_hammer_smash:OnAbilityPhaseStart() - self.playback_rate = self:GetSpecialValueFor( "playback_rate" ) - - if IsServer() then - EmitSoundOn( "TempleGuardian.PreAttack", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function temple_guardian_hammer_smash:GetPlaybackRateOverride() - return self.playback_rate -end - ------------------------------------------------------------------------------ - -function temple_guardian_hammer_smash:OnSpellStart() - if IsServer() then - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vTarget = self:GetCaster():GetOrigin() + vToTarget * self:GetCastRange( self:GetCaster():GetOrigin(), nil ) - CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = 0 }, vTarget, self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_hammer_throw.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_hammer_throw.lua deleted file mode 100755 index 1932ba4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_hammer_throw.lua +++ /dev/null @@ -1,64 +0,0 @@ - -temple_guardian_hammer_throw = class({}) -LinkLuaModifier( "modifier_temple_guardian_hammer_throw", "modifiers/creatures/modifier_temple_guardian_hammer_throw", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function temple_guardian_hammer_throw:Precache( context ) - PrecacheResource( "particle", "particles/test_particle/generic_attack_charge.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/omniknight_wildaxe.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_beastmaster/beastmaster_wildaxes_hit.vpcf", context ) - - PrecacheUnitByNameSync( "npc_dota_beastmaster_axe", context, -1 ) -end - --------------------------------------------------------------------------------- - -function temple_guardian_hammer_throw:OnAbilityPhaseStart() - self.playback_rate = self:GetSpecialValueFor( "playback_rate" ) - - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/test_particle/generic_attack_charge.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 135, 192, 235 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( self.nPreviewFX ) - - EmitSoundOn( "TempleGuardian.PreAttack", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function temple_guardian_hammer_throw:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, true ) - end -end - --------------------------------------------------------------------------------- - -function temple_guardian_hammer_throw:GetPlaybackRateOverride() - return self.playback_rate -end - --------------------------------------------------------------------------- - -function temple_guardian_hammer_throw:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - local vLocation = self:GetCursorPosition() - - local kv = - { - x = vLocation.x, - y = vLocation.y, - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_temple_guardian_hammer_throw", kv ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_passive.lua deleted file mode 100755 index 678a264..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_passive.lua +++ /dev/null @@ -1,11 +0,0 @@ - -temple_guardian_passive = class({}) -LinkLuaModifier( "modifier_temple_guardian_passive", "modifiers/creatures/modifier_temple_guardian_passive", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function temple_guardian_passive:GetIntrinsicModifierName() - return "modifier_temple_guardian_passive" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_purification.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_purification.lua deleted file mode 100755 index 15dec06..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_purification.lua +++ /dev/null @@ -1,91 +0,0 @@ - -temple_guardian_purification = class({}) - ----------------------------------------------------------------------------------------- - -function temple_guardian_purification:Precache( context ) - PrecacheResource( "particle", "particles/test_particle/generic_attack_charge.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_purification.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_purification_cast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_purification_hit.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function temple_guardian_purification:OnAbilityPhaseStart() - self.playback_rate = self:GetSpecialValueFor( "playback_rate" ) - - if IsServer() then - local radius = self:GetSpecialValueFor( "radius" ) - self.nPreviewFX = ParticleManager:CreateParticle( "particles/test_particle/generic_attack_charge.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 215, 0 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( self.nPreviewFX ) - end - - return true -end - --------------------------------------------------------------------------------- - -function temple_guardian_purification:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function temple_guardian_purification:GetPlaybackRateOverride() - return self.playback_rate -end - --------------------------------------------------------------------------------- -function temple_guardian_purification:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, true ) - - local hTarget = self:GetCursorTarget() - if hTarget == nil or hTarget:IsInvulnerable() or hTarget:IsMagicImmune() then - return - end - - local radius = self:GetSpecialValueFor( "radius" ) - local heal = self:GetSpecialValueFor( "heal" ) - - hTarget:Heal( heal, self ) - - local nFXIndex1 = ParticleManager:CreateParticle( "particles/units/heroes/hero_omniknight/omniknight_purification.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex1, 0, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ); - ParticleManager:SetParticleControl( nFXIndex1, 1, Vector( radius, radius, radius ) ); - ParticleManager:ReleaseParticleIndex( nFXIndex1 ); - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/units/heroes/hero_omniknight/omniknight_purification_cast.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetCaster():GetOrigin(), true ); - ParticleManager:SetParticleControlEnt( nFXIndex2, 1, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ); - ParticleManager:ReleaseParticleIndex( nFXIndex2 ); - - EmitSoundOn( "TempleGuardian.Purification", hTarget ) - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), hTarget:GetOrigin(), nil, radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy:IsMagicImmune() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = heal, - damage_type = DAMAGE_TYPE_PURE, - ability = self, - } - ApplyDamage( damageInfo ) - - local nFXIndex3 = ParticleManager:CreateParticle( "particles/units/heroes/hero_omniknight/omniknight_purification_hit.vpcf", PATTACH_ABSORIGIN_FOLLOW, enemy ); - ParticleManager:SetParticleControlEnt( nFXIndex3, 1, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ); - ParticleManager:ReleaseParticleIndex( nFXIndex3 ); - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_rage_hammer_smash.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_rage_hammer_smash.lua deleted file mode 100755 index 51681af..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_rage_hammer_smash.lua +++ /dev/null @@ -1,41 +0,0 @@ - -temple_guardian_rage_hammer_smash = class({}) -LinkLuaModifier( "modifier_ogre_tank_melee_smash_thinker", "modifiers/creatures/modifier_ogre_tank_melee_smash_thinker", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function temple_guardian_rage_hammer_smash:Precache( context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function temple_guardian_rage_hammer_smash:OnAbilityPhaseStart() - self.playback_rate = self:GetSpecialValueFor( "playback_rate" ) - - if IsServer() then - EmitSoundOn( "TempleGuardian.PreAttack", self:GetCaster() ) - end - - return true -end - --------------------------------------------------------------------------------- - -function temple_guardian_rage_hammer_smash:GetPlaybackRateOverride() - return self.playback_rate -end - ------------------------------------------------------------------------------ - -function temple_guardian_rage_hammer_smash:OnSpellStart() - if IsServer() then - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vTarget = self:GetCaster():GetOrigin() + vToTarget * self:GetCastRange( self:GetCaster():GetOrigin(), nil ) - local hThinker = CreateModifierThinker( self:GetCaster(), self, "modifier_ogre_tank_melee_smash_thinker", { duration = 0 }, vTarget, self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_wrath.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_wrath.lua deleted file mode 100755 index b25e6e9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/temple_guardian_wrath.lua +++ /dev/null @@ -1,132 +0,0 @@ - -require( "utility_functions" ) - -temple_guardian_wrath = class({}) -LinkLuaModifier( "modifier_temple_guardian_wrath_thinker", "modifiers/creatures/modifier_temple_guardian_wrath_thinker", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_temple_guardian_immunity", "modifiers/creatures/modifier_temple_guardian_immunity", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function temple_guardian_wrath:Precache( context ) - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_omni.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_ally.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_wings_buff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_halo_buff.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_guardian_angel.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/dungeon_generic_blast_pre.vpcf", context ) - PrecacheResource( "particle", "particles/test_particle/dungeon_generic_blast.vpcf", context ) - - self.nNumCasts = 0 -end - --------------------------------------------------------------------------------- - -function temple_guardian_wrath:GetChannelAnimation() - return ACT_DOTA_CHANNEL_ABILITY_4 -end - --------------------------------------------------------------------------------- - -function temple_guardian_wrath:OnAbilityPhaseStart() - if IsServer() and IsGlobalAscensionCaster( self:GetCaster() ) == false then - self.channel_duration = self:GetSpecialValueFor( "channel_duration" ) - local fImmuneDuration = self.channel_duration + self:GetCastPoint() - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_temple_guardian_immunity", { duration = fImmuneDuration } ) - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 250, 250, 250 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 176, 224, 230 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function temple_guardian_wrath:OnAbilityPhaseInterrupted() - if IsServer() then - if self.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end - end -end - ------------------------------------------------------------------------------ - -function temple_guardian_wrath:OnSpellStart() - if IsServer() then - if self.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end - - self.effect_radius = self:GetSpecialValueFor( "effect_radius" ) - self.interval = self:GetSpecialValueFor( "interval" ) - self.flNextCast = 0.0 - - EmitSoundOn( "TempleGuardian.Wrath.Cast", self:GetCaster() ) - - if IsGlobalAscensionCaster( self:GetCaster() ) == false then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_omninight_guardian_angel", {} ) - end - end -end - ------------------------------------------------------------------------------ - -function temple_guardian_wrath:OnChannelThink( flInterval ) - if IsServer() then - - self.flNextCast = self.flNextCast + flInterval - if self.flNextCast >= self.interval then - - -- Try not to overlap wrath_thinker locations, but use the last position attempted if we spend too long in the loop - local nMaxAttempts = 14 - local nAttempts = 0 - local vPos = nil - - repeat - vPos = self:GetCaster():GetOrigin() + RandomVector( RandomInt( 50, self.effect_radius ) ) - vPos.z = GetGroundHeight( vPos, self:GetCaster() ) - local hThinkersNearby = Entities:FindAllByClassnameWithin( "npc_dota_thinker", vPos, 600 ) - local hOverlappingWrathThinkers = {} - - for _, hThinker in pairs( hThinkersNearby ) do - if ( hThinker:HasModifier( "modifier_temple_guardian_wrath_thinker" ) ) then - table.insert( hOverlappingWrathThinkers, hThinker ) - end - end - - nAttempts = nAttempts + 1 - if nAttempts >= nMaxAttempts then - break - end - until ( #hOverlappingWrathThinkers == 0 ) - - local kv = - { - extra_radius = 0 - } - if IsGlobalAscensionCaster( self:GetCaster() ) == false then - kv.extra_radius = self.nNumCasts * 40 - end - CreateModifierThinker( self:GetCaster(), self, "modifier_temple_guardian_wrath_thinker", kv, vPos, self:GetCaster():GetTeamNumber(), false ) - self.flNextCast = self.flNextCast - self.interval - end - - end -end - ------------------------------------------------------------------------------ - -function temple_guardian_wrath:OnChannelFinish( bInterrupted ) - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_omninight_guardian_angel" ) - self.nNumCasts = self.nNumCasts + 1 - end -end - ------------------------------------------------------------------------------ - -ascension_temple_guardian_wrath = temple_guardian_wrath diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tidehunter_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tidehunter_passive.lua deleted file mode 100755 index dd28311..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tidehunter_passive.lua +++ /dev/null @@ -1,19 +0,0 @@ - -tidehunter_passive = class({}) -LinkLuaModifier( "modifier_tidehunter_passive", "modifiers/creatures/modifier_tidehunter_passive", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_tidehunter_damage_counter", "modifiers/creatures/modifier_tidehunter_damage_counter", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function tidehunter_passive:Precache( context ) - PrecacheResource( "particle", "particles/creatures/lifestealer/lifestealer_damage_counter_overhead.vpcf", context ) -end - ------------------------------------------------------------------------------------------ - -function tidehunter_passive:GetIntrinsicModifierName() - return "modifier_tidehunter_passive" -end - ------------------------------------------------------------------------------------------ - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tornado_harpy_intrinsic.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tornado_harpy_intrinsic.lua deleted file mode 100755 index e7aaced..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tornado_harpy_intrinsic.lua +++ /dev/null @@ -1,12 +0,0 @@ - -tornado_harpy_intrinsic = class({}) -LinkLuaModifier( "modifier_tornado_harpy_intrinsic", "modifiers/creatures/modifier_tornado_harpy_intrinsic", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_tornado_harpy_surge", "modifiers/creatures/modifier_tornado_harpy_surge", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function tornado_harpy_intrinsic:GetIntrinsicModifierName() - return "modifier_tornado_harpy_intrinsic" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tusk_mage_freezing_blast.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tusk_mage_freezing_blast.lua deleted file mode 100755 index 10e3695..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/tusk_mage_freezing_blast.lua +++ /dev/null @@ -1,112 +0,0 @@ - -tusk_mage_freezing_blast = class({}) -LinkLuaModifier( "modifier_tusk_mage_freezing_blast", "modifiers/creatures/modifier_tusk_mage_freezing_blast", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function tusk_mage_freezing_blast:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/act_2/troll_projectile_gale.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_winter_wyvern/wyvern_arctic_burn_slow.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_wyvern_arctic_burn.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function tusk_mage_freezing_blast:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function tusk_mage_freezing_blast:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 50, 50, 50 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 0, 0 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function tusk_mage_freezing_blast:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function tusk_mage_freezing_blast:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - self.projectile_speed = self:GetSpecialValueFor( "projectile_speed" ) - self.attack_radius = self:GetSpecialValueFor( "projectile_radius" ) - self.projectile_distance = self:GetSpecialValueFor( "projectile_distance" ) - self.impact_damage = self:GetSpecialValueFor( "impact_damage" ) - self.movespeed_slow = self:GetSpecialValueFor( "movespeed_slow" ) - self.attackspeed_slow = self:GetSpecialValueFor( "attackspeed_slow" ) - self.slow_duration = self:GetSpecialValueFor( "slow_duration" ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - local info = { - EffectName = "particles/act_2/troll_projectile_gale.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.attack_radius, - fEndRadius = self.attack_radius, - vVelocity = vDirection * self.projectile_speed, - fDistance = self.projectile_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO, - } - - ProjectileManager:CreateLinearProjectile( info ) - - EmitSoundOn( "SpectralTuskMage.FreezingBlast.Cast", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function tusk_mage_freezing_blast:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - --print( "frostbitten projectile hit" ) - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - local damage = - { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.impact_damage, - damage_type = self:GetAbilityDamageType(), - ability = self - } - ApplyDamage( damage ) - - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_tusk_mage_freezing_blast", { duration = self.slow_duration } ) - - EmitSoundOn( "SpectralTuskMage.FreezingBlast.Impact", self:GetCaster() ) - end - - return true - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/undead_tusk_mage_tombstone.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/undead_tusk_mage_tombstone.lua deleted file mode 100755 index 1ec48e2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/undead_tusk_mage_tombstone.lua +++ /dev/null @@ -1,74 +0,0 @@ - -undead_tusk_mage_tombstone = class({}) -LinkLuaModifier( "modifier_undead_tusk_mage_tombstone", "modifiers/creatures/modifier_undead_tusk_mage_tombstone", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function undead_tusk_mage_tombstone:Precache( context ) - - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_undying/undying_tombstone.vpcf", context ) - PrecacheResource( "particle", "particles/act_2/undead_tusk_mage_sigil.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/skeleton_spawn.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_undead_tusk_tombstone", context, -1 ) - PrecacheUnitByNameSync( "npc_dota_creature_tusk_skeleton", context, -1 ) - -end - --------------------------------------------------------------------------------- - -function undead_tusk_mage_tombstone:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function undead_tusk_mage_tombstone:OnAbilityPhaseStart() - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 60, 60, 60 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 0, 0 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function undead_tusk_mage_tombstone:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end -end - --------------------------------------------------------------------------------- - -function undead_tusk_mage_tombstone:OnSpellStart() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - - if self:GetCaster() == nil or self:GetCaster():IsNull() then - return - end - local hTombstone = CreateUnitByName( "npc_dota_undead_tusk_tombstone", self:GetCursorPosition(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hTombstone ~= nil then - table.insert( self:GetCaster().hTombstones, hTombstone ) - - local flDuration = self:GetSpecialValueFor( "duration" ) - hTombstone:AddNewModifier( self:GetCaster(), self, "modifier_undead_tusk_mage_tombstone", { duration = flDuration } ) - hTombstone:AddNewModifier( self:GetCaster(), self, "modifier_kill", { duration = flDuration } ) - hTombstone:AddNewModifier( self:GetCaster(), nil, "modifier_provides_fow_position", { duration = -1 } ) - - local nTombstoneFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_undying/undying_tombstone.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nTombstoneFX, 0, self:GetCursorPosition() ) - ParticleManager:SetParticleControlEnt( nTombstoneFX, 1, self:GetCaster(), flDuration, "attach_attack1", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( nTombstoneFX, 2, Vector( flDuration, flDuration, duration ) ) - ParticleManager:ReleaseParticleIndex( nTombstoneFX ) - - EmitSoundOn( "UndeadTuskMage.Tombstone", hTombstone ) - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/underlord_channelled_buff.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/underlord_channelled_buff.lua deleted file mode 100755 index 8e3f6df..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/underlord_channelled_buff.lua +++ /dev/null @@ -1,56 +0,0 @@ - -underlord_channelled_buff = class({}) -LinkLuaModifier( "modifier_underlord_channelled_buff", "modifiers/creatures/modifier_underlord_channelled_buff", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function underlord_channelled_buff:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_cast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_buff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_pugna/pugna_life_drain.vpcf", context ) -end - ------------------------------------------------------------------------------ - -function underlord_channelled_buff:OnSpellStart() - if IsServer() then - local hTarget = self:GetCursorTarget() - if hTarget ~= nil then - self.hTarget = hTarget - self.hTarget:AddNewModifier( self:GetCaster(), self, "modifier_underlord_channelled_buff", { duration = -1 } ) - - EmitSoundOn( "OgreMagi.Bloodlust.Target", self.hTarget ) - EmitSoundOn( "OgreMagi.Bloodlust.Target.FP", self.hTarget ) - EmitSoundOn( "OgreMagi.Bloodlust.Loop", self:GetCaster() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_cast.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self.hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", self.hTarget:GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 3, self.hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, self.hTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end -end - ------------------------------------------------------------------------------ - -function underlord_channelled_buff:OnChannelFinish( bInterrupted ) - if IsServer() then - if bInterrupted then - self:StartCooldown( self:GetSpecialValueFor( "interrupted_cooldown" ) ) - end - - if self.hTarget ~= nil then - local hMyBuff = self.hTarget:FindModifierByNameAndCaster( "modifier_underlord_channelled_buff", self:GetCaster() ) - if hMyBuff then - hMyBuff:Destroy() - end - StopSoundOn( "OgreMagi.Bloodlust.Loop", self:GetCaster() ) - self.hTarget = nil - end - end -end - ------------------------------------------------------------------------------ - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/upheaval_urn_incoming_damage_rules.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/upheaval_urn_incoming_damage_rules.lua deleted file mode 100755 index d65f521..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/upheaval_urn_incoming_damage_rules.lua +++ /dev/null @@ -1,11 +0,0 @@ - -upheaval_urn_incoming_damage_rules = class({}) -LinkLuaModifier( "modifier_upheaval_urn_incoming_damage_rules", "modifiers/creatures/modifier_upheaval_urn_incoming_damage_rules", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function upheaval_urn_incoming_damage_rules:GetIntrinsicModifierName() - return "modifier_upheaval_urn_incoming_damage_rules" -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/void_spirit_boss_activate_earth_spirits.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/void_spirit_boss_activate_earth_spirits.lua deleted file mode 100755 index 6eb256e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/void_spirit_boss_activate_earth_spirits.lua +++ /dev/null @@ -1,114 +0,0 @@ - -require( "utility_functions" ) - -void_spirit_boss_activate_earth_spirits = class({}) -LinkLuaModifier( "modifier_void_spirit_boss_immunity", "modifiers/creatures/modifier_void_spirit_boss_immunity", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function void_spirit_boss_activate_earth_spirits:Precache( context ) - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_omni.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_ally.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_wings_buff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_halo_buff.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_guardian_angel.vpcf", context ) - - self.nNumCasts = 0 -end - --------------------------------------------------------------------------------- - -function void_spirit_boss_activate_earth_spirits:GetChannelAnimation() - return ACT_DOTA_CHANNEL_ABILITY_4 -end - --------------------------------------------------------------------------------- - -function void_spirit_boss_activate_earth_spirits:OnAbilityPhaseStart() - if IsServer() and IsGlobalAscensionCaster( self:GetCaster() ) == false then - self.channel_duration = self:GetSpecialValueFor( "channel_duration" ) - local fImmuneDuration = self.channel_duration + self:GetCastPoint() - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_void_spirit_boss_immunity", { duration = fImmuneDuration } ) - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 250, 250, 250 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 176, 224, 230 ) ) - end - - return true -end - --------------------------------------------------------------------------------- - -function void_spirit_boss_activate_earth_spirits:OnAbilityPhaseInterrupted() - if IsServer() then - if self.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end - end -end - ------------------------------------------------------------------------------ - -function void_spirit_boss_activate_earth_spirits:OnSpellStart() - if IsServer() then - --printf( "void_spirit_boss_activate_earth_spirits:OnSpellStart" ) - - if self.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end - - self.flNextCast = 0.0 - - --EmitSoundOn( "TempleGuardian.Wrath.Cast", self:GetCaster() ) - - if IsGlobalAscensionCaster( self:GetCaster() ) == false then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_omninight_guardian_angel", {} ) - end - - --[[ - local nFlags = DOTA_UNIT_TARGET_FLAG_INVULNERABLE + DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD - self.hEarthSpiritStatues = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), nil, 4000, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, nFlags, FIND_CLOSEST, false ) - --printf( "self.hEarthSpiritStatues:" ) - --PrintTable( self.hEarthSpiritStatues, " -- " ) - printf( "#self.hEarthSpiritStatues == %d", #self.hEarthSpiritStatues ) - ]] - local hEncounter = GameRules.Aghanim:GetCurrentRoom():GetEncounter() - local hEarthSpirits = hEncounter.hEarthSpirits - local kv = { duration = -1 } - for _, hEarthSpirit in pairs( hEarthSpirits ) do - if hEarthSpirit ~= nil and hEarthSpirit:IsNull() == false then - --printf( "OnSpellStart - found an earth spirit, removing stoneform" ) - hEarthSpirit:RemoveModifierByName( "modifier_earth_spirit_statue_stoneform" ) - end - end - end -end - ------------------------------------------------------------------------------ - -function void_spirit_boss_activate_earth_spirits:OnChannelFinish( bInterrupted ) - if IsServer() then - --printf( "void_spirit_boss_activate_earth_spirits:OnChannelFinish" ) - - self:GetCaster():RemoveModifierByName( "modifier_omninight_guardian_angel" ) - - local hEncounter = GameRules.Aghanim:GetCurrentRoom():GetEncounter() - local hEarthSpirits = hEncounter.hEarthSpirits - local kv = { duration = -1 } - for _, hEarthSpirit in pairs ( hEarthSpirits ) do - if hEarthSpirit ~= nil and hEarthSpirit:IsNull() == false and hEarthSpirit:IsAlive() then - --printf( "OnChannelFinish - found an earth spirit, adding stoneform" ) - hEarthSpirit:AddNewModifier( hEarthSpirit, hEarthSpirit, "modifier_earth_spirit_statue_stoneform", kv ) - end - end - - self.nNumCasts = self.nNumCasts + 1 - end -end - ------------------------------------------------------------------------------ - ---ascension_void_spirit_boss_activate_earth_spirits = void_spirit_boss_activate_earth_spirits diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/wandering_ogre_seal_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/wandering_ogre_seal_passive.lua deleted file mode 100755 index 6f7ee9c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/wandering_ogre_seal_passive.lua +++ /dev/null @@ -1,11 +0,0 @@ - -wandering_ogre_seal_passive = class({}) -LinkLuaModifier( "modifier_wandering_ogre_seal", "modifiers/creatures/modifier_wandering_ogre_seal", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function wandering_ogre_seal_passive:GetIntrinsicModifierName() - return "modifier_wandering_ogre_seal" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/warlock_hp_aura.lua b/aghanim_singleplayer/scripts/vscripts/abilities/creatures/warlock_hp_aura.lua deleted file mode 100755 index 80e2c76..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/creatures/warlock_hp_aura.lua +++ /dev/null @@ -1,12 +0,0 @@ - -warlock_hp_aura = class({}) -LinkLuaModifier( "modifier_warlock_hp_aura", "modifiers/creatures/modifier_warlock_hp_aura", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_warlock_hp_aura_effect", "modifiers/creatures/modifier_warlock_hp_aura_effect", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function warlock_hp_aura:GetIntrinsicModifierName() - return "modifier_warlock_hp_aura" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/heroes/monkey_king_jingu_mastery_aghsfort.lua b/aghanim_singleplayer/scripts/vscripts/abilities/heroes/monkey_king_jingu_mastery_aghsfort.lua deleted file mode 100755 index c1696b1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/heroes/monkey_king_jingu_mastery_aghsfort.lua +++ /dev/null @@ -1,12 +0,0 @@ - -monkey_king_jingu_mastery_aghsfort = class({}) - --------------------------------------------------------------------------------- - -function monkey_king_jingu_mastery_aghsfort:OnSpellStart() - if IsServer() then - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_monkey_king_quadruple_tap_bonuses", { duration = self:GetSpecialValueFor( "max_duration" ) } ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/phased.lua b/aghanim_singleplayer/scripts/vscripts/abilities/phased.lua deleted file mode 100755 index 9df8390..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/phased.lua +++ /dev/null @@ -1,10 +0,0 @@ - -phased = class({}) - --------------------------------------------------------------------------------- - -function phased:GetIntrinsicModifierName() - return "modifier_phased" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/provides_fow_position.lua b/aghanim_singleplayer/scripts/vscripts/abilities/provides_fow_position.lua deleted file mode 100755 index 4158012..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/provides_fow_position.lua +++ /dev/null @@ -1,10 +0,0 @@ - -provides_fow_position = class({}) - --------------------------------------------------------------------------------- - -function provides_fow_position:GetIntrinsicModifierName() - return "modifier_provides_fow_position" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/sled_penguin_passive.lua b/aghanim_singleplayer/scripts/vscripts/abilities/sled_penguin_passive.lua deleted file mode 100755 index 3c45f0d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/sled_penguin_passive.lua +++ /dev/null @@ -1,22 +0,0 @@ - -sled_penguin_passive = class({}) - -LinkLuaModifier( "modifier_sled_penguin_passive", "modifiers/modifier_sled_penguin_passive", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_sled_penguin_movement", "modifiers/modifier_sled_penguin_movement", LUA_MODIFIER_MOTION_HORIZONTAL ) -LinkLuaModifier( "modifier_sled_penguin_crash", "modifiers/modifier_sled_penguin_crash", LUA_MODIFIER_MOTION_HORIZONTAL ) -LinkLuaModifier( "modifier_sled_penguin_impairment", "modifiers/modifier_sled_penguin_impairment", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function sled_penguin_passive:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_brewmaster/brewmaster_drunken_haze_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_brewmaster_drunken_haze.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function sled_penguin_passive:GetIntrinsicModifierName() - return "modifier_sled_penguin_passive" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/traps/arrow.lua b/aghanim_singleplayer/scripts/vscripts/abilities/traps/arrow.lua deleted file mode 100755 index 91e0559..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/traps/arrow.lua +++ /dev/null @@ -1,110 +0,0 @@ - ---[[ abilities/traps/arrow.lua ]] - -arrow = class({}) - ----------------------------------------------------------------------------------------- - -function arrow:Precache( context ) - - PrecacheResource( "particle", "particles/traps/temple_trap_arrow.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function arrow:OnSpellStart() - self.start_radius = self:GetSpecialValueFor( "start_radius" ) - self.end_radius = self:GetSpecialValueFor( "end_radius" ) - self.speed = self:GetLevelSpecialValueFor( "speed", GameRules.Aghanim:GetAscensionLevel() ) - self.max_hp_pct_damage = self:GetLevelSpecialValueFor( "max_hp_pct_damage", GameRules.Aghanim:GetAscensionLevel() ) - --printf( "ascension level: %d; speed: %d; percent damage: %d", GameRules.Aghanim:GetAscensionLevel(), self.speed, self.max_hp_pct_damage ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local fRangeToTarget = ( self:GetCaster():GetOrigin() - vPos ):Length2D() - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.speed = self.speed * ( ( fRangeToTarget ) / ( fRangeToTarget -self.start_radius ) ) - - local info = { - EffectName = "particles/traps/temple_trap_arrow.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.start_radius, - fEndRadius = self.end_radius, - vVelocity = vDirection * self.speed, - fDistance = fRangeToTarget, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - ProjectileManager:CreateLinearProjectile( info ) - - EmitSoundOn( "AghanimsFortress.FireTrap", self:GetCaster() ) -end - --------------------------------------------------------------------------------- - -function arrow:OnProjectileHit( hTarget, vLocation ) - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - if hTarget:HasModifier( "modifier_treasure_chest" ) then - return false - end - - --[[ - local modifierKnockback = - { - center_x = vLocation.x, - center_y = vLocation.y, - center_z = vLocation.z, - duration = 0.3, - knockback_duration = 0.3, - knockback_distance = 450, - knockback_height = 50, - } - hTarget:AddNewModifier( hTarget, nil, "modifier_knockback", modifierKnockback ) - ]] - - local fMaxHealth = hTarget:GetMaxHealth() - local fDamage = math.ceil( fMaxHealth * ( self.max_hp_pct_damage / 100.0 ) ) - --printf( "arrow:OnProjectileHit - applying %.2f damage to target with %.2f max health", fDamage, fMaxHealth ) - - local damageSource = self:GetCaster() - local damage = { - victim = hTarget, - attacker = damageSource, - damage = fDamage, - damage_type = DAMAGE_TYPE_PURE, - ability = self - } - ApplyDamage( damage ) - - if not ( hTarget:IsNull() ) and hTarget ~= nil then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, hTarget:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", hTarget ) - end - - return true - end - - return false -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/traps/blast_wave.lua b/aghanim_singleplayer/scripts/vscripts/abilities/traps/blast_wave.lua deleted file mode 100755 index 0e73981..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/traps/blast_wave.lua +++ /dev/null @@ -1,81 +0,0 @@ - -breathe_fire = class({}) - ----------------------------------------------------------------------------------------- - -function breathe_fire:Precache( context ) - - PrecacheResource( "particle", "particles/fire_trap/trap_breathe_fire.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function breathe_fire:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function breathe_fire:OnSpellStart() - self.start_radius = self:GetSpecialValueFor( "start_radius" ) - self.end_radius = self:GetSpecialValueFor( "end_radius" ) - self.speed = self:GetSpecialValueFor( "speed" ) - self.fire_damage = self:GetSpecialValueFor( "fire_damage" ) - --self.range = self:GetSpecialValueFor( "range" ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local fRangeToTarget = ( self:GetCaster():GetOrigin() - vPos ):Length2D() - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.speed = self.speed * ( ( fRangeToTarget ) / ( fRangeToTarget -self.start_radius ) ) - - local info = { - EffectName = "particles/fire_trap/trap_breathe_fire.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.start_radius, - fEndRadius = self.end_radius, - vVelocity = vDirection * self.speed, - fDistance = fRangeToTarget, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - ProjectileManager:CreateLinearProjectile( info ) - - EmitSoundOn( "AghanimsFortress.FireTrap", self:GetCaster() ) -end - --------------------------------------------------------------------------------- - -function breathe_fire:OnProjectileHit( hTarget, vLocation ) - local fireDamage = self.fire_damage - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - - local damageSource = self:GetCaster() - local damage = { - victim = hTarget, - attacker = damageSource, - damage = fireDamage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self - } - - ApplyDamage( damage ) - end - - return false -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/traps/breathe_fire.lua b/aghanim_singleplayer/scripts/vscripts/abilities/traps/breathe_fire.lua deleted file mode 100755 index 188281a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/traps/breathe_fire.lua +++ /dev/null @@ -1,83 +0,0 @@ - -breathe_fire = class({}) - ----------------------------------------------------------------------------------------- - -function breathe_fire:Precache( context ) - - PrecacheResource( "particle", "particles/fire_trap/trap_breathe_fire.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function breathe_fire:ProcsMagicStick() - return false -end - --------------------------------------------------------------------------------- - -function breathe_fire:OnSpellStart() - self.start_radius = self:GetSpecialValueFor( "start_radius" ) - self.end_radius = self:GetSpecialValueFor( "end_radius" ) - self.speed = self:GetSpecialValueFor( "speed" ) - self.max_hp_pct_damage = self:GetLevelSpecialValueFor( "max_hp_pct_damage", GameRules.Aghanim:GetAscensionLevel() ) - --printf( "ascension level: %d; percent damage: %d", GameRules.Aghanim:GetAscensionLevel(), self.max_hp_pct_damage ) - - local vPos = nil - if self:GetCursorTarget() then - vPos = self:GetCursorTarget():GetOrigin() - else - vPos = self:GetCursorPosition() - end - - local fRangeToTarget = ( self:GetCaster():GetOrigin() - vPos ):Length2D() - - local vDirection = vPos - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - self.speed = self.speed * ( ( fRangeToTarget ) / ( fRangeToTarget -self.start_radius ) ) - - local info = { - EffectName = "particles/fire_trap/trap_breathe_fire.vpcf", - Ability = self, - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.start_radius, - fEndRadius = self.end_radius, - vVelocity = vDirection * self.speed, - fDistance = fRangeToTarget, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - ProjectileManager:CreateLinearProjectile( info ) - - EmitSoundOn( "AghanimsFortress.FireTrap", self:GetCaster() ) -end - --------------------------------------------------------------------------------- - -function breathe_fire:OnProjectileHit( hTarget, vLocation ) - if hTarget ~= nil and ( not hTarget:IsMagicImmune() ) and ( not hTarget:IsInvulnerable() ) then - local fMaxHealth = hTarget:GetMaxHealth() - local fDamage = math.ceil( fMaxHealth * ( self.max_hp_pct_damage / 100.0 ) ) - --printf( "breathe_fire:OnProjectileHit - applying %.2f damage to target with %.2f max health", fDamage, fMaxHealth ) - - local damageSource = self:GetCaster() - local damage = { - victim = hTarget, - attacker = damageSource, - damage = fDamage, - damage_type = self:GetAbilityDamageType(), - ability = self - } - - ApplyDamage( damage ) - end - - return false -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/traps/pendulum_swing.lua b/aghanim_singleplayer/scripts/vscripts/abilities/traps/pendulum_swing.lua deleted file mode 100755 index 966dbf5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/traps/pendulum_swing.lua +++ /dev/null @@ -1,120 +0,0 @@ - -pendulum_swing = class({}) - --------------------------------------------------------------------------------- - -function pendulum_swing:Precache( context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - PrecacheResource( "particle", "particles/econ/courier/courier_mechjaw/mechjaw_death_sparks.vpcf", context ) - - self.HitEntsThisSwing = {} - self.bDamagePathOutgoing = false - self.bDamagePathReturning = false -end - --------------------------------------------------------------------------------- - -function pendulum_swing:GetChannelAnimation() - return ACT_DOTA_CHANNEL_ABILITY_1 -end - --------------------------------------------------------------------------------- - -function pendulum_swing:OnChannelThink( flInterval ) - if IsServer() then - if self.max_hp_pct_damage == nil then - self.max_hp_pct_damage = self:GetLevelSpecialValueFor( "max_hp_pct_damage", GameRules.Aghanim:GetAscensionLevel() ) - --printf( "ascension level: %d; percent damage: %d", GameRules.Aghanim:GetAscensionLevel(), self.max_hp_pct_damage ) - self.radius = self:GetSpecialValueFor( "radius" ) - self.attachHitloc = self:GetCaster():ScriptLookupAttachment( "attach_hitloc" ) - self.attachLeftBlade = self:GetCaster():ScriptLookupAttachment( "attach_leftblade" ) - self.attachRightBlade = self:GetCaster():ScriptLookupAttachment( "attach_rightblade" ) - self.attachFrontBlade = self:GetCaster():ScriptLookupAttachment( "attach_frontblade" ) - self.attachBackBlade = self:GetCaster():ScriptLookupAttachment( "attach_backblade" ) - end - - -- We're checking which part of the pendulum_swing_loop animation we're in. - local flCycle = self:GetCaster():GetCycle() - local bDamagePathOutgoing = ( flCycle > 0.19 and flCycle < 0.26 ) - local bDamagePathReturning = ( flCycle > 0.69 and flCycle < 0.76 ) - if self.bDamagePathOutgoing ~= bDamagePathOutgoing then - self.bDamagePathOutgoing = bDamagePathOutgoing - self.HitEntsThisSwing = {} - end - if self.bDamagePathReturning ~= bDamagePathReturning then - self.bDamagePathReturning = bDamagePathReturning - self.HitEntsThisSwing = {} - end - - if bDamagePathOutgoing or bDamagePathReturning then - if ( flCycle > 0.15 and flCycle < 0.16 ) or ( flCycle > 0.70 and flCycle < 0.71 ) then - -- Ugly: we're relying on the speed of the pendulum and the length of our channelthink interval in order to not play this sound more than once per outgoing or returning swing - EmitSoundOn( "Pendulum.Swing", self:GetCaster() ) - end - - local Locations = { - self:GetCaster():GetAttachmentOrigin( self.attachHitloc ), - self:GetCaster():GetAttachmentOrigin( self.attachLeftBlade ), - self:GetCaster():GetAttachmentOrigin( self.attachRightBlade ), - self:GetCaster():GetAttachmentOrigin( self.attachFrontBlade ), - self:GetCaster():GetAttachmentOrigin( self.attachBackBlade ), - } - - - - for i = 1, #Locations do - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), Locations[i], self:GetCaster(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - --DebugDrawCircle( Locations[i], Vector( 0, 255, 0 ), 255, self.radius, false, 0.1 ) - for _,enemy in pairs( enemies ) do - local bAlreadyHit = false - for _,HitEnt in pairs ( self.HitEntsThisSwing ) do - if HitEnt == enemy then - bAlreadyHit = true - break - end - end - - if not ( enemy:IsNull() ) and enemy ~= nil and enemy:IsInvulnerable() == false and not bAlreadyHit then - local fMaxHealth = enemy:GetMaxHealth() - local fDamage = math.ceil( fMaxHealth * ( self.max_hp_pct_damage / 100.0 ) ) - --printf( "pendulum_swing:OnChannelThink - applying %.2f damage to target with %.2f max health", fDamage, fMaxHealth ) - - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = fDamage, - damage_type = DAMAGE_TYPE_PURE, - ability = self, - } - - table.insert( self.HitEntsThisSwing, enemy ) - - ApplyDamage( damageInfo ) - if not ( enemy:IsNull() ) and enemy ~= nil then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", enemy ) - end - end - end - - - end - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/econ/courier/courier_mechjaw/mechjaw_death_sparks.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_leftblade", self:GetCaster():GetOrigin(), true ) - - local nFXIndex3 = ParticleManager:CreateParticle( "particles/econ/courier/courier_mechjaw/mechjaw_death_sparks.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex3, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_rightblade", self:GetCaster():GetOrigin(), true ) - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/traps/spike_trap.lua b/aghanim_singleplayer/scripts/vscripts/abilities/traps/spike_trap.lua deleted file mode 100755 index c33158b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/traps/spike_trap.lua +++ /dev/null @@ -1,37 +0,0 @@ -spike_trap = class({}) - -LinkLuaModifier( "modifier_spike_trap_lua", "modifiers/modifier_spike_trap_lua", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_spike_trap_thinker_lua", "modifiers/modifier_spike_trap_thinker_lua", LUA_MODIFIER_MOTION_NONE ) - - -function spike_trap:Precache( context ) - - PrecacheResource( "particle", "particles/traps/spikes/spiketrap_anticipate.vpcf", context ) - PrecacheResource( "particle", "particles/traps/spikes/spiketrap_anticipate_base.vpcf", context ) - PrecacheResource( "particle", "particles/traps/spikes/spiketrap_pull.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_axe/axe_culling_blade.vpcf", context ) -end - - --------------------------------------------------------------------------------- - -function spike_trap:GetAOERadius() - return self:GetSpecialValueFor( "light_strike_array_aoe" ) -end - --------------------------------------------------------------------------------- - -function spike_trap:OnSpellStart() - self.light_strike_array_aoe = self:GetSpecialValueFor( "light_strike_array_aoe" ) - self.light_strike_array_delay_time = self:GetSpecialValueFor( "light_strike_array_delay_time" ) - - local kv = {} - CreateModifierThinker( self:GetCaster(), self, "modifier_spike_trap_thinker_lua", kv, self:GetCursorPosition(), self:GetCaster():GetTeamNumber(), false ) -end - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- - - - - diff --git a/aghanim_singleplayer/scripts/vscripts/abilities/treasure_chest.lua b/aghanim_singleplayer/scripts/vscripts/abilities/treasure_chest.lua deleted file mode 100755 index 080c718..0000000 --- a/aghanim_singleplayer/scripts/vscripts/abilities/treasure_chest.lua +++ /dev/null @@ -1,11 +0,0 @@ - -treasure_chest = class({}) -LinkLuaModifier( "modifier_treasure_chest", "modifiers/modifier_treasure_chest", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function treasure_chest:GetIntrinsicModifierName() - return "modifier_treasure_chest" -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/addon_game_mode.lua b/aghanim_singleplayer/scripts/vscripts/addon_game_mode.lua deleted file mode 100755 index d4ed356..0000000 --- a/aghanim_singleplayer/scripts/vscripts/addon_game_mode.lua +++ /dev/null @@ -1,2298 +0,0 @@ - -if CAghanim == nil then - CAghanim = class({}) - _G.CAghanim = CAghanim -end - ------------------------------------------------------------------------------------------------------------------------------------------------------- --- Required .lua files, which help organize functions contained in our addon. --- Make sure to call these beneath the mode's class creation. ------------------------------------------------------------------------------------------------------------------------------------------------------- -require( "constants" ) -- require constants first -require( "aghanim_ability_upgrade_constants" ) -- lists of ability upgrades per hero -require( "aghanim_ability_upgrade_interface" ) -- upgrading abilities can go through the interface -require( "utility_functions" ) -- require utility_functions early (other required files may use its functions) -require( "aghanim_utility_functions" ) -require( "precache" ) -require( "blessings" ) -require( "events" ) -require( "filters" ) -require( "room_tables" ) -require( "ascension_levels" ) -require( "triggers" ) -require( "map_room" ) -require( "rewards" ) -require( "containers/breakable_containers_data" ) -require( "containers/breakable_container_surprises" ) -require( "containers/treasure_chest_data" ) -require( "containers/treasure_chest_surprises" ) -require( "containers/explosive_barrel_data" ) ---require( "map_generation" ) - --------------------------------------------------------------------------------- - -function Precache( context ) - print( "Precaching Aghanim assets..." ) - - for _,Item in pairs( g_ItemPrecache ) do - PrecacheItemByNameSync( Item, context ) - end - - for Item,Price in pairs( PRICED_ITEM_REWARD_LIST ) do - PrecacheItemByNameSync( Item, context ) - end - - for i=1,#TREASURE_REWARDS do - for j=1,#TREASURE_REWARDS[i] do - PrecacheItemByNameSync( TREASURE_REWARDS[i][j], context ) - end - end - - for _, breakableData in ipairs( BreakablesData ) do - for i=1,#breakableData.CommonItems do - PrecacheItemByNameSync( breakableData.CommonItems[i], context ) - end - - for i=1,#breakableData.MonsterUnits do - PrecacheUnitByNameSync( breakableData.MonsterUnits[i], context, -1 ) - end - - for i=1,#breakableData.RareItems do - PrecacheItemByNameSync( breakableData.RareItems[i], context ) - end - end - - for _,Unit in pairs( g_UnitPrecache ) do - PrecacheUnitByNameSync( Unit, context, -1 ) - end - - for AbilityName,Ability in pairs( ASCENSION_ABILITIES ) do - -- Yes, it's not an item, but this works anyways since abilities are similar to items - PrecacheItemByNameSync( AbilityName, context ) - end - - for _,Model in pairs( g_ModelPrecache ) do - PrecacheResource( "model", Model, context ) - end - - for _,Particle in pairs( g_ParticlePrecache ) do - PrecacheResource( "particle", Particle, context ) - end - - for _,Sound in pairs( g_SoundPrecache ) do - PrecacheResource( "soundfile", Sound, context ) - end -end - --------------------------------------------------------------------------------- - --- Create the game mode when we activate -function Activate() - GameRules.Aghanim = CAghanim() - GameRules.Aghanim:InitGameMode() - LinkModifiers() -end - --------------------------------------------------------------------------------- - -function SpawnGroupPrecache( hSpawnGroup, context ) - - local room = GameRules.Aghanim:FindRoomBySpawnGroupHandle( hSpawnGroup ) - if room ~= nil then - --print( "Precaching room " .. room:GetName() .. "..." ) - room:GetEncounter():Precache( context ) - end - -end - --------------------------------------------------------------------------------- - -function LinkModifiers() --- This is the modifier that pukeeps morty in the level - LinkLuaModifier( "modifier_bonus_room_start", "modifiers/modifier_bonus_room_start", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_morty_leash", "modifiers/modifier_morty_leash", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_provides_fow_position", "modifiers/modifier_provides_fow_position", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_sand_king_boss_caustic_finale", "modifiers/creatures/modifier_sand_king_boss_caustic_finale", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_breakable_container", "modifiers/modifier_breakable_container", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_boss_intro", "modifiers/modifier_boss_intro", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_attack_speed_unslowable", "modifiers/modifier_attack_speed_unslowable", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_move_speed_unslowable", "modifiers/modifier_move_speed_unslowable", LUA_MODIFIER_MOTION_NONE ) -end - - --------------------------------------------------------------------------------- - -function GetExitOptionData( nOptionNumber ) - return GameRules.Aghanim:GetExitOptionData( nOptionNumber ) -end - --------------------------------------------------------------------------------- - -function CAghanim:InitGameMode() - print( "Aghanim addon is loaded." ) - - self.CurrentRoom = nil - self.bStreamedStartingRoomExits = false - self.bIsInTournamentMode = false - self.nSeed = 0 - self.bFastTestEncounter = false - - if GameRules:GetGameModeEntity():GetEventWindowStartTime() > 0 then - self.nSeed = GameRules:GetGameModeEntity():GetEventGameSeed() - if self.nSeed > 0 then - self.bIsInTournamentMode = true - end - end - - if self.nSeed == 0 then - self.nSeed = math.floor( GetSystemTimeMS() ) - else - print( "Using fixed seed from the GC: " .. self.nSeed ) - end - - self.nAscensionLevel = 0 - self.bHasSetAscensionLevel = false - self.bWonGame = false - self.bHasAnyNewPlayers = false - self.bHasSetNewPlayers = false - self.bHasInitializedSpectatorCameras = false - self.AghanimSummons = {} - self.hMapRandomStream = CreateUniformRandomStream( self.nSeed ) - self.hPlayerRandomStreams = {} - - math.randomseed( self.nSeed ) - - GameRules:GetGameModeEntity():SetAnnouncerDisabled( true ) - GameRules:SetCustomGameSetupTimeout( 0 ) - GameRules:SetCustomGameSetupAutoLaunchDelay( 0 ) - GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 1 ) - GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 0 ) - GameRules:SetTimeOfDay( 0.25 ) - GameRules:SetStrategyTime( 0.0 ) - GameRules:SetShowcaseTime( 0.0 ) - GameRules:SetPreGameTime( 5.0 ) - GameRules:SetPostGameTime( 45.0 ) - GameRules:SetHeroSelectionTime( 90 ) - GameRules:SetTreeRegrowTime( 60.0 ) - GameRules:SetStartingGold( AGHANIM_STARTING_GOLD ) - GameRules:SetGoldTickTime( 999999.0 ) - GameRules:SetGoldPerTick( 0 ) - GameRules:SetUseUniversalShopMode( true ) - GameRules:GetGameModeEntity():SetRemoveIllusionsOnDeath( true ) - GameRules:GetGameModeEntity():SetDaynightCycleDisabled( true ) - GameRules:GetGameModeEntity():SetStashPurchasingDisabled( true ) - GameRules:GetGameModeEntity():SetRandomHeroBonusItemGrantDisabled( true ) - GameRules:GetGameModeEntity():SetDefaultStickyItem( "item_boots" ) - GameRules:GetGameModeEntity():SetForceRightClickAttackDisabled( true ) - GameRules:GetGameModeEntity():DisableClumpingBehaviorByDefault( true ) - GameRules:GetGameModeEntity():SetMinimumAttackSpeed( 0.4 ) - GameRules:GetGameModeEntity():SetNeutralStashTeamViewOnlyEnabled( true ) - GameRules:GetGameModeEntity():SetNeutralItemHideUndiscoveredEnabled( true ) - - --Temp for tesitng new lives rules - if AGHANIM_TIMED_RESPAWN_MODE == true then - GameRules:GetGameModeEntity():SetBuybackEnabled( false ) - GameRules:GetGameModeEntity():SetFixedRespawnTime( AGHANIM_TIMED_RESPAWN_TIME ) - else - GameRules:GetGameModeEntity():SetCustomBuybackCooldownEnabled( true ) - GameRules:GetGameModeEntity():SetCustomBuybackCostEnabled( true ) - GameRules:SetHeroRespawnEnabled( false ) - end - - GameRules:GetGameModeEntity():SetLoseGoldOnDeath( false ) - GameRules:GetGameModeEntity():SetFriendlyBuildingMoveToEnabled( true ) - GameRules:GetGameModeEntity():SetHudCombatEventsDisabled( true ) - GameRules:GetGameModeEntity():SetWeatherEffectsDisabled( true ) - GameRules:GetGameModeEntity():SetCameraSmoothCountOverride( 2 ) - GameRules:GetGameModeEntity():SetSelectionGoldPenaltyEnabled( false ) - GameRules:GetGameModeEntity():SetUnseenFogOfWarEnabled( true ) - GameRules:GetGameModeEntity():SetTPScrollSlotItemOverride( "item_bottle" ) - - GameRules:GetGameModeEntity():SetSendToStashEnabled( false ) - self.hFowBlockerRegion = GameRules:GetGameModeEntity():AllocateFowBlockerRegion( -16384, -16384, 16384, 16384, 128 ) - - GameRules:SetCustomGameAllowHeroPickMusic( false ) - GameRules:SetCustomGameAllowBattleMusic( false ) - GameRules:SetCustomGameAllowMusicAtGameStart( true ) - - -- Make the camera not z clip - GameRules:GetGameModeEntity():SetCameraZRange( 11, 3800 ) - - -- Event Registration: Functions are found in dungeon_events.lua - ListenToGameEvent( "game_rules_state_change", Dynamic_Wrap( CAghanim, 'OnGameRulesStateChange' ), self ) - ListenToGameEvent( "player_connect_full", Dynamic_Wrap( CAghanim, 'OnPlayerConnected' ), self ) - ListenToGameEvent( "dota_player_reconnected", Dynamic_Wrap( CAghanim, 'OnPlayerReconnected' ), self ) - ListenToGameEvent( "hero_selected", Dynamic_Wrap( CAghanim, 'OnHeroSelected' ), self ) - ListenToGameEvent( "npc_spawned", Dynamic_Wrap( CAghanim, "OnNPCSpawned" ), self ) - ListenToGameEvent( "entity_killed", Dynamic_Wrap( CAghanim, 'OnEntityKilled' ), self ) - ListenToGameEvent( "dota_player_gained_level", Dynamic_Wrap( CAghanim, "OnPlayerGainedLevel" ), self ) - ListenToGameEvent( "dota_item_picked_up", Dynamic_Wrap( CAghanim, "OnItemPickedUp" ), self ) - ListenToGameEvent( "dota_holdout_revive_complete", Dynamic_Wrap( CAghanim, "OnPlayerRevived" ), self ) - ListenToGameEvent( "dota_buyback", Dynamic_Wrap( CAghanim, "OnPlayerBuyback" ), self ) - ListenToGameEvent( "dota_item_spawned", Dynamic_Wrap( CAghanim, "OnItemSpawned" ), self ) - ListenToGameEvent( "dota_item_purchased", Dynamic_Wrap( CAghanim, "OnItemPurchased" ), self ) - --ListenToGameEvent( "dota_non_player_used_ability", Dynamic_Wrap( CAghanim, "OnNonPlayerUsedAbility" ), self ) - ListenToGameEvent( "trigger_start_touch", Dynamic_Wrap( CAghanim, "OnTriggerStartTouch" ), self ) - ListenToGameEvent( "trigger_end_touch", Dynamic_Wrap( CAghanim, "OnTriggerEndTouch" ), self ) - ListenToGameEvent( "aghsfort_path_selected", Dynamic_Wrap( CAghanim, "OnNextRoomSelected" ), self ) - ListenToGameEvent( "dota_hero_entered_shop", Dynamic_Wrap( CAghanim, "OnHeroEnteredShop" ), self ) - ListenToGameEvent( "dota_player_team_changed", Dynamic_Wrap( CAghanim, "OnPlayerTeamChanged" ), self ) - ListenToGameEvent( "player_chat", Dynamic_Wrap(CAghanim, "PlayerChat") , self) - - -- Filter Registration: Functions are found in filters.lua - --GameRules:GetGameModeEntity():SetHealingFilter( Dynamic_Wrap( CAghanim, "HealingFilter" ), self ) - --GameRules:GetGameModeEntity():SetDamageFilter( Dynamic_Wrap( CAghanim, "DamageFilter" ), self ) - --GameRules:GetGameModeEntity():SetItemAddedToInventoryFilter( Dynamic_Wrap( CAghanim, "ItemAddedToInventoryFilter" ), self ) - GameRules:GetGameModeEntity():SetModifierGainedFilter( Dynamic_Wrap( CAghanim, "ModifierGainedFilter" ), self ) - - self.nCrystalsLeft = 5 - self.PlayerCrystals = {} - self.PlayerCurrentRooms = {} - for nPlayerID = 0, AGHANIM_PLAYERS-1 do - PlayerResource:SetCustomTeamAssignment( nPlayerID, DOTA_TEAM_GOODGUYS ) - table.insert( self.PlayerCurrentRooms, nPlayerID , {} ) - table.insert( self.PlayerCrystals, nPlayerID , {} ) - end - - for szHeroName,HeroUpgrades in pairs ( MINOR_ABILITY_UPGRADES ) do - for k,v in pairs ( HeroUpgrades ) do - v[ "id" ] = k - end - --PrintTable( HeroUpgrades, szHeroName .. ": " ) - end - - GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 0.5 ) - - -- Used to display the blessings - CustomNetTables:SetTableValue( "game_global", "blessings", {} ) - - -- parse dev mode starting flags - self._bDevMode = (GameRules:GetGameSessionConfigValue("DevMode", "false") == "true") - self._szDevHero = GameRules:GetGameSessionConfigValue("DevHero", nil) - self._szDevEncounter = GameRules:GetGameSessionConfigValue("DevEncounter", nil) - - if self._bDevMode then - GameRules:SetHeroSelectionTime( 20.0 ) - GameRules:SetHeroSelectPenaltyTime( 0.0 ) - GameRules:SetPostGameTime( 10.0 ) - end - - self:RegisterConCommands() - - self.nNumViableRoomsForItems = NUM_VIABLE_ROOMS_FOR_DROPPED_ITEMS - self.nNumNeutralItems = NUM_NEUTRAL_ITEMS_DROPPED - self.DroppedNeutralItems = {} - - self:InitScoreboardInfo() - self:InitPlayerInfo() - self:AllocateRoomLayout() - self:AssignEncountersToRooms() - self:SetupSpawnLocations() - - -- Mark the first room as loaded, and start streaming the exit rooms immediately - local room = self:GetStartingRoom() - if room~= nil then - room:OnSpawnRoomComplete( room:GetSpawnGroupHandle() ) - end - - -- Listener for the ability upgrade - CustomGameEventManager:RegisterListener( "ability_upgrade_button_clicked", function(...) return self:OnAbilityUpgradeButtonClicked( ... ) end ) - self.bTestingAbilityUpgrades = false - - -- Listener for reward choice - CustomGameEventManager:RegisterListener( "reward_choice", function(...) return OnRewardChoice( ... ) end ) - - if self.bIsInTournamentMode == true then - self:SetAscensionLevel( 1 ) - print( "Tournament game difficulty is " .. self:GetAscensionLevel() ) - else - local nCustomGameDifficulty = GameRules:GetCustomGameDifficulty() - if nCustomGameDifficulty > 0 then - print( "Lobby game difficulty is " .. nCustomGameDifficulty ) - self:SetAscensionLevel( nCustomGameDifficulty - 1 ) - end - end - - -- Create announcer Unit - local dummyTable = - { - MapUnitName = "npc_dota_announcer_aghanim", - teamnumber = DOTA_TEAM_GOODGUYS, - } - CreateUnitFromTable( dummyTable, Vector( 0, 0, 0 ) ) - - self:InitializeMetagame() - self.BristlebackItems = {} -end ---------------------------------------------------------- --- function CAghanim:showworldranklisk( keys ) --- local worldranklist = {rank01,rank02,rank03,rank04,rank05,rand06,rank07,rank08,rank09,rank10} --- rank01 = {"playerid","3600","diffcult","heroid","4800"} --- local gametime = GameRules:GetGameTime() --- if gametime == 10 then --- print("30") --- GameRules:SendCustomMessage(string.format("01 : %s",rank01[00])+string.format("time : %d",rank01[01])+string.format("diffcult : %d",rank01[02])+string.format("hero : %d",rank01[03])+string.format("score : %d",rank01[04]),DOTA_TEAM_GOODGUYS, 0) --- end --- return 1 --- end - - ---聊天检测 ---------------------------------------------------------- -local expertmode = false -function CAghanim:PlayerChat( keys ) - print("PlayerSay") - DeepPrintTable(keys) - local worldranklist = {rank01,rank02,rank03,rank04,rank05,rand06,rank07,rank08,rank09,rank10} - rank01 = {"playerid","3600","diffcult","heroid","4800"} - local chattext = keys.text - local gametime = GameRules:GetGameTime() - if gametime < 120 then - if chattext == "expert" - then - expertmode = true - _G.AGHANIM_MAX_LIVES = 1 - _G.HEALTH_POTION_DROP_PCT = 15 - _G.MANA_POTION_DROP_PCT = 15 - _G.ELITE_VALUE_MODIFIER = 3 - print("expertmode on") - GameRules:SendCustomMessage("expertmode on", DOTA_TEAM_GOODGUYS, 0) - - -- CustomGameEventManager:Send_ServerToAllClients("bullet", { - -- player_id = keys.playerid - -- }) - return true - end - if chattext == "worldrank" then - GameRules:SendCustomMessage(string.format("01---time---diffcult---hero---score"),DOTA_TEAM_GOODGUYS, 0) - GameRules:SendCustomMessage(string.format("%s---%s---%s---%s---%s",rank01[1],rank01[2], rank01[3], rank01[4],rank01[5]),DOTA_TEAM_GOODGUYS, 0) - return true - end - else return false - end -end --------------------------------------------------------------------------------- - -function CAghanim:GetRandomSeed( ) - return self.nSeed -end - --------------------------------------------------------------------------------- - -function CAghanim:GetHeroRandomStream( nPlayerID ) - - local hStream = self.hPlayerRandomStreams[ tostring( nPlayerID ) ] - if hStream ~= nil then - return hStream - end - - local nHeroID = PlayerResource:GetSelectedHeroID( nPlayerID ) - if nHeroID == 0 then - print( "GetHeroRandomStream: Warning! Encountered hero id " .. nHeroID ) - end - - local hStream = CreateUniformRandomStream( self.nSeed + nHeroID ) - self.hPlayerRandomStreams[ tostring( nPlayerID ) ] = hStream - return hStream - -end - --------------------------------------------------------------------------------- - -function CAghanim:SetAnnouncer( hAnnouncer ) - self.hAnnouncer = hAnnouncer -end - --------------------------------------------------------------------------------- - -function CAghanim:GetAnnouncer( ) - return self.hAnnouncer -end - --------------------------------------------------------------------------------- - - -function CAghanim:InitPlayerInfo() - - self.playerInfo = {} - - local hEventGameDetails = GetLobbyEventGameDetails() - - print("[Aghanim] EventGameDetails table:") - if hEventGameDetails == nil then - print("NOT FOUND!!") - hEventGameDetails = {} - end - - DeepPrintTable(hEventGameDetails) - - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - - local szAccountID = tostring( PlayerResource:GetSteamAccountID( nPlayerID ) ) - - local hPlayerDetails = {} - local szPlayerRecord = string.format( "Player%d", nPlayerID ) - if hEventGameDetails[szPlayerRecord] ~= nil then - local szRecordAccountID = hEventGameDetails[szPlayerRecord]['account_id'] - if szRecordAccountID ~= nil and szRecordAccountID == szAccountID then - hPlayerDetails = hEventGameDetails[szPlayerRecord] - end - end - - local info = - { - nBPCapTotal = hPlayerDetails["pointcap_total"] or 0, - nBPCapRemaining = hPlayerDetails["pointcap_remaining"] or 0, - nArcaneFragmentCapTotal = hPlayerDetails["premium_pointcap_total"] or 0, - nArcaneFragmentCapRemaining = hPlayerDetails["premium_pointcap_remaining"] or 0, - } - - self.playerInfo[ tostring( nPlayerID ) ] = info - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:CanPlayersAcceptCurrency( bBattlePoints ) - - if bBattlePoints == false then - return true - end - - local connectedPlayers = self:GetConnectedPlayers() - for i=1,#connectedPlayers do - local nPlayerID = connectedPlayers[i] - - local player = self.playerInfo[ tostring( nPlayerID ) ] - if player ~= nil then - if player.nBPCapRemaining > 0 then - return true - end - end - end - return false - -end - - - --------------------------------------------------------------------------------- - -function CAghanim:RegisterCurrencyGrant( nPlayerID, nPoints, bBattlePoints ) - - local player = self.playerInfo[ tostring( nPlayerID ) ] - if player == nil then - return 0 - end - - if bBattlePoints == true then - if nPoints > player.nBPCapRemaining then - nPoints = player.nBPCapRemaining - end - player.nBPCapRemaining = player.nBPCapRemaining - nPoints - else - local nBonusPoints = nPoints * 2 - if nBonusPoints > player.nArcaneFragmentCapRemaining then - nBonusPoints = player.nArcaneFragmentCapRemaining - end - player.nArcaneFragmentCapRemaining = player.nArcaneFragmentCapRemaining - nBonusPoints - nPoints = nPoints + nBonusPoints - end - - return nPoints -end - --------------------------------------------------------------------------------- - -function CAghanim:GetPointsCapRemaining( nPlayerID, bBattlePoints, bTotal ) - - local player = self.playerInfo[ tostring( nPlayerID ) ] - if player == nil then - return 0 - end - - if bBattlePoints == true then - if bTotal == false then - return player.nBPCapRemaining - else - return player.nBPCapTotal - end - end - - if bTotal == false then - return player.nArcaneFragmentCapRemaining - else - return player.nArcaneFragmentCapTotal - end -end - --------------------------------------------------------------------------------- - -function CAghanim:InitScoreboardInfo() - - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - local kv = - { - kills = 0, - death_count = 0, - gold_bags = 0 - } - CustomNetTables:SetTableValue( "aghanim_scores", tostring( nPlayerID ), kv ) - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterPlayerKillStat( nPlayerID, nDepth ) - - local scores = CustomNetTables:GetTableValue( "aghanim_scores", tostring(nPlayerID) ) - scores.kills = scores.kills + 1 - CustomNetTables:SetTableValue( "aghanim_scores", tostring(nPlayerID), scores ) - - local szRoomDepth = tostring( nDepth ) - self:EnsurePlayerStatAtDepth( nPlayerID, szRoomDepth ) - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].kills = - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].kills + 1 - -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterGoldBagCollectedStat( nPlayerID ) - - local scores = CustomNetTables:GetTableValue( "aghanim_scores", tostring(nPlayerID) ) - scores.gold_bags = scores.gold_bags + 1 - CustomNetTables:SetTableValue( "aghanim_scores", tostring(nPlayerID), scores ) - - if self:GetCurrentRoom() ~= nil then - local szRoomDepth = tostring( self:GetCurrentRoom():GetDepth() ) - self:EnsurePlayerStatAtDepth( nPlayerID, szRoomDepth ) - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].gold_bags = - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].gold_bags + 1 - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:GetNewPlayerList( ) - - local vecPlayerIDs = {} - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - if PlayerResource:IsValidPlayerID( nPlayerID ) and PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - local nGamePlayedCount = PlayerResource:GetEventGameCustomActionClaimCountByName( nPlayerID, "ti10_event_game_num_games_played" ) - if nGamePlayedCount < 3 then - table.insert( vecPlayerIDs, nPlayerID ) - end - end - end - return vecPlayerIDs - -end - --------------------------------------------------------------------------------- - -function CAghanim:ReassignTrapRoomToNormalEncounter( nAct ) - - local hRoom = nil - for _,room in pairs(self.rooms) do - if room:GetAct() == nAct and room:GetType() == ROOM_TYPE_TRAPS then - hRoom = room - break - end - end - - if hRoom == nil then - return - end - - -- Reassign this room back to a normal room - hRoom.nRoomType = ROOM_TYPE_ENEMY - - -- Select a new encounter, and make sure no room has the same encounter on both exits - local vecSiblingRoomNames = self:GetSiblingRoomNames( hRoom:GetName() ) - - local vecEncounterOptions = {} - for encounterName,encounterDef in pairs(ENCOUNTER_DEFINITIONS) do - - if not self:IsEncounterDefAppropriateForRoom( encounterDef, hRoom ) then - goto continue - end - - for s=1,#vecSiblingRoomNames do - local szOtherEncounterName = self.rooms[ vecSiblingRoomNames[s] ]:GetEncounterName() - if szOtherEncounterName == encounterName then - goto continue - end - end - - table.insert( vecEncounterOptions, encounterName ) - ::continue:: - end - - if #vecEncounterOptions > 0 then - local nPick = self.hMapRandomStream:RandomInt( 1, #vecEncounterOptions ) - --print( "Replacing trap encounter " .. hRoom:GetEncounterName() .. " with encounter " .. vecEncounterOptions[nPick] .. " in room " .. hRoom:GetName() ) - hRoom:AssignEncounter( vecEncounterOptions[nPick] ) - hRoom:GetEncounter():SelectAscensionAbilities() - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:ComputeHasNewPlayers() - - if self.bHasSetNewPlayers == true then - return - end - - if PlayerResource:HasSetEventGameCustomActionClaimCount() == false then - return - end - - self.bHasSetNewPlayers = true - - -- Determine whether there are any new players - local vecPlayerIDs = self:GetNewPlayerList( ) - self.bHasAnyNewPlayers = ( #vecPlayerIDs > 0 ) - - -- Show new player popup for new players - CustomNetTables:SetTableValue( "game_global", "new_players", vecPlayerIDs ) - - if self.bHasAnyNewPlayers == true and self:GetAscensionLevel() == 0 then - self:ReassignTrapRoomToNormalEncounter( 1 ) - end - - print( "New players " .. tostring( self.bHasAnyNewPlayers ) ) - - -- Can't do this until we know whether we have new players - self:GetAnnouncer():OnHeroSelectionStarted() - -end - --------------------------------------------------------------------------------- - -function CAghanim:OnHeroSelectionStarted() - -end - --------------------------------------------------------------------------------- - -function CAghanim:HasAnyNewPlayers() - return self.bHasAnyNewPlayers -end - --------------------------------------------------------------------------------- - -function CAghanim:IsInTournamentMode() - return self.bIsInTournamentMode -end - --------------------------------------------------------------------------------- - -function CAghanim:GetPlayerCurrentRoom( nPlayerID ) - return self.PlayerCurrentRooms[ nPlayerID ] -end - --------------------------------------------------------------------------------- - -function CAghanim:ClampMinimapToRoom( nPlayerID, hRoom ) - - local flSize = hRoom:GetMaxs().x - hRoom:GetMins().x - local flSizeY = hRoom:GetMaxs().y - hRoom:GetMins().y - if flSizeY > flSize then - flSize = flSizeY - end - - local netTable = {} - netTable[ "room_name" ] = hRoom:GetName() - netTable[ "map_name" ] = hRoom:GetMapName() - netTable[ "x" ] = hRoom:GetOrigin().x - netTable[ "y" ] = hRoom:GetOrigin().y - netTable[ "size" ] = flSize - netTable[ "scale" ] = 8 - - if hRoom:GetType() == ROOM_TYPE_BOSS then - netTable[ "scale" ] = 4 - end - - if hRoom:GetName() == "a2_transition" then - netTable[ "scale" ] = 2 - end - - if hRoom:GetType() == ROOM_TYPE_STARTING then - netTable[ "map_name" ] = "main" - end - - CustomNetTables:SetTableValue( "game_global", "minimap_info" .. nPlayerID, netTable ) -end - --------------------------------------------------------------------------------- - -function CAghanim:SetPlayerCurrentRoom( nPlayerID, hRoom ) - self.PlayerCurrentRooms[ nPlayerID ] = hRoom - self:ClampMinimapToRoom( nPlayerID, hRoom ) -end - --------------------------------------------------------------------------------- - -function CAghanim:GetStartingRoom() - for _,room in pairs(self.rooms) do - if room:GetAct() == 1 and room:GetType() == ROOM_TYPE_STARTING then - return room - end - end - return nil -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterConCommands() - print("Registering ConCommands..."); - local eCommandFlags = FCVAR_CHEAT - Convars:RegisterCommand( "test_room_reward", function( ... ) return TestRoomRewardConsoleCommand(...) end, "Usage: test_room_reward ", eCommandFlags ); - -- use aghanim_ability_upgrades to open the ability upgrade dev interface - Convars:RegisterCommand( "aghanim_ability_upgrades", function(...) return self:TestAbilityUpgradesUICC( ... ) end, "", eCommandFlags ) - Convars:RegisterCommand( "win_encounter", function(...) return self:Dev_WinEncounter( ... ) end, "Completes the current encounter.", eCommandFlags ) - Convars:RegisterCommand( "win_game", function(...) return self:Dev_WinGame( ... ) end, "Completes the current game.", eCommandFlags ) - Convars:RegisterCommand( "set_ascension_level", function(...) return self:Dev_SetAscensionLevel( ... ) end, "Sets the current ascension level", eCommandFlags ) - Convars:RegisterCommand( "extra_lives", function(...) return self:Dev_ExtraLives( ... ) end, "Completes the current encounter.", eCommandFlags ) - Convars:RegisterCommand( "aghanim_test_encounter", function(...) return self:Dev_TestEncounter( ... ) end, "Tests a specific encounter at a specific level", eCommandFlags ) - Convars:RegisterCommand( "fast_test_encounter", function(...) self.bFastTestEncounter = true; return self:Dev_TestEncounter( ... ) end, "Tests a specific encounter at a specific level", eCommandFlags ) - Convars:RegisterCommand( "set_new_players", function(...) return self:Dev_SetNewPlayers( ... ) end, "Sets whether there are new players or not", eCommandFlags ) -end - --------------------------------------------------------------------------------- - -function CAghanim:SetAscensionLevel( nLevel ) - - if nLevel < 0 then - nLevel = 0 - elseif nLevel > self:GetMaxAllowedAscensionLevel() then - nLevel = self:GetMaxAllowedAscensionLevel() - end - - print( 'Setting Ascension Level to ' .. nLevel ) - self.nAscensionLevel = nLevel - self.bHasSetAscensionLevel = true - CustomNetTables:SetTableValue( "game_global", "ascension_level", { nLevel } ) - - -- Assign elite rooms, since the #s are dependent on the ascension level - local vecEliteRooms = { {}, {}, {} } - - -- Which rooms can be elite? - for k,roomDef in pairs(MAP_ATLAS) do - -- Clear out any previous state - local hRoom = self.rooms[ roomDef.name ] - hRoom:SetEliteDepthBonus( 0 ) - - -- No elites at depth 2 for ascension 0 or 1 - local bSuppress = ( nLevel <= 1 ) and ( roomDef.nDepth == 2 ) - if bSuppress == false and not roomDef.bCannotBeElite and hRoom:GetType() == ROOM_TYPE_ENEMY then - table.insert( vecEliteRooms[ hRoom.nAct ], roomDef.name ) - end - end - - for nAct=1,3 do - - -- Assign elite rooms - for nEliteRoom=1, MAP_ATLAS_ELITE_ROOMS_PER_ACT[nLevel+1][nAct] do - if #vecEliteRooms[nAct] == 0 then - break - end - local nPick = self.hMapRandomStream:RandomInt( 1, #vecEliteRooms[nAct] ) - - local szEliteRoom = vecEliteRooms[nAct][nPick] - --print( "Selecting elite room " .. szEliteRoom ) - self.rooms[ szEliteRoom ]:SetEliteDepthBonus( 1 ) - self.rooms[ szEliteRoom ]:SendRoomToClient() - table.remove( vecEliteRooms[nAct], nPick ) - - -- Make sure no room has 2 elite exits at asc 0 and 1 - if nLevel <= 1 then - local vecSiblingRoomNames = self:GetSiblingRoomNames( szEliteRoom ) - for s=1,#vecSiblingRoomNames do - for h=1,#vecEliteRooms[nAct] do - if vecEliteRooms[nAct][h] == vecSiblingRoomNames[s] then - --print( "Removing elite room option " .. vecEliteRooms[nAct][h] ) - table.remove( vecEliteRooms[nAct], h ) - break - end - end - end - end - end - - end - - -- Now that we know our ascension level and eliteness, we can pick the abilities we want to use - for k,room in pairs(self.rooms) do - room:GetEncounter():SelectAscensionAbilities() - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:GetMaxAllowedAscensionLevel( ) - return 3 -end - --------------------------------------------------------------------------------- - -function CAghanim:GetAscensionLevel( ) - return self.nAscensionLevel -end - --------------------------------------------------------------------------------- - -function CAghanim:HasSetAscensionLevel( ) - return self.bHasSetAscensionLevel -end - --------------------------------------------------------------------------------- - -function CAghanim:DepthHasEliteEncounters( nDepth ) - - local bSkippedOptions = false - for encounterName,encounterDef in pairs(ENCOUNTER_DEFINITIONS) do - - if ( nDepth >= encounterDef.nMinDepth and nDepth <= encounterDef.nMaxDepth ) then --- if encounterDef.nMaxEliteRank ~= nil and encounterDef.nMaxEliteRank > 0 then - if encounterDef.nEncounterType == ROOM_TYPE_ENEMY then - return true - end - end - end - - return false -end - --------------------------------------------------------------------------------- - -function CAghanim:GetSiblingRoomNames( szRoomName ) - -- Find the room(s) that can be entered from the same room as hRoom can be - local hParentRooms = {} - - for _,otherRoom in pairs(self.rooms) do - local vecExits = otherRoom:GetExits() - for _,exit in pairs(vecExits) do - if exit == szRoomName then - table.insert( hParentRooms, otherRoom ) - end - end - end - - local szOtherExits = {} - for i=1,#hParentRooms do - local vecExits = hParentRooms[i]:GetExits() - for _,szExit in pairs(vecExits) do - if szExit ~= szRoomName then - table.insert( szOtherExits, szExit ) - end - end - end - - return szOtherExits - -end - --------------------------------------------------------------------------------- --- Assign room reward -function CAghanim:AssignRoomReward( szRoomName, RewardPossibilites ) - - local flRoll = self.hMapRandomStream:RandomFloat( 0, 100.0 ) - local flThreshold = 0.0 - - for k,v in pairs( RewardPossibilites ) do - flThreshold = flThreshold + v - if flRoll <= flThreshold then - szRewardResult = k - break - end - end - - local nExitRoomType = MAP_ATLAS[ szRoomName ].nRoomType - if nExitRoomType == ROOM_TYPE_BOSS then - if szRoomName ~= "a3_boss" then - szRewardResult = "REWARD_TYPE_GOLD" - else - szRewardResult = "REWARD_TYPE_NONE" - end - elseif nExitRoomType == ROOM_TYPE_BONUS then - szRewardResult = "REWARD_TYPE_GOLD" - elseif nExitRoomType == ROOM_TYPE_TRANSITIONAL or nExitRoomType == ROOM_TYPE_STARTING then - szRewardResult = "REWARD_TYPE_NONE" - end - - --print( "Setting Room Reward for " .. szRoomName .. " to " .. szRewardResult ) - return szRewardResult - -end - - --------------------------------------------------------------------------------- --- Allocates the room layout -function CAghanim:AllocateRoomLayout() - - self.bMapFlipped = false --( self.hMapRandomStream:RandomInt( 0, 1 ) == 1 ) - - local vecPotentialTrapRooms = { {}, {}, {} } - local vecHiddenRooms = { {}, {}, {} } - self.nMaxDepth = 0 - - -- Assign room positions + exits, given flip horizontal logic - self.rooms = {} - self.RoomRewards = {} - - for k,roomDef in pairs(MAP_ATLAS) do - local fHeightOffset = 512 - local vCenter = Vector( roomDef.vCenter.x, roomDef.vCenter.y, roomDef.vCenter.z + fHeightOffset ) - if self.bMapFlipped then - vCenter.x = -vCenter.x - end - - if roomDef.nRoomType == ROOM_TYPE_ENEMY and roomDef.nDepth > self.nMaxDepth then - self.nMaxDepth = roomDef.nDepth - end - - local vMins = vCenter - roomDef.vSize / 2 - local vMaxs = vCenter + roomDef.vSize / 2 - self.rooms[ roomDef.name ] = CMapRoom( roomDef.name, roomDef.nRoomType, roomDef.nDepth, vMins, vMaxs, vCenter ) - - local nGoldValue = ENCOUNTER_DEPTH_GOLD_REWARD[ roomDef.nDepth + 1 ] - - local RewardPossibilites = deepcopy( ROOM_CHOICE_REWARDS ) - ShuffleListInPlace( RewardPossibilites, self.hMapRandomStream ) - - -- If the side exit was previously assigned, remove it from the list of possible rewards - if self.RoomRewards[ roomDef.exit_side ] ~= nil then - RewardPossibilites[ self.RoomRewards[ roomDef.exit_side ] ] = nil - NormalizeFloatArrayInPlace( RewardPossibilites, 100.0 ) - end - - if ( roomDef.exit_up ~= nil ) then - self.rooms[ roomDef.name ]:AddExit( ROOM_EXIT_TOP, roomDef.exit_up ) - - if self.RoomRewards[ roomDef.exit_up ] == nil then - self.RoomRewards[ roomDef.exit_up ] = self:AssignRoomReward( roomDef.exit_up, RewardPossibilites ) - end - - -- Remove the reward assigned to exit_up as a possibility for exit_side - if self.RoomRewards[ roomDef.exit_up ] ~= nil then - RewardPossibilites[ self.RoomRewards[ roomDef.exit_up ] ] = nil - end - NormalizeFloatArrayInPlace( RewardPossibilites, 100.0 ) - end - - if ( roomDef.exit_side ~= nil ) then - - -- Deal with map flip - local exitDirection = ROOM_EXIT_LEFT - if MAP_ATLAS[ roomDef.exit_side ].vCenter.x < roomDef.vCenter.x then - if self.bMapFlipped then - exitDirection = ROOM_EXIT_RIGHT - end - else - if not self.bMapFlipped then - exitDirection = ROOM_EXIT_RIGHT - end - end - - self.rooms[ roomDef.name ]:AddExit( exitDirection, roomDef.exit_side ) - - if self.RoomRewards[ roomDef.exit_side ] == nil then - self.RoomRewards[ roomDef.exit_side ] = self:AssignRoomReward( roomDef.exit_side, RewardPossibilites ) - end - end - - if ( roomDef.nRoomType == ROOM_TYPE_ENEMY ) and ( roomDef.bCannotBeTrap == nil or roomDef.bCannotBeTrap == false ) then - table.insert( vecPotentialTrapRooms[ self.rooms[ roomDef.name ].nAct ], roomDef.name ) - end - - local bSuppress = ( roomDef.nDepth == 2 ) - if ( not roomDef.bCannotBeElite ) and ( bSuppress == false ) then - table.insert( vecHiddenRooms[ self.rooms[ roomDef.name ].nAct ], roomDef.name ) - end - end - - for nAct=1,3 do - - -- Assign trap rooms - for nTrapRoom=1, MAP_TRAP_ROOMS_PER_ACT[nAct] do - local nPick = self.hMapRandomStream:RandomInt( 1, #vecPotentialTrapRooms[nAct] ) - --print( "Selecting trap room option " .. vecPotentialTrapRooms[nAct][nPick] ) - self.rooms[ vecPotentialTrapRooms[nAct][nPick] ].nRoomType = ROOM_TYPE_TRAPS - table.remove( vecPotentialTrapRooms[nAct], nPick ) - end - - -- Assign hidden rooms - for nHiddenRoom=1, MAP_HIDDEN_ENCOUNTERS_PER_ACT[nAct] do - local nPick = self.hMapRandomStream:RandomInt( 1, #vecHiddenRooms[nAct] ) - local szHiddenRoomName = vecHiddenRooms[nAct][nPick] - --print( "Selecting hidden room option " .. szHiddenRoomName ) - self.rooms[ szHiddenRoomName ]:SetHidden( ) - table.remove( vecHiddenRooms[nAct], nPick ) - - -- Make sure no room has 2 hidden exits - local vecSiblingRoomNames = self:GetSiblingRoomNames( szHiddenRoomName ) - for s=1,#vecSiblingRoomNames do - for h=1,#vecHiddenRooms[nAct] do - if vecHiddenRooms[nAct][h] == vecSiblingRoomNames[s] then - --print( "Removing hidden room option " .. vecHiddenRooms[nAct][h] ) - table.remove( vecHiddenRooms[nAct], h ) - break - end - end - end - end - - local nNumCrystalsPerAct = 2 - if nAct == 3 then - nNumCrystalsPerAct = 1 - end - for nCrystalRoom=1,nNumCrystalsPerAct do - local nPick = self.hMapRandomStream:RandomInt( 1, #vecPotentialTrapRooms[nAct] ) - self.rooms[ vecPotentialTrapRooms[nAct][nPick] ].bHasCrystal = true - print( "assigning " .. vecPotentialTrapRooms[nAct][nPick] .. " a crystal " ) - table.remove( vecPotentialTrapRooms[nAct], nPick ) - end - end - - for k,v in pairs ( self.rooms ) do - v:SetRoomChoiceReward( self.RoomRewards[ v:GetName() ] ) - if self.RoomRewards[ v:GetName() ] ~= nil then - print( "Room " .. v:GetName() .. " reward: " .. self.RoomRewards[ v:GetName() ] ) - end - end -end - --------------------------------------------------------------------------------- -function CAghanim:IsEncounterDefAppropriateForRoom( encounterDef, room ) - - if room:GetType() ~= encounterDef.nEncounterType then - return false - end - - local requiredDepth = room:GetDepth() - if ( requiredDepth < encounterDef.nMinDepth ) or ( requiredDepth > encounterDef.nMaxDepth ) then - return false - end - - return true - -end - --------------------------------------------------------------------------------- - --- Allocates the room layout -function CAghanim:AssignEncountersToRooms() - - local vecAlreadySelectedEncounters = {} - for k,room in pairs(self.rooms) do - - local vecEncounterOptions = {} - - while true do - - local bSkippedOptions = false - for encounterName,encounterDef in pairs(ENCOUNTER_DEFINITIONS) do - - if not self:IsEncounterDefAppropriateForRoom( encounterDef, room ) then - goto continue - end - - if vecAlreadySelectedEncounters[ encounterName ] == true then - bSkippedOptions = true - goto continue - end - - -- Make sure no room has the same encounter on both exits, - -- possible because we're shipping with only 3 options in act 3 - local vecSiblingRoomNames = self:GetSiblingRoomNames( room:GetName() ) - for s=1,#vecSiblingRoomNames do - local szOtherEncounterName = self.rooms[ vecSiblingRoomNames[s] ]:GetEncounterName() - if szOtherEncounterName == encounterName then - --print( "Suppressing duplicate encounter " .. szOtherEncounterName .. " in room " .. room:GetName() ) - goto continue - end - end - - table.insert( vecEncounterOptions, encounterName ) - ::continue:: - end - - if #vecEncounterOptions > 0 then - break - end - - -- This logic causes us to re-use encounters if we've already used them all once - if bSkippedOptions == false then - vecEncounterOptions = { "encounter_test_immediate_victory" } - break - else - for encounterName,encounterDef in pairs(ENCOUNTER_DEFINITIONS) do - - if self:IsEncounterDefAppropriateForRoom( encounterDef, room ) then - vecAlreadySelectedEncounters[ encounterName ] = nil - end - end - - end - end - - -- FOR DEBUGGING, USE A FIXED ENCOUNTER LAYOUT WITH SPECIFIC DUPES - if USE_ENCOUNTER_FIXED_LAYOUT == true then - vecEncounterOptions = { ENCOUNTER_FIXED_LAYOUT[room:GetName()] } - room.nRoomType = ENCOUNTER_DEFINITIONS[ vecEncounterOptions[1] ].nEncounterType - end - - if self._szDevEncounter and room:GetName() == "a1_2a" then - vecEncounterOptions = { self._szDevEncounter } - room.nRoomType = ENCOUNTER_DEFINITIONS[ vecEncounterOptions[1] ].nEncounterType - end - - if #vecEncounterOptions > 0 then - local nPick = self.hMapRandomStream:RandomInt( 1, #vecEncounterOptions ) - room:AssignEncounter( vecEncounterOptions[nPick] ) - vecAlreadySelectedEncounters[ vecEncounterOptions[nPick] ] = true - else - print( "Unable to find valid encounter for room " .. k ) - end - end -end - --------------------------------------------------------------------------------- - --- Sets up the spawn locations for the players -function CAghanim:SetupSpawnLocations() - - if ( not self.bMapFlipped ) then - return - end - - local hLeftEnt = Entities:FindByName( nil, "a1_1a_teamspawn_left" ) - if hLeftEnt == nil then - print( "Unable to find a1_1a_teamspawn_left" ) - end - - local hRightEnt = Entities:FindByName( nil, "a1_1a_teamspawn_right" ) - if hRightEnt == nil then - print( "Unable to find a1_1a_teamspawn_right" ) - end - - local vOffset = hRightEnt:GetAbsOrigin() - hLeftEnt:GetAbsOrigin() - - local hPlayerStarts = Entities:FindAllByClassname( "info_player_start_goodguys" ) - if #hPlayerStarts == 0 then - print( "Failed to find any info_player_start_goodguys entities" ) - end - - for i=1, #hPlayerStarts do - local vNewPosition = hPlayerStarts[i]:GetAbsOrigin() + vOffset - hPlayerStarts[i]:SetAbsOrigin( vNewPosition ) - end - - local entitiesToFlip = - { - "encounter_end_locator", - "encounter_boss_preview_locator", - "encounter_outpost_1_override", - "encounter_outpost_2_override", - } - - for i=1, #entitiesToFlip do - - local hLocator = Entities:FindByName( nil, entitiesToFlip[i] ) - if hLocator ~= nil then - local vNewPosition = hLocator:GetAbsOrigin() - vNewPosition.x = -vNewPosition.x - hLocator:SetAbsOrigin( vNewPosition ) - end - - end -end - --------------------------------------------------------------------------------- - -function CAghanim:FindRoomBySpawnGroupHandle( hSpawnGroupHandle ) - - for k,room in pairs(self.rooms) do - if room:GetSpawnGroupHandle() == hSpawnGroupHandle then - return room - end - end - - return nil -end - --------------------------------------------------------------------------------- - -function CAghanim:GetExitOptionData( nOptionNumber ) - - if self:GetCurrentRoom() == nil then - print( "GetExitOptionData has no room") - return nil - end - - local exits = {} - local exitDirections = {} - local exitLocations = {} - - for direction=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - - local room = self:GetCurrentRoom():GetExit( direction ) - local vExitLocation = self:GetCurrentRoom():GetExitLocation( direction ) - if ( room ~= nil ) then - table.insert( exits, self:GetRoom( room ) ) - table.insert( exitDirections, direction ) - table.insert( exitLocations, vExitLocation ) - end - end - - -- No exits? we're done - if #exits == 0 then - return nil - end - - -- Gotta do this before we tweak the option number for the rest of this algorithm - local hOverrideLocators = self:GetCurrentRoom():FindAllEntitiesInRoomByName( "encounter_outpost_" .. nOptionNumber .. "_override" ) - - if ( nOptionNumber > #exits ) then - nOptionNumber = #exits - end - - local hRequestedExit = exits[nOptionNumber] - local strPreviewUnit = hRequestedExit:GetEncounter():GetPreviewUnit() - local hAscensionAbilities = hRequestedExit:GetEncounter():GetAscensionAbilities() - local szAscensionAbilities = "" - for i = 1,#hAscensionAbilities do - if i ~= 1 then - szAscensionAbilities = szAscensionAbilities .. ";" - end - szAscensionAbilities = szAscensionAbilities .. hAscensionAbilities[i] - end - - local exitData = - { - nExitDirection = exitDirections[nOptionNumber], - vExitLocation = exitLocations[nOptionNumber], - szEncounterPreviewUnit = strPreviewUnit, - flEncounterPreviewModelScale = ENCOUNTER_PREVIEW_SCALES[ strPreviewUnit ], - nEncounterType = hRequestedExit:GetType(), - bIsEliteEncounter = ( hRequestedExit:GetEliteRank() > 0 ), - szNextRoomName = hRequestedExit:GetName(), - szRewardType = hRequestedExit:GetRoomChoiceReward(), - szEncounterName = hRequestedExit:GetEncounter():GetName(), - szAscensionNames = szAscensionAbilities, - nExitCount = #exits, - nDepth = hRequestedExit:GetDepth(), - flZOffset = 0, - } - - --if self:GetCurrentRoom():GetExitReward( nOptionNumber ) then --- print( "Exit option " .. nOptionNumber .. " for room " .. self:GetCurrentRoom().szRoomName .. " has reward type " .. exits[nOptionNumber]:GetRoomChoiceReward() .. " in room " .. exits[nOptionNumber].szRoomName ) --- end - - if exitData.flEncounterPreviewModelScale == nil then - exitData.flEncounterPreviewModelScale = 1.0 - end - - if #hOverrideLocators > 0 then - exitData.vOverrideLocation = hOverrideLocators[1]:GetAbsOrigin() - end - - if exits[nOptionNumber]:IsHidden() then - exitData.szEncounterPreviewUnit = "models/ui/exclamation/questionmark.vmdl" - exitData.flEncounterPreviewModelScale = 0.0015 - if exitData.nEncounterType == ROOM_TYPE_TRAPS then - exitData.bIsEliteEncounter = hRequestedExit:ShouldDisplayHiddenAsElite() - end - exitData.nEncounterType = ROOM_TYPE_ENEMY - exitData.flZOffset = 25 - end - - return exitData -end - --------------------------------------------------------------------------------- - -function CAghanim:OnNextRoomSelected( event ) - self:GetCurrentRoom():OnNextRoomSelected( event.selected_room ) -end - --------------------------------------------------------------------------------- - --- Evaluate the state of the game -function CAghanim:OnThink() - - local nGameState = GameRules:State_Get() - if nGameState == DOTA_GAMERULES_STATE_HERO_SELECTION then - self:ComputeHasNewPlayers() - if not self.bStreamedStartingRoomExits then - -- Stream the starting room exits here so people don't have to wait for those - -- First exits to appear, gives more time for the streamer to do its work too - self.bStreamedStartingRoomExits = true - local room = self:GetStartingRoom() - if room ~= nil then - self:SetCurrentRoom( room ) - room:LoadExitRooms() - end - end - elseif nGameState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then - if self:GetCurrentRoom() and self:GetCurrentRoom():GetEncounter() and self:GetCurrentRoom():GetEncounter():HasStarted() and self:GetCurrentRoom():GetEncounter():NeedsToThink() then - self:GetCurrentRoom():GetEncounter():OnThink() - self:_CheckForDefeat() - end - elseif nGameState >= DOTA_GAMERULES_STATE_POST_GAME then - return nil - end - - --CustomNetTables:SetTableValue( "special_ability_upgrades", tostring( 0 ), SPECIAL_ABILITY_UPGRADES[szHeroName] ) - return 1 -end - --------------------------------------------------------------------------------- --- --------------------------------------------------------------------------------- -function CAghanim:ForceAssignHeroes() - - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - local hPlayer = PlayerResource:GetPlayer( nPlayerID ) - if hPlayer and not PlayerResource:HasSelectedHero( nPlayerID ) then - hPlayer:MakeRandomHeroSelection() - end - end - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:SetCurrentRoom( hRoom ) - if hRoom ~= self.CurrentRoom then - self.CurrentRoom = hRoom - self.flCurrentRoomChangeTime = GameRules:GetGameTime() - - for k,v in pairs ( self.rooms ) do - v:SendRoomToClient() - end - - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - self:RegisterEncounterStartStats( nPlayerID, hRoom:GetDepth() ) - end - end - - end -end - --------------------------------------------------------------------------------- - -function CAghanim:GetCurrentRoom() - return self.CurrentRoom -end - --------------------------------------------------------------------------------- - -function CAghanim:GetCurrentRoomChangeTime() - return self.flCurrentRoomChangeTime -end - --------------------------------------------------------------------------------- - -function CAghanim:GetRoom( szRoomName ) - return self.rooms[ szRoomName ] -end - --------------------------------------------------------------------------------- - -function CAghanim:GetRoomList() - return self.rooms -end - --------------------------------------------------------------------------------- - -function CAghanim:FindRoomForPoint( vPoint ) - for _,room in pairs(self.rooms) do - if room:IsInRoomBounds( vPoint ) then - return room - end - end - return nil -end - --------------------------------------------------------------------------------- - -function CAghanim:GetMaxDepth() - return self.nMaxDepth -end - --------------------------------------------------------------------------------- - -function CAghanim:IsMapFlipped() - return self.bMapFlipped -end - - -------------------------------------------------------------------------------- - -function CAghanim:GetBossUnitForAct( nAct ) - for _,room in pairs(self.rooms) do - if room:GetType() == ROOM_TYPE_BOSS then - if room:GetAct() == nAct then - return room:GetEncounter():GetPreviewUnit() - end - end - end - - return nil -end - --------------------------------------------------------------------------------- - -function CAghanim:AddFowOutlineBlocker( vMins, vMaxs ) - self.hFowBlockerRegion:AddRectangularOutlineBlocker( vMins, vMaxs, false ) -end - --------------------------------------------------------------------------------- - -function CAghanim:ClearFowBlockers( vMins, vMaxs ) - self.hFowBlockerRegion:AddRectangularBlocker( vMins, vMaxs, true ) -end - --------------------------------------------------------------------------------- - -function CAghanim:AddMinorAbilityUpgrade( hHero, upgradeTable ) - print( "Adding minor ability upgrade for playerID " .. hHero:GetPlayerOwnerID() ) - --PrintTable( upgradeTable, "upgrade" ) - - if hHero.MinorAbilityUpgrades == nil then - hHero.MinorAbilityUpgrades = {} - end - - local szAbilityName = upgradeTable[ "ability_name" ] - if hHero.MinorAbilityUpgrades[ szAbilityName ] == nil then - hHero.MinorAbilityUpgrades[ szAbilityName ] = {} - end - - local szSpecialValueName = upgradeTable[ "special_value_name" ] - if hHero.MinorAbilityUpgrades[ szAbilityName ][ szSpecialValueName ] == nil then - hHero.MinorAbilityUpgrades[ szAbilityName ][ szSpecialValueName ] = {} - end - - local newUpgradeTable = {} - newUpgradeTable[ "operator" ] = upgradeTable[ "operator" ] - newUpgradeTable[ "value" ] = upgradeTable[ "value" ] - table.insert( hHero.MinorAbilityUpgrades[ szAbilityName ][ szSpecialValueName ], newUpgradeTable ) - - CustomNetTables:SetTableValue( "minor_ability_upgrades", tostring( hHero:GetPlayerOwnerID() ), hHero.MinorAbilityUpgrades ) - - --PrintTable( hHero.MinorAbilityUpgrades, " -- " ) - - local Buff = hHero:FindModifierByName( "modifier_minor_ability_upgrades" ) - if Buff == nil then - print( "Error - No minor ability upgrade buff!" ) - return - end - Buff:ForceRefresh() -end --------------------------------------------------------------------------------- - -function CAghanim:VerifyStatsAbility( hHero, szAbilityName ) - --print( "Verifying stats upgrade for playerID " .. hHero:GetPlayerOwnerID() ) - if hHero == nil or szAbilityName == nil then - return - end - - local hAbility = hHero:FindAbilityByName(szAbilityName) - if hAbility == nil then - hAbility = hHero:AddAbility(szAbilityName) - hAbility:UpgradeAbility( true ) - --printf("Adding Stats Ability...", szAbilityName) - end - - -- Currently there's only one buff for all the stats, so just refresh it here. - -- If we decide to spread them out, the buffs should be refreshed based on their ability. - local StatsBuff = hHero:FindModifierByName( "modifier_aghsfort_minor_stats_upgrade" ) - if StatsBuff == nil then - print( "Error - No minor ability upgrade buff!" ) - return - end - StatsBuff:ForceRefresh() - - return - - -end - --------------------------------------------------------------------------------- - -function CAghanim:GetFragmentDropEV() - local fDropEV = 0 - for _, odds in pairs( ARCANE_FRAGMENT_RANDOM_DROP_CHANCES ) do - fDropEV = fDropEV + ( ( odds.high_chance - odds.low_chance ) * odds.num_fragments ) - end - fDropEV = fDropEV / 100 - - print( 'CAghanim:GetFragmentDropEV() calculated an average number of drops: ' .. fDropEV ) - - return fDropEV -end - --------------------------------------------------------------------------------- - -function CAghanim:RollRandomFragmentDrops() - local fRoll = RandomFloat( 0, 100.0 ) - print( 'CAghanim:RollRandomFragmentDrops() rolled a ' .. fRoll ) - - for _, odds in pairs( ARCANE_FRAGMENT_RANDOM_DROP_CHANCES ) do - if fRoll >= odds.low_chance and fRoll <= odds.high_chance then - print( 'CAghanim:RollRandomFragmentDrops() selecting ' .. odds.num_fragments .. ' fragment drops for this room' ) - return odds.num_fragments - end - end - - print( 'WARNING: CAghanim:RollRandomFragmentDrops() did not find a valid entry for this roll ' .. fRoll ) - return 0 -end - --------------------------------------------------------------------------------- - -function CAghanim:RollRandomNeutralItemDrops( hEncounter ) - if self.nNumNeutralItems <= 0 then - return 0 - end - - local nPctChance = ( 100 * self.nNumNeutralItems ) / self.nNumViableRoomsForItems - local nItemsToDrop = 0 - while hEncounter:RoomRandomInt( 1, 100 ) < nPctChance do - nItemsToDrop = nItemsToDrop + 1 - - if nItemsToDrop == 2 then - break - end - - local nRemainingItems = self.nNumNeutralItems - nItemsToDrop - if nRemainingItems < self.nNumViableRoomsForItems then - nPctChance = PCT_BASE_TWO_ITEM_DROP - else - nPctChance = ( nRemainingItems / self.nNumViableRoomsForItems ) * 100 - end - end - - nItemsToDrop = math.min( self.nNumNeutralItems, nItemsToDrop ) - self.nNumNeutralItems = self.nNumNeutralItems - nItemsToDrop - self.nNumViableRoomsForItems = self.nNumViableRoomsForItems - 1 - return nItemsToDrop -end - - --------------------------------------------------------------------------------- - -function CAghanim:PrepareNeutralItemDrop( hRoom, bElite ) - - local nDepth = hRoom:GetDepth() - local vecPotentialItems = GetPricedNeutralItems( nDepth, bElite ) - local vecFilteredItems = GameRules.Aghanim:FilterPreviouslyDroppedItems( vecPotentialItems ) - - local vecTable = vecFilteredItems - if #vecTable == 0 then - print( "WARNING! All potential items have been dropped, falling back to original depth list. ") - vecTable = vecPotentialItems - if #vecPotentialItems == 0 then - print( "WARNING! trying to drop a neutral item in a place where there is no priced list, depth " .. nDepth ) - return nil - end - end - - local szItemDrop = vecFilteredItems[ hRoom:RoomRandomInt( 1, #vecFilteredItems ) ] - if szItemDrop == nil then - return nil - end - - if self:GetTestEncounterDebugRoom() ~= nil then - print( "adding neutral item to debug crate:" .. szItemDrop ) - table.insert( self.debugItemsToStuffInCrate.RoomReward, szItemDrop ) - end - - self:MarkNeutralItemAsDropped( szItemDrop ) - return szItemDrop -end - --------------------------------------------------------------------------------- - -function CAghanim:MarkNeutralItemAsDropped( szItemName ) - table.insert( self.DroppedNeutralItems, szItemName ) -end - --------------------------------------------------------------------------------- - -function CAghanim:FilterPreviouslyDroppedItems( vecPotentialItems ) - for i = #vecPotentialItems,1,-1 do - local szItemName = vecPotentialItems[ i ] - for _,szDroppedItemName in pairs ( self.DroppedNeutralItems ) do - if szItemName == szDroppedItemName then - table.remove( vecPotentialItems, i ) - end - end - end - - return vecPotentialItems -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterSummonForAghanim( nDepth, szUnitName ) - local Summon = {} - Summon[ "depth" ] = nDepth - Summon[ "unit_name" ] = szUnitName - table.insert( self.AghanimSummons, Summon ) -end - --------------------------------------------------------------------------------- - -function CAghanim:GetSummonsForAghanim() - return self.AghanimSummons -end - --------------------------------------------------------------------------------- - -function CAghanim:InitializeMetagame() - self.SignOutTable = {} - self.SignOutTable[ "event_name" ] = "aghanim" - self.SignOutTable[ "player_list" ] = {} - self.SignOutTable[ "team_depth_list" ] = {} - - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - local SignOutPlayer = - { - steam_id = 0, - hero_id = 0, - battle_points = 0, - arcane_fragments = 0, - bonus_arcane_fragments = 0, - current_ascension_level = 0, - blessings = {}, - depth_list = {}, - } - table.insert( self.SignOutTable[ "player_list" ], nPlayerID, SignOutPlayer ) - - local netTable = {} - netTable[ "arcane_fragments" ] = 0 - netTable[ "battle_points" ] = 0 - CustomNetTables:SetTableValue( "currency_rewards", tostring( nPlayerID ), netTable ) - end -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterEncounterStats( stats ) - - if stats.selectedRoom == nil and stats.unselectedRoom == nil then - return - end - - local depthInfo = {} - - if stats.selectedRoom ~= nil then - depthInfo.selected_encounter = stats.selectedRoom.szEncounterName - depthInfo.selected_elite = stats.selectedRoom.bIsElite - depthInfo.selected_hidden = stats.selectedRoom.bIsHidden - depthInfo.selected_reward = stats.selectedRoom.szReward - depthInfo.selected_encounter_type = stats.selectedRoom.nRoomType - - if stats.selectedRoom.ascensionAbilities ~= nil and #stats.selectedRoom.ascensionAbilities > 0 then - depthInfo.ascension_abilities = {} - for i=1,#stats.selectedRoom.ascensionAbilities do - local szAscensionAbility = stats.selectedRoom.ascensionAbilities[i] - depthInfo.ascension_abilities[ szAscensionAbility ] = GetAbilityTextureNameForAbility( szAscensionAbility ) - end - end - - end - - if stats.unselectedRoom ~= nil then - depthInfo.unselected_encounter = stats.unselectedRoom.szEncounterName - depthInfo.unselected_elite = stats.unselectedRoom.bIsElite - depthInfo.unselected_hidden = stats.unselectedRoom.bIsHidden - depthInfo.unselected_reward = stats.unselectedRoom.szReward - end - - self.SignOutTable[ "team_depth_list" ][ stats.depth ] = depthInfo - -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterBlessingStat( nPlayerID, szBlessingName, nLevel, szActionName, nOrder ) - self.SignOutTable[ "player_list" ][ nPlayerID ].blessings[szBlessingName] = nLevel - - local blessings = CustomNetTables:GetTableValue( "game_global", "blessings" ) - if blessings[ tostring( nPlayerID) ] == nil then - blessings[ tostring( nPlayerID ) ] = {} - end - - blessings[ tostring( nPlayerID ) ][ szActionName ] = nOrder - CustomNetTables:SetTableValue( "game_global", "blessings", blessings ) -end - --------------------------------------------------------------------------------- - -function CAghanim:EnsurePlayerStatAtDepth( nPlayerID, szRoomDepth ) - - if self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth] == nil then - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth] = {} - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterRewardStats( nPlayerID, szRoomDepth, stats ) - - self:EnsurePlayerStatAtDepth( nPlayerID, szRoomDepth ) - - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].rarity = stats.selected_reward.rarity - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].selected_reward = stats.selected_reward.ability_name - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].selected_reward_value = stats.selected_reward.value - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].selected_reward_texture = stats.selected_reward.ability_texture - - for nIndex = 1,#stats.unselected_rewards do - local keyName = "unselected_reward" .. nIndex - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth][ keyName ] = stats.unselected_rewards[ nIndex ].ability_name - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterEncounterStartStats( nPlayerID, nDepth ) - - local szRoomDepth = tostring( nDepth ) - self:EnsurePlayerStatAtDepth( nPlayerID, szRoomDepth ) - - if self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].net_worth ~= nil then - return - end - - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].net_worth = PlayerResource:GetNetWorth( nPlayerID ) - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].level = PlayerResource:GetLevel( nPlayerID ) - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].death_count = 0 - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].kills = 0 - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].gold_bags = 0 - - --PrintTable( self.SignOutTable[ "player_list" ][ nPlayerID ] ) -end - --------------------------------------------------------------------------------- - -function CAghanim:RegisterPlayerDeathStat( nPlayerID, nDepth ) - - local scores = CustomNetTables:GetTableValue( "aghanim_scores", tostring(nPlayerID) ) - scores.death_count = scores.death_count + 1 - CustomNetTables:SetTableValue( "aghanim_scores", tostring(nPlayerID), scores ) - - local szRoomDepth = tostring( nDepth ) - self:EnsurePlayerStatAtDepth( nPlayerID, szRoomDepth ) - - if self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].death_count == nil then - return - end - - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].death_count = - self.SignOutTable[ "player_list" ][ nPlayerID ].depth_list[szRoomDepth].death_count + 1 - - --PrintTable( self.SignOutTable[ "player_list" ][ nPlayerID ] ) -end - --------------------------------------------------------------------------------- - -function CAghanim:GetConnectedPlayers( ) - local connectedPlayers = {} - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - if PlayerResource:IsValidPlayerID( nPlayerID ) and PlayerResource:GetConnectionState( nPlayerID ) ~= DOTA_CONNECTION_STATE_ABANDONED then - table.insert( connectedPlayers, nPlayerID ) - end - end - end - return connectedPlayers -end - --------------------------------------------------------------------------------- - -function CAghanim:GrantAllPlayersPoints( nPoints, bBattlePoints, szReason ) - - local vecPoints = {} - - local connectedPlayers = self:GetConnectedPlayers() - for i=1,#connectedPlayers do - local nPlayerID = connectedPlayers[i] - vecPoints[ tostring(nPlayerID) ] = self:GrantPlayerPoints( nPlayerID, nPoints, bBattlePoints, szReason ) - end - - return vecPoints - -end - --------------------------------------------------------------------------------- - -function CAghanim:GrantPlayerPoints( nPlayerID, nDesiredPoints, bBattlePoints, szReason ) - local Hero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - - -- Clamps the amount of points to the amount remaining - -- QUESTION: Should this also multiply the fragments by the bonus? - -- If so, we need to fix the GC to not do the 2x bonus grant, - -- or change the display to not match the underlying grant amount sent to the GC - local nPoints = self:RegisterCurrencyGrant( nPlayerID, nDesiredPoints, bBattlePoints ) - if nPoints == 0 then - return 0 - end - - local nDigits = string.len( tostring( nPoints ) ) - if bBattlePoints then - print ( "Awarding player " .. nPlayerID .. " " .. nPoints .. " battle points for " .. szReason ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "battle_points" ] = self.SignOutTable[ "player_list" ][ nPlayerID ][ "battle_points" ] + nPoints - if Hero then - local nFXIndex = ParticleManager:CreateParticleForPlayer( "particles/msg_fx/msg_bp.vpcf", PATTACH_CUSTOMORIGIN, nil, Hero:GetPlayerOwner() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, Hero, PATTACH_OVERHEAD_FOLLOW, nil, Hero:GetOrigin() + Vector( 0, 64, 96 ), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 0, nPoints, -1 ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 1.0, nDigits + 1, 0 ) ) - ParticleManager:SetParticleControl( nFXIndex, 3, Vector( 255, 255, 0 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local nFXIndex2 = ParticleManager:CreateParticleForPlayer( "particles/generic_gameplay/battle_point_splash.vpcf", PATTACH_WORLDORIGIN, nil, Hero:GetPlayerOwner() ) - ParticleManager:SetParticleControl( nFXIndex2, 1, Hero:GetOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - end - else - print ( "Awarding player " .. nPlayerID .. " " .. nPoints .. " arcane fragments for " .. szReason ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "arcane_fragments" ] = self.SignOutTable[ "player_list" ][ nPlayerID ][ "arcane_fragments" ] + nDesiredPoints - self.SignOutTable[ "player_list" ][ nPlayerID ][ "bonus_arcane_fragments" ] = self.SignOutTable[ "player_list" ][ nPlayerID ][ "bonus_arcane_fragments" ] + ( nPoints - nDesiredPoints ) - if Hero then - local nFXIndex = ParticleManager:CreateParticleForPlayer( "particles/msg_fx/msg_bp.vpcf", PATTACH_CUSTOMORIGIN, nil, Hero:GetPlayerOwner() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, Hero, PATTACH_OVERHEAD_FOLLOW, nil, Hero:GetOrigin() + Vector( 0, 64, 96 ), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 0, nPoints, -1 ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 1.0, nDigits + 1, 0 ) ) - ParticleManager:SetParticleControl( nFXIndex, 3, Vector( 0, 255, 255 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local nFXIndex2 = ParticleManager:CreateParticleForPlayer( "particles/generic_gameplay/arcane_fragments_splash.vpcf", PATTACH_WORLDORIGIN, nil, Hero:GetPlayerOwner() ) - ParticleManager:SetParticleControl( nFXIndex2, 1, Hero:GetOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - end - end - - local netTable = {} - netTable[ "arcane_fragments" ] = self.SignOutTable[ "player_list" ][ nPlayerID ][ "arcane_fragments" ] + self.SignOutTable[ "player_list" ][ nPlayerID ][ "bonus_arcane_fragments" ] - netTable[ "battle_points" ] = self.SignOutTable[ "player_list" ][ nPlayerID ][ "battle_points" ] - CustomNetTables:SetTableValue( "currency_rewards", tostring( nPlayerID ), netTable ) - - return nPoints - -end - - -------------------------------------------------------------------------------- - -function CAghanim:MarkGameWon() - self.bWonGame = true - - printf("======== ENDING GAME - VICTORY ==========\n"); - self:GetAnnouncer():OnGameWon() - GameRules.Aghanim:OnGameFinished() - GameRules:MakeTeamLose( DOTA_TEAM_BADGUYS ) -end - --------------------------------------------------------------------------------- - -function CAghanim:_CheckForDefeat() - if self.bPlayerHasSpawned == false then - return - end - - local bAnyHeroesAlive = false - local Heroes = HeroList:GetAllHeroes() - for _,Hero in pairs ( Heroes ) do - if Hero ~= nil then - -- TODO: make sure that servers will die when everyone DCs, since we don't want AFK checks for this mode - if Hero:IsRealHero() and Hero:GetTeamNumber() == DOTA_TEAM_GOODGUYS and - ( Hero:IsAlive() or Hero:IsReincarnating() or ( Hero:GetRespawnsDisabled() == false ) ) then - bAnyHeroesAlive = true - end - end - end - - if bAnyHeroesAlive == false then - printf("======== ENDING GAME ==========\n"); - self:GetAnnouncer():OnGameLost() - GameRules.Aghanim:OnGameFinished() - GameRules:MakeTeamLose( DOTA_TEAM_GOODGUYS ) - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:Dev_WinGame() - self:MarkGameWon() -end - --------------------------------------------------------------------------------- - -function CAghanim:Dev_WinEncounter() - if self:GetCurrentRoom() and self:GetCurrentRoom():IsActivated() and self:GetCurrentRoom():GetEncounter() then - self:GetCurrentRoom():GetEncounter():Dev_ForceCompleteEncounter() - else - printf( "ERROR - win_encounter command failed" ) - end -end - --------------------------------------------------------------------------------- - -function CAghanim:Dev_SetAscensionLevel( cmdName, szLevel ) - local nLevel = tonumber( szLevel ) - self:SetAscensionLevel( nLevel ) -end - --------------------------------------------------------------------------------- - -function CAghanim:Dev_SetNewPlayers( cmdName, szNewPlayers ) - self.bHasAnyNewPlayers = tonumber( szNewPlayers ) > 0 -end - --------------------------------------------------------------------------------- - -function CAghanim:Dev_ExtraLives() - - local nPlayerID = Entities:GetLocalPlayer():GetPlayerID() - - --for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - -- if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero ~= nil then - printf("adding lives to %d", nPlayerID) - hPlayerHero.nRespawnsRemaining = math.min( AGHANIM_MAX_LIVES, hPlayerHero.nRespawnsRemaining + 1 ) - CustomGameEventManager:Send_ServerToPlayer( hPlayerHero:GetPlayerOwner(), "gained_life", {} ) - CustomNetTables:SetTableValue( "respawns_remaining", string.format( "%d", hPlayerHero:entindex() ), { respawns = hPlayerHero.nRespawnsRemaining } ) - end - - --end - --end -end - --------------------------------------------------------------------------------- - -function CAghanim:Dev_TestEncounter( cmdName, szEncounterName, szIsElite ) - - local nEliteDepthBonus = 0 - if szIsElite ~= nil then - nEliteDepthBonus = tonumber( szIsElite ) - if nEliteDepthBonus > 0 then - nEliteDepthBonus = 1 - end - end - - local encounterDef = ENCOUNTER_DEFINITIONS[ szEncounterName ] - if encounterDef == nil then - printf( "%s: Invalid encounter %s", cmdName, szEncounterName ) - return - end - - local nRoomDepth = encounterDef.nMinDepth - - local hFinalRoom = self:GetCurrentRoom() - if hFinalRoom == nil then - printf( "%s: Can't use since we're still loading", cmdName ) - return - end - - local nCurrDepth = hFinalRoom:GetDepth() - - if nRoomDepth <= nCurrDepth then - printf( "%s: You're already at the same or lower depth %d than you requested [%d]", cmdName, nCurrDepth, nRoomDepth ) - return - end - - printf( "Running %s %s %d %d [%s %d]...", cmdName, szEncounterName, nRoomDepth, nEliteDepthBonus, hFinalRoom:GetName(), nCurrDepth ) - - -- Find the room we will do the encounter in, as well as the previous room - self.testEncounter = - { - hPrevPrevRoom = nil, - hPrevRoom = nil, - hFinalRoom = hFinalRoom, - rewardClaimList = {}, - } - - self.debugItemsToStuffInCrate = - { - RoomReward = {} - } - - for i=nCurrDepth+1, nRoomDepth do - - -- Find the first valid exit - self.testEncounter.hPrevPrevRoom = self.testEncounter.hPrevRoom - self.testEncounter.hPrevRoom = self.testEncounter.hFinalRoom - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = self.testEncounter.hPrevRoom:GetExit( nExitDirection ) - if szExitRoomName ~= nil then - self.testEncounter.hFinalRoom = GameRules.Aghanim:GetRoom( szExitRoomName ) - if self.testEncounter.hFinalRoom:GetDepth() ~= i then - print( "unexpected depth in room " .. self.testEncounter.hFinalRoom:GetName() ) - end - table.insert( self.testEncounter.rewardClaimList, self.testEncounter.hFinalRoom ) - break - end - end - - end - - -- Don't claim the room we're going to, not should we claim the one right before the selected room; - -- we're going to Dev_WinEncounter that one after teleporting there - - -- This is the target room - table.remove( self.testEncounter.rewardClaimList, #self.testEncounter.rewardClaimList ) - - -- This is the room before the target room - if #self.testEncounter.rewardClaimList > 0 then - table.remove( self.testEncounter.rewardClaimList, #self.testEncounter.rewardClaimList ) - end - - -- Win the current room assuming we haven't already won - if self:GetCurrentRoom():GetDepth() ~= 1 and self:GetCurrentRoom():GetEncounter():IsComplete() == false then - self:Dev_WinEncounter() - self:GetCurrentRoom():GetEncounter():TryCompletingMapEncounter() - self:GetCurrentRoom():GetEncounter():GenerateRewards() - end - - -- Change the encounter in the final room to the desired one - self.testEncounter.hFinalRoom:SetEliteDepthBonus( nEliteDepthBonus ) - self.testEncounter.hFinalRoom:AssignEncounter( szEncounterName ) - self.testEncounter.hFinalRoom:GetEncounter():SelectAscensionAbilities() - - -- We're going to be teleporting into the previous room, so we need to stream that in - if self.testEncounter.hPrevPrevRoom ~= nil then - self.testEncounter.hPrevPrevRoom:LoadExitRooms() - end - - -- Also start the previous room streaming in the final room. Note that this can - -- be done simultaneously as the prev prev room, since once LoadExitRooms was called, - -- the system knows the height of the maps to spawn to correct connect to prev prev - -- NOTE that if hPrevRoom == the current room, this will be the second call to - -- LoadExitRooms on the same room, but the code is tolerant of that - self.testEncounter.hPrevRoom:LoadExitRooms() - - -- Next we must start a think function where we do two things - -- 1) Wait for the exit rooms to be loaded - -- 2) Make all players claim rewards for all intervening rooms - GameRules:GetGameModeEntity():SetThink( "OnTestEncounterThink", self, "TestEncounterThink", 0.5 ) - -end - --------------------------------------------------------------------------------- - -function CAghanim:GrantEstimatedRoomRewards( hRoom ) - - local nMinValue, nMaxValue = GetMinMaxGoldChoiceReward( hRoom:GetEncounter():GetDepth(), false ) - local nQuantity = math.random( nMinValue, nMaxValue ) / 3 -- *1/3 since it's 1/3 likely you'll pick it - - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - PlayerResource:ModifyGold( nPlayerID, nQuantity, true, DOTA_ModifyGold_Unspecified ) - end - end - -end - --------------------------------------------------------------------------------- - -function CAghanim:DetermineRewardSelectionState() - - local CurrentRoom = CustomNetTables:GetTableValue( "reward_options", "current_depth" ) - if CurrentRoom == nil then - return nil - end - - local szRoomDepth = CurrentRoom["1"]; - local rewardOptions = CustomNetTables:GetTableValue( "reward_options", szRoomDepth ) - if rewardOptions == nil then - return nil - end - - local netTable = CustomNetTables:GetTableValue( "reward_choices", szRoomDepth ) - if netTable == nil then - return nil - end - - local vecPlayerIDs = self:GetConnectedPlayers( ) - if #vecPlayerIDs == 0 then - return nil - end - - local rewardState = {} - for i=1,#vecPlayerIDs do - local nPlayerID = vecPlayerIDs[i] - local bHasChosen = ( netTable[ tostring(nPlayerID) ] ~= nil ) - rewardState[ tostring(nPlayerID) ] = bHasChosen - end - - return rewardState -end - --------------------------------------------------------------------------------- - -function CAghanim:HaveAllRewardsBeenSelected() - - local CurrentRoom = CustomNetTables:GetTableValue( "reward_options", "current_depth" ) - if CurrentRoom == nil then - return false - end - - local szRoomDepth = CurrentRoom["1"]; - - --print( "HaveAllRewardsBeenSelected depth " .. szRoomDepth ) - - -- Some depths don't give rewards. If we hit this, then it's ok; exit out. - local rewardOptions = CustomNetTables:GetTableValue( "reward_options", szRoomDepth ) - if rewardOptions == nil then - return true - end - - --print( "Waiting for choices " ) - - -- Check to see if all players have made choices yet at the current depth - local netTable = CustomNetTables:GetTableValue( "reward_choices", szRoomDepth ) - if netTable == nil then - return false - end - - local vecPlayerIDs = self:GetConnectedPlayers( ) - for i=1,#vecPlayerIDs do - local nPlayerID = vecPlayerIDs[i] - if netTable[ tostring(nPlayerID) ] == nil then - --print( "Player not done choosing " .. nPlayerID ) - return false - end - end - - return true -end - - --------------------------------------------------------------------------------- - -function CAghanim:OnTestEncounterThink() - - -- First handle all rewards being selected - local CurrentRoom = CustomNetTables:GetTableValue( "reward_options", "current_depth" ) - if CurrentRoom == nil then - return 1 - end - - local szRoomDepth = CurrentRoom["1"]; - - --print( "OnTestEncounterThink depth " .. szRoomDepth ) - - if self:HaveAllRewardsBeenSelected() == false then - return 1 - end - - -- Once all players have made a choice, deal with claiming the next depth - --print( "Claiming next depth " ) - if #self.testEncounter.rewardClaimList > 0 then - --print( "Claiming rewards for room " .. self.testEncounter.rewardClaimList[1]:GetName() .. " depth " .. self.testEncounter.rewardClaimList[1]:GetDepth() ) - if ( tonumber( szRoomDepth ) + 1 ) ~= self.testEncounter.rewardClaimList[1]:GetDepth() then - printf( "Warning!! Unexpected depth in claim list [was %d, expected %d]!!", self.testEncounter.rewardClaimList[1]:GetDepth(), tonumber( szRoomDepth ) + 1 ) - end - - local hRoom = self.testEncounter.rewardClaimList[1] - hRoom:GetEncounter():RegisterSummonForAghanim() - hRoom:GetEncounter():GenerateRewards() - self:GrantEstimatedRoomRewards( hRoom ) - table.remove( self.testEncounter.rewardClaimList, 1 ) - - if self.bFastTestEncounter == true then - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - -- Select the first option for each player - local hChoice = - { - PlayerID = nPlayerID, - room_depth = hRoom:GetDepth(), - reward_index = 1, - } - OnRewardChoice( nil, hChoice ) - end - end - end - - return 1 - end - - -- If we're here, then all players have selected all rewards - -- Next handle streaming of the rooms - if self.testEncounter.hPrevPrevRoom ~= nil then - --print( "Testing for stream in" .. self.testEncounter.hPrevPrevRoom:GetName() ) - if not self.testEncounter.hPrevPrevRoom:AreAllExitRoomsReady() then - return 1 - end - - --print( "Selected " .. self.testEncounter.hPrevPrevRoom:GetName() .. " -> " .. self.testEncounter.hPrevRoom:GetName() ) - self.testEncounter.hPrevPrevRoom:OnNextRoomSelected( self.testEncounter.hPrevRoom:GetName() ) - self.testEncounter.hPrevPrevRoom = nil - - -- Wait for a tick to make sure all the spawn group shenanigans are done so we can teleport in - return 1 - end - - if self:GetCurrentRoom() ~= self.testEncounter.hPrevRoom then - - if self.testEncounter.bHasTeleported then - return 1 - end - - --print( "Testing for stream in" .. self.testEncounter.hPrevRoom:GetName() ) - if not self.testEncounter.hPrevRoom:AreAllExitRoomsReady() then - return 1 - end - - -- teleport all players into the prev room, we're ready to go - local vTeleportTarget = self.testEncounter.hPrevRoom:GetOrigin() - local hEndLocators = self.testEncounter.hPrevRoom:FindAllEntitiesInRoomByName( "encounter_end_locator", true ) - if #hEndLocators > 0 then - vTeleportTarget = hEndLocators[1]:GetAbsOrigin() - end - - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero ~= nil then - FindClearSpaceForUnit( hPlayerHero, vTeleportTarget, true ) - CenterCameraOnUnit( nPlayerID, hPlayerHero ) - end - end - end - - self.testEncounter.bHasTeleported = true - return 1 - end - - -- Ok, we've teleported. Now we can finish the prev room and get its rewards - self:Dev_WinEncounter() - self.testEncounter = nil - - -- Disable thinking - return nil -end - -function CAghanim:GetTestEncounterDebugRoom() - if self.testEncounter == nil then - return nil - end - return self.testEncounter.hPrevRoom -end diff --git a/aghanim_singleplayer/scripts/vscripts/aghanim_ability_upgrade_constants.lua b/aghanim_singleplayer/scripts/vscripts/aghanim_ability_upgrade_constants.lua deleted file mode 100755 index 3bdd090..0000000 --- a/aghanim_singleplayer/scripts/vscripts/aghanim_ability_upgrade_constants.lua +++ /dev/null @@ -1,404 +0,0 @@ -LinkLuaModifier( "modifier_minor_ability_upgrades", "modifiers/modifier_minor_ability_upgrades", LUA_MODIFIER_MOTION_NONE ) - -_G.MINOR_ABILITY_UPGRADE_OP_ADD = 1 -_G.MINOR_ABILITY_UPGRADE_OP_MUL = 2 - - -_G.MINOR_ABILITY_UPGRADES = -{ - npc_dota_hero_magnataur = require( "minor_ability_upgrades/minor_ability_upgrades_magnataur" ), - npc_dota_hero_phantom_assassin = require( "minor_ability_upgrades/minor_ability_upgrades_phantom_assassin" ), - npc_dota_hero_snapfire = require( "minor_ability_upgrades/minor_ability_upgrades_snapfire" ), - npc_dota_hero_disruptor = require( "minor_ability_upgrades/minor_ability_upgrades_disruptor" ), - npc_dota_hero_winter_wyvern = require( "minor_ability_upgrades/minor_ability_upgrades_winter_wyvern" ), - npc_dota_hero_tusk = require( "minor_ability_upgrades/minor_ability_upgrades_tusk" ), - npc_dota_hero_ursa = require( "minor_ability_upgrades/minor_ability_upgrades_ursa" ), - npc_dota_hero_sniper = require( "minor_ability_upgrades/minor_ability_upgrades_sniper" ), - npc_dota_hero_mars = require( "minor_ability_upgrades/minor_ability_upgrades_mars" ), - npc_dota_hero_viper = require( "minor_ability_upgrades/minor_ability_upgrades_viper" ), - npc_dota_hero_weaver = require( "minor_ability_upgrades/minor_ability_upgrades_weaver" ), - npc_dota_hero_omniknight = require( "minor_ability_upgrades/minor_ability_upgrades_omniknight" ), - npc_dota_hero_witch_doctor = require( "minor_ability_upgrades/minor_ability_upgrades_witch_doctor" ), - - - --non hero specific upgrades (bonus HP/mana/damage/etc.) - base_stats_upgrades = require( "minor_ability_upgrades/base_minor_stats_upgrades" ), -} -_G.STAT_UPGRADE_EXCLUDES = -{ - npc_dota_hero_omniknight = - { - "aghsfort_minor_stat_upgrade_bonus_attack_speed", - }, - - npc_dota_hero_magnataur = - { - "aghsfort_minor_stat_upgrade_bonus_health", - }, - - npc_dota_hero_winter_wyvern = - { - "aghsfort_minor_stat_upgrade_bonus_evasion", - }, - - npc_dota_hero_disruptor = - { - "aghsfort_minor_stat_upgrade_bonus_evasion", - }, - - npc_dota_hero_snapfire = - { - "aghsfort_minor_stat_upgrade_bonus_evasion", - }, - - npc_dota_hero_tusk = - { - "aghsfort_minor_stat_upgrade_bonus_health", - }, - - npc_dota_hero_ursa = - { - "aghsfort_minor_stat_upgrade_bonus_spell_amp", - }, - - npc_dota_hero_sniper = - { - "aghsfort_minor_stat_upgrade_bonus_evasion", - }, - - npc_dota_hero_mars = - { - "aghsfort_minor_stat_upgrade_bonus_health", - }, - - npc_dota_hero_viper = - { - "aghsfort_minor_stat_upgrade_bonus_magic_resist", - }, - - npc_dota_hero_weaver = - { - "aghsfort_minor_stat_upgrade_bonus_spell_amp", - }, - - npc_dota_hero_witch_doctor = - { - "aghsfort_minor_stat_upgrade_bonus_attack_damage", - "aghsfort_minor_stat_upgrade_bonus_evasion", - }, -} - -_G.ULTIMATE_ABILITY_NAMES = -{ - npc_dota_hero_omniknight = "omniknight_guardian_angel", - npc_dota_hero_magnataur = "magnataur_reverse_polarity_radius", - npc_dota_hero_phantom_assassin = "phantom_assassin_coup_de_grace", - npc_dota_hero_winter_wyvern = "winter_wyvern_winters_curse", - npc_dota_hero_disruptor = "disruptor_static_storm", - npc_dota_hero_snapfire = "snapfire_mortimer_kisses", - npc_dota_hero_tusk = "tusk_walrus_punch", - npc_dota_hero_ursa = "ursa_enrage", - npc_dota_hero_sniper = "sniper_assassinate", - npc_dota_hero_mars = "mars_arena_of_blood", - npc_dota_hero_viper = "viper_viper_strike", - npc_dota_hero_weaver = "weaver_time_lapse", - npc_dota_hero_witch_doctor = "witch_doctor_death_ward", - -} - --- Lists for ability upgrades go here -_G.SPECIAL_ABILITY_UPGRADES = {} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_omniknight"] = -{ - -- "aghsfort_special_omniknight_purification_cast_radius", - "aghsfort_special_omniknight_purification_charges", - -- "aghsfort_special_omniknight_purification_cooldown_reduction", - "aghsfort_special_omniknight_purification_multicast", - - "aghsfort_special_omniknight_repel_procs_purification", - "aghsfort_special_omniknight_repel_outgoing_damage", - --"aghsfort_special_omniknight_repel_applies_degen_aura", --needs some re-write to make it work in all cases and doesn't seem interesting anyway - "aghsfort_special_omniknight_repel_damage_instance_refraction", - "aghsfort_special_omniknight_repel_knockback_on_cast", - - "aghsfort_special_omniknight_degen_aura_toggle", - "aghsfort_special_omniknight_degen_aura_damage", - "aghsfort_special_omniknight_degen_aura_restoration", - - "aghsfort_special_omniknight_guardian_angel_purification", - -- "aghsfort_special_omniknight_guardian_angel_immune_flight", - --"aghsfort_special_omniknight_guardian_angel_single_target", - -- "aghsfort_special_omniknight_guardian_angel_single_target_dummy", - -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_magnataur"] = -{ - "aghsfort_special_magnataur_shockwave_multishot", - -- "aghsfort_special_magnataur_shockwave_damage_reduction", - "aghsfort_special_magnataur_shockwave_boomerang", - - -- "aghsfort_special_magnataur_empower_all_allies", - "aghsfort_special_magnataur_empower_lifesteal", - "aghsfort_special_magnataur_empower_shockwave_on_attack", - - --"aghsfort_special_magnataur_skewer_original_scepter", - --"aghsfort_special_magnataur_friendly_skewer", - "aghsfort_special_magnataur_skewer_bonus_strength", - -- "aghsfort_special_magnataur_skewer_heal", - "aghsfort_special_magnataur_skewer_shockwave", - - --"aghsfort_special_magnataur_reverse_polarity_radius", - -- "aghsfort_special_magnataur_reverse_polarity_polarity_dummy", - "aghsfort_special_magnataur_reverse_polarity_allies_crit", - "aghsfort_special_magnataur_reverse_polarity_steroid", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_phantom_assassin"] = -{ - -- "aghsfort_special_phantom_assassin_coup_de_grace_marks_target", - "aghsfort_special_phantom_assassin_coup_de_grace_bloody_debuff", - "aghsfort_special_phantom_assassin_coup_de_grace_kills_refresh", - - "aghsfort_special_phantom_assassin_stifling_dagger_no_secondary_dagger_restriction", - "aghsfort_special_phantom_assassin_stifling_dagger_on_attack", - "aghsfort_special_phantom_assassin_stifling_dagger_autodagger", - - "aghsfort_special_phantom_assassin_blur_regen_when_active", - -- "aghsfort_special_phantom_assassin_blur_dagger_on_end", - "aghsfort_special_phantom_assassin_blur_immediate", - - -- "aghsfort_special_phantom_assassin_phantom_strike_buff_allies", - "aghsfort_special_phantom_assassin_phantom_strike_mastery", - "aghsfort_special_phantom_assassin_phantom_strike_damage_reduction", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_luna"] = -{ - "omniknight_guardian_angel", - "aghsfort_special_omniknight_purification_cast_radius", - "omniknight_purification", -} - - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_winter_wyvern"] = -{ - "aghsfort_special_winter_wyvern_arctic_burn_splitshot", - -- "aghsfort_special_winter_wyvern_arctic_burn_doubleattack", - --"aghsfort_special_winter_wyvern_arctic_burn_nomana", - "aghsfort_special_winter_wyvern_arctic_burn_splash_damage", - - "aghsfort_special_winter_wyvern_splinter_blast_main_target_hit", - "aghsfort_special_winter_wyvern_splinter_blast_vacuum", - -- "aghsfort_special_winter_wyvern_splinter_blast_heal", - - -- "aghsfort_special_winter_wyvern_cold_embrace_charges", - "aghsfort_special_winter_wyvern_cold_embrace_blast_on_end", - "aghsfort_special_winter_wyvern_cold_embrace_magic_damage_block", - - "aghsfort_special_winter_wyvern_winters_curse_transfer", - "aghsfort_special_winter_wyvern_winters_curse_damage_amp", - -- "aghsfort_special_winter_wyvern_winters_curse_heal_on_death", -} - - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_disruptor"] = -{ - "aghsfort_special_disruptor_thunder_strike_interval_upgrade", - -- "aghsfort_special_disruptor_thunder_strike_mana_restore", - "aghsfort_special_disruptor_thunder_strike_crit_chance", - "aghsfort_special_disruptor_thunder_strike_on_attack", - --- "aghsfort_special_disruptor_glimpse_cast_aoe", - -- "aghsfort_special_disruptor_glimpse_hit_on_arrival", - -- "aghsfort_special_disruptor_glimpse_travel_damage", - - --"aghsfort_special_disruptor_kinetic_field_instant_setup", - "aghsfort_special_disruptor_kinetic_field_damage", - "aghsfort_special_disruptor_kinetic_field_allied_heal", - "aghsfort_special_disruptor_kinetic_field_allied_attack_buff", - "aghsfort_special_disruptor_kinetic_field_double_ring", - - "aghsfort_special_disruptor_static_storm_kinetic_field_on_cast", - "aghsfort_special_disruptor_static_storm_crits_on_attacks", - -- "aghsfort_special_disruptor_static_storm_damage_reduction", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_snapfire"] = -{ - "aghsfort_special_snapfire_scatterblast_double_barrel", - -- "aghsfort_special_snapfire_scatterblast_knockback", - -- "aghsfort_special_snapfire_scatterblast_fullrange_pointblank", - "aghsfort_special_snapfire_scatterblast_barrage", - - -- "aghsfort_special_snapfire_firesnap_cookie_multicookie", - -- "aghsfort_special_snapfire_firesnap_cookie_enemytarget", - "aghsfort_special_snapfire_firesnap_cookie_allied_buff", - - "aghsfort_special_snapfire_lil_shredder_explosives", - -- "aghsfort_special_snapfire_lil_shredder_ally_cast", - "aghsfort_special_snapfire_lil_shredder_bouncing_bullets", - - "aghsfort_special_snapfire_mortimer_kisses_fragmentation", --- "aghsfort_special_snapfire_mortimer_kisses_fire_trail", - "aghsfort_special_snapfire_mortimer_kisses_autoattack", - "aghsfort_special_snapfire_mortimer_kisses_incoming_damage_reduction", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_tusk"] = -{ - "aghsfort_special_tusk_ice_shards_circle", - -- "aghsfort_special_tusk_ice_shards_secondary", - "aghsfort_special_tusk_ice_shards_explode", - "aghsfort_special_tusk_ice_shards_stun", - - -- "aghsfort_special_tusk_snowball_heal", - "aghsfort_special_tusk_snowball_end_damage", - -- "aghsfort_special_tusk_snowball_global", - - "aghsfort_special_tusk_tag_team_lifesteal", - "aghsfort_special_tusk_tag_team_toggle", - -- "aghsfort_special_tusk_tag_team_global", - - "aghsfort_special_tusk_walrus_punch_reset", - "aghsfort_special_tusk_walrus_punch_land_damage", - "aghsfort_special_tusk_walrus_punch_wallop", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_ursa"] = -{ - "aghsfort_special_ursa_earthshock_invis", - "aghsfort_special_ursa_earthshock_knockback", - "aghsfort_special_ursa_earthshock_apply_fury_swipes", - "aghsfort_special_ursa_earthshock_overpower_stack", - --"aghsfort_special_ursa_earthshock_apply_fury_swipes", -- bugged - - "aghsfort_special_ursa_overpower_crit", - -- "aghsfort_special_ursa_overpower_evasion", - "aghsfort_special_ursa_overpower_cleave", - -- "aghsfort_special_ursa_overpower_taunt", - - "aghsfort_special_ursa_fury_swipes_armor_reduction", - "aghsfort_special_ursa_fury_swipes_lifesteal", - -- "aghsfort_special_ursa_fury_swipes_ursa_minor", - - --"aghsfort_special_ursa_enrage_magic_immunity", - -- "aghsfort_special_ursa_enrage_allies", - -- "aghsfort_special_ursa_enrage_fear", - "aghsfort_special_ursa_enrage_earthshock", - "aghsfort_special_ursa_enrage_attack_speed", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_sniper"] = -{ - "aghsfort_special_sniper_shrapnel_bombs", - "aghsfort_special_sniper_shrapnel_attack_speed", - "aghsfort_special_sniper_shrapnel_miss_chance", - --"aghsfort_special_sniper_shrapnel_move_speed", - - "aghsfort_special_sniper_headshot_crits", - -- "aghsfort_special_sniper_headshot_stuns", - - "aghsfort_special_sniper_take_aim_self_purge", - --"aghsfort_special_sniper_take_aim_aoe", -- bugged - "aghsfort_special_sniper_take_aim_hop_backwards", - "aghsfort_special_sniper_take_aim_armor_reduction", - -- "aghsfort_special_sniper_take_aim_rapid_fire", - - "aghsfort_special_sniper_assassinate_buckshot", - -- "aghsfort_special_sniper_assassinate_original_scepter", - -- "aghsfort_special_sniper_assassinate_killshot", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_mars"] = -{ - "aghsfort_special_mars_spear_multiskewer", - "aghsfort_special_mars_spear_impale_explosion", - "aghsfort_special_mars_spear_burning_trail", - - "aghsfort_special_mars_gods_rebuke_full_circle", - "aghsfort_special_mars_gods_rebuke_stun", - "aghsfort_special_mars_gods_rebuke_strength_buff", - - --"aghsfort_special_mars_bulwark_counter_rebuke", - --"aghsfort_special_mars_bulwark_healing", - "aghsfort_special_mars_bulwark_return", - "aghsfort_special_mars_bulwark_spears", - -- "aghsfort_special_mars_bulwark_soldiers", - - "aghsfort_special_mars_arena_of_blood_outside_perimeter", - --"aghsfort_special_mars_arena_of_blood_fear", - "aghsfort_special_mars_arena_of_blood_global", - -- "aghsfort_special_mars_arena_of_blood_attack_buff", -} -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_viper"] = -{ - "aghsfort_special_viper_poison_attack_spread", - "aghsfort_special_viper_poison_attack_explode", - "aghsfort_special_viper_poison_snap", - - "aghsfort_special_viper_nethertoxin_lifesteal", - "aghsfort_special_viper_nethertoxin_charges", - "aghsfort_special_viper_nethertoxin_persist", - - -- "aghsfort_special_viper_corrosive_skin_speed_steal", - "aghsfort_special_viper_corrosive_skin_flying", - -- "aghsfort_special_viper_corrosive_skin_aura", - - -- "aghsfort_special_viper_viper_strike_allies", - --"aghsfort_special_viper_channeled_viper_strike", - "aghsfort_special_viper_periodic_strike", - "aghsfort_special_viper_chain_viper_strike", -} - - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_weaver"] = -{ - -- "aghsfort_special_weaver_swarm_allies", - "aghsfort_special_weaver_swarm_explosion", - "aghsfort_special_weaver_swarm_damage_transfer", - - "aghsfort_special_weaver_geminate_attack_splitshot", - "aghsfort_special_weaver_geminate_attack_applies_swarm", - "aghsfort_special_weaver_geminate_attack_lifesteal", - -- "aghsfort_special_weaver_geminate_attack_knockback", - - - - -- "aghsfort_special_weaver_shukuchi_pull", - "aghsfort_special_weaver_shukuchi_trail", - -- "aghsfort_special_weaver_shukuchi_heal", - "aghsfort_special_weaver_shukuchi_attack_on_completion", - "aghsfort_special_weaver_shukuchi_swarm", - --"aghsfort_special_weaver_shukuchi_greater_invisibility", - - -- "aghsfort_special_weaver_time_lapse_allies", - -- "aghsfort_special_weaver_time_lapse_restoration", - "aghsfort_special_weaver_time_lapse_explosion", -} - -SPECIAL_ABILITY_UPGRADES["npc_dota_hero_witch_doctor"] = -{ - - "aghsfort_special_witch_doctor_paralyzing_cask_multicask", - "aghsfort_special_witch_doctor_paralyzing_cask_applies_maledict", - "aghsfort_special_witch_doctor_paralyzing_cask_aoe_damage", - "aghsfort_special_witch_doctor_paralyzing_cask_attack_procs", - - --"aghsfort_special_witch_doctor_maledict_ground_curse", - "aghsfort_special_witch_doctor_maledict_aoe_procs", - "aghsfort_special_witch_doctor_maledict_death_restoration", - -- "aghsfort_special_witch_doctor_maledict_affects_allies", - "aghsfort_special_witch_doctor_maledict_infectious", - - "aghsfort_special_witch_doctor_voodoo_restoration_enemy_damage", - -- "aghsfort_special_witch_doctor_voodoo_restoration_lifesteal", - "aghsfort_special_witch_doctor_voodoo_restoration_damage_amp", - -- "aghsfort_special_witch_doctor_voodoo_restoration_mana_restore", - - "aghsfort_special_witch_doctor_death_ward_no_channel", - "aghsfort_special_witch_doctor_death_ward_splitshot", - "aghsfort_special_witch_doctor_death_ward_damage_resist", - --"aghsfort_special_witch_doctor_death_ward_bounce", -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/aghanim_ability_upgrade_interface.lua b/aghanim_singleplayer/scripts/vscripts/aghanim_ability_upgrade_interface.lua deleted file mode 100755 index 082ae7e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/aghanim_ability_upgrade_interface.lua +++ /dev/null @@ -1,40 +0,0 @@ --------------------------------------------------------------------------------- - -function CAghanim:OnAbilityUpgradeButtonClicked( eventSourceIndex, data ) - -- Grants the - local nPlayerID = data["PlayerID"] - local szAbilityName = data["AbilityName"] - local bIsLevelReward = data["LevelReward"] - --print ("OnAbilityUpgradeButtonClicked", nPlayerID, szAbilityName, bIsLevelReward, self.bTestingAbilityUpgrades) - if bIsLevelReward == true or self.bTestingAbilityUpgrades == true then - if nPlayerID ~= nil and szAbilityName ~= nil then - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero ~= nil then - CustomGameEventManager:Send_ServerToAllClients( "special_ability_upgrades_button_clicked", data ) - if ( hPlayerHero:FindAbilityByName(szAbilityName) ~= nil ) then - -- Only grant an ability once (can be changed if necessary) - hPlayerHero:RemoveAbility(szAbilityName) - --print ("Removing ability:", szAbilityName) - else - local hNewAbility = hPlayerHero:AddAbility( szAbilityName ) - if ( hNewAbility ) then - -- Grants and upgrades the ability - hNewAbility:UpgradeAbility( false ) - --print ("Adding new ability", szAbilityName) - end - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CAghanim:TestAbilityUpgradesUICC ( cmdName, bVisible ) - -- Enables the button to open the dev upgrade UI - print ("TestAbilityUpgradesUI Enabled ") - - self.bTestingAbilityUpgrades = true - CustomGameEventManager:Send_ServerToAllClients( "special_ability_upgrades_enabled", {} ) - -end diff --git a/aghanim_singleplayer/scripts/vscripts/aghanim_utility_functions.lua b/aghanim_singleplayer/scripts/vscripts/aghanim_utility_functions.lua deleted file mode 100755 index 368a609..0000000 --- a/aghanim_singleplayer/scripts/vscripts/aghanim_utility_functions.lua +++ /dev/null @@ -1,111 +0,0 @@ -function GetAliveHeroesInRoom( ) - - local heroes = {} - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero and hPlayerHero:IsAlive() and GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( hPlayerHero:GetAbsOrigin() ) then - table.insert( heroes, hPlayerHero ) - end - end - end - - return heroes - -end - -function GetAliveHeroes( ) - - local heroes = {} - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero and hPlayerHero:IsAlive() then - table.insert( heroes, hPlayerHero ) - end - end - end - - return heroes - -end - -function FindRandomPointInRoom( vSourcePos, nMinDistance, nMaxDistance ) - - local nAttempts = 0 - local nMaxAttempts = 16 - - while nAttempts < nMaxAttempts do - local vPos = vSourcePos + RandomVector( RandomFloat( nMinDistance, nMaxDistance ) ) - if GameRules.Aghanim:GetCurrentRoom():IsValidSpawnPoint( vPos ) then - return vPos - end - nAttempts = nAttempts + 1 - end - - -- Failed, just return the center of the room, + randomness - return GameRules.Aghanim:GetCurrentRoom():GetOrigin() + RandomVector( RandomFloat( 0, 500 ) ) - -end - -function FindPathablePositionNearby( vSourcePos, nMinDistance, nMaxDistance ) - local vPos = FindRandomPointInRoom( vSourcePos, nMinDistance, nMaxDistance ) - - local nAttempts = 0 - local nMaxAttempts = 7 - - while ( ( not GridNav:CanFindPath( vSourcePos, vPos ) ) and ( nAttempts < nMaxAttempts ) ) do - vPos = FindRandomPointInRoom( vSourcePos, nMinDistance, nMaxDistance ) - nAttempts = nAttempts + 1 - end - - return vPos -end - ---------------------------------------------------------------------------- - -function LaunchGoldBag( nGoldAmount, vDropPos, vDropTarget ) - - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem.nGoldAmount = nGoldAmount - - -- curve fitting black magic - local flGoldBagScale = 40.63019 + (-0.4869773 - 40.63019)/(1 + math.pow(nGoldAmount/7576116000, 0.1814258)) - - flGoldBagScale = math.min( flGoldBagScale, 3) - flGoldBagScale = math.max( flGoldBagScale, 0.7) - - local newItemPhysical = CreateItemOnPositionSync( vDropPos, newItem ) - newItemPhysical:SetModelScale( flGoldBagScale ) - - if vDropTarget == nil then - vDropTarget = FindRandomPointInRoom( vDropPos, 100, 150 ) - end - - newItem:LaunchLoot( true, 75, 0.75, vDropTarget ) - - return newItem -end - --------------------------------------------------------------------------------- - -function FindRealLivingEnemyHeroesInRadius( nFriendlyTeamNumber, vPosition, flRange ) - - local hRealHeroes = {} - - local hEnemies = FindUnitsInRadius( nFriendlyTeamNumber, vPosition, nil, flRange, - DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, - DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS, FIND_CLOSEST, false ) - - for _,hHero in pairs(hEnemies) do - if hHero:IsAlive() and hHero:IsRealHero() and not hHero:IsTempestDouble() and not hHero:IsClone() then - table.insert( hRealHeroes, hHero ) - end - end - - return hRealHeroes - -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_assault_captain.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_assault_captain.lua deleted file mode 100755 index 7fe00fe..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_assault_captain.lua +++ /dev/null @@ -1,203 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.fOrigModelScale = thisEntity:GetModelScale() - - thisEntity:AddNewModifier( nil, nil, "modifier_phased", { duration = -1 } ) - - thisEntity.hSunRayAbility = thisEntity:FindAbilityByName( "assault_captain_sun_ray" ) - thisEntity.hChainsAbility = thisEntity:FindAbilityByName( "assault_captain_searing_chains" ) - - thisEntity:SetContextThink( "AssaultCaptainThink", AssaultCaptainThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function Precache( context ) - PrecacheResource( "particle", "particles/creeps/lane_creeps/creep_dire_hulk_swipe_right.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ember_spirit/ember_spirit_searing_chains_start.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ember_spirit/ember_spirit_searing_chains_cast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ember_spirit/ember_spirit_searing_chains_debuff.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function AssaultCaptainThink() - if not IsServer() then - return - end - - -- Search for items here instead of in Spawn, because they don't seem to exist yet when Spawn runs - if not thisEntity.bSearchedForItems then - SearchForItems() - thisEntity.bSearchedForItems = true - end - - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - --[[ - if thisEntity.fLastSearingCast then - print( "last searing cast: " .. thisEntity.fLastSearingCast ) - end - - if thisEntity.fLastSearingCast ~= nil and GameRules:GetGameTime() > ( thisEntity.fLastSearingCast + 1 ) then - ParticleManager:DestroyParticle( thisEntity.nPreviewFX, false ) - thisEntity.fLastSearingCast = nil - end - ]] - - if thisEntity:HasModifier( "modifier_phoenix_sun_ray" ) then - return 0.25 - else - thisEntity:SetModelScale( thisEntity.fOrigModelScale ) - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1200, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_FARTHEST, false ) - if #hEnemies == 0 then - return 0.5 - end - - if thisEntity.hChainsAbility ~= nil and thisEntity.hChainsAbility:IsFullyCastable() then - if ( thisEntity:GetHealthPercent() < 95 ) then - return CastSearingChains() - end - end - - local hSunRayTarget = nil - for _, hEnemy in pairs( hEnemies ) do - if hEnemy and hEnemy:IsAlive() and hEnemy:IsRealHero() then - if hEnemy:HasModifier( "modifier_ember_spirit_searing_chains" ) or hEnemy:HasModifier( "modifier_rod_of_atos_debuff" ) then - hSunRayTarget = hEnemy - break - end - end - end - - if hSunRayTarget ~= nil and thisEntity.hSunRayAbility ~= nil and thisEntity.hSunRayAbility:IsFullyCastable() then - if ( thisEntity:GetHealthPercent() < 95 ) then - return CastSunRay( hSunRayTarget ) - end - end - - --[[ - if thisEntity.hRodOfAtosAbility and thisEntity.hRodOfAtosAbility:IsFullyCastable() then - if ( thisEntity:GetHealthPercent() < 100 ) then - print( "try to use atos" ) - return UseRodOfAtos( hEnemies[ RandomInt( 1, #hEnemies ) ] ) - end - end - ]] - - if thisEntity.hBlademailAbility and thisEntity.hBlademailAbility:IsFullyCastable() then - if ( thisEntity:GetHealthPercent() < 80 ) then - return UseBlademail() - end - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function SearchForItems() - for i = 0, 5 do - local item = thisEntity:GetItemInSlot( i ) - if item then - if item:GetAbilityName() == "item_blade_mail" then - thisEntity.hBlademailAbility = item - end - if item:GetAbilityName() == "item_rod_of_atos" then - thisEntity.hRodOfAtosAbility = item - end - end - end -end - --------------------------------------------------------------------------------- - -function CastSunRay( hEnemy ) - thisEntity:SetModelScale( 2 ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hEnemy:GetOrigin(), - AbilityIndex = thisEntity.hSunRayAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - --------------------------------------------------------------------------------- - - -function CastSearingChains() - if IsServer() then - --[[ - print( "creating a warning particle" ) - thisEntity.fLastSearingCast = GameRules:GetGameTime() - thisEntity.nPreviewFX = ParticleManager:CreateParticle( "particles/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, thisEntity ) - ParticleManager:SetParticleControlEnt( thisEntity.nPreviewFX, 0, thisEntity, PATTACH_ABSORIGIN_FOLLOW, nil, thisEntity:GetOrigin(), true ) - ParticleManager:SetParticleControl( thisEntity.nPreviewFX, 1, Vector( 120, 120, 120 ) ) - ParticleManager:SetParticleControl( thisEntity.nPreviewFX, 15, Vector( 180, 40, 10 ) ) - ]] - end - - --thisEntity:SetSequence( "hit" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hChainsAbility:entindex(), - Queue = false, - }) - - return 0.75 -end - --------------------------------------------------------------------------------- - -function UseRodOfAtos( hEnemy ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hEnemy:entindex(), - AbilityIndex = thisEntity.hRodOfAtosAbility:entindex(), - Queue = false, - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function UseBlademail() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hBlademailAbility:entindex(), - Queue = false, - }) - - return 2 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_catapult.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_catapult.lua deleted file mode 100755 index a77215c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_catapult.lua +++ /dev/null @@ -1,108 +0,0 @@ ---[[ -Catapult AI -]] - -function Spawn( entityKeyValues ) - if IsServer() == false then - return - end - thisEntity:SetContextThink( "CatapultAIThink", CatapultAIThink, 0.25 ) - - thisEntity.hEntityKilledGameEvent = ListenToGameEvent( "entity_killed", Dynamic_Wrap( thisEntity:GetPrivateScriptScope(), 'OnEntityKilled' ), nil ) -end - -function UpdateOnRemove() - StopListeningToGameEvent( thisEntity.hEntityKilledGameEvent ) -end - -function Precache( context ) - PrecacheResource( "particle", "particles/creatures/catapult/catapult_projectile.vpcf", context ) - PrecacheResource( "particle", "particles/siege_fx/siege_bad_death_01.vpcf", context ) -end - - -function CatapultAIThink() - if IsServer() == false then - return - end - - s_AbilityCatapultAttack = thisEntity:FindAbilityByName( "catapult_attack" ) - - -- Get the current time - local currentTime = GameRules:GetGameTime() - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1500, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #enemies == 0 then - return 1 - end - - - if s_AbilityCatapultAttack ~= nil and s_AbilityCatapultAttack:IsCooldownReady() then - - local radius = s_AbilityCatapultAttack:GetSpecialValueFor("explosion_radius") - local minRange = s_AbilityCatapultAttack:GetSpecialValueFor("mindistance") - local range = s_AbilityCatapultAttack:GetCastRange() - local nMaxAdjacentEnemies = 0 - local bestEnemy = nil - - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsAlive() then - local flDistToEnemy = #(thisEntity:GetOrigin() - enemy:GetOrigin()) - if range > flDistToEnemy and minRange < flDistToEnemy then - local nAdjacentEnemies = 1 - for _,adjacentEnemy in pairs( enemies ) do - if adjacentEnemy ~= nil and adjacentEnemy ~= enemy and adjacentEnemy:IsAlive() then - local vSeparation = enemy:GetOrigin() - adjacentEnemy:GetOrigin() - local flDistBetweenEnemies = #vSeparation - if flDistBetweenEnemies < radius then - nAdjacentEnemies = nAdjacentEnemies + 1 - end - end - end - - if nMaxAdjacentEnemies < nAdjacentEnemies or ( nMaxAdjacentEnemies == nMaxAdjacentEnemies and RandomInt( 0,1 ) == 1 ) then - nMaxAdjacentEnemies = nAdjacentEnemies - bestEnemy = enemy - end - end - end - end - - if bestEnemy ~= nil then - return CatapultAttack( bestEnemy ) - end - end - - return 1.0 -end - -function CatapultAttack( enemy ) - local order = {} - order.UnitIndex = thisEntity:entindex() - order.OrderType = DOTA_UNIT_ORDER_CAST_POSITION - order.Position = enemy:GetOrigin() - order.AbilityIndex = s_AbilityCatapultAttack:entindex() - ExecuteOrderFromTable( order ) - - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 2.0 } ) - - return 3.5 -end - -function OnEntityKilled( event ) - local hVictim = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - - if hVictim ~= thisEntity then - return - end - - EmitSoundOn( "Creep_Siege_Dire.Destruction", hVictim ) - - hVictim:AddEffects( EF_NODRAW ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/siege_fx/siege_bad_death_01.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hVictim, PATTACH_ABSORIGIN, nil, hVictim:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_core.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_core.lua deleted file mode 100755 index 084da2e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_core.lua +++ /dev/null @@ -1,162 +0,0 @@ ---[[ -Tower Defense AI - -These are the valid orders, in case you want to use them (easier here than to find them in the C code): - -DOTA_UNIT_ORDER_NONE -DOTA_UNIT_ORDER_MOVE_TO_POSITION -DOTA_UNIT_ORDER_MOVE_TO_TARGET -DOTA_UNIT_ORDER_ATTACK_MOVE -DOTA_UNIT_ORDER_ATTACK_TARGET -DOTA_UNIT_ORDER_CAST_POSITION -DOTA_UNIT_ORDER_CAST_TARGET -DOTA_UNIT_ORDER_CAST_TARGET_TREE -DOTA_UNIT_ORDER_CAST_NO_TARGET -DOTA_UNIT_ORDER_CAST_TOGGLE -DOTA_UNIT_ORDER_HOLD_POSITION -DOTA_UNIT_ORDER_TRAIN_ABILITY -DOTA_UNIT_ORDER_DROP_ITEM -DOTA_UNIT_ORDER_GIVE_ITEM -DOTA_UNIT_ORDER_PICKUP_ITEM -DOTA_UNIT_ORDER_PICKUP_RUNE -DOTA_UNIT_ORDER_PURCHASE_ITEM -DOTA_UNIT_ORDER_SELL_ITEM -DOTA_UNIT_ORDER_DISASSEMBLE_ITEM -DOTA_UNIT_ORDER_MOVE_ITEM -DOTA_UNIT_ORDER_CAST_TOGGLE_AUTO -DOTA_UNIT_ORDER_STOP -DOTA_UNIT_ORDER_TAUNT -DOTA_UNIT_ORDER_BUYBACK -DOTA_UNIT_ORDER_GLYPH -DOTA_UNIT_ORDER_EJECT_ITEM_FROM_STASH -DOTA_UNIT_ORDER_CAST_RUNE -]] - -AICore = {} - -behaviorSystem = {} -- create the global so we can assign to it - -function AICore:RandomEnemyHeroInRange( entity, range ) - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, entity:GetOrigin(), entity, range, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, 0, 0, false ) - if #enemies > 0 then - local index = RandomInt( 1, #enemies ) - return enemies[index] - else - return nil - end -end - -function AICore:ClosestEnemyHeroInRange( entity, range ) - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, entity:GetOrigin(), entity, range, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies > 0 then - return enemies[1] - else - return nil - end -end - -function AICore:WeakestEnemyHeroInRange( entity, range ) - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, entity:GetOrigin(), entity, range, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, 0, 0, false ) - - local minHP = nil - local target = nil - - for _,enemy in pairs(enemies) do - local distanceToEnemy = (entity:GetOrigin() - enemy:GetOrigin()):Length() - local HP = enemy:GetHealth() - if enemy:IsAlive() and (minHP == nil or HP < minHP) and distanceToEnemy < range then - minHP = HP - target = enemy - end - end - - return target -end - -function AICore:CreateBehaviorSystem( hEntity, behaviors ) - - local BehaviorSystem = {} - - BehaviorSystem.hEntity = hEntity - BehaviorSystem.possibleBehaviors = behaviors - BehaviorSystem.thinkDuration = 0.3 - - BehaviorSystem.currentBehavior = - { - } - BehaviorSystem.currentOrder = { OrderType = DOTA_UNIT_ORDER_NONE } - - function BehaviorSystem:Think( ) - -- Don't do anything if we're in the middle of casting something - if self.hEntity:GetCurrentActiveAbility() ~= nil or GameRules:IsGamePaused() then - return 0.1 - end - - local bIsDone = self.currentBehavior.IsDone == nil or self.currentBehavior:IsDone() - local newOrder = nil - if bIsDone then - local newBehavior = self:ChooseNextBehavior() - if newBehavior == nil then - -- Do nothing here... this covers possible problems with ChooseNextBehavior - elseif newBehavior == self.currentBehavior then - newOrder = self.currentBehavior:Continue() - else - if self.currentBehavior.End then - self.currentBehavior:End() - end - self.currentBehavior = newBehavior - newOrder = self.currentBehavior:Begin() - end - else - if self.currentBehavior.Think then - newOrder = self.currentBehavior:Think() - end - end - - if newOrder ~= nil and newOrder.OrderType ~= DOTA_UNIT_ORDER_NONE then - if self.currentOrder.OrderType ~= newOrder.OrderType or - self.currentOrder.TargetIndex ~= newOrder.TargetIndex or - self.currentOrder.AbilityIndex ~= newOrder.AbilityIndex or - self.currentOrder.Position ~= newOrder.Position then - - --print( "Executing Order " .. tostring(newOrder.OrderType) .. "->" .. tostring(newOrder.TargetIndex).. "->" .. tostring(newOrder.AbilityIndex) .. "->" .. tostring( newOrder.Position ) ) - ExecuteOrderFromTable( newOrder ) - self.currentOrder = newOrder - end - end - - return self.thinkDuration - end - - function BehaviorSystem:ChooseNextBehavior() - local result = nil - local bestDesire = nil - for _,behavior in pairs( self.possibleBehaviors ) do - local thisDesire = behavior:Evaluate() - if bestDesire == nil or thisDesire > bestDesire then - result = behavior - bestDesire = thisDesire - end - end - - return result - end - - function BehaviorSystem:Deactivate() - if self.currentBehavior.End then - self.currentBehavior:End() - end - end - - function BehaviorSystem:Destroy() - for _,behavior in pairs( self.possibleBehaviors ) do - if behavior.Destroy then - behavior:Destroy() - end - end - - return result - end - - return BehaviorSystem -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_dire_hound_boss.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_dire_hound_boss.lua deleted file mode 100755 index aae1e95..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_dire_hound_boss.lua +++ /dev/null @@ -1,96 +0,0 @@ - -function Spawn( entityKeyValues ) - if thisEntity == nil then - return - end - - QuillAttack = thisEntity:FindAbilityByName( "ranged_quill_attack" ) - thisEntity:SetContextThink( "DireHoundBossThink", DireHoundBossThink, 1 ) -end - -function DireHoundBossThink() - if GameRules:IsGamePaused() == true then - return 1 - end - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1250, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #enemies == 0 then - return 1 - end - - local hAttackTarget = nil - local hApproachTarget = nil - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsAlive() then - local flDist = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < 200 then - return Retreat( enemy ) - end - if flDist <= 1000 then - hAttackTarget = enemy - end - if flDist > 1000 then - hApproachTarget = enemy - end - end - end - - - - if hAttackTarget == nil and hApproachTarget ~= nil then - return Approach( hApproachTarget ) - end - - if QuillAttack:IsCooldownReady() then - return Attack( hAttackTarget ) - end - - thisEntity:FaceTowards( hAttackTarget:GetOrigin() ) - return 0.5 -end - -function Attack(unit) - thisEntity.bMoving = false - - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.1 } ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = QuillAttack:entindex(), - Position = unit:GetOrigin(), - Queue = false, - }) - return 1 -end - - -function Approach(unit) - thisEntity.bMoving = true - - local vToEnemy = unit:GetOrigin() - thisEntity:GetOrigin() - vToEnemy = vToEnemy:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vToEnemy * thisEntity:GetIdealSpeed() - }) - return 1 -end - - - -function Retreat(unit) - thisEntity.bMoving = true - - local vAwayFromEnemy = thisEntity:GetOrigin() - unit:GetOrigin() - vAwayFromEnemy = vAwayFromEnemy:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vAwayFromEnemy * thisEntity:GetIdealSpeed() - }) - return 1.25 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_doom.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_doom.lua deleted file mode 100755 index 3e2b9da..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_doom.lua +++ /dev/null @@ -1,88 +0,0 @@ -require( "ai/shared" ) -require( "ai/ai_core" ) - --------------------------------------------------------------------------------- -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hInfernalBlade = thisEntity:FindAbilityByName( "creature_doom_infernal_blade" ) - thisEntity.nInfernalBladeSearchRange = 700 - - thisEntity.hDoomAbility = thisEntity:FindAbilityByName( "creature_doom_bringer_doom" ) - thisEntity.nDoomAbilitySearchRange = 800 - thisEntity.nDoomAbilityHealthPercentTrigger = 80 - - thisEntity:SetContextThink( "DoomThink", DoomThink, 1 ) -end - --------------------------------------------------------------------------------- - -function Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_doom_bringer/doom_infernal_blade_impact.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_doom_bringer/doom_infernal_blade_debuff.vpcf", context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_doom_bringer/doom_bringer_doom.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_doom.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_muted.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_break.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function DoomThink() - - local flNow = GameRules:GetGameTime() - - if thisEntity.hInfernalBlade and thisEntity.hInfernalBlade:IsFullyCastable() then - local hHeroes = GetEnemyHeroesInRange( thisEntity, thisEntity.nInfernalBladeSearchRange ) - - if #hHeroes > 0 then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hHeroes[1]:entindex(), - AbilityIndex = thisEntity.hInfernalBlade:entindex(), - Queue = false, - }) - end - - return 0.25 - end - - - if thisEntity.hDoomAbility and thisEntity.hDoomAbility:IsFullyCastable() and thisEntity:GetHealthPercent() < thisEntity.nDoomAbilityHealthPercentTrigger then - local hHeroes = GetEnemyHeroesInRange( thisEntity, thisEntity.nDoomAbilitySearchRange ) - - if #hHeroes > 0 then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hHeroes[1]:entindex(), - AbilityIndex = thisEntity.hDoomAbility:entindex(), - Queue = false, - }) - end - - return 0.25 - end - - - thisEntity.flLastAggroSwitch = thisEntity.flLastAggroSwitch and thisEntity.flLastAggroSwitch or 0 - - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 9000 ) - - if (flNow - thisEntity.flLastAggroSwitch) > 2 then - AttackTargetOrder( thisEntity, hTarget ) - thisEntity.flLastAggroSwitch = flNow - end - - return 0.25 -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_drow_ranger_miniboss.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_drow_ranger_miniboss.lua deleted file mode 100755 index eba7a90..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_drow_ranger_miniboss.lua +++ /dev/null @@ -1,291 +0,0 @@ - -require( "ai/boss_base" ) - --------------------------------------------------------------------------------- - -if CDrowRangerMiniboss == nil then - CDrowRangerMiniboss = class( {}, {}, CBossBase ) -end - --------------------------------------------------------------------------------- - -function Precache( context ) -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if IsServer() then - if thisEntity == nil then - return - end - - thisEntity.AI = CDrowRangerMiniboss( thisEntity, 1.0 ) - end -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:constructor( hUnit, flInterval ) - CBossBase.constructor( self, hUnit, flInterval ) - - self.bEnraged = false - self.nEnragePct = 33 - - self.bTriggerShadowBlade = false - self.nShadowBladeHealthTriggerPct = 75 - self.bTriggerEscape = false - - self.me:SetThink( "OnDrowRangerMinibossThink", self, "OnDrowRangerMinibossThink", self.flDefaultInterval ) -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:SetupAbilitiesAndItems() - CBossBase.SetupAbilitiesAndItems( self ) - - self.hGust = self.me:FindAbilityByName( "aghsfort_drow_ranger_wave_of_silence" ) - if self.hGust == nil then - print( 'CDrowRangerMiniboss - Unable to find ability aghsfort_drow_ranger_wave_of_silence') - else - self.hGust.Evaluate = self.EvaluateGust - self.AbilityPriority[ self.hGust:GetAbilityName() ] = 4 - end - - self.hMultishot = self.me:FindAbilityByName( "aghsfort_drow_ranger_multishot" ) - if self.hMultishot == nil then - print( 'CDrowRangerMiniboss - Unable to find ability aghsfort_drow_ranger_multishot') - else - self.hMultishot.Evaluate = self.EvaluateMultishot - self.AbilityPriority[ self.hMultishot:GetAbilityName() ] = 3 - end - - self.hHurricanePike = self.me:FindItemInInventory( "item_hurricane_pike" ) - if self.hHurricanePike == nil then - print( 'CDrowRangerMiniboss - Unable to find ability item_hurricane_pike') - else - self.hHurricanePike.Evaluate = self.EvaluateHurricanePike - self.AbilityPriority[ self.hHurricanePike:GetAbilityName() ] = 2 - end - - self.hShadowBlade = self.me:FindItemInInventory( "item_aghsfort_drow_ranger_invis_sword" ) - if self.hShadowBlade == nil then - print( 'CDrowRangerMiniboss - Unable to find ability item_aghsfort_drow_ranger_invis_sword') - else - self.hShadowBlade.Evaluate = self.EvaluateShadowBlade - self.AbilityPriority[ self.hShadowBlade:GetAbilityName() ] = 1 - end -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:OnDrowRangerMinibossThink() - return self:OnBaseThink() -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:OnFirstSeen() - CBossBase.OnFirstSeen( self ) -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:IsInvisible() - local hBuff = thisEntity:FindModifierByName( "modifier_item_invisibility_edge_windwalk" ) - return hBuff ~= nil -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:OnHealthPercentThreshold( nPct ) - CBossBase.OnHealthPercentThreshold( self, nPct ) - if nPct <= self.nEnragePct and self.bEnraged == false then - self.bEnraged = true - end - - if nPct <= self.nShadowBladeHealthTriggerPct then - print( 'Shadow Blade Health Trigger Hit at ' .. self.nShadowBladeHealthTriggerPct ) - self.nShadowBladeHealthTriggerPct = self.nShadowBladeHealthTriggerPct - 25 - self.bTriggerShadowBlade = true - end -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:EvaluateGust() - if self:IsInvisible() then - return nil - end - - local Enemies = shallowcopy( self.hPlayerHeroes ) - local nSearchRadius = self.hGust:GetCastRange() - printf( "EvaluateGust - nSearchRadius == %d", nSearchRadius ) - Enemies = GetEnemyHeroesInRange( thisEntity, nSearchRadius ) - --Enemies = FilterEntitiesOutsideOfRange( self.me:GetAbsOrigin(), Enemies, nSearchRadius ) - - local Order = nil - if #Enemies >= 1 then - local hRandomEnemy = Enemies[ RandomInt( 1, #Enemies ) ] - local vTargetLocation = hRandomEnemy:GetAbsOrigin() - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hGust:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hGust ) - end - end - - --[[ - local vTargetLocation = GetBestDirectionalPointTarget( self.hGust ) - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hGust:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hGust ) - end - ]] - - return Order -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:EvaluateMultishot() - if self:IsInvisible() then - return nil - end - - local Enemies = shallowcopy( self.hPlayerHeroes ) - local nSearchRadius = self.hMultishot:GetSpecialValueFor( "effective_range" ) - --printf( "EvaluateMultishot - nSearchRadius == %d", nSearchRadius ) - Enemies = GetEnemyHeroesInRange( thisEntity, nSearchRadius ) - --Enemies = FilterEntitiesOutsideOfRange( self.me:GetAbsOrigin(), Enemies, nSearchRadius ) - - local Order = nil - if #Enemies >= 1 then - local hRandomEnemy = Enemies[ RandomInt( 1, #Enemies ) ] - local vTargetLocation = hRandomEnemy:GetAbsOrigin() - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hMultishot:entindex(), - Queue = false, - } - Order.flOrderInterval = self.hMultishot:GetChannelTime() - --print( 'ORDER INTERVAL for Multishot is ' .. Order.flOrderInterval ) - end - end - - -- need to get this entity to issue some command to select the exit portal after the cast - - return Order -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:EvaluateHurricanePike() - if self:IsInvisible() then - return nil - end - - local Enemies = shallowcopy( self.hPlayerHeroes ) - local nSearchRadius = self.hHurricanePike:GetCastRange() - printf( "EvaluateHurricanePike - nSearchRadius == %d", nSearchRadius ) - Enemies = GetEnemyHeroesInRange( thisEntity, nSearchRadius ) - --Enemies = FilterEntitiesOutsideOfRange( self.me:GetAbsOrigin(), Enemies, nSearchRadius ) - - local Order = nil - if #Enemies >= 1 then - local hRandomEnemy = Enemies[ RandomInt( 1, #Enemies ) ] - local vTargetLocation = hRandomEnemy:GetAbsOrigin() - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hRandomEnemy:entindex(), - AbilityIndex = self.hHurricanePike:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hHurricanePike ) - end - end - - return Order -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:EvaluateShadowBlade() - if self:IsInvisible() then - return nil - end - - local Order = nil - - if self.bTriggerShadowBlade == true then - print( 'Triggering Shadow Blade!' ) - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP, - Queue = false, - } - ExecuteOrderFromTable( Order ) - - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hShadowBlade:entindex(), - Queue = false, - } - Order.flOrderInterval = 1.0 - self.bTriggerShadowBlade = false - self.bTriggerEscape = true - end - - return Order -end - --------------------------------------------------------------------------------- - -function CDrowRangerMiniboss:GetNonAbilityOrder() - local Order = nil - - -- if we've successfully shadow bladed and we're ready to escape we should move somewhere else - if self:IsInvisible() and self.bTriggerEscape == true then - print( 'INVIS! Setting new escape location' ) - self.bTriggerEscape = false - local vEscapeLoc = FindPathablePositionNearby( thisEntity:GetAbsOrigin(), 1000, 2000 ) - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vEscapeLoc, - } - Order.flOrderInterval = 10.0 - - if self.Encounter ~= nil then - self.Encounter:OnDrowShadowBladed() - else - print( 'CDrowRangerMiniboss - ENCOUNTER IS NIL' ) - end - end - - return Order -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_drow_ranger_skeleton_archer.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_drow_ranger_skeleton_archer.lua deleted file mode 100755 index cd0e3a6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_drow_ranger_skeleton_archer.lua +++ /dev/null @@ -1,28 +0,0 @@ - -LinkLuaModifier( "modifier_drow_ranger_skeleton_archer", "modifiers/creatures/modifier_drow_ranger_skeleton_archer", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_clinkz/clinkz_burning_army_start.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_clinkz/clinkz_burning_army.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - -- reveal our position for spawning - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 0.5 } ) - - -- this modifier will kill them when it falls off - local flDuration = RandomFloat( 9, 12 ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_drow_ranger_skeleton_archer", { duration = flDuration } ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_pudge_miniboss.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_pudge_miniboss.lua deleted file mode 100755 index dfa77bd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_pudge_miniboss.lua +++ /dev/null @@ -1,78 +0,0 @@ -require( "ai/shared" ) -require( "ai/ai_core" ) - --------------------------------------------------------------------------------- -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - local hUnit = thisEntity - - thisEntity.hDismember = hUnit:FindAbilityByName( "creature_pudge_dismember" ) - - thisEntity:SetContextThink( "PudgeMinibossThink", PudgeMinibossThink, 1 ) -end - --------------------------------------------------------------------------------- -function PudgeMinibossThink() - - local hUnit = thisEntity - if hUnit:IsChanneling() then - return 0.25 - end - - if thisEntity.hPhaseBoots == nil then - - for j = 0,DOTA_ITEM_INVENTORY_SIZE-1 do - local hItem = thisEntity:GetItemInSlot( j ) - if hItem and hItem:GetAbilityName() == "item_phase_boots" then - thisEntity.hPhaseBoots = hItem - break - end - end - else - if thisEntity.hPhaseBoots:IsFullyCastable() then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hPhaseBoots:entindex(), - Queue = false, - }) - end - end - - local flNow = GameRules:GetGameTime() - - - if thisEntity.hDismember and thisEntity.hDismember:IsFullyCastable() then - local hHeroes = GetEnemyHeroesInRange( hUnit, 9000 ) - if #hHeroes >= 1 then - ExecuteOrderFromTable({ - UnitIndex = hUnit:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hHeroes[1]:entindex(), - AbilityIndex = thisEntity.hDismember:entindex(), - Queue = false, - }) - end - - else - hUnit.flLastAggroSwitch = hUnit.flLastAggroSwitch and hUnit.flLastAggroSwitch or 0 - - local hTarget = AICore:ClosestEnemyHeroInRange( hUnit, 9000 ) - - if (flNow - hUnit.flLastAggroSwitch) > 2 then - AttackTargetOrder( hUnit, hTarget ) - hUnit.flLastAggroSwitch = flNow - end - end - - return 0.25 -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_shadow_demon.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_shadow_demon.lua deleted file mode 100755 index a064654..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_shadow_demon.lua +++ /dev/null @@ -1,202 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - --thisEntity.hShadowPoisonAbility = thisEntity:FindAbilityByName( "aghsfort_shadow_demon_shadow_poison" ) - thisEntity.hDisruptionAbility = thisEntity:FindAbilityByName( "aghsfort_shadow_demon_disruption" ) - if thisEntity.hDisruptionAbility == nil then - print( 'MISSING aghsfort_shadow_demon_disruption on shadow demon ai' ) - end - - thisEntity.flRetreatRange = 500 - thisEntity.flAttackRange = 850 - thisEntity.flDisruptionDelayTime = GameRules:GetGameTime() + RandomFloat( 7, 12 ) -- need to live for this long before we can think about casting disruption - thisEntity.PreviousOrder = "no_order" - - thisEntity:SetContextThink( "ShadowDemonThink", ShadowDemonThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function ShadowDemonThink() - if not IsServer() then - return - end - - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return HoldPosition() - end - - local hAttackTarget = nil - local hApproachTarget = nil - for _, hEnemy in pairs( hEnemies ) do - if hEnemy ~= nil and hEnemy:IsAlive() then - local flDist = ( hEnemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < thisEntity.flRetreatRange then - if ( thisEntity.fTimeOfLastRetreat and ( GameRules:GetGameTime() < thisEntity.fTimeOfLastRetreat + 3 ) ) then - -- We already retreated recently, so just attack - hAttackTarget = hEnemy - else - return Retreat( hEnemy ) - end - end - if flDist <= thisEntity.flAttackRange then - hAttackTarget = hEnemy - end - if flDist > thisEntity.flAttackRange then - hApproachTarget = hEnemy - end - end - end - - if hAttackTarget == nil and hApproachTarget ~= nil then - return Approach( hApproachTarget ) - end - - if thisEntity.hDisruptionAbility ~= nil and thisEntity.hDisruptionAbility:IsFullyCastable() then - --print( 'disruption check' ) - if GameRules:GetGameTime() > thisEntity.flDisruptionDelayTime and hAttackTarget then - --print( 'Shadow Demon using Disruption on ENEMY!' ) - return CastDisruption( hAttackTarget ) - end - end ---[[ - if hAttackTarget and thisEntity.hShadowPoisonAbility ~= nil and thisEntity.hShadowPoisonAbility:IsFullyCastable() then - return CastPoison( hAttackTarget ) - end ---]] - if hAttackTarget then - thisEntity:FaceTowards( hAttackTarget:GetOrigin() ) - --return HoldPosition() - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastPoison( hEnemy ) - --print( "ai_shadow_demon - CastPoison" ) - - local fDist = ( hEnemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - local vTargetPos = hEnemy:GetOrigin() ---[[ - if ( fDist > 400 ) and hEnemy and hEnemy:IsMoving() then - local vLeadingOffset = hEnemy:GetForwardVector() * RandomInt( 200, 400 ) - vTargetPos = hEnemy:GetOrigin() + vLeadingOffset - end ---]] - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetPos, - AbilityIndex = thisEntity.hShadowPoisonAbility:entindex(), - Queue = false, - }) - - thisEntity.PreviousOrder = "poison" - - return 1 -end - --------------------------------------------------------------------------------- - -function CastDisruption( hEnemy ) - --print( "ai_shadow_demon - CastDisruption" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hEnemy:entindex(), - AbilityIndex = thisEntity.hDisruptionAbility:entindex(), - Queue = false, - }) - - thisEntity.PreviousOrder = "disruption" - - return 1 -end - --------------------------------------------------------------------------------- - -function Approach(unit) - --print( "ai_shadow_demon - Approach" ) - - local vToEnemy = unit:GetOrigin() - thisEntity:GetOrigin() - vToEnemy = vToEnemy:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity:GetOrigin() + vToEnemy * thisEntity:GetIdealSpeed() - }) - - thisEntity.PreviousOrder = "approach" - - return 1 -end - --------------------------------------------------------------------------------- - -function Retreat(unit) - --print( "ai_shadow_demon - Retreat" ) - - local vAwayFromEnemy = thisEntity:GetOrigin() - unit:GetOrigin() - vAwayFromEnemy = vAwayFromEnemy:Normalized() - local vMoveToPos = thisEntity:GetOrigin() + vAwayFromEnemy * thisEntity:GetIdealSpeed() - - -- if away from enemy is an unpathable area, find a new direction to run to - local nAttempts = 0 - while ( ( not GridNav:CanFindPath( thisEntity:GetOrigin(), vMoveToPos ) ) and ( nAttempts < 5 ) ) do - vMoveToPos = thisEntity:GetOrigin() + RandomVector( thisEntity:GetIdealSpeed() ) - nAttempts = nAttempts + 1 - end - - thisEntity.fTimeOfLastRetreat = GameRules:GetGameTime() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vMoveToPos, - }) - - thisEntity.PreviousOrder = "retreat" - - return 1.25 -end - --------------------------------------------------------------------------------- - -function HoldPosition() - --print( "ai_shadow_demon - Hold Position" ) - if thisEntity.PreviousOrder == "hold_position" then - return 0.5 - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_HOLD_POSITION, - Position = thisEntity:GetOrigin() - }) - - thisEntity.PreviousOrder = "hold_position" - - return 0.5 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_shroom_giant.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_shroom_giant.lua deleted file mode 100755 index 2a9e0c6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_shroom_giant.lua +++ /dev/null @@ -1,97 +0,0 @@ -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.bAcqRangeModified = false - - thisEntity.hEntityKilledGameEvent = ListenToGameEvent( "entity_killed", Dynamic_Wrap( thisEntity:GetPrivateScriptScope(), 'OnEntityKilled' ), nil ) - - thisEntity:SetContextThink( "ShroomGiantThink", ShroomGiantThink, 1 ) -end - -function UpdateOnRemove() - StopListeningToGameEvent( thisEntity.hEntityKilledGameEvent ) -end - -function ShroomGiantThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 850 ) - thisEntity.bAcqRangeModified = true - end - - return 0.5 -end - -function OnEntityKilled( event ) - - local hVictim = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - - if hVictim ~= thisEntity then - return - end - - -- Check all of the other giants, and see if any others are aggroed. - -- If not, then we'll force aggro on the closest one - if thisEntity.Encounter == nil then - print( 'ai_shroom_giant - OnEntityKilled: Encounter is nil!') - return - end - - local flNearDist = 60000 - local hGiant = nil - local hGiants = thisEntity.Encounter:GetSpawnedUnitsOfType( "npc_dota_creature_shroom_giant" ) - for i=1,#hGiants do - if hGiants[i] ~= thisEntity then - - if hGiants[i].bAcqRangeModified then - hGiant = nil - break - end - - local flDist = ( hGiants[i]:GetAbsOrigin() - hVictim:GetAbsOrigin() ):Length2D() - if flDist < flNearDist then - flNearDist = flDist - hGiant = hGiants[i] - end - - end - end - - if hGiant == nil then - return - end - - hGiant:SetDayTimeVisionRange( 5000 ) - hGiant:SetNightTimeVisionRange( 5000 ) - hGiant:SetAcquisitionRange( 5000 ) - hGiant.bAcqRangeModified = true - - -- Order nearby shamans idle unonwned to start attacking also - local hShamans = thisEntity.Encounter:GetSpawnedUnitsOfType( "npc_dota_creature_shadow_shaman" ) - print( 'Shroom Giant Death - Searching for Shadow Shamans... found ' .. #hShamans ) - for i=1,#hShamans do - local hShaman = hShamans[i] - if hShaman:GetOwnerEntity() == nil and hShaman:GetAggroTarget() == nil and ( hGiant:GetAbsOrigin() - hShaman:GetAbsOrigin() ):Length2D() < 800 then - hShaman:SetDayTimeVisionRange( 5000 ) - hShaman:SetNightTimeVisionRange( 5000 ) - hShaman:SetAcquisitionRange( 5000 ) - end - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_shroomling.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_shroomling.lua deleted file mode 100755 index f18b7ee..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_shroomling.lua +++ /dev/null @@ -1,81 +0,0 @@ -require( "ai/shared" ) - -LinkLuaModifier( "modifier_shroomling_enrage", "modifiers/creatures/modifier_shroomling_enrage", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_shroomling_sleep", "modifiers/creatures/modifier_shroomling_sleep", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function Precache( context ) - PrecacheResource( "particle", "particles/items2_fx/mask_of_madness.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_sleep.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if thisEntity == nil then - return - end - --- thisEntity.nShackledHeroSearchRadius = 900 --- thisEntity.hForceAttackTarget = nil - - thisEntity:AddNewModifier( thisEntity, nil, "modifier_shroomling_sleep", { duration = -1.0 } ) - - -- mushrooms are 100% off limits for a bit after spawning - thisEntity:AddNewModifier( thisEntity, nil, "modifier_invulnerable", { duration = 1.5 } ) - --- thisEntity:SetContextThink( "ShroomlingThink", ShroomlingThink, 1 ) -end - ---[[ -function ShroomlingThink() - if GameRules:IsGamePaused() == true then - return 1 - end - - if thisEntity:IsAlive() == false then - return 1 - end - - if thisEntity.hForceAttackTarget ~= nil then - local hShackleDebuff = thisEntity.hForceAttackTarget:FindModifierByName( "modifier_aghsfort_shadow_shaman_shackles" ) - - if thisEntity.hForceAttackTarget:IsAlive() == false or hShackleDebuff == nil then - -- force attack target is dead or it's alive and the shackle has ended - thisEntity:RemoveModifierByName( "modifier_shroomling_enrage" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_shroomling_sleep", { duration = -1.0 } ) - thisEntity.hForceAttackTarget = nil - return 1 - end - - -- target is still valid and shackled so have at it - AttackTargetOrder( thisEntity, thisEntity.hForceAttackTarget ) - return 1 - end - - local enemies = GetEnemyHeroesInRange( thisEntity, thisEntity.nShackledHeroSearchRadius ) - - if #enemies == 0 then - return 1 - end - - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsAlive() then - local hShackleDebuff = enemy:FindModifierByName( "modifier_aghsfort_shadow_shaman_shackles" ) - if hShackleDebuff ~= nil then - thisEntity.hForceAttackTarget = enemy - - thisEntity:RemoveModifierByName( "modifier_shroomling_sleep" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_shroomling_enrage", { duration = -1.0 } ) - - --print( 'Shroomling Attacking!' ) - AttackTargetOrder( thisEntity, enemy ) - return 1 - end - end - end - - return 0.5 -end ---]] \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ai_upheaval_urn.lua b/aghanim_singleplayer/scripts/vscripts/ai/ai_upheaval_urn.lua deleted file mode 100755 index e908be6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ai_upheaval_urn.lua +++ /dev/null @@ -1,95 +0,0 @@ ---[[ -Upheaval Urn AI -]] - -function Spawn( entityKeyValues ) - if IsServer() == false then - return - end - - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = -1 } ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_magic_immune", { duration = -1 } ) - - AbilityUpheaval = thisEntity:FindAbilityByName( "urn_upheaval" ) - - thisEntity.nPreviewFX = nil - thisEntity.bCastSpell = false - - thisEntity.fWarningTime = 2.5 - - local flInitialThinkDelay = RandomFloat( 1, 3 ) - thisEntity:SetContextThink( "UrnAIThink", UrnAIThink, flInitialThinkDelay ) -end - - -function Precache( context ) - PrecacheResource( "particle", "particles/econ/items/warlock/warlock_staff_hellborn/warlock_upheaval_hellborn.vpcf", context ) - PrecacheResource( "particle", "particles/econ/items/warlock/warlock_staff_hellborn/warlock_upheaval_hellborn_debuff.vpcf", context ) - - PrecacheResource( "particle", "particles/econ/events/darkmoon_2017/darkmoon_calldown_marker_ring.vpcf", context ) - PrecacheResource( "particle", "particles/dark_moon/darkmoon_creep_warning.vpcf", context ) -end - - -function UrnAIThink() - if IsServer() == false then - return - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if thisEntity:IsAlive() == false then - if thisEntity.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( thisEntity.nPreviewFX, false ) - thisEntity.nPreviewFX = nil - end - - return - end - - if thisEntity.bCastSpell == true then - thisEntity.bCastSpell = false - - if thisEntity.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( thisEntity.nPreviewFX, false ) - thisEntity.nPreviewFX = nil - end - - local order = {} - order.UnitIndex = thisEntity:entindex() - order.OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET - order.AbilityIndex = AbilityUpheaval:entindex() - ExecuteOrderFromTable( order ) - - local channelTime = AbilityUpheaval:GetChannelTime() - local downTime = RandomFloat( 3, 7 ) - local flThinkDelay = channelTime + downTime - --print( 'Upheaval Urn sleeping for ' .. flThinkDelay ) - - return flThinkDelay - end - - if AbilityUpheaval ~= nil and AbilityUpheaval:IsFullyCastable() then - thisEntity.bCastSpell = true ---[[ - local radius = AbilityUpheaval:GetSpecialValueFor( "aoe" ) - local nFXIndex = ParticleManager:CreateParticle( "particles/econ/events/darkmoon_2017/darkmoon_calldown_marker_ring.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, thisEntity:GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( radius, radius, radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( thisEntity.fWarningTime, thisEntity.fWarningTime, thisEntity.fWarningTime ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) ---]] - local warningRadius = 80 - thisEntity.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, thisEntity ) - ParticleManager:SetParticleControlEnt( thisEntity.nPreviewFX, 0, thisEntity, PATTACH_ABSORIGIN_FOLLOW, nil, thisEntity:GetOrigin(), true ) - ParticleManager:SetParticleControl( thisEntity.nPreviewFX, 1, Vector( warningRadius, warningRadius, warningRadius ) ) - ParticleManager:SetParticleControl( thisEntity.nPreviewFX, 15, Vector( 255, 26, 26 ) ) - - return thisEntity.fWarningTime - end - - return 1.0 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/alchemist_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/alchemist_ai.lua deleted file mode 100755 index ec75b6b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/alchemist_ai.lua +++ /dev/null @@ -1,395 +0,0 @@ ---[[ Alchemist AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - local hCurrentEncounter = GameRules.Aghanim:GetCurrentRoom():GetEncounter() - if hCurrentEncounter.activeTargets == nil then - hCurrentEncounter.activeTargets = {} - end - - thisEntity:AddNewModifier( thisEntity, nil, "modifier_attack_speed_unslowable", { attack_speed_reduction_pct = 20 } ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_move_speed_unslowable", { move_speed_reduction_pct = 20 } ) - - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorConcoction, BehaviorAcidSpray } ) --, BehaviorRunAway } ) - thisEntity.nextTargetTime = GameRules:GetGameTime() -end - -function UpdateOnRemove() - behaviorSystem:Destroy() -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -function RemoveAvailableTarget( availableHeroes, nEntIndexToRemove ) - - if #availableHeroes == 1 then - return - end - - for i=1,#availableHeroes do - if availableHeroes[i]:entindex() == nEntIndexToRemove then - table.remove( availableHeroes, i ) - break - end - end - -end - --------------------------------------------------------------------------------------------------------- - -function SelectNewTarget( ) - - local hCurrentEncounter = GameRules.Aghanim:GetCurrentRoom():GetEncounter() - - -- Mark current target as not active any more - -- Important to do prior to the code that grab a target which is not already being chased - local nEntIndex = -1 - if thisEntity.hTarget ~= nil then - nEntIndex = thisEntity.hTarget:entindex() - hCurrentEncounter.activeTargets[ tostring( nEntIndex ) ] = nil - end - - local availableHeroes = GetAliveHeroesInRoom() - - -- Remove not visible heroes - for i=#availableHeroes,1,-1 do - if not thisEntity:CanEntityBeSeenByMyTeam( availableHeroes[i] ) then - table.remove( availableHeroes, i ) - end - end - - -- Prefer to grab a target which is not already being chased by another alchemist - for szEntIndex,bIsActive in pairs( hCurrentEncounter.activeTargets ) do - if bIsActive == true then - RemoveAvailableTarget( availableHeroes, tonumber( szEntIndex ) ) - end - end - - -- Prefer to pick a different target from last time - RemoveAvailableTarget( availableHeroes, nEntIndex ) - - -- Select a random target from the available ones - local hNewTarget = nil - if #availableHeroes > 0 then - hNewTarget = availableHeroes[ math.random( 1, #availableHeroes ) ] - end - - thisEntity.hTarget = hNewTarget - thisEntity.nextTargetTime = GameRules:GetGameTime() + 10 -- Keep on this guy for 10 seconds at least - - if thisEntity.hTarget ~= nil then - hCurrentEncounter.activeTargets[ tostring( thisEntity.hTarget:entindex() ) ] = true - end - -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Destroy() - - local hCurrentEncounter = GameRules.Aghanim:GetCurrentRoom():GetEncounter() - - -- Mark current target as not active any more - if thisEntity.hTarget ~= nil then - hCurrentEncounter.activeTargets[ tostring( thisEntity.hTarget:entindex() ) ] = nil - thisEntity.hTarget = nil - end - -end - -function BehaviorNone:Begin() - --print( "BehaviorNone:Begin()" ) - local orders = nil - - -- Acquire a new target if necessary - if thisEntity.hTarget == nil or ( thisEntity.nextTargetTime <= GameRules:GetGameTime() ) or - not thisEntity.hTarget:IsAlive() or - ( not thisEntity:CanEntityBeSeenByMyTeam( thisEntity.hTarget ) and ( ( thisEntity:GetAbsOrigin() - thisEntity.lastTargetPosition ):Length2D() < 250 ) ) then - SelectNewTarget() - end - - if thisEntity.hTarget ~= nil then - thisEntity.lastTargetPosition = thisEntity.hTarget:GetAbsOrigin() - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = thisEntity.hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorConcoction = {} - -function BehaviorConcoction:Evaluate() - --print( "BehaviorConcoction:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - -- Got to have a target - if thisEntity.hTarget == nil or not thisEntity.hTarget:IsAlive() or not thisEntity:CanEntityBeSeenByMyTeam( thisEntity.hTarget ) then - return desire - end - - self.concoctionAbility = thisEntity:FindAbilityByName( "alchemist_unstable_concoction" ) - self.nBrewTime = self.concoctionAbility:GetSpecialValueFor( "brew_time") - self.nSelfExplodeTime = self.concoctionAbility:GetSpecialValueFor( "brew_explosion") - - if self.concoctionAbility and self.concoctionAbility:IsFullyCastable() then - - -- Don't do it if other alchemists are currently conconting - local friends = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), thisEntity, 5000, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, 0, 0, false ) - for i = 1,#friends do - if friends[i] ~= thisEntity and friends[i].bInConcontion ~= nil and friends[i].bInConcontion == true then - return desire - end - end - - --print( "Concoction:Evaluate: thisEntity.hTarget:entindex() == " .. thisEntity.hTarget:entindex() ) - thisEntity.lastTargetPosition = thisEntity.hTarget:GetAbsOrigin() - if thisEntity.hTarget:IsStunned() then - desire = 2 - else - desire = 4 - end - end - - return desire -end - -function BehaviorConcoction:Begin() - --print( "BehaviorConcoction:Begin()" ) - - thisEntity.bInConcontion = true - - if self.startConcoctionTime ~= nil then - return nil - end - - self.shivasAbility = nil - self.phaseAbility = nil - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_shivas_guard" then - self.shivasAbility = item - end - if item and item:GetAbilityName() == "item_phase_boots" then - self.phaseAbility = item - end - end - - self.concoctionThrowAbility = thisEntity:FindAbilityByName( "alchemist_unstable_concoction_throw" ) - self.chemicalRageAbility = thisEntity:FindAbilityByName( "alchemist_chemical_rage" ) - - if self.concoctionAbility and self.concoctionAbility:IsFullyCastable() then - self.startConcoctionTime = GameRules:GetGameTime() - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.concoctionAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorConcoction.Continue = BehaviorConcoction.Begin - -function BehaviorConcoction:End() - thisEntity.bInConcontion = false -end - -function BehaviorConcoction:IsDone() - return ( self.startConcoctionTime == nil ) -end - -function BehaviorConcoction:Think( ) - if self.startConcoctionTime == nil then - return nil - end - - --print( "BehaviorConcoction:Think( )" ) - --print( "-----------------------------------" ) - --print( "self.startConcoctionTime == " .. self.startConcoctionTime ) - --print( "GameRules:GetGameTime() == " .. GameRules:GetGameTime() ) - - -- reacquire target if possible - if thisEntity.hTarget == nil or not thisEntity.hTarget:IsAlive() then - SelectNewTarget() - if thisEntity.hTarget == nil then - -- No target? Move to last valid target position - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - return order - end - end - - thisEntity.lastTargetPosition = thisEntity.hTarget:GetAbsOrigin() - - -- if we missed our cast window for some reason - if GameRules:GetGameTime() >= ( self.startConcoctionTime + self.nSelfExplodeTime ) then - --print( "ending") - self.startConcoctionTime = nil - return nil - end - - -- If we're still waiting to throw, then try to close... - if GameRules:GetGameTime() < ( self.startConcoctionTime + self.nBrewTime ) then - - -- Cast phase if we can - if self.phaseAbility and self.phaseAbility:IsFullyCastable() then - --print( "Casting phase" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.phaseAbility:entindex() - } - return order - end - - -- Cast Shiva if we can - if self.shivasAbility and self.shivasAbility:IsFullyCastable() then - --print( "Casting shiva" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.shivasAbility:entindex() - } - return order - end - - else - - -- Ok, we're able to throw, so lets throw - if self.concoctionThrowAbility and not self.concoctionThrowAbility:IsHidden() and self.concoctionThrowAbility:IsFullyCastable() then - --print( "Casting throw" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = self.concoctionThrowAbility:entindex(), - TargetIndex = thisEntity.hTarget:entindex() - } - - return order - end - - -- Otherwise, try to cast chemical rage - if self.chemicalRageAbility and self.chemicalRageAbility:IsFullyCastable() then - --print( "Casting Chemical Rage" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.chemicalRageAbility:entindex(), - } - return order - end - - end - - -- Nothing better to do? Chase our target - --print( "Attacking" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = thisEntity.hTarget:entindex() - } - return order - -end - --------------------------------------------------------------------------------------------------------- - -BehaviorAcidSpray = {} - -function BehaviorAcidSpray:Evaluate() - --print( "BehaviorAcidSpray:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - -- Got to have a target - if thisEntity.hTarget == nil or not thisEntity.hTarget:IsAlive() or not thisEntity:CanEntityBeSeenByMyTeam( thisEntity.hTarget ) then - return desire - end - - self.acidSprayAbility = thisEntity:FindAbilityByName( "alchemist_acid_spray" ) - if self.acidSprayAbility and self.acidSprayAbility:IsFullyCastable() then - if thisEntity.hTarget:IsStunned() then - desire = 6 - else - desire = 4 - end - end - - return desire -end - -function BehaviorAcidSpray:Begin() - --print( "BehaviorAcidSpray:Begin()" ) - - if self.acidSprayAbility and self.acidSprayAbility:IsFullyCastable() then - --print( "Casting Acid Spray" ) - local targetPoint = thisEntity.lastTargetPosition + RandomVector( 100 ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = self.acidSprayAbility:entindex(), - Position = targetPoint - } - return order - end - - return nil -end - -BehaviorAcidSpray.Continue = BehaviorAcidSpray.Begin diff --git a/aghanim_singleplayer/scripts/vscripts/ai/announcer_aghanim.lua b/aghanim_singleplayer/scripts/vscripts/ai/announcer_aghanim.lua deleted file mode 100755 index 94be3ee..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/announcer_aghanim.lua +++ /dev/null @@ -1,356 +0,0 @@ --------------------------------------------------------------------------------- - -if CAnnouncerAghanim == nil then - CAnnouncerAghanim = class( {} ) -end - --------------------------------------------------------------------------------- - -function Precache( context ) - -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if IsServer() then - if thisEntity == nil then - return - end - - thisEntity.AI = CAnnouncerAghanim( thisEntity, 1.0 ) - GameRules.Aghanim:SetAnnouncer( thisEntity.AI ) - end -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:constructor( hUnit, flInterval ) - self.me = hUnit - self.flDefaultInterval = flInterval - self.nHeroSelected = 1 - self.flLastSpeakTime = -1000 - self.flPostSpeechTime = -1000 - self.flPostSpeechDelay = 0.5 - self.bIsSpeaking = false - self.lastAbilityUpgradeHeroes = {} - self.hSpeakingUnitOverride = nil - self.nLastLaggingDepth = 0 - self.nLastShopDepth = 0 - self.nCallbacksIssued = 0 - self.me:SetThink( "OnAnnouncerThink", self, "OnAnnouncerThink", self.flDefaultInterval ) -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OverrideSpeakingUnit( hOverrideUnit ) - self.hSpeakingUnitOverride = hOverrideUnit -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:SetServerAuthoritative( bServerAuthoritative ) - self.me:SetServerAuthoritative( bServerAuthoritative ) -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnAnnouncerThink() - - -- Anything that needs thinking is here - return self.flDefaultInterval -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:Speak( flDelay, bForce, hCriteriaTable ) - - print( "CAnnouncerAghanim:Speak speaking:" .. tostring( self.bIsSpeaking ) .. " ( force: " .. tostring( bForce ) .. " ) " .. hCriteriaTable.announce_event ) - - -- Safety valve in case the callback breaks - if ( self.bIsSpeaking == true ) and ( self.flLastSpeakTime > 0 ) and ( GameRules:GetGameTime() - self.flLastSpeakTime ) > 30 then - print( "*** ERROR : CAnnouncerAghanim never got the OnSpeechComplete callback!" ) - self.bIsSpeaking = false - end - - -- Don't overlap lines unless this is a required line - if bForce == false and self:IsCurrentlySpeaking( ) == true then - print( "*** CAnnouncerAghanim discarding line -- " .. hCriteriaTable.announce_event .. " ( pst " .. self.flPostSpeechTime .. " cur " .. GameRules:GetGameTime() .. " ) " ) - return false - end - - -- Add standard criteria all speech has - hCriteriaTable[ "has_new_players" ] = GameRules.Aghanim:HasAnyNewPlayers() - hCriteriaTable[ "ascension_level" ] = GameRules.Aghanim:GetAscensionLevel() - hCriteriaTable[ "tournament_mode" ] = GameRules.Aghanim:IsInTournamentMode() - - local hSpeakingUnit = self.me - if self.hSpeakingUnitOverride ~= nil then - hSpeakingUnit = self.hSpeakingUnitOverride - end - - self.nCallbacksIssued = self.nCallbacksIssued + 1 - self.flLastSpeakTime = GameRules:GetGameTime() + flDelay - hSpeakingUnit:QueueConcept( flDelay, hCriteriaTable, Dynamic_Wrap( CAnnouncerAghanim, 'OnSpeechComplete' ), self, { nCallbackIndex = self.nCallbacksIssued } ) - self.bIsSpeaking = true - - return true - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnSpeechComplete( bDidActuallySpeak, hCallbackInfo ) - --print( "CAnnouncerAghanim:OnSpeechComplete " .. tostring( bDidActuallySpeak ) .. " " .. hCallbackInfo.nCallbackIndex .. " - " .. self.nCallbacksIssued ) - if hCallbackInfo.nCallbackIndex == self.nCallbacksIssued then - self.bIsSpeaking = false - self.flPostSpeechTime = GameRules:GetGameTime() + self.flPostSpeechDelay - end -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:IsCurrentlySpeaking( ) - return self.bIsSpeaking or ( self.flPostSpeechTime > GameRules:GetGameTime() ) -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnHeroSelectionStarted( ) - - self:Speak( 1.0, true, - { - announce_event = "hero_selection", - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnHeroSelected( szHeroName ) - - self:Speak( 1.0, false, - { - announce_event = "hero_selected", - hero_name = szHeroName, - pick_number = self.nHeroSelected, - }) - - self.nHeroSelected = self.nHeroSelected + 1 - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnGameStarted( ) - - self:Speak( 3.0, true, - { - announce_event = "game_started", - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnSelectRewards( ) - - self:Speak( 1.0, false, - { - announce_event = "select_rewards", - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnItemPurchased( szHeroName, szItemName ) - - local nDepth = GameRules.Aghanim:GetCurrentRoom():GetDepth() - if self.nLastShopDepth == nDepth then - return - end - - self.nLastShopDepth = nDepth - - self:Speak( 1.0, true, - { - announce_event = "item_purchased", - hero_name = szHeroName, - item = szItemName, - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnGameLost( ) - - self:Speak( 1.0, true, - { - announce_event = "game_lost", - depth = GameRules.Aghanim:GetCurrentRoom():GetDepth(), - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnGameWon( ) - - self:Speak( 1.0, true, - { - announce_event = "game_won", - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnEncounterSelected( hEncounter ) - - if hEncounter:GetRoom():GetDepth() == 1 then - return - end - - self:Speak( 3.0, true, - { - announce_event = "encounter_selected", - encounter_type = hEncounter:GetRoom():GetType(), - encounter_name = hEncounter:GetName(), - encounter_act = hEncounter:GetRoom():GetAct(), - elite = hEncounter:GetRoom():GetEliteRank(), - depth = hEncounter:GetRoom():GetDepth(), - act_boss = GameRules.Aghanim:GetBossUnitForAct( hEncounter:GetRoom():GetAct() ) - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnEncounterStarted( hEncounter ) - - if hEncounter:GetRoom():GetDepth() == 1 then - return - end - - self:Speak( 3.0, false, - { - announce_event = "encounter_started", - encounter_type = hEncounter:GetRoom():GetType(), - encounter_name = hEncounter:GetName(), - encounter_act = hEncounter:GetRoom():GetAct(), - elite = hEncounter:GetRoom():GetEliteRank(), - depth = hEncounter:GetRoom():GetDepth(), - act_boss = GameRules.Aghanim:GetBossUnitForAct( hEncounter:GetRoom():GetAct() ) - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnEncounterComplete( hEncounter ) - --- local bForceSpeech = false --- if GameRules.Aghanim:HasAnyNewPlayersForAnnouncer() == true and hEncounter:GetRoom():GetDepth() == 1 then --- bForceSpeech = true --- end - - self:Speak( 2.0, true, - { - announce_event = "encounter_completed", - encounter_type = hEncounter:GetRoom():GetType(), - encounter_name = hEncounter:GetName(), - encounter_act = hEncounter:GetRoom():GetAct(), - elite = hEncounter:GetRoom():GetEliteRank(), - depth = hEncounter:GetRoom():GetDepth(), - act_boss = GameRules.Aghanim:GetBossUnitForAct( hEncounter:GetRoom():GetAct() ) - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnRewardSelected( hHero, nDepth, eRewardType, szRewardName ) - - self:Speak( 1.0, false, - { - announce_event = "reward_selected", - hero_name = hHero:GetUnitName(), - depth = nDepth, - reward_type = eRewardType, - reward_name = szRewardName, - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnCreatureKilled( hEncounter, hUnit ) - - self:Speak( 1.0, false, - { - announce_event = "creature_killed", - unit = hUnit:GetUnitName(), - boss = hUnit:IsBoss(), - captain = hUnit:IsConsideredHero() == true and hUnit:IsBoss() == false, - encounter_name = hEncounter:GetName(), - encounter_act = hEncounter:GetRoom():GetAct(), - depth = hEncounter:GetRoom():GetDepth(), - }) - -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnHeroKilled( szHeroName, szKillerUnit, nRespawnsRemaining ) - - local kv = - { - announce_event = "hero_killed", - hero_name = szHeroName, - respawns_remaining = nRespawnsRemaining, - } - - if szKillerUnit ~= nil then - kv.killer = szKillerUnit - end - - -- Long delay to speak after the hero's own death line - self:Speak( 4.0, false, kv ) -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnCowardlyHero( szUnitName, szHeroName ) - - local kv = - { - announce_event = "hero_cowardly", - unit = szUnitName, - hero_name = szHeroName, - } - - self:Speak( 0.5, true, kv ) -end - --------------------------------------------------------------------------------- - -function CAnnouncerAghanim:OnLaggingHero( szHeroName, nDepth ) - - if self.nLastLaggingDepth >= nDepth then - return - end - - self.nLastLaggingDepth = nDepth - local kv = - { - announce_event = "lagging_hero", - hero_name = szHeroName, - } - - self:Speak( 0.0, true, kv ) -end - - - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/baby_ogre_magi.lua b/aghanim_singleplayer/scripts/vscripts/ai/baby_ogre_magi.lua deleted file mode 100755 index 3fa41f8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/baby_ogre_magi.lua +++ /dev/null @@ -1,116 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - IgniteAbility = thisEntity:FindAbilityByName( "baby_ogre_magi_area_ignite" ) - BloodlustAbility = thisEntity:FindAbilityByName( "ogre_magi_channelled_bloodlust" ) - - thisEntity:SetContextThink( "OgreMagiThink", OgreMagiThink, 1 ) -end - --------------------------------------------------------------------------------- - -function OgreMagiThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if BloodlustAbility ~= nil and BloodlustAbility:IsChanneling() then - return 0.5 - end - - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - - local bIgniteReady = ( #enemies > 0 and IgniteAbility ~= nil and IgniteAbility:IsFullyCastable() ) - - if BloodlustAbility ~= nil and BloodlustAbility:IsFullyCastable() then - local friendlies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1500, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,friendly in pairs ( friendlies ) do - if friendly ~= nil then - if ( friendly:GetUnitName() == "npc_dota_creature_baby_ogre_tank" ) then - local fDist = ( friendly:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - local fCastRange = BloodlustAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - --print( string.format( "fDist == %d, fCastRange == %d", fDist, fCastRange ) ) - if ( fDist <= fCastRange ) and ( ( #enemies > 0 ) or ( friendly:GetAggroTarget() ) ) then - return Bloodlust( friendly ) - elseif ( fDist > 400 ) and ( fDist < 900 ) then - if bIgniteReady == false then - return Approach( friendly ) - end - end - end - end - end - end - - if bIgniteReady then - return IgniteArea( enemies[ RandomInt( 1, #enemies ) ] ) - end - - local fFuzz = RandomFloat( -0.1, 0.1 ) -- Adds some timing separation to these magi - return 0.5 + fFuzz -end - --------------------------------------------------------------------------------- - -function Approach( hUnit ) - --print( "Ogre Magi is approaching unit named " .. hUnit:GetUnitName() ) - - local vToUnit = hUnit:GetOrigin() - thisEntity:GetOrigin() - vToUnit = vToUnit:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vToUnit * thisEntity:GetIdealSpeed() - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function Bloodlust( hUnit ) - --print( "Casting bloodlust on " .. hUnit:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = BloodlustAbility:entindex(), - TargetIndex = hUnit:entindex(), - Queue = false, - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function IgniteArea( hEnemy ) - --print( "Casting ignite on " .. hEnemy:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = IgniteAbility:entindex(), - Position = hEnemy:GetOrigin(), - Queue = false, - }) - - return 0.55 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/baby_ogre_tank.lua b/aghanim_singleplayer/scripts/vscripts/ai/baby_ogre_tank.lua deleted file mode 100755 index c2092f4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/baby_ogre_tank.lua +++ /dev/null @@ -1,101 +0,0 @@ -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - SmashAbility = thisEntity:FindAbilityByName( "baby_ogre_tank_melee_smash" ) - JumpAbility = thisEntity:FindAbilityByName( "baby_ogre_tank_jump_smash" ) - - thisEntity:SetContextThink( "OgreTankThink", OgreTankThink, 1 ) -end - -function OgreTankThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 850 ) - thisEntity.bAcqRangeModified = true - end - - local hWintersCurseBuff = thisEntity:FindModifierByName( "modifier_aghsfort_winter_wyvern_winters_curse" ) - if hWintersCurseBuff and hWintersCurseBuff:GetAuraOwner() ~= nil then - if SmashAbility ~= nil and SmashAbility:IsCooldownReady() then - return Smash( hWintersCurseBuff:GetAuraOwner() ) - end - return 0.1 - end - - local nEnemiesRemoved = 0 - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for i = 1, #enemies do - local enemy = enemies[i] - if enemy ~= nil then - local flDist = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < 210 then - nEnemiesRemoved = nEnemiesRemoved + 1 - table.remove( enemies, i ) - end - end - end - - if JumpAbility ~= nil and JumpAbility:IsFullyCastable() and nEnemiesRemoved > 0 then - return Jump() - end - - if #enemies == 0 then - -- @todo: Could check whether there are ogre magi nearby that I should be positioning myself next to. Either that or have the magi come to me. - return 1 - end - - if SmashAbility ~= nil and SmashAbility:IsFullyCastable() then - return Smash( enemies[ 1 ] ) - end - - return 0.5 -end - - -function Jump() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = JumpAbility:entindex(), - Queue = false, - }) - - return 2.5 -end - - -function Smash( enemy ) - if enemy == nil then - return - end - - if ( not thisEntity:HasModifier( "modifier_provide_vision" ) ) then - --print( "If player can't see me, provide brief vision to his team as I start my Smash" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = SmashAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 3 / thisEntity:GetHasteFactor() -end - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/bandit_archer.lua b/aghanim_singleplayer/scripts/vscripts/ai/bandit_archer.lua deleted file mode 100755 index 8123545..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/bandit_archer.lua +++ /dev/null @@ -1,203 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hArrowAbility = thisEntity:FindAbilityByName( "bandit_archer_arrow" ) - - thisEntity.flRetreatRange = 600 - thisEntity.flAttackRange = thisEntity.hArrowAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - thisEntity.PreviousOrder = "no_order" - thisEntity.fRetreatCooldown = 5 - - thisEntity:SetContextThink( "BanditArcherThink", BanditArcherThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function BanditArcherThink() - if not IsServer() then - return - end - - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if not thisEntity.bInitialized then - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_bandit_archer_shadow_blade" then - thisEntity.hShadowBladeAbility = item - end - end - - thisEntity.bInitialized = true - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.flAttackRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.1 - end - - local fHealthPctInvis = 15 - if thisEntity:GetHealthPercent() <= fHealthPctInvis and thisEntity.hShadowBladeAbility and thisEntity.hShadowBladeAbility:IsFullyCastable() then - return CastShadowBlade() - end - - if thisEntity:IsInvisible() then - -- Force a retreat, even if we've retreated recently - local hNearestEnemy = hEnemies[ 1 ] - return Retreat( hNearestEnemy ) - end - - local hAttackTarget = nil - local hApproachTarget = nil - for _, hEnemy in pairs( hEnemies ) do - if hEnemy ~= nil and hEnemy:IsAlive() then - local flDist = ( hEnemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < thisEntity.flRetreatRange then - if ( thisEntity.fTimeOfLastRetreat and ( GameRules:GetGameTime() < thisEntity.fTimeOfLastRetreat + thisEntity.fRetreatCooldown ) ) then - -- We already retreated recently, so just attack - hAttackTarget = hEnemy - else - return Retreat( hEnemy ) - end - end - if flDist <= thisEntity.flAttackRange then - hAttackTarget = hEnemy - end - if flDist > thisEntity.flAttackRange then - hApproachTarget = hEnemy - end - end - end - - if hAttackTarget == nil and hApproachTarget ~= nil then - return Approach( hApproachTarget ) - end - - if hAttackTarget and thisEntity.hArrowAbility ~= nil and thisEntity.hArrowAbility:IsFullyCastable() then - return CastArrow( hAttackTarget ) - end - - if hAttackTarget then - thisEntity:FaceTowards( hAttackTarget:GetOrigin() ) - return HoldPosition() - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function CastArrow( hEnemy ) - --print( "ai_bandit_archer - CastArrow" ) - - local fDist = ( hEnemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - local vTargetPos = hEnemy:GetOrigin() - - if ( fDist > 400 ) and hEnemy and hEnemy:IsMoving() then - local vLeadingOffset = hEnemy:GetForwardVector() * RandomInt( 200, 400 ) - vTargetPos = hEnemy:GetOrigin() + vLeadingOffset - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetPos, - AbilityIndex = thisEntity.hArrowAbility:entindex(), - Queue = false, - }) - - return 2 -end - --------------------------------------------------------------------------------- - -function Approach(unit) - --print( "ai_bandit_archer - Approach" ) - - local vToEnemy = unit:GetOrigin() - thisEntity:GetOrigin() - vToEnemy = vToEnemy:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vToEnemy * thisEntity:GetIdealSpeed() - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function Retreat(unit) - --print( "ai_bandit_archer - Retreat" ) - - local vAwayFromEnemy = thisEntity:GetOrigin() - unit:GetOrigin() - vAwayFromEnemy = vAwayFromEnemy:Normalized() - local vMoveToPos = thisEntity:GetOrigin() + vAwayFromEnemy * thisEntity:GetIdealSpeed() - - -- if away from enemy is an unpathable area, find a new direction to run to - local nAttempts = 0 - while ( ( not GridNav:CanFindPath( thisEntity:GetOrigin(), vMoveToPos ) ) and ( nAttempts < 5 ) ) do - vMoveToPos = thisEntity:GetOrigin() + RandomVector( thisEntity:GetIdealSpeed() ) - nAttempts = nAttempts + 1 - end - - thisEntity.fTimeOfLastRetreat = GameRules:GetGameTime() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vMoveToPos, - }) - - return 1.25 -end - --------------------------------------------------------------------------------- - -function HoldPosition() - --print( "ai_bandit_archer - Hold Position" ) - if thisEntity.PreviousOrder == "hold_position" then - return 0.5 - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_HOLD_POSITION, - Position = thisEntity:GetOrigin() - }) - - thisEntity.PreviousOrder = "hold_position" - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastShadowBlade() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hShadowBladeAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/bandit_captain.lua b/aghanim_singleplayer/scripts/vscripts/ai/bandit_captain.lua deleted file mode 100755 index 9e706d8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/bandit_captain.lua +++ /dev/null @@ -1,129 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hStiflingAbility = thisEntity:FindAbilityByName( "bandit_stifling_dagger" ) - thisEntity.hBlinkStrikeAbility = thisEntity:FindAbilityByName( "creature_blink_strike" ) - - thisEntity.hStiflingAbility:SetLevel( 4 ) - thisEntity.hBlinkStrikeAbility:SetLevel( 4 ) - - thisEntity:SetContextThink( "BanditCaptainThink", BanditCaptainThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function BanditCaptainThink() - if not IsServer() then - return - end - - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - -- Get last aggro timestamp - if ( not thisEntity.bHasAggro ) and thisEntity:GetAggroTarget() then - thisEntity.timeOfLastAggro = GameRules:GetGameTime() - thisEntity.bHasAggro = true - end - - if thisEntity.bHasAggro and ( not thisEntity:GetAggroTarget() ) then - thisEntity.bHasAggro = false - end - - if thisEntity.hStiflingAbility ~= nil and thisEntity.hStiflingAbility:IsChanneling() then - return 0.5 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 900, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.5 - end - - -- Categorize our enemies based on distance - local hMediumDistEnemies = { } - - local hFarthestEnemy = nil - local fFarthestEnemyDist = 0 - - for _, hEnemy in pairs( hEnemies ) do - local fDist = ( hEnemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if fDist > fFarthestEnemyDist then - fFarthestEnemyDist = fDist - hFarthestEnemy = hEnemy - end - - if fDist > 300 then - table.insert( hMediumDistEnemies, hEnemy ) - end - end - - -- If we've had aggro for a bit, we're willing to launch Stifling Dagger - local fDelayBeforeStifling = RandomFloat( 2, 4 ) - if thisEntity.timeOfLastAggro and ( GameRules:GetGameTime() > ( thisEntity.timeOfLastAggro + fDelayBeforeStifling ) ) then - if thisEntity.hStiflingAbility ~= nil and thisEntity.hStiflingAbility:IsFullyCastable() then - if hFarthestEnemy ~= nil then - return CastStiflingDagger( hFarthestEnemy ) - else - return CastStiflingDagger( hEnemies[ RandomInt( 1, #hEnemies ) ] ) - end - end - end - - -- If we've had aggro for a bit, we're willing to launch Blink Strike - local fDelayBeforeBlinkStrike = RandomFloat( 3, 5 ) - if thisEntity.timeOfLastAggro and ( GameRules:GetGameTime() > ( thisEntity.timeOfLastAggro + fDelayBeforeBlinkStrike ) ) then - if thisEntity.hBlinkStrikeAbility ~= nil and thisEntity.hBlinkStrikeAbility:IsFullyCastable() then - -- Prefer to blinkstrike onto a unit we're not right next to - if #hMediumDistEnemies > 0 then - return CastBlinkStrike( hMediumDistEnemies[ RandomInt( 1, #hMediumDistEnemies ) ] ) - else - return CastBlinkStrike( hEnemies[ RandomInt( 1, #hEnemies ) ] ) - end - end - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastStiflingDagger( hEnemy ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hEnemy:GetOrigin(), - AbilityIndex = thisEntity.hStiflingAbility:entindex(), - Queue = false, - }) - return 2 -end - --------------------------------------------------------------------------------- - -function CastBlinkStrike( hEnemy ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hEnemy:entindex(), - AbilityIndex = thisEntity.hBlinkStrikeAbility:entindex(), - Queue = false, - }) - return 5 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/basic_spell_casting_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/basic_spell_casting_ai.lua deleted file mode 100755 index 709d348..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/basic_spell_casting_ai.lua +++ /dev/null @@ -1,376 +0,0 @@ -require( "utility_functions" ) - -bBasicSpellDebug = false - ---Casting heuristics -CAST_RANGE_BUFFER = 100 -MOVE_TO_CAST_NO_TARGETS = false -NO_TARGET_AOE_ENEMIES_BASIC = 1 -NO_TARGET_AOE_ENEMIES_ULTIMATE = 2 -UNIT_TARGET_AOE_ENEMIES_BASIC = 1 -UNIT_TARGET_AOE_ENEMIES_ULTIMATE = 2 -POINT_TARGET_AOE_ENEMIES_BASIC = 1 -POINT_TARGET_AOE_ENEMIES_ULTIMATE = 2 - -UNIT_TARGET_METHODS = -{ - "closest", - "farthest", - "random", -} -UNIT_TARGET_METHOD = UNIT_TARGET_METHODS[3] - -function IsNoTargetSpellCastValid( hSpell ) - if bBasicSpellDebug then - print( "IsNoTargetSpellCastValid: " .. hSpell:GetAbilityName() ) - end - -- Assume that this spell is centered on me. - local nEnemiesRequired = NO_TARGET_AOE_ENEMIES_BASIC - if hSpell:GetAbilityType() == ABILITY_TYPE_ULTIMATE then - nEnemiesRequired = NO_TARGET_AOE_ENEMIES_ULTIMATE - end - - local nAbilityRadius = hSpell:GetAOERadius() - if nAbilityRadius == 0 then - -- Just slam it for now so the spell goes off. If spells don't have these in basic dota that is generally a bug - if bBasicSpellDebug then - print( "--WARNING - ability " .. hSpell:GetAbilityName() .. " has no defined AOE Radius! " ) - end - nAbilityRadius = 250 - end - - local enemies = FindUnitsInRadius( hSpell:GetCaster():GetTeamNumber(), hSpell:GetCaster():GetOrigin(), hSpell:GetCaster(), nAbilityRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies < nEnemiesRequired then - return false - end - - if bBasicSpellDebug then - print( "--Found " .. #enemies .. " : " .. hSpell:GetAbilityName() ) - print( "" ) - end - - return true -end - -function GetBestAOEUnitTarget( hSpell ) - --For now, just use normal unit targeting - return GetBestUnitTarget( hSpell ) -end - -function GetBestDirectionalPointTarget( hSpell ) - if bBasicSpellDebug then - print( "GetBestDirectionalPointTarget: " .. hSpell:GetAbilityName() ) - end - - local nEnemiesRequired = UNIT_TARGET_AOE_ENEMIES_BASIC - if hSpell:GetAbilityType() == ABILITY_TYPE_ULTIMATE then - nEnemiesRequired = UNIT_TARGET_AOE_ENEMIES_ULTIMATE - end - - local nAbilityRadius = hSpell:GetAOERadius() - if nAbilityRadius == 0 then - -- Just slam it for now so the spell goes off. - -- Linear spells will likely need a specific solution, - -- as their radiuses are not universally defined - nAbilityRadius = 250 - if bBasicSpellDebug then - print( "--GetBestDirectionalPointTarget: WARNING - ability " .. hSpell:GetAbilityName() .. " has no defined AOE Radius! " ) - end - end - - local vLocation = GetTargetLinearLocation( hSpell:GetCaster():GetTeamNumber(), - DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, - DOTA_UNIT_TARGET_TEAM_ENEMY, - hSpell:GetCaster():GetOrigin(), - GetTryToUseSpellRange( hSpell:GetCaster(), hSpell ), - nAbilityRadius, - nEnemiesRequired ) - - if vLocation == vec3_invalid then - if bBasicSpellDebug then - print( "--GetBestDirectionalPointTarget: cannot find location with " .. nAbilityRadius .. " radius and " .. nEnemiesRequired .. " required enemies" ) - end - return nil - end - - if bBasicSpellDebug then - print( "--Found directional target point: (" .. vLocation.x .. ", " .. vLocation.y .. ", " .. vLocation.z .. " : " .. hSpell:GetAbilityName() ) - print( "" ) - end - - return vLocation -end - -function GetBestUnitTarget( hSpell ) - if bBasicSpellDebug and hSpell then - print( "GetBestUnitTarget: " .. hSpell:GetAbilityName() ) - end - - local enemies = FindUnitsInRadius( hSpell:GetCaster():GetTeamNumber(), hSpell:GetCaster():GetOrigin(), hSpell:GetCaster(), GetTryToUseSpellRange( hSpell:GetCaster(), hSpell ), DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies == 0 then - if bBasicSpellDebug then - print( "--Found 0 enemies") - end - return nil - end - - if UNIT_TARGET_METHOD == "closest" then - return enemies[1] - end - if UNIT_TARGET_METHOD == "random" then - return enemies[RandomInt(1, #enemies)] - end - if UNIT_TARGET_METHOD == "farthest" then - return enemies[#enemies] - end - - return nil -end - -function GetBestAOEPointTarget( hSpell ) - if bBasicSpellDebug then - print( "GetBestAOEPointTarget: " .. hSpell:GetAbilityName() ) - end - - local nEnemiesRequired = UNIT_TARGET_AOE_ENEMIES_BASIC - if hSpell:GetAbilityType() == ABILITY_TYPE_ULTIMATE then - nEnemiesRequired = UNIT_TARGET_AOE_ENEMIES_ULTIMATE - end - - local nAbilityRadius = hSpell:GetAOERadius() - if nAbilityRadius == 0 then - -- Just slam it for now so the spell goes off. If spells don't have these in basic dota that is generally a bug - nAbilityRadius = 250 - if bBasicSpellDebug then - print( "--GetBestAOEPointTarget: WARNING - ability " .. hSpell:GetAbilityName() .. " has no defined AOE Radius! " ) - end - end - - local vLocation = GetTargetAOELocation( hSpell:GetCaster():GetTeamNumber(), - DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, - DOTA_UNIT_TARGET_TEAM_ENEMY, - hSpell:GetCaster():GetOrigin(), - GetTryToUseSpellRange( hSpell:GetCaster(), hSpell ), - nAbilityRadius, - nEnemiesRequired ) - if vLocation == vec3_invalid then - if bBasicSpellDebug then - print( "--GetBestAOEPointTarget: cannot find location with " .. nAbilityRadius .. " radius and " .. nEnemiesRequired .. " required enemies" ) - end - return nil - end - - if bBasicSpellDebug then - print( "--Found aoe target point: (" .. vLocation.x .. ", " .. vLocation.y .. ", " .. vLocation.z .. " : " .. hSpell:GetAbilityName() ) - end - - return vLocation -end - -function GetBestPointTarget( hSpell ) - -- for now just use AOE - return GetBestAOEPointTarget( hSpell ) -end - -function FindTreeTarget( hSpell ) - local Trees = GridNav:GetAllTreesAroundPoint( hSpell:GetCaster():GetOrigin(), GetTryToUseSpellRange( hSpell:GetCaster(), hSpell ), false ) - if #Trees == 0 then - return nil - end - - return Trees[RandomInt( 1, #Trees )] -end - -function CastSpellNoTarget( hSpell ) - if bBasicSpellDebug and hSpell then - print ( "CastSpellNoTarget: " .. hSpell:GetAbilityName() ) - end - ExecuteOrderFromTable({ - UnitIndex = hSpell:GetCaster():entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hSpell:entindex() - }) - - return GetSpellCastTime( hSpell ) -end - -function CastSpellUnitTarget( hSpell, hTarget ) - if bBasicSpellDebug and hSpell and hTarget then - print ( "CastSpellUnitTarget: " .. hSpell:GetAbilityName() .. ", target: ".. hTarget:GetUnitName() ) - end - ExecuteOrderFromTable({ - UnitIndex = hSpell:GetCaster():entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = hSpell:entindex() - }) - - return GetSpellCastTime( hSpell ) -end - -function CastSpellPointTarget( hSpell, vLocation ) - if bBasicSpellDebug and hSpell and vLocation then - print ( "CastSpellPointTarget: " .. hSpell:GetAbilityName() .. ", location: (" .. vLocation.x .. ", " .. vLocation.y .. ", " .. vLocation.z ) - end - ExecuteOrderFromTable({ - UnitIndex = hSpell:GetCaster():entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vLocation, - AbilityIndex = hSpell:entindex(), - }) - - return GetSpellCastTime( hSpell ) -end - -function CastSpellTreeTarget( hSpell, hTree ) - if bBasicSpellDebug and hSpell then - print( "CastSpellTreeTarget: " .. hSpell:GetAbilityName() ) - end - - ExecuteOrderFromTable({ - UnitIndex = hSpell:GetCaster():entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET_TREE, - TargetIndex = GetTreeIdForEntityIndex( hTree:entindex() ), - AbilityIndex = hSpell:entindex(), - }) - return GetSpellCastTime( hSpell ) -end - -function CastSpell( hSpell ) - if bBasicSpellDebug and hSpell then - print ( "CastSpell: " .. hSpell:GetAbilityName() ) - end - if hSpell == nil or hSpell:IsFullyCastable() == false then - if bBasicSpellDebug then - print ( "No valid spell or spell not ready!" ) - end - return 0.1 - end - - local hTarget = nil - local vTargetLoc = nil - - local nBehavior = hSpell:GetBehavior() - local nTargetTeam = hSpell:GetAbilityTargetTeam() - local nTargetType = hSpell:GetAbilityTargetType() - - if bitand( nTargetTeam, DOTA_UNIT_TARGET_TEAM_FRIENDLY ) ~= 0 and hSpell:GetAbilityName() ~= "pugna_life_drain" and hSpell:GetAbilityName() ~= "frostivus2018_luna_eclipse" then - --Maybe target a minion? - if bBasicSpellDebug then - print( "Try to cast friendly spell on myself" ) - end - return CastSpellUnitTarget( hSpell, hSpell:GetCaster() ) - else - if bitand( nTargetType, DOTA_UNIT_TARGET_TREE ) ~= 0 then - if bBasicSpellDebug then - print( "try to cast tree targeting spell" ) - end - local Tree = FindTreeTarget( hSpell ) - if Tree ~= nil then - return CastSpellTreeTarget( hSpell, Tree ) - end - end - - if bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_NO_TARGET ) ~= 0 or bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_IMMEDIATE ) ~= 0 and IsNoTargetSpellCastValid( hSpell ) then - if bBasicSpellDebug then - print( "Try to cast no target or immediate spell" ) - end - return CastSpellNoTarget( hSpell ) - end - - if bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_DIRECTIONAL ) ~= 0 then - if bBasicSpellDebug then - print( "spell is directional" ) - end - local vTargetLoc = GetBestDirectionalPointTarget( hSpell ) - if vTargetLoc ~= nil then - if bBasicSpellDebug then - print( "Try to cast directional spell" ) - end - return CastSpellPointTarget( hSpell, vTargetLoc ) - end - end - - if bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_POINT ) ~= 0 then - if bBasicSpellDebug then - print( "Stolen spell is point" ) - end - if bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_AOE ) ~= 0 then - if bBasicSpellDebug then - print( "Stolen spell is point aoe " ) - end - local vTargetLoc = GetBestAOEPointTarget( hSpell ) - if vTargetLoc ~= nil then - if bBasicSpellDebug then - print( "Try to cast point aoe spell" ) - end - return CastSpellPointTarget( hSpell, vTargetLoc ) - end - else - if bBasicSpellDebug then - print( "spell is point non-aoe" ) - end - local vTargetLoc = GetBestPointTarget( hSpell ) - if vTargetLoc ~= nil then - if bBasicSpellDebug then - print( "Try to cast point non-aoe spell" ) - end - return CastSpellPointTarget( hSpell, vTargetLoc ) - end - end - end - - if bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_UNIT_TARGET ) ~= 0 then - if bBasicSpellDebug then - print( "spell is unit targeted" ) - end - if bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_AOE ) ~= 0 then - if bBasicSpellDebug then - print( "spell is unit targeted aoe " ) - end - local hTarget = GetBestAOEUnitTarget( hSpell ) - if hTarget ~= nil then - if bBasicSpellDebug then - print( "Try to cast unit aoe spell" ) - end - return CastSpellUnitTarget( hSpell, hTarget ) - end - else - if bBasicSpellDebug then - print( "spell is unit targeted non aoe" ) - end - local hTarget = GetBestUnitTarget( hSpell ) - if hTarget ~= nil then - if bBasicSpellDebug then - print( "Try to cast unit spell" ) - end - return CastSpellUnitTarget( hSpell, hTarget ) - end - end - end - end - if bBasicSpellDebug then - print ( "No valid spell casting for my spell" ) - end - return 0.1 -end - -function GetSpellCastTime( hSpell ) - local flCastPoint = math.max( 0.25, hSpell:GetCastPoint() ) - if bBasicSpellDebug then - print( "GetSpellCastTime " .. hSpell:GetAbilityName() .. ": " .. flCastPoint + 0.01 ) - end - return flCastPoint + 0.01 -end - -function GetTryToUseSpellRange( hCaster, hSpell ) - local flCastRange = hSpell:GetCastRange( vec3_invalid, nil ) - local flAcquisitionRange = hCaster:GetAcquisitionRange() - local flTryRange = flCastRange - - if flAcquisitionRange > flCastRange then - flTryRange = flAcquisitionRange - end - - return flTryRange + CAST_RANGE_BUFFER -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/beastmaster.lua b/aghanim_singleplayer/scripts/vscripts/ai/beastmaster.lua deleted file mode 100755 index 907b605..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/beastmaster.lua +++ /dev/null @@ -1,174 +0,0 @@ ---[[ Beastmaster AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorWildAxes, BehaviorPrimalRoar } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorWildAxes = {} - -function BehaviorWildAxes:Evaluate() - --print( "BehaviorWildAxes:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.wildAxesAbility = thisEntity:FindAbilityByName( "beastmaster_wild_axes" ) - if self.wildAxesAbility and self.wildAxesAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hGushModifier = hUnit:FindModifierByName( "modifier_beastmaster_wild_axes" ) - if hGushModifier ~= nil then - --print("Enemy is already axed") - desire = 0 - else - desire = #enemies + 1 - end - end - end - end - end - - return desire -end - -function BehaviorWildAxes:Begin() - --print( "BehaviorWildAxes:Begin()" ) - if self.wildAxesAbility and self.wildAxesAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies == 0 then - return nil - end - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.1 } ) - local target = enemies[#enemies] - local targetPoint = target:GetOrigin() + RandomVector( 100 ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = targetPoint, - AbilityIndex = self.wildAxesAbility:entindex(), - Queue = false, - } - return order - end - - return nil -end - -BehaviorWildAxes.Continue = BehaviorWildAxes.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorPrimalRoar = {} - -function BehaviorPrimalRoar:Evaluate() - --print( "BehaviorPrimalRoar:Evaluate()" ) - local desire = 0 - - self.primalRoarAbility = thisEntity:FindAbilityByName( "beastmaster_primal_roar" ) - if self.primalRoarAbility and self.primalRoarAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( thisEntity:GetHealthPercent() > 75 ) then - return desire - end - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hStunModifier = hUnit:FindModifierByName( "modifier_stunned" ) - if hStunModifier ~= nil then - --print("Enemy is already stunned") - desire = 0 - else - desire = #enemies + 1 - end - end - end - end - end - - return desire -end - -function BehaviorPrimalRoar:Begin() - --print( "BehaviorPrimalRoar:Begin()" ) - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies == 0 then - return nil - end - local target = enemies[#enemies] - if self.primalRoarAbility and self.primalRoarAbility:IsFullyCastable() then - --print( "Casting Primal Roar" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = target:entindex(), - AbilityIndex = self.primalRoarAbility:entindex(), - Queue = false, - } - return order - end - - return nil -end - -BehaviorPrimalRoar.Continue = BehaviorPrimalRoar.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorWildAxes, BehaviorPrimalRoar } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/big_golem.lua b/aghanim_singleplayer/scripts/vscripts/ai/big_golem.lua deleted file mode 100755 index 88a11e3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/big_golem.lua +++ /dev/null @@ -1,59 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - RockGolemSmashAbility = thisEntity:FindAbilityByName( "aghsfort_rock_golem_smash" ) - - thisEntity:SetContextThink( "BigGolemThink", BigGolemThink, 0.25 ) -end - --------------------------------------------------------------------------------- - -function BigGolemThink() - if thisEntity == nil or thisEntity:IsNull() or thisEntity:IsAlive() == false then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local fSmashSearchRadius = RockGolemSmashAbility:GetCastRange() - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fSmashSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #enemies == 0 then - return 0.25 - end - - if RockGolemSmashAbility ~= nil and RockGolemSmashAbility:IsCooldownReady() then - local hTarget = enemies[ RandomInt( 1, #enemies ) ] - return CastRockSmash( hTarget ) - end - - return 0.25 -end - --------------------------------------------------------------------------------- - -function CastRockSmash( hTarget ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.3 } ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = RockGolemSmashAbility:entindex(), - Position = hTarget:GetAbsOrigin(), - Queue = false, - }) - - return 2.0 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/bomb_squad_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/bomb_squad_ai.lua deleted file mode 100755 index 44e0132..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/bomb_squad_ai.lua +++ /dev/null @@ -1,147 +0,0 @@ - - - -function Precache( context ) - PrecacheUnitByNameSync( "npc_aghsfort_creature_bomb_squad_landmine", context, -1 ) - PrecacheResource( "particle", "particles/units/heroes/hero_techies/techies_land_mine_explode.vpcf", context ) - PrecacheResource( "particle", "particles/econ/events/darkmoon_2017/darkmoon_calldown_marker_ring.vpcf", context ) -end - - - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.AggroAbility = thisEntity:FindAbilityByName( "bomb_squad_self_cast" ) - thisEntity.MineCharge = thisEntity:FindAbilityByName( "bomb_squad_mine_charge" ) - thisEntity.StasisLaunch = thisEntity:FindAbilityByName( "bomb_squad_stasis_launch" ) - - thisEntity.flLastOrder = GameRules:GetGameTime() - thisEntity:SetContextThink( "BombSquadThink", BombSquadThink, 1 ) -end - - - - -function BombSquadThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - - if (thisEntity:GetAggroTarget() == nil and GameRules:GetGameTime() - thisEntity.flLastOrder) > (4 - RandomFloat(0 ,1 )) then - thisEntity.flLastOrder = GameRules:GetGameTime() - return DoMove() - end - - if thisEntity.StasisLaunch and thisEntity.StasisLaunch:IsFullyCastable() then - local StasisLaunchRadius = 650 - local hEnemiesNearby = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, StasisLaunchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_FARTHEST, false ) - if #hEnemiesNearby > 0 then - local hFarthestEnemy = hEnemiesNearby[ 1 ] - return CastStasisLaunch( hFarthestEnemy ) - end - end - - if thisEntity.MineCharge and thisEntity.MineCharge:IsFullyCastable() then - return CastMineCharge() - end - --- if AggroAbility ~= true and AggroAbility:IsFullyCastable() then --- bIsAggro = true --- return CastAggroAbility() --- end - - return 0.5 -end - - ---function CastAggroAbility() --- ExecuteOrderFromTable({ --- UnitIndex = thisEntity:entindex(), --- OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, --- AbilityIndex = AggroAbility:entindex(), --- Queue = false, --- }) --- --- return 1 ---end - - -function DoMove() - if IsServer() then - - for i=1,4 do - local vLoc = FindPathablePositionNearby(thisEntity:GetAbsOrigin(), 100, 400 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vLoc - }) - break - end - end - end - return 0.5 -end - - --------------------------------------------------------------------------------- - -function CastMineCharge() - if IsServer() then - - for i=1,12 do - local vLoc = FindPathablePositionNearby(thisEntity:GetAbsOrigin(), 1800, 2400 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vLoc, - AbilityIndex = thisEntity.MineCharge:entindex(), - Queue = false, - }) - break - end - end - return 3 - end -end - - --------------------------------------------------------------------------------- - -function CastStasisLaunch( hTarget ) - if hTarget == nil or hTarget:IsNull() or hTarget:IsAlive() == false then - return 0.5 - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hTarget:GetOrigin(), - AbilityIndex = thisEntity.StasisLaunch:entindex(), - Queue = false, - }) - - return 2 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/bomb_squad_landmine_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/bomb_squad_landmine_ai.lua deleted file mode 100755 index 797c256..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/bomb_squad_landmine_ai.lua +++ /dev/null @@ -1,65 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - DetonateAblity = thisEntity:FindAbilityByName( "bomb_squad_landmine_detonate" ) - thisEntity:SetContextThink( "LandmineThink", LandmineThink, 1 ) -end - --------------------------------------------------------------------------------- - -function LandmineThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - - if DetonateAblity and DetonateAblity:IsFullyCastable() then - local fDetonateRadius = DetonateAblity:GetSpecialValueFor( "detonate_radius" ) - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fDetonateRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #enemies == 0 then - return 0.5 - end - - if thisEntity:FindModifierByName("modifier_bomb_squad_landmine_detonate") then - --we're already exploding - return -1 - end - - return Detonate() - end - return 1 -end - - --------------------------------------------------------------------------------- - -function Detonate() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = DetonateAblity:entindex(), - Queue = false, - }) - return -1 -end - - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/boss_aghanim.lua b/aghanim_singleplayer/scripts/vscripts/ai/boss_aghanim.lua deleted file mode 100755 index eaf906e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/boss_aghanim.lua +++ /dev/null @@ -1,444 +0,0 @@ -require( "ai/boss_base" ) - --------------------------------------------------------------------------------- - -if CBossAghanim == nil then - CBossAghanim = class( {}, {}, CBossBase ) -end - --------------------------------------------------------------------------------- - -function Precache( context ) -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if IsServer() then - if thisEntity == nil then - return - end - - thisEntity.AI = CBossAghanim( thisEntity, 1.0 ) - end -end - --------------------------------------------------------------------------------- - -function CBossAghanim:constructor( hUnit, flInterval ) - CBossBase.constructor( self, hUnit, flInterval ) - - self.bDefeated = false - - self.ATTACKS_BETWEEN_TELEPORT = 3 - self.ENRAGE_LESS_ATTACKS_BETWEEN_TELEPORT = 1 - self.nCurrentAttacksBetweenTeleport = self.ATTACKS_BETWEEN_TELEPORT - - self.PHASE_CRYSTAL_ATTACK = 1 - self.PHASE_STAFF_BEAMS = 2 - self.PHASE_SUMMON_PORTALS = 3 - self.PHASE_SPELL_SWAP = 4 - self.PHASE_SHARD_ATTACK = 5 - - self.nSpellSwapPct = 80 - self.bSpellSwapEnabled = false - self.nShardAttackPct = 50 - self.bShardAttackEnabled = false - self.nLevelUpPct = 66 - self.bHasLeveledUp = false - - self.AllowedPhases = - { - self.PHASE_CRYSTAL_ATTACK, - self.PHASE_SUMMON_PORTALS, - self.PHASE_STAFF_BEAMS, - } - - self.flInitialAcquireRange = 5000 - self.flAggroAcquireRange = 5000 - self.nPhaseIndex = 1 - self.nNumAttacksBeforeTeleport = self.nCurrentAttacksBetweenTeleport - self.bReturnHome = true - self.vLastBlinkLocation = Vector( -3328, 3264, 0 ) - - self.me:SetThink( "OnBossAghanimThink", self, "OnBossAghanimThink", self.flDefaultInterval ) -end - --------------------------------------------------------------------------------- - -function CBossAghanim:GetCurrentPhase() - return self.AllowedPhases[ self.nPhaseIndex ] -end - --------------------------------------------------------------------------------- - - -function CBossAghanim:SetEncounter( hEncounter ) - CBossBase.SetEncounter( self, hEncounter ) - - self.TeleportPositions = {} - - local TeleportPositions = hEncounter:GetRoom():FindAllEntitiesInRoomByName( "teleport_position" ) - for _,hEnt in pairs ( TeleportPositions ) do - table.insert( self.TeleportPositions, hEnt:GetAbsOrigin() ) - end - - local TeleportPositionMain = hEncounter:GetRoom():FindAllEntitiesInRoomByName( "teleport_position_main" ) - if #TeleportPositionMain > 0 then - self.TeleportPositionMain = TeleportPositionMain[1] - self.me.vHomePosition = self.TeleportPositionMain:GetAbsOrigin() - - table.insert( self.TeleportPositions, self.me.vHomePosition ) - end -end - --------------------------------------------------------------------------------- - -function CBossAghanim:SetupAbilitiesAndItems() - CBossBase.SetupAbilitiesAndItems( self ) - - self.hBlink = self.me:FindAbilityByName( "aghanim_blink" ) - if self.hBlink ~= nil then - self.hBlink.Evaluate = self.EvaluateBlink - self.AbilityPriority[ self.hBlink:GetAbilityName() ] = 5 - end - - self.hCrystalAttack = self.me:FindAbilityByName( "aghanim_crystal_attack" ) - if self.hCrystalAttack ~= nil then - self.hCrystalAttack.nCrystalAttackPhase = 1 - self.hCrystalAttack.hLastCrystalTarget = nil - self.hCrystalAttack.Evaluate = self.EvaluateCrystalAttack - self.AbilityPriority[ self.hCrystalAttack:GetAbilityName() ] = 4 - end - - self.hStaffBeams = self.me:FindAbilityByName( "aghanim_staff_beams" ) - if self.hStaffBeams ~= nil then - self.hStaffBeams.Evaluate = self.EvaluateStaffBeams - self.AbilityPriority[ self.hStaffBeams:GetAbilityName() ] = 3 - end - - self.hSummonPortals = self.me:FindAbilityByName( "aghanim_summon_portals" ) - if self.hSummonPortals ~= nil then - self.hSummonPortals.Evaluate = self.EvaluateSummonPortals - self.AbilityPriority[ self.hSummonPortals:GetAbilityName() ] = 2 - end - - self.hSpellSwap = self.me:FindAbilityByName( "aghanim_spell_swap" ) - if self.hSpellSwap ~= nil then - self.hSpellSwap.Evaluate = self.EvaluateSpellSwap - self.AbilityPriority[ self.hSpellSwap:GetAbilityName() ] = 1 - end - - self.hShardAttack = self.me:FindAbilityByName( "aghanim_shard_attack" ) - if self.hShardAttack ~= nil then - self.hShardAttack.Evaluate = self.EvaluateShardAttack - self.AbilityPriority[ self.hShardAttack:GetAbilityName() ] = 1 - end -end --------------------------------------------------------------------------------- - -function CBossAghanim:OnBossAghanimThink() - if self.bDefeated then - return -1 - end - - return self:OnBaseThink() -end - --------------------------------------------------------------------------------- - -function CBossAghanim:OnFirstSeen() - CBossBase.OnFirstSeen( self ) -end - --------------------------------------------------------------------------------- - -function CBossAghanim:ChangePhase() - self.nNumAttacksBeforeTeleport = self.nNumAttacksBeforeTeleport - 1 - --print ( "Aghanim is changing phase! old:" .. self:GetCurrentPhase() ) - if self.nPhaseIndex == #self.AllowedPhases then - self.nPhaseIndex = 1 - else - self.nPhaseIndex = self.nPhaseIndex + 1 - end - - self.nPhase = self.AllowedPhases[ self.nPhaseIndex ] - if self.nPhase == self.PHASE_SHARD_ATTACK then - self.nNumAttacksBeforeTeleport = 0 - self.bReturnHome = true - end -end - --------------------------------------------------------------------------------- - -function CBossAghanim:OnHealthPercentThreshold( nPct ) - CBossBase.OnHealthPercentThreshold( self, nPct ) - - if nPct < self.nSpellSwapPct and self.bSpellSwapEnabled == false then - self.nCurrentAttacksBetweenTeleport = math.max( 1, self.nCurrentAttacksBetweenTeleport - self.ENRAGE_LESS_ATTACKS_BETWEEN_TELEPORT ) - self.bSpellSwapEnabled = true - self.AllowedPhases = - { - self.PHASE_SPELL_SWAP, - self.PHASE_SUMMON_PORTALS, - self.PHASE_STAFF_BEAMS, - self.PHASE_CRYSTAL_ATTACK, - } - - self.nPhaseIndex = #self.AllowedPhases - self:ChangePhase() - - self.nNumAttacksBeforeTeleport = 0 - self.bReturnHome = true - end - - if nPct < self.nLevelUpPct and self.bHasLeveledUp == false then - self.bHasLeveledUp = true - self.me:CreatureLevelUp( 1 ) - end - - - if nPct < self.nShardAttackPct and self.bShardAttackEnabled == false then - self.nCurrentAttacksBetweenTeleport = math.max( 1, self.nCurrentAttacksBetweenTeleport - self.ENRAGE_LESS_ATTACKS_BETWEEN_TELEPORT ) - self.bShardAttackEnabled = true - self.AllowedPhases = - { - self.PHASE_SHARD_ATTACK, - self.PHASE_STAFF_BEAMS, - self.PHASE_CRYSTAL_ATTACK, - self.PHASE_SPELL_SWAP, - self.PHASE_SUMMON_PORTALS, - } - - self.nPhaseIndex = #self.AllowedPhases - self:ChangePhase() - - self.nNumAttacksBeforeTeleport = 0 - self.bReturnHome = true - end -end - --------------------------------------------------------------------------------- - -function CBossAghanim:EvaluateCrystalAttack() - if self:GetCurrentPhase() ~= self.PHASE_CRYSTAL_ATTACK then - return nil - end - - local Enemies = shallowcopy( self.hPlayerHeroes ) - local Order = nil - if Enemies == nil or #Enemies == 0 then - return Order - end - - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = Enemies[ #Enemies ]:GetAbsOrigin(), - AbilityIndex = self.hCrystalAttack:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hCrystalAttack ) - self.hCrystalAttack.hLastCrystalTarget = Enemies[#Enemies] - - return Order -end - --------------------------------------------------------------------------------- - -function CBossAghanim:EvaluateStaffBeams() - if self:GetCurrentPhase() ~= self.PHASE_STAFF_BEAMS then - return nil - end - - local vTargetPos = self.me.vHomePosition - if vTargetPos == self.vLastBlinkLocation then - local hEnemies = GetEnemyHeroesInRange( self.me, 5000 ) - if #hEnemies > 0 then - vTargetPos = hEnemies[#hEnemies]:GetAbsOrigin() - end - end - - local Order = nil - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetPos, - AbilityIndex = self.hStaffBeams:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hStaffBeams ) + self.hStaffBeams:GetChannelTime() - - return Order -end - - --------------------------------------------------------------------------------- - -function CBossAghanim:EvaluateBlink() - if self.nNumAttacksBeforeTeleport > 0 then - return nil - end - - if self.bReturnHome == true and self.vLastBlinkLocation == self.me.vHomePosition then - self.nNumAttacksBeforeTeleport = self.nCurrentAttacksBetweenTeleport - self.bReturnHome = false - return nil - end - - local vTeleportLocations = shallowcopy( self.TeleportPositions ) - for k,v in pairs ( vTeleportLocations ) do - if v == self.vLastBlinkLocation then - table.remove( vTeleportLocations, k ) - break - end - end - - local vPos = nil - if self.bReturnHome == true then - vPos = self.me.vHomePosition - else - if self:GetCurrentPhase() == self.PHASE_SUMMON_PORTALS then - local hEnemies = GetEnemyHeroesInRange( self.me, 5000 ) - if #hEnemies > 0 then - local vFarthestEnemyPos = hEnemies[#hEnemies]:GetAbsOrigin() - local vClosestPosToEnemy = nil - local flShortestDist = 99999 - for _,vTeleportPos in pairs ( vTeleportLocations ) do - local flDistToEnemy = ( vTeleportPos - vFarthestEnemyPos ):Length2D() - if flDistToEnemy < flShortestDist then - flShortestDist = flDistToEnemy - vClosestPosToEnemy = vTeleportPos - end - end - - if vTeleportPos ~= nil then - vPos = vClosestPosToEnemy - end - end - end - - if vPos == nil then - vPos = vTeleportLocations[ RandomInt( 1, #vTeleportLocations ) ] - end - end - - if vPos == nil then - return nil - end - - self.vLastBlinkLocation = vPos - - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vPos, - AbilityIndex = self.hBlink:entindex(), - Queue = false, - } - Order.flOrderInterval = 3.0 - - return Order -end - --------------------------------------------------------------------------------- - -function CBossAghanim:EvaluateSummonPortals() - if self:GetCurrentPhase() ~= self.PHASE_SUMMON_PORTALS then - return nil - end - - local vTarget = self.me.vHomePosition - local hEnemies = GetEnemyHeroesInRange( self.me, 5000 ) - if #hEnemies > 0 and self.vLastBlinkLocation == self.me.vHomePosition then - vTarget = hEnemies[ 1 ]:GetAbsOrigin() - end - - local Order = nil - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTarget, - AbilityIndex = self.hSummonPortals:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hSummonPortals ) + self.hSummonPortals:GetChannelTime() - - return Order -end - --------------------------------------------------------------------------------- - -function CBossAghanim:EvaluateSpellSwap() - if self:GetCurrentPhase() ~= self.PHASE_SPELL_SWAP then - return nil - end - - local vTargetPos = self.me.vHomePosition - if vTargetPos == self.vLastBlinkLocation then - local hEnemies = GetEnemyHeroesInRange( self.me, 5000 ) - if #hEnemies > 0 then - vTargetPos = hEnemies[#hEnemies]:GetAbsOrigin() - end - end - - local Order = nil - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetPos, - AbilityIndex = self.hSpellSwap:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hSpellSwap ) + self.hSpellSwap:GetChannelTime() - - return Order -end - --------------------------------------------------------------------------------- - -function CBossAghanim:EvaluateShardAttack() - if self:GetCurrentPhase() ~= self.PHASE_SHARD_ATTACK then - return nil - end - - local Order = nil - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = self.me.vHomePosition + Vector( 0, -150, 0 ), - AbilityIndex = self.hShardAttack:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hShardAttack ) + self.hShardAttack:GetChannelTime() - - return Order -end - - --------------------------------------------------------------------------------- - -function CBossAghanim:OnBossUsedAbility( szAbilityName ) - if szAbilityName == "aghanim_blink" then - self.nNumAttacksBeforeTeleport = self.nCurrentAttacksBetweenTeleport - self.bReturnHome = false - return - end - - if szAbilityName == "aghanim_crystal_attack" then - if self.hCrystalAttack.nPhase == 6 then - self:ChangePhase() - end - - return - end - - self:ChangePhase() -end - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/boss_base.lua b/aghanim_singleplayer/scripts/vscripts/ai/boss_base.lua deleted file mode 100755 index da377b2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/boss_base.lua +++ /dev/null @@ -1,206 +0,0 @@ -require( "ai/shared" ) -require( "ai/basic_spell_casting_ai" ) - --------------------------------------------------------------------------------- - -if CBossBase == nil then - CBossBase = class({}) -end - --------------------------------------------------------------------------------- - -function CBossBase:constructor( hUnit, flInterval ) - self.me = hUnit - self.flDefaultInterval = flInterval - self.AbilityPriority = {} - self.hPlayerHeroes = {} - self.QueuedOrders = {} - self.Encounter = nil - self.bSeenAnyEnemy = false - self.nLastHealthPct = 10000 - self.flInitialAcquireRange = 1800 - self.flAggroAcquireRange = 4500 - - self:SetupAbilitiesAndItems() - - self.nAbilityListener = ListenToGameEvent( "dota_non_player_used_ability", Dynamic_Wrap( getclass( self ), 'OnNonPlayerUsedAbility' ), self ) -end - --------------------------------------------------------------------------------- - -function CBossBase:SetupAbilitiesAndItems() - --empty -end - --------------------------------------------------------------------------------- - -function CBossBase:SetEncounter( Encounter ) - self.Encounter = Encounter -end - --------------------------------------------------------------------------------- - -function CBossBase:OnBaseThink() - if self.me == nil or self.me:IsNull() or self.me:IsAlive() == false then - StopListeningToGameEvent( self.nAbilityListener ) - return -1 - end - - Order = nil - - if self.Encounter == nil or self.Encounter:HasStarted() == false then - return 0.01 - end - - if GameRules:IsGamePaused() then - return 0.01 - end - - local flRange = self.flInitialAcquireRange - if self.bSeenAnyEnemy == true then - flRange = self.flAggroAcquireRange - end - self.hPlayerHeroes = GetVisibleEnemyHeroesInRange( self.me, flRange ) - - if #self.hPlayerHeroes == 0 then - goto autoattack - elseif self.bSeenAnyEnemy == false then - self.bSeenAnyEnemy = true - self:OnFirstSeen() - end - - if self.nLastHealthPct > self.me:GetHealthPercent() then - self.nLastHealthPct = self.me:GetHealthPercent() - self:OnHealthPercentThreshold( self.nLastHealthPct ) - end - - AbilitiesReady = self:GetReadyAbilitiesAndItems() - if #AbilitiesReady == 0 then - goto autoattack - end - - if #self.QueuedOrders > 0 then - Order = self.QueuedOrders[ 1 ] - table.remove( self.QueuedOrders, 1 ) - goto execute_order - else - for _,Ability in pairs ( AbilitiesReady ) do - if Ability.Evaluate ~= nil then - local TryOrder = Ability.Evaluate( self ) - if TryOrder ~= nil then - Order = TryOrder - break - end - end - end - end - - ::autoattack:: - - NonAbilityOrder = nil - if Order == nil then - NonAbilityOrder = self:GetNonAbilityOrder() - if NonAbilityOrder ~= nil then - --print( 'NON ABILITY ORDER' ) - Order = NonAbilityOrder - end - end - - if Order == nil and #self.hPlayerHeroes > 0 then - --print( 'autoattack for ' .. self.flDefaultInterval ) - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = self.hPlayerHeroes[ 1 ]:GetAbsOrigin(), - } - Order.flOrderInterval = self.flDefaultInterval - end - - ::execute_order:: - if Order then - --print( 'Executing Order ' .. Order.OrderType .. ' and sleeping for ' .. Order.flOrderInterval ) - ExecuteOrderFromTable( Order ) - return Order.flOrderInterval - end - - ::idle:: - return self.flDefaultInterval -end - --------------------------------------------------------------------------------- - -function CBossBase:GetReadyAbilitiesAndItems() - local AbilitiesReady = {} - for n=0,self.me:GetAbilityCount() - 1 do - local hAbility = self.me:GetAbilityByIndex( n ) - if hAbility and hAbility:IsFullyCastable() and not hAbility:IsPassive() and not hAbility:IsHidden() and hAbility:IsActivated() then - --print( 'Adding ABILITY ' .. hAbility:GetAbilityName() ) - if self.AbilityPriority[ hAbility:GetAbilityName() ] ~= nil then - table.insert( AbilitiesReady, hAbility ) - end - end - end - - for i = 0, DOTA_ITEM_MAX - 1 do - local hItem = self.me:GetItemInSlot( i ) - if hItem and hItem:IsFullyCastable() and not hItem:IsPassive() and not hItem:IsHidden() and hItem:IsActivated() then - --print( 'Adding ITEM ' .. hItem:GetAbilityName() ) - if self.AbilityPriority[ hItem:GetAbilityName() ] ~= nil then - table.insert( AbilitiesReady, hItem ) - end - end - end - - if #AbilitiesReady > 1 then - table.sort( AbilitiesReady, function( h1, h2 ) - local nAbility1Priority = self.AbilityPriority[ h1:GetAbilityName() ] - local nAbility2Priority = self.AbilityPriority[ h2:GetAbilityName() ] - return nAbility1Priority > nAbility2Priority - end - ) - end - - return AbilitiesReady -end - --------------------------------------------------------------------------------- - -function CBossBase:GetNonAbilityOrder() - return nil -end - --------------------------------------------------------------------------------- - -function CBossBase:OnFirstSeen() - -- empty -end - --------------------------------------------------------------------------------- - -function CBossBase:OnHealthPercentThreshold( nPct ) - -- empty -end ---------------------------------------------------------- --- dota_non_player_used_ability --- * abilityname --- * caster_entindex ---------------------------------------------------------- -function CBossBase:OnNonPlayerUsedAbility( event ) - - local hCaster = nil - if event.caster_entindex ~= nil and event.abilityname ~= nil then - hCaster = EntIndexToHScript( event.caster_entindex ) - if hCaster ~= nil and hCaster == self.me then - self:OnBossUsedAbility( event.abilityname ) - end - end -end - --------------------------------------------------------------------------------- - -function CBossBase:OnBossUsedAbility( szAbilityName ) - -- empty -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/boss_timbersaw.lua b/aghanim_singleplayer/scripts/vscripts/ai/boss_timbersaw.lua deleted file mode 100755 index 715def2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/boss_timbersaw.lua +++ /dev/null @@ -1,272 +0,0 @@ -require( "ai/boss_base" ) - --------------------------------------------------------------------------------- - -if CBossTimbersaw == nil then - CBossTimbersaw = class( {}, {}, CBossBase ) -end - --------------------------------------------------------------------------------- - -function Precache( context ) - PrecacheUnitByNameSync( "npc_dota_furion_treant_4", context, -1 ) -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if IsServer() then - if thisEntity == nil then - return - end - - thisEntity.AI = CBossTimbersaw( thisEntity, 1.0 ) - end -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:constructor( hUnit, flInterval ) - CBossBase.constructor( self, hUnit, flInterval ) - - self.nTreeListener = ListenToGameEvent( "tree_cut", Dynamic_Wrap( getclass( self ), 'OnTreeCut' ), self ) - self.bEnraged = false - self.nEnragePct = 60 - self.nNumTreantsPerTree = 1 - self.nMaxTreants = 40 - - self.me:SetThink( "OnBossTimbersawThink", self, "OnBossTimbersawThink", self.flDefaultInterval ) -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:SetupAbilitiesAndItems() - CBossBase.SetupAbilitiesAndItems( self ) - - self.hWhirlingDeath = self.me:FindAbilityByName( "boss_timbersaw_whirling_death" ) - if self.hWhirlingDeath ~= nil then - self.hWhirlingDeath.Evaluate = self.EvaluateWhirlingDeath - self.AbilityPriority[ self.hWhirlingDeath:GetAbilityName() ] = 4 - end - - self.hTimberChain = self.me:FindAbilityByName( "boss_timbersaw_timber_chain" ) - if self.hTimberChain ~= nil then - self.hTimberChain.Evaluate = self.EvaluateTimberChain - self.AbilityPriority[ self.hTimberChain:GetAbilityName() ] = 5 - end - - self.hChakram = self.me:FindAbilityByName( "shredder_chakram" ) - if self.hChakram ~= nil then - self.hChakram.Evaluate = self.EvaluateChakram - self.AbilityPriority[ self.hChakram:GetAbilityName() ] = 2 - end - - self.hReturnChakram = self.me:FindAbilityByName( "shredder_return_chakram" ) - if self.hReturnChakram ~= nil then - self.hReturnChakram.Evaluate = self.EvaluateReturnChakram - self.AbilityPriority[ self.hReturnChakram:GetAbilityName() ] = 6 - end - - self.hChakram2 = self.me:FindAbilityByName( "shredder_chakram_2" ) - if self.hChakram2 ~= nil then - self.hChakram2:SetActivated( true ) - self.hChakram2:SetHidden( false ) - self.hChakram2:UpgradeAbility( true ) - self.hChakram2.Evaluate = self.EvaluateChakram2 - self.AbilityPriority[ self.hChakram2:GetAbilityName() ] = 3 - end - - self.hReturnChakram2 = self.me:FindAbilityByName( "shredder_return_chakram_2" ) - if self.hReturnChakram2 ~= nil then - self.hReturnChakram2.Evaluate = self.EvaluateReturnChakram2 - self.AbilityPriority[ self.hReturnChakram2:GetAbilityName() ] = 7 - end - - self.hChakramDance = self.me:FindAbilityByName( "boss_timbersaw_chakram_dance" ) - if self.hChakramDance then - self.hChakramDance.Evaluate = self.EvaluateChakramDance - self.AbilityPriority[ self.hChakramDance:GetAbilityName() ] = 1 - end -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:OnTreeCut( event ) - - if self.me:IsNull() or not self.me:IsAlive() then - StopListeningToGameEvent( self.nTreeListener ) - return - end - - if self.Encounter and self.Encounter.SpawnedSecondaryEnemies and #self.Encounter.SpawnedSecondaryEnemies > self.nMaxTreants then - --print( "Timbersaw is not creating more treants; hit the maximum alive!" ) - return - end - - local vLocation = Vector( event.tree_x, event.tree_y, 0 ) - for i=1,self.nNumTreantsPerTree do - local hTreant = CreateUnitByName( "npc_dota_creature_timbersaw_treant", vLocation, true, self.me, self.me:GetOwner(), self.me:GetTeamNumber() ) - if hTreant ~= nil then - hTreant:SetControllableByPlayer( self.me:GetPlayerOwnerID(), false ) - hTreant:SetOwner( self.me ) - hTreant.bBossMinion = true - self.Encounter:SuppressRewardsOnDeath( hTreant ) - - if #self.hPlayerHeroes > 0 then - hTreant:SetInitialGoalEntity( self.hPlayerHeroes[ RandomInt( 1, #self.hPlayerHeroes ) ] ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:OnBossTimbersawThink() - return self:OnBaseThink() -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:OnFirstSeen() - CBossBase.OnFirstSeen( self ) -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:OnHealthPercentThreshold( nPct ) - CBossBase.OnHealthPercentThreshold( self, nPct ) - if nPct <= self.nEnragePct and self.bEnraged == false then - self.bEnraged = true - end -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:EvaluateWhirlingDeath() - local Enemies = shallowcopy( self.hPlayerHeroes ) - Enemies = FilterEntitiesOutsideOfRange( self.me:GetAbsOrigin(), Enemies, self.hWhirlingDeath:GetSpecialValueFor( "whirling_radius" ) ) - - local Order = nil - if #Enemies >= 1 then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hWhirlingDeath:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hWhirlingDeath ) - end - - return Order -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:EvaluateTimberChain() - local Order = nil - local vTargetLocation = GetBestDirectionalPointTarget( self.hTimberChain ) - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hTimberChain:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hTimberChain ) + 0.5 -- Factor in a little travel time - end - - return Order -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:EvaluateChakram() - local Order = nil - local vTargetLocation = GetBestAOEPointTarget( self.hChakram ) - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hChakram:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hChakram ) - self.hReturnChakram:StartCooldown( RandomFloat( 1.5, 4.5 ) ) - end - return Order -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:EvaluateChakram2() - local Order = nil - local vTargetLocation = GetBestAOEPointTarget( self.hChakram2 ) - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hChakram2:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hChakram2 ) - self.hReturnChakram2:StartCooldown( RandomFloat( 1.5, 4.5 ) ) - end - return Order -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:EvaluateReturnChakram() - local Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hReturnChakram:entindex(), - Queue = false, - } - - Order.flOrderInterval = 0.1 - return Order -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:EvaluateReturnChakram2() - local Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hReturnChakram2:entindex(), - Queue = false, - } - - Order.flOrderInterval = 0.1 - return Order -end - --------------------------------------------------------------------------------- - -function CBossTimbersaw:EvaluateChakramDance() - local Order = nil - if self.bEnraged == true then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hChakramDance:entindex(), - Queue = false, - } - - Order.flOrderInterval = self.hChakramDance:GetChannelTime() + 0.2 - end - return Order -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/boss_visage.lua b/aghanim_singleplayer/scripts/vscripts/ai/boss_visage.lua deleted file mode 100755 index 0e5e749..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/boss_visage.lua +++ /dev/null @@ -1,125 +0,0 @@ -require( "ai/boss_base" ) - --------------------------------------------------------------------------------- - -if CBossVisage == nil then - CBossVisage = class( {}, {}, CBossBase ) -end - --------------------------------------------------------------------------------- - -function Precache( context ) - -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if IsServer() then - if thisEntity == nil then - return - end - - thisEntity.AI = CBossVisage( thisEntity, 1.0 ) - end -end - --------------------------------------------------------------------------------- - -function CBossVisage:constructor( hUnit, flInterval ) - CBossBase.constructor( self, hUnit, flInterval ) - self.bEnraged = false - self.nEnragePct = 90 - self.me.bStone = false - - self.me:SetThink( "OnBossVisageThink", self, "OnBossVisageThink", self.flDefaultInterval ) -end - --------------------------------------------------------------------------------- - -function CBossVisage:SetupAbilitiesAndItems() - CBossBase.SetupAbilitiesAndItems( self ) - - self.hRangedAttack = self.me:FindAbilityByName( "boss_visage_ranged_attack" ) - if self.hRangedAttack ~= nil then - self.hRangedAttack.Evaluate = self.EvaluateRangedAttack - self.AbilityPriority[ self.hRangedAttack:GetAbilityName() ] = 2 - end - self.hGraveChill = self.me:FindAbilityByName( "boss_visage_grave_chill" ) - if self.hGraveChill ~= nil then - self.hGraveChill.Evaluate = self.EvaluateGraveChill - self.AbilityPriority[ self.hGraveChill:GetAbilityName() ] = 1 - end -end - --------------------------------------------------------------------------------- - -function CBossVisage:OnBossVisageThink() - if self.me.bStone then - return self.flDefaultInterval - end - - return self:OnBaseThink() -end - --------------------------------------------------------------------------------- - -function CBossVisage:OnFirstSeen() - CBossBase.OnFirstSeen( self ) -end - --------------------------------------------------------------------------------- - -function CBossVisage:OnHealthPercentThreshold( nPct ) - CBossBase.OnHealthPercentThreshold( self, nPct ) - if nPct <= self.nEnragePct and self.bEnraged == false then - self.bEnraged = true - end -end - --------------------------------------------------------------------------------- - -function CBossVisage:EvaluateRangedAttack() - local Order = nil - local hTarget = GetBestUnitTarget( self.hRangedAttack ) - if hTarget == nil then - return Order - end - - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hTarget:GetAbsOrigin(), - AbilityIndex = self.hRangedAttack:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hRangedAttack ) - - - return Order -end - --------------------------------------------------------------------------------- - -function CBossVisage:EvaluateGraveChill() - local Order = nil - local hTarget = GetBestUnitTarget( self.hGraveChill ) - if hTarget == nil then - return Order - end - - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hGraveChill:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hGraveChill ) - return Order -end - - - - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/boss_void_spirit.lua b/aghanim_singleplayer/scripts/vscripts/ai/boss_void_spirit.lua deleted file mode 100755 index c6c79c2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/boss_void_spirit.lua +++ /dev/null @@ -1,319 +0,0 @@ - -require( "ai/boss_base" ) - --------------------------------------------------------------------------------- - -if CBossVoidSpirit == nil then - CBossVoidSpirit = class( {}, {}, CBossBase ) -end - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if IsServer() then - if thisEntity == nil then - return - end - - thisEntity.AI = CBossVoidSpirit( thisEntity, 1.0 ) - end -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:constructor( hUnit, flInterval ) - CBossBase.constructor( self, hUnit, flInterval ) - - self.fDissimilateStartTime = nil - - self.nEnragePct = 50 - self.bEnraged = false - - self.nAstralPct = 90 - self.bAstralEnabled = false - - self.me:SetThink( "OnBossVoidSpiritThink", self, "OnBossVoidSpiritThink", self.flDefaultInterval ) -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:SetupAbilitiesAndItems() - CBossBase.SetupAbilitiesAndItems( self ) - - self.hAetherRemnant = self.me:FindAbilityByName( "aghsfort_void_spirit_boss_aether_remnant" ) - if self.hAetherRemnant ~= nil then - self.hAetherRemnant.Evaluate = self.EvaluateAetherRemnant - self.AbilityPriority[ self.hAetherRemnant:GetAbilityName() ] = 5 - end - - self.hDissimilate = self.me:FindAbilityByName( "aghsfort_void_spirit_boss_dissimilate" ) - if self.hDissimilate ~= nil then - self.fDissimilatePhaseDuration = self.hDissimilate:GetSpecialValueFor( "phase_duration" ) - self.fPctOfPhaseForSelection = self.hDissimilate:GetSpecialValueFor( "pct_of_phase_for_selection" ) - local first_ring_distance_offset = self.hDissimilate:GetSpecialValueFor( "first_ring_distance_offset" ) - local damage_radius = self.hDissimilate:GetSpecialValueFor( "damage_radius" ) - self.fDissimilateFullRadius = first_ring_distance_offset + damage_radius - - self.hDissimilate.Evaluate = self.EvaluateDissimilate - self.AbilityPriority[ self.hDissimilate:GetAbilityName() ] = 3 - end - - self.hResonantPulse = self.me:FindAbilityByName( "aghsfort_void_spirit_boss_resonant_pulse" ) - if self.hResonantPulse ~= nil then - self.hResonantPulse.Evaluate = self.EvaluateResonantPulse - self.AbilityPriority[ self.hResonantPulse:GetAbilityName() ] = 4 - end - - self.hAstralStep = self.me:FindAbilityByName( "aghsfort_void_spirit_boss_astral_step" ) - if self.hAstralStep ~= nil then - self.hAstralStep.Evaluate = self.EvaluateAstralStep - self.AbilityPriority[ self.hAstralStep:GetAbilityName() ] = 2 - end - - self.hActivateEarthSpirits = self.me:FindAbilityByName( "void_spirit_boss_activate_earth_spirits" ) - if self.hActivateEarthSpirits then - self.hActivateEarthSpirits.Evaluate = self.EvaluateActivateEarthSpirits - self.AbilityPriority[ self.hActivateEarthSpirits:GetAbilityName() ] = 1 - end -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:OnBossVoidSpiritThink() - if GameRules:IsGamePaused() then - return 0.1 - end - - -- Am I in Dissimilate? - if self.fDissimilateStartTime and ( GameRules:GetGameTime() < ( self.fDissimilateStartTime + self.fDissimilatePhaseDuration ) ) then - --printf( "I'm in Dissimilate phase, game time: %.2f; dissimilate start time: %.2f; dissimilate phase duration: %.2f", GameRules:GetGameTime(), self.fDissimilateStartTime, self.fDissimilatePhaseDuration ) - - -- Issue a move command that takes me near a random player within the full Dissimilate radius - local nSearchRangeReduction = self.hDissimilate:GetSpecialValueFor( "search_range_reduction" ) - local fSearchRange = self.fDissimilateFullRadius - nSearchRangeReduction - --printf( "fSearchRange: %d, self.fDissimilateFullRadius: %d, nSearchRangeReduction: %d", fSearchRange, self.fDissimilateFullRadius, nSearchRangeReduction ) - local enemiesInDissimilate = FindUnitsInRadius( self.me:GetTeamNumber(), self.me:GetOrigin(), nil, fSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemiesInDissimilate > 0 then - --printf( "#enemiesInDissimilate: %d; self.fDissimilateFullRadius: %.2f", #enemiesInDissimilate, self.fDissimilateFullRadius ) - local hRandomEnemy = enemiesInDissimilate[ RandomInt( 1, #enemiesInDissimilate ) ] - - local Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = hRandomEnemy:GetOrigin(), - Queue = true, - } - - ExecuteOrderFromTable( Order ) - - --printf( "-----" ) - --printf( "Current time: %.2f, dissimilate phase ends at: %.2f", GameRules:GetGameTime(), ( self.fDissimilateStartTime + self.fDissimilatePhaseDuration ) ) - --printf( "Found a random enemy in Dissimilate (%s); moving to: %s", hRandomEnemy:GetUnitName(), hRandomEnemy:GetOrigin() ) - --printf( "%s was issued move order", self.me:GetUnitName() ) - - local fInterval = self.fDissimilatePhaseDuration + 0.2 - --printf( "returning in %.2f seconds", fInterval ) - - return fInterval - else - -- Nobody's within Dissimilate's full radius, so just try to get to the closest player - local fSearchRadius = 4000 - local enemies = FindUnitsInRadius( self.me:GetTeamNumber(), self.me:GetOrigin(), nil, fSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies > 0 then - local hNearestEnemy = enemies[ 1 ] - local vDir = hNearestEnemy:GetAbsOrigin() - self.me:GetAbsOrigin() - vDir.z = 0.0 - vDir = vDir:Normalized() - - local vRightClickPos = self.me:GetAbsOrigin() + ( vDir * ( self.me:GetDayTimeVisionRange() - 20 ) ) - - local Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vRightClickPos, - Queue = true, - } - - ExecuteOrderFromTable( Order ) - - --printf( "-----" ) - --printf( "Current time: %.2f, dissimilate phase ends at: %.2f", GameRules:GetGameTime(), ( self.fDissimilateStartTime + self.fDissimilatePhaseDuration ) ) - --printf( "There are no enemies in Dissimilate; moving to nearest enemy \"%s\" at: %s", hNearestEnemy:GetUnitName(), hNearestEnemy:GetOrigin() ) - --printf( "%s was issued move order", self.me:GetUnitName() ) - - local fInterval = self.fDissimilatePhaseDuration + 0.2 - --printf( "returning in %.2f seconds", fInterval ) - - return fInterval - end - end - end - - --printf( "OnBossVoidSpiritThink - Chain to OnBaseThink at time: %.2f", GameRules:GetGameTime() ) - return self:OnBaseThink() -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:OnFirstSeen() - CBossBase.OnFirstSeen( self ) -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:OnHealthPercentThreshold( nPct ) - CBossBase.OnHealthPercentThreshold( self, nPct ) - - if IsServer() then - if nPct <= self.nEnragePct and self.bEnraged == false then - self.bEnraged = true - end - - if nPct <= self.nAstralPct and self.bAstralEnabled == false then - self.bAstralEnabled = true - end - end -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:EvaluateAetherRemnant() - local Enemies = shallowcopy( self.hPlayerHeroes ) - local nSearchRadius = self.hAetherRemnant:GetCastRange() - Enemies = GetEnemyHeroesInRange( self.me, nSearchRadius ) - - local Order = nil - if #Enemies >= 1 then - -- Hack alert: the aghsfort Aether Remnant ability C++ stomps some of this with its own farthest target selection - local hFarthestEnemy = Enemies[ #Enemies ] - local vDir = hFarthestEnemy:GetAbsOrigin() - self.me:GetAbsOrigin() - local fDistance = vDir:Length2D() - vDir.z = 0 - vDir = vDir:Normalized() - - local vTargetLocation = hFarthestEnemy:GetAbsOrigin() - ( vDir * 350 ) - - if fDistance < 400 then - -- Place remnant behind the target enemy instead - vTargetLocation = hFarthestEnemy:GetAbsOrigin() + ( vDir * 200 ) - end - - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hAetherRemnant:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hAetherRemnant ) - end - end - - return Order -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:EvaluateDissimilate() - local Enemies = shallowcopy( self.hPlayerHeroes ) - local nSearchRadius = self.hDissimilate:GetSpecialValueFor( "damage_radius" ) * 3 -- total radius is approx 3 portal radii - --printf( "EvaluateDissimilate - nSearchRadius == %d", nSearchRadius ) - Enemies = GetEnemyHeroesInRange( self.me, nSearchRadius ) - - local Order = nil - if #Enemies >= 1 then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hDissimilate:entindex(), - Queue = false, - } - - local fPhaseDuration = self.hDissimilate:GetSpecialValueFor( "phase_duration" ) - Order.flOrderInterval = GetSpellCastTime( self.hDissimilate ) + ( fPhaseDuration * ( self.fPctOfPhaseForSelection / 100 ) ) - --printf( "EvaluateDissimilate - order interval: %.2f (spell cast time: %.2f, phase duration: %.2f, pct_of_phase_for_selection: %.2f)", Order.flOrderInterval, GetSpellCastTime( self.hDissimilate ), fPhaseDuration, self.fPctOfPhaseForSelection ) - - self.fDissimilateStartTime = GameRules:GetGameTime() - end - - return Order -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:EvaluateResonantPulse() - local Enemies = shallowcopy( self.hPlayerHeroes ) - local nSearchRadius = self.hResonantPulse:GetSpecialValueFor( "radius" ) - Enemies = GetEnemyHeroesInRange( self.me, nSearchRadius ) - - local Order = nil - if #Enemies >= 1 then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hResonantPulse:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hResonantPulse ) - end - - return Order -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:EvaluateAstralStep() - if not self.bAstralEnabled then - return - end - - local Order = nil - - local Enemies = shallowcopy( self.hPlayerHeroes ) - local nSearchRadius = self.hAstralStep:GetSpecialValueFor( "max_travel_distance" ) - Enemies = GetEnemyHeroesInRange( self.me, nSearchRadius ) - - if #Enemies >= 1 then - local vTargetLocation = Enemies[ #Enemies ]:GetAbsOrigin() -- target the farthest unit - if vTargetLocation ~= nil then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetLocation, - AbilityIndex = self.hAstralStep:entindex(), - Queue = false, - } - Order.flOrderInterval = GetSpellCastTime( self.hAstralStep ) + 0.5 -- Factor in a little travel time - end - end - - return Order -end - --------------------------------------------------------------------------------- - -function CBossVoidSpirit:EvaluateActivateEarthSpirits() - local Order = nil - if self.bEnraged == true then - Order = - { - UnitIndex = self.me:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.hActivateEarthSpirits:entindex(), - Queue = false, - } - - Order.flOrderInterval = self.hActivateEarthSpirits:GetChannelTime() + 0.2 - end - - return Order -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster.lua b/aghanim_singleplayer/scripts/vscripts/ai/brewmaster.lua deleted file mode 100755 index 848d7e2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster.lua +++ /dev/null @@ -1,165 +0,0 @@ ---[[ Brewmaster AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.bWantsToSplit = false - thisEntity.startSplitTime = -1 - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorThunderClap, BehaviorPrimalSplit } ) -end - -function AIThink() - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - if thisEntity.bWantsToSplit then - return nil - end - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorThunderClap = {} - -function BehaviorThunderClap:Evaluate() - --print( "BehaviorThunderClap:Evaluate()" ) - local desire = 0 - if thisEntity.bWantsToSplit then - return desire - end - - self.thunderClapAbility = thisEntity:FindAbilityByName( "aghsfort_brewmaster_thunderclap" ) - if self.thunderClapAbility and self.thunderClapAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hGushModifier = hUnit:FindModifierByName( "modifier_brewmaster_thunder_clap" ) - if hGushModifier ~= nil then - --print("Enemy is already thunder clapped") - desire = 0 - else - desire = #enemies + 1 - end - end - end - end - end - - return desire -end - -function BehaviorThunderClap:Begin() - --print( "BehaviorThunderClap:Begin()" ) - if self.thunderClapAbility and self.thunderClapAbility:IsFullyCastable() then - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 350, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return nil - end - local hTarget = hEnemies[#hEnemies] - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.thunderClapAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorThunderClap.Continue = BehaviorThunderClap.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorPrimalSplit = {} - -function BehaviorPrimalSplit:Evaluate() - --print( "BehaviorPrimalSplit:Evaluate()" ) - local desire = 0 - if thisEntity.bWantsToSplit then - return 1000000 - end - -- Bremaster can only use Primal Split once - self.primalSplitAbility = thisEntity:FindAbilityByName( "aghsfort_brewmaster_primal_split" ) - if self.primalSplitAbility and self.primalSplitAbility:IsFullyCastable() then - if thisEntity:GetHealthPercent() < 40 and GameRules:GetGameTime() > thisEntity.startSplitTime then - thisEntity.bWantsToSplit = true - return 10000 - end - end - - return desire -end - -function BehaviorPrimalSplit:Begin() - --print( "BehaviorPrimalSplit:Begin()" ) - - if self.primalSplitAbility and self.primalSplitAbility:IsFullyCastable() and GameRules:GetGameTime() > thisEntity.startSplitTime then - thisEntity.startSplitTime = GameRules:GetGameTime() + 0.7 - --print( "execute order" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.primalSplitAbility:entindex() - } - - ExecuteOrderFromTable( order ) - - return nil - end - - return nil -end - -function BehaviorPrimalSplit:IsDone() - return true -end - -BehaviorPrimalSplit.Continue = BehaviorPrimalSplit.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorThunderClap, BehaviorPrimalSplit } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_earth.lua b/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_earth.lua deleted file mode 100755 index 4ccd601..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_earth.lua +++ /dev/null @@ -1,166 +0,0 @@ ---[[ Brewling Earth AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.bInitialized = false - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorThunderClap, BehaviorRunAway } ) -end - -function AIThink() - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorThunderClap = {} - -function BehaviorThunderClap:Evaluate() - --print( "BehaviorThunderClap:Evaluate()" ) - local desire = 0 - - self.thunderClapAbility = thisEntity:FindAbilityByName( "aghsfort_brewmaster_thunderclap" ) - if self.thunderClapAbility and self.thunderClapAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 350, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hGushModifier = hUnit:FindModifierByName( "modifier_brewmaster_thunder_clap" ) - if hGushModifier ~= nil then - --print("Enemy is already thunder clapped") - desire = 0 - else - desire = #enemies + 1 - end - end - end - end - end - - return desire -end - -function BehaviorThunderClap:Begin() - --print( "BehaviorThunderClap:Begin()" ) - if self.thunderClapAbility and self.thunderClapAbility:IsFullyCastable() then - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 350, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return nil - end - local hTarget = hEnemies[#hEnemies] - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.thunderClapAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorThunderClap.Continue = BehaviorThunderClap.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRunAway = {} - -function BehaviorRunAway:Evaluate() - local desire = 0 - - -- let's not choose this twice in a row, or even too close to another escape - if behaviorSystem.currentBehavior == self or - ( self.startEscapeTime ~= nil and ( ( GameRules:GetGameTime() - self.startEscapeTime ) < 3 ) ) then - return desire - end - - self.escapePoint = thisEntity.vInitialSpawnPos - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 2 ) and ( thisEntity:GetHealthPercent() < 30 ) then - desire = #enemies + 1 - end - - return desire -end - - -function BehaviorRunAway:Begin() - --print( "BehaviorRunAway:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - -- move towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -function BehaviorRunAway:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 2 ) ) or - ( ( thisEntity:GetAbsOrigin() - self.escapePoint ):Length2D() < 200 ) -end - -function BehaviorRunAway:Think( ) - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorThunderClap, BehaviorRunAway } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_fire.lua b/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_fire.lua deleted file mode 100755 index 5f7c4d7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_fire.lua +++ /dev/null @@ -1,115 +0,0 @@ ---[[ Brewling Fire AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.bInitialized = false - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorRunAway } ) -end - -function AIThink() - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRunAway = {} - -function BehaviorRunAway:Evaluate() - local desire = 0 - - -- let's not choose this twice in a row, or even too close to another escape - if behaviorSystem.currentBehavior == self or - ( self.startEscapeTime ~= nil and ( ( GameRules:GetGameTime() - self.startEscapeTime ) < 3 ) ) then - return desire - end - - self.escapePoint = thisEntity.vInitialSpawnPos - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 2 ) and ( thisEntity:GetHealthPercent() < 30 ) then - desire = #enemies + 1 - end - - return desire -end - - -function BehaviorRunAway:Begin() - --print( "BehaviorRunAway:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - -- move towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -function BehaviorRunAway:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 2 ) ) or - ( ( thisEntity:GetAbsOrigin() - self.escapePoint ):Length2D() < 200 ) -end - -function BehaviorRunAway:Think( ) - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorRunAway } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_storm.lua b/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_storm.lua deleted file mode 100755 index c806f38..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/brewmaster_storm.lua +++ /dev/null @@ -1,115 +0,0 @@ ---[[ Brewling Storm AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.bInitialized = false - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorRunAway } ) -end - -function AIThink() - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRunAway = {} - -function BehaviorRunAway:Evaluate() - local desire = 0 - - -- let's not choose this twice in a row, or even too close to another escape - if behaviorSystem.currentBehavior == self or - ( self.startEscapeTime ~= nil and ( ( GameRules:GetGameTime() - self.startEscapeTime ) < 3 ) ) then - return desire - end - - self.escapePoint = thisEntity.vInitialSpawnPos - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 2 ) and ( thisEntity:GetHealthPercent() < 30 ) then - desire = #enemies + 1 - end - - return desire -end - - -function BehaviorRunAway:Begin() - --print( "BehaviorRunAway:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - -- move towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -function BehaviorRunAway:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 2 ) ) or - ( ( thisEntity:GetAbsOrigin() - self.escapePoint ):Length2D() < 200 ) -end - -function BehaviorRunAway:Think( ) - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorRunAway } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/broodmother.lua b/aghanim_singleplayer/scripts/vscripts/ai/broodmother.lua deleted file mode 100755 index 3abaaa5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/broodmother.lua +++ /dev/null @@ -1,62 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hWebAbility = thisEntity:FindAbilityByName( "broodmother_web" ) - - thisEntity:SetContextThink( "BroodmotherThink", BroodmotherThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function BroodmotherThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local fSearchRange = thisEntity.hWebAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.1 - end - - if thisEntity.hWebAbility and thisEntity.hWebAbility:IsFullyCastable() then - local hFarthestEnemy = hEnemies[ #hEnemies ] - --local hRandomEnemy = hEnemies[ RandomInt( 1, #hEnemies ) ] - - return CastWeb( hFarthestEnemy ) - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function CastWeb( hTarget ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hTarget:GetOrigin(), - AbilityIndex = thisEntity.hWebAbility:entindex(), - Queue = false, - }) - - local fReturnTime = thisEntity.hWebAbility:GetCastPoint() + 0.1 - return fReturnTime -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/dragon_knight.lua b/aghanim_singleplayer/scripts/vscripts/ai/dragon_knight.lua deleted file mode 100755 index 68626ff..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/dragon_knight.lua +++ /dev/null @@ -1,120 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.fMaxSearchRange = 1000 - - thisEntity.hDragonTailAbility = thisEntity:FindAbilityByName( "aghsfort_dragon_knight_dragon_tail" ) - thisEntity.hDragonFormAbility = thisEntity:FindAbilityByName( "aghsfort_dragon_knight_elder_dragon_form" ) - - thisEntity:SetContextThink( "DragonKnightThink", DragonKnightThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function DragonKnightThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - --[[ - if not thisEntity.bInitialized then - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_creature_black_king_bar" then - thisEntity.bkbAbility = item - end - end - - thisEntity.bInitialized = true - end - ]] - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fMaxSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.25 - end - - local fHealthPctToDragon = 50 - if thisEntity:GetHealthPercent() < fHealthPctToDragon and thisEntity.hDragonFormAbility and thisEntity.hDragonFormAbility:IsFullyCastable() then - return CastDragonForm() - end - - --[[ - local fHealthPctToBKB = 30 - if thisEntity:GetHealthPercent() < fHealthPctToBKB and thisEntity.bkbAbility and thisEntity.bkbAbility:IsFullyCastable() then - return CastBKB() - end - ]] - - local fTailSearchRange = thisEntity.hDragonTailAbility:GetCastRange() - local hTailEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fTailSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hTailEnemies == 0 then - return 0.25 - end - - local fHealthPctToTail = 90 - if thisEntity:GetHealthPercent() < fHealthPctToTail and thisEntity.hDragonTailAbility and thisEntity.hDragonTailAbility:IsFullyCastable() then - local hRandomTailTarget = hTailEnemies[ RandomInt( 1, #hTailEnemies ) ] - return CastDragonTail( hRandomTailTarget ) - end - - return 0.25 -end - --------------------------------------------------------------------------------- - -function CastDragonTail( hTarget ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = thisEntity.hDragonTailAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastDragonForm() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hDragonFormAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - --------------------------------------------------------------------------------- - ---[[ -function CastBKB() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.bkbAbility:entindex() - }) - - return 0.5 -end -]] - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/earth_spirit_statue.lua b/aghanim_singleplayer/scripts/vscripts/ai/earth_spirit_statue.lua deleted file mode 100755 index 0bab20b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/earth_spirit_statue.lua +++ /dev/null @@ -1,110 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.fMaxSearchRange = 5000 - - thisEntity.hStoneCallerAbility = thisEntity:FindAbilityByName( "aghsfort_earth_spirit_boss_stone_caller" ) - thisEntity.hBoulderSmashAbility = thisEntity:FindAbilityByName( "aghsfort_earth_spirit_boss_boulder_smash" ) - - thisEntity:SetContextThink( "EarthSpiritStatueThink", EarthSpiritStatueThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function EarthSpiritStatueThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.05 - end - - --printf( "EarthSpiritStatueThink - before stoneform modifier check" ) - - if thisEntity:HasModifier( "modifier_earth_spirit_statue_stoneform" ) then - return 0.05 - end - - --printf( "EarthSpiritStatueThink" ) - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fMaxSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - --printf( "EarthSpiritStatueThink - hEnemies is empty" ) - return 1 - end - - local hStone = nil - local hAllies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 200, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_NONE, FIND_CLOSEST, false ) - for _, hAlly in pairs( hAllies ) do - if hAlly:GetUnitName() == "npc_dota_aghsfort_earth_spirit_boss_stone" then - hStone = hAlly - --printf( "earth_spirit_statue - found a stone" ) - end - end - - if hStone == nil then - if thisEntity.hStoneCallerAbility and thisEntity.hStoneCallerAbility:IsFullyCastable() then - local hRandomEnemy = hEnemies[ RandomInt( 1, #hEnemies ) ] - local vDir = hRandomEnemy:GetOrigin() - thisEntity:GetOrigin() - vDir.z = 0.0 - vDir = vDir:Normalized() - - local nStoneDistance = 100 - local vStonePos = thisEntity:GetAbsOrigin() + ( vDir * nStoneDistance ) - - return CastStoneCaller( vStonePos ) - end - else - if thisEntity.hBoulderSmashAbility and thisEntity.hBoulderSmashAbility:IsFullyCastable() then - return CastBoulderSmash( hStone ) - end - end - - return 0.05 -end - --------------------------------------------------------------------------------- - -function CastStoneCaller( vPosition ) - --printf( "CastStoneCaller" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hStoneCallerAbility:entindex(), - Position = vPosition, - Queue = false, - }) - - return 0.5 -end - -------------------------------------------------------------------------------- - -function CastBoulderSmash( hStone ) - --printf( "CastBoulderSmash on position: %s", hStone:GetAbsOrigin() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = thisEntity.hBoulderSmashAbility:entindex(), - TargetIndex = hStone:entindex(), - Queue = false, - }) - - return 2.0 -end - -------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/elder_titan.lua b/aghanim_singleplayer/scripts/vscripts/ai/elder_titan.lua deleted file mode 100755 index 0dde2f8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/elder_titan.lua +++ /dev/null @@ -1,84 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hEchoStompAbility = thisEntity:FindAbilityByName( "creature_elder_titan_echo_stomp" ) - thisEntity.hEarthSplitterAbility = thisEntity:FindAbilityByName( "creature_elder_titan_earth_splitter" ) - - thisEntity:SetContextThink( "ElderTitanThink", ElderTitanThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function ElderTitanThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - if thisEntity.hEchoStompAbility and thisEntity.hEchoStompAbility:IsFullyCastable() then - local fEchoSearchRadius = 400 - local hEnemiesToEcho = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, fEchoSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_CLOSEST, false ) - if #hEnemiesToEcho > 0 then - return CastEchoStomp() - end - end - - if thisEntity.hEarthSplitterAbility and thisEntity.hEarthSplitterAbility:IsFullyCastable() then - local fSplitterSearchRadius = thisEntity.hEarthSplitterAbility:GetCastRange() -- note: this range is more or less global - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, fSplitterSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_FARTHEST, false ) - if #hEnemies > 0 then - local hFarthestEnemy = hEnemies[ 1 ] - - return CastEarthSplitter( hFarthestEnemy ) - end - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastEchoStomp() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hEchoStompAbility:entindex(), - Queue = false, - }) - - return 3 -end - --------------------------------------------------------------------------------- - -function CastEarthSplitter( hTarget ) - if hTarget == nil or hTarget:IsNull() or hTarget:IsAlive() == false then - return 0.5 - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hTarget:GetOrigin(), - AbilityIndex = thisEntity.hEarthSplitterAbility:entindex(), - Queue = false, - }) - - return 2 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/elemental_io_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/elemental_io_ai.lua deleted file mode 100755 index 37607f4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/elemental_io_ai.lua +++ /dev/null @@ -1,65 +0,0 @@ -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - thisEntity.TetherAbility = thisEntity:FindAbilityByName( "aghsfort_wisp_tether" ) - - thisEntity:SetContextThink( "ElementalIoThink", ElementalIoThink, 0.5 ) -end - -function ElementalIoThink() - if ( not thisEntity:IsAlive() ) then - - return -1 - end - if GameRules:IsGamePaused() == true then - return 1 - end - - if thisEntity:GetOwner() == nil or thisEntity:GetOwner():IsAlive() ~= true then - -- We lost our owner Tiny. Let's find a new one. - local entities = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_NO_INVIS, FIND_CLOSEST, false ) - local hPossibleOwner = nil - for _, hAlly in pairs( entities ) do - - if hAlly ~= nil and not hAlly:IsNull() and hAlly:IsAlive() == true and hAlly:GetUnitName() == "npc_dota_creature_elemental_tiny" then - printf("Found a valid tiny") - hPossibleOwner = hAlly - break - end - end - - if hPossibleOwner ~= nil then - thisEntity:SetOwner( hPossibleOwner ) - else - --No new owners found. Not even worth thinking anymore - - return -1 - end - end - - if thisEntity.TetherAbility ~= nil and thisEntity.TetherAbility:IsFullyCastable() then - if (thisEntity:GetAbsOrigin() - thisEntity:GetOwner():GetAbsOrigin() ):Length2D() > 350 then - return CastTether(thisEntity:GetOwner()) - end - end - - return 0.5 -end - -function CastTether( hTarget ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = thisEntity.TetherAbility:entindex(), - TargetIndex = hTarget:entindex(), - Queue = false, - }) - - return 0.5 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/elemental_tiny_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/elemental_tiny_ai.lua deleted file mode 100755 index 122efa6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/elemental_tiny_ai.lua +++ /dev/null @@ -1,128 +0,0 @@ -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - thisEntity.hIos = {} - thisEntity.TossAbility = thisEntity:FindAbilityByName( "aghsfort_elemental_tiny_toss" ) - thisEntity.CreateIoAbility = thisEntity:FindAbilityByName( "aghsfort_elemental_tiny_create_io" ) - - thisEntity:SetContextThink( "ElementalTinyTossThink", ElementalTinyTossThink, 1 ) -end - -function LastTargetTossTime( hTarget ) - - local flLastTime = thisEntity.Encounter.TossTargets[ tostring( hTarget:entindex() ) ] - if flLastTime == nil then - flLastTime = 0 - end - - return flLastTime - -end - -function ElementalTinyTossThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - --if thisEntity.Encounter.TossTargets == nil then - -- thisEntity.Encounter.TossTargets = {} - --end - - if thisEntity.TossAbility ~= nil and thisEntity.TossAbility:IsFullyCastable() then - - -- Select a unit in range to attack - -- And don't pick a target who was tossed at at in the last 2 seconds - - -- Check to make sure we have an io to toss - local grab_radius = thisEntity.TossAbility:GetSpecialValueFor( "grab_radius") - local entities = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, grab_radius, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, FIND_CLOSEST, false ) - local hPossibleProjectiles = {} - for _, hAlly in pairs( entities ) do - - if hAlly ~= nil and not hAlly:IsNull() and hAlly:IsAlive() == true and hAlly:GetUnitName() == "npc_dota_creature_elemental_io" then - table.insert( hPossibleProjectiles, hAlly ) - end - end - if #hPossibleProjectiles ~= 0 then - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, - thisEntity.TossAbility:GetCastRange(thisEntity:GetAbsOrigin(), nil), DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - - local hPossibleEnemies = {} - for _,hEnemy in pairs( enemies ) do - --local flTimeSinceLastToss = GameRules:GetGameTime() - LastTargetTossTime( hEnemy ) - if hEnemy ~= nil and hEnemy:IsAlive() and hEnemy:IsInvulnerable() == false then --and - --hEnemy:IsMagicImmune() == false and ( flTimeSinceLastToss > 1.5 ) then - - table.insert( hPossibleEnemies, hEnemy ) - end - end - - -- Pick a random one, but prefer one who is at least 500 away - local hNearEnemy = nil - while #hPossibleEnemies > 0 do - local nIndex = math.random( 1, #hPossibleEnemies ) - local hEnemy = hPossibleEnemies[ nIndex ] - if ( ( hEnemy:GetAbsOrigin() - thisEntity:GetAbsOrigin() ):Length2D() > 500 ) then - return Toss( hEnemy ) - end - hNearEnemy = hEnemy - table.remove( hPossibleEnemies, nIndex ) - end - - -- If not, then pick a close one - if hNearEnemy ~= nil then - return Toss( hNearEnemy ) - end - end - end - - if thisEntity.CreateIoAbility ~= nil and thisEntity.CreateIoAbility:IsFullyCastable() == true then - - -- Only spawn ios if we haven't got too many already - local max_summons = thisEntity.CreateIoAbility:GetSpecialValueFor( "max_summons" ) - - if #thisEntity.hIos <= max_summons then - return CreateIos() - end - end - - return 0.1 -end - -function Toss( hTarget ) - - local vTargetPos = hTarget:GetAbsOrigin() + RandomVector( RandomFloat( 25, 25 ) ) - --thisEntity.Encounter.TossTargets[ tostring( hTarget:entindex() ) ] = GameRules:GetGameTime() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.TossAbility:entindex(), - Position = vTargetPos, - Queue = false, - }) - - return 0.5 -end - - -function CreateIos( ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.CreateIoAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ember_spirit.lua b/aghanim_singleplayer/scripts/vscripts/ai/ember_spirit.lua deleted file mode 100755 index 916f762..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ember_spirit.lua +++ /dev/null @@ -1,62 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hFireballAbility = thisEntity:FindAbilityByName( "ember_spirit_fireball" ) - - thisEntity:SetContextThink( "EmberSpiritThink", EmberSpiritThink, 0.1 ) -end - --------------------------------------------------------------------------------- - -function EmberSpiritThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local fSearchRange = thisEntity:GetAcquisitionRange() - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.1 - end - - local fHealthPctFireball = 50 - if thisEntity:GetHealthPercent() <= fHealthPctFireball then - if thisEntity.hFireballAbility and thisEntity.hFireballAbility:IsFullyCastable() then - local hRandomTarget = hEnemies[ RandomInt( 1, #hEnemies ) ] - return CastFireball( hRandomTarget:GetAbsOrigin() ) - end - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function CastFireball( vTargetPos ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hFireballAbility:entindex(), - Position = vTargetPos, - Queue = false, - }) - - return thisEntity.hFireballAbility:GetCastPoint() + 0.1 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/enraged_wildwing_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/enraged_wildwing_ai.lua deleted file mode 100755 index dfac7e2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/enraged_wildwing_ai.lua +++ /dev/null @@ -1,117 +0,0 @@ -function Precache( context ) - - PrecacheUnitByNameSync( "npc_aghsfort_creature_tornado_harpy", context, -1 ) - -end - - - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.TornadoAbility = thisEntity:FindAbilityByName( "enraged_wildwing_create_tornado" ) - thisEntity.BlastAbility = thisEntity:FindAbilityByName( "aghsfort_enraged_wildwing_tornado_blast" ) - thisEntity.flLastOrder = GameRules:GetGameTime() - thisEntity.bHasSummonedTornado = false - - thisEntity:SetContextThink( "EnragedWildwingThink", EnragedWildwingThink, 1 ) - - -end - - - - -function EnragedWildwingThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if thisEntity.TornadoAbility ~= true and thisEntity.TornadoAbility:IsFullyCastable() and thisEntity.bHasSummonedTornado == false then - thisEntity.bHasSummonedTornado = true - --return CastTornadoAbility() - end - - - if (GameRules:GetGameTime() - thisEntity.flLastOrder) > (20 - RandomFloat(0 ,5 )) then - thisEntity.flLastOrder = GameRules:GetGameTime() - return DoMove() - end - - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 900, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - - return 0.5 - end - - - if thisEntity.BlastAbility ~= nil and thisEntity.BlastAbility:IsFullyCastable() then - - return CastBlastAbility( hEnemies[ #hEnemies ] ) - end - - return 0.5 -end - - -function CastTornadoAbility() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.TornadoAbility:entindex(), - Queue = true, - }) - - return 0.2 -end - --------------------------------------------------------------------------------- - -function CastBlastAbility( enemy ) - local vToTarget = enemy:GetOrigin() - thisEntity:GetOrigin() - vToTarget = vToTarget:Normalized() - local vTargetPos = thisEntity:GetOrigin() + vToTarget * 50 - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.BlastAbility:entindex(), - Position = vTargetPos, - Queue = false, - }) - - return 4 -end - - - -function DoMove() - if IsServer() then - - for i=1,4 do - local vLoc = FindPathablePositionNearby(thisEntity:GetAbsOrigin(), 1000, 2000 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vLoc - }) - break - end - end - end - return 4 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/evil_greevil.lua b/aghanim_singleplayer/scripts/vscripts/ai/evil_greevil.lua deleted file mode 100755 index b49d6ee..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/evil_greevil.lua +++ /dev/null @@ -1,134 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - AttachEffects() - - thisEntity.vInitialSpawnPos = nil - thisEntity.bInitialized = false - local retreatPoints = Entities:FindAllByName( "retreat_point" ) - if retreatPoints == nil then - print( "*** WARNING: This AI requires info_targets named retreat_point in the map " .. thisEntity.Encounter:GetRoom():GetName() ) - return - end - local happyPlaceIndex = RandomInt( 1, #retreatPoints ) - thisEntity.vRetreatPoint = retreatPoints[ happyPlaceIndex ]:GetAbsOrigin() - - thisEntity.imprisonAbility = thisEntity:FindAbilityByName( "obsidian_destroyer_astral_imprisonment" ) - thisEntity:SetContextThink( "EvilGreevilThink", EvilGreevilThink, 0.1 ) -end - --------------------------------------------------------------------------------- - -function AttachEffects() - --local effect_name = "particles/units/unit_greevil/greevil_blackhole.vpcf" - local effect_name = "particles/creatures/greevil/greevil_prison_bottom_ring.vpcf" - local effect = ParticleManager:CreateParticle( effect_name, PATTACH_POINT_FOLLOW, thisEntity ) - ParticleManager:SetParticleControlEnt( effect, 0, thisEntity, PATTACH_POINT_FOLLOW, nil, thisEntity:GetOrigin(), true ) - --[[ - local right_eyeTable = - { - origin = "0 0 0", - angles = "0 0 0", - targetname = "eye_model", - model = "models/particle/mesh/slumbering_terror_eyes.vmdl", - scales = "0.5 0.5 0.5", - } - local hRightEye = SpawnEntityFromTableSynchronous( "prop_dynamic", right_eyeTable ) - hRightEye:SetParent( thisEntity, "attach_eye_r" ) - local left_eyeTable = - { - origin = "0 0 0", - angles = "0 0 0", - targetname = "eye_model", - model = "models/particle/mesh/slumbering_terror_eyes.vmdl", - scales = "0.5 0.5 0.5", - } - local hLeftEye = SpawnEntityFromTableSynchronous( "prop_dynamic", left_eyeTable ) - hLeftEye:SetParent( thisEntity, "attach_eye_l" ) - ]] -end - --------------------------------------------------------------------------------- - -function EvilGreevilThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 100, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies > 0 then - --print("Enemy is near") - local target = enemies[1] - if thisEntity.imprisonAbility ~= nil and thisEntity.imprisonAbility:IsCooldownReady() then - return CastImprison( target ) - end - end - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetAbsOrigin() - thisEntity.bInitialized = true - end - local vPos = thisEntity:GetAbsOrigin() - local difference = vPos - thisEntity.vInitialSpawnPos - local distance = difference:Length() - if distance < 25 then - --print("Move to retreat point") - --RunAround( thisEntity.vRetreatPoint ) - thisEntity:MoveToPosition( thisEntity.vRetreatPoint ) - elseif distance > 150 then - --print("Move to home") - --RunAround( thisEntity.vInitialSpawnPos ) - thisEntity:MoveToPosition( thisEntity.vInitialSpawnPos ) - end - - return .1 -end - --------------------------------------------------------------------------------- - -function CastImprison( target ) - --print("Casting Astral Imprisonment") - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.3 } ) - local difference = target:GetAbsOrigin() - thisEntity:GetAbsOrigin() - local distance = difference:Length() - if distance < thisEntity.imprisonAbility:GetCastRange() then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = target:entindex(), - AbilityIndex = thisEntity.imprisonAbility:entindex(), - Queue = false, - }) - else - print("Enemy escaped") - print(distance) - end - - return 1 -end - --------------------------------------------------------------------------------- - -function RunAround( position ) - local destination = position - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = destination - }) - - return 1 -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/exploding_big_burrower.lua b/aghanim_singleplayer/scripts/vscripts/ai/exploding_big_burrower.lua deleted file mode 100755 index b98930d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/exploding_big_burrower.lua +++ /dev/null @@ -1,137 +0,0 @@ - ---[[ ai/exploding_burrower.lua ]] - ----------------------------------------------------------------------------------------------- - -function Precache( context ) - - PrecacheResource( "model", "models/heroes/nerubian_assassin/mound.vmdl", context ) - -end - ----------------------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if thisEntity == nil then - return - end - - hExplosionAbility = thisEntity:FindAbilityByName( "burrower_big_explosion" ) - hBurrowAbility = thisEntity:FindAbilityByName( "nyx_assassin_burrow" ) - hUnburrowAbility = thisEntity:FindAbilityByName( "nyx_assassin_unburrow" ) - - -- Start already burrowed - thisEntity:AddNewModifier( thisEntity, nil, "modifier_nyx_assassin_burrow", { duration = -1 } ) - hUnburrowAbility:SetHidden( false ) - - thisEntity:SetContextThink( "ExplodingNyxThink", ExplodingNyxThink, 0.5 ) -end - ----------------------------------------------------------------------------------------------- - -function ExplodingNyxThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - local bIsBurrowed = ( thisEntity:FindModifierByName( "modifier_nyx_assassin_burrow" ) ~= nil ) - if bIsBurrowed and hUnburrowAbility and hUnburrowAbility:IsFullyCastable() then - return CastUnburrow() - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies > 0 then - local enemy = hEnemies[1] - if enemy ~= nil then - local flDist = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist <= 150 then - return CastExplosion() - else - return Approach( enemy ) - end - end - end - - return 0.5 -end - ----------------------------------------------------------------------------------------------- - -function CastBurrow() - --print( "ExplodingBurrower - CastBurrow()" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hBurrowAbility:entindex(), - }) - return 2 -end - ----------------------------------------------------------------------------------------------- - -function CastUnburrow() - --print( "ExplodingBurrower - CastUnburrow()" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hUnburrowAbility:entindex(), - }) - return 0.3 -end - ----------------------------------------------------------------------------------------------- - -function CastExplosion() - --print( "ExplodingBurrower - CastExplosion()" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hExplosionAbility:entindex(), - Queue = false, - }) - return 2 -end - ----------------------------------------------------------------------------------------------- - -function Approach( unit ) - --print( "ExplodingBurrower - Approach()" ) - local vToEnemy = unit:GetOrigin() - thisEntity:GetOrigin() - vToEnemy = vToEnemy:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vToEnemy * thisEntity:GetIdealSpeed() - }) - return 0.4 -end - ----------------------------------------------------------------------------------------------- - -function RunToMom() - --print( "ExplodingBurrower - RunToMom()" ) - - if hUnburrowAbility and hUnburrowAbility:IsFullyCastable() then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hUnburrowAbility:entindex(), - }) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity.hParent:GetOrigin(), - Queue = true, - }) - return 1 -end - ----------------------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/friendly_baby_ogre_tank.lua b/aghanim_singleplayer/scripts/vscripts/ai/friendly_baby_ogre_tank.lua deleted file mode 100755 index d146c53..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/friendly_baby_ogre_tank.lua +++ /dev/null @@ -1,106 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - SmashAbility = thisEntity:FindAbilityByName( "baby_ogre_tank_melee_smash" ) - JumpAbility = thisEntity:FindAbilityByName( "baby_ogre_tank_jump_smash" ) - - thisEntity:SetContextThink( "OgreTankThink", OgreTankThink, 1 ) -end - --------------------------------------------------------------------------------- - -function OgreTankThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 850 ) - thisEntity.bAcqRangeModified = true - end - - local nEnemiesRemoved = 0 - local fSearchRange = 700 - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - -- Iterate backwards since we're removing entries - for i = #enemies, 1, -1 do - local enemy = enemies[ i ] - if enemy ~= nil then - if enemy:GetUnitName() == "npc_dota_explosive_barrel" or enemy:GetUnitName() == "npc_dota_crate" then - --printf( "OgreTankThink: removed invalid target named %s", enemy:GetUnitName() ) - table.remove( enemies, i ) - else - local flDist = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < 210 then - nEnemiesRemoved = nEnemiesRemoved + 1 - table.remove( enemies, i ) - end - end - end - end - - if JumpAbility ~= nil and JumpAbility:IsFullyCastable() and nEnemiesRemoved > 0 then - return Jump() - end - - if #enemies == 0 then - return 1 - end - - if SmashAbility ~= nil and SmashAbility:IsFullyCastable() then - local hSmashTarget = enemies[ 1 ] - return Smash( hSmashTarget ) - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function Jump() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = JumpAbility:entindex(), - Queue = false, - }) - - return 2.5 -end - --------------------------------------------------------------------------------- - -function Smash( enemy ) - if enemy == nil then - return - end - - if ( not thisEntity:HasModifier( "modifier_provide_vision" ) ) then - --print( "If player can't see me, provide brief vision to his team as I start my Smash" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = SmashAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 3 / thisEntity:GetHasteFactor() -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/friendly_ogre_seal.lua b/aghanim_singleplayer/scripts/vscripts/ai/friendly_ogre_seal.lua deleted file mode 100755 index 1488b69..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/friendly_ogre_seal.lua +++ /dev/null @@ -1,72 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hFlop = thisEntity:FindAbilityByName( "friendly_ogreseal_flop" ) - thisEntity.flSearchRadius = 700 - - thisEntity:SetContextThink( "FriendlyOgreSealThink", FriendlyOgreSealThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function FriendlyOgreSealThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.flSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for i = #hEnemies, 1, -1 do - local hEnemy = hEnemies[ i ] - if hEnemy ~= nil then - if hEnemy:GetUnitName() == "npc_dota_explosive_barrel" or hEnemy:GetUnitName() == "npc_dota_crate" then - table.remove( hEnemies, i ) - end - end - end - - if #hEnemies == 0 then - return 0.25 - end - - --printf( "hEnemies > 0" ) - - if thisEntity.hFlop ~= nil and thisEntity.hFlop:IsFullyCastable() then - return CastBellyFlop( hEnemies[ #hEnemies ] ) - end - - return 0.25 -end - --------------------------------------------------------------------------------- - -function CastBellyFlop( enemy ) - printf( "CastBellyFlop" ) - local vToTarget = enemy:GetOrigin() - thisEntity:GetOrigin() - vToTarget = vToTarget:Normalized() - local vTargetPos = thisEntity:GetOrigin() + vToTarget * 50 - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hFlop:entindex(), - Position = vTargetPos, - Queue = false, - }) - - return 4 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/friendly_ogre_tank.lua b/aghanim_singleplayer/scripts/vscripts/ai/friendly_ogre_tank.lua deleted file mode 100755 index 36ac6c9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/friendly_ogre_tank.lua +++ /dev/null @@ -1,106 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - SmashAbility = thisEntity:FindAbilityByName( "ogre_tank_melee_smash" ) - JumpAbility = thisEntity:FindAbilityByName( "ogre_tank_jump_smash" ) - - thisEntity:SetContextThink( "OgreTankThink", OgreTankThink, 1 ) -end - --------------------------------------------------------------------------------- - -function OgreTankThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 850 ) - thisEntity.bAcqRangeModified = true - end - - local nEnemiesRemoved = 0 - local fSearchRange = 700 - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - -- Iterate backwards since we're removing entries - for i = #enemies, 1, -1 do - local enemy = enemies[ i ] - if enemy ~= nil then - if enemy:GetUnitName() == "npc_dota_explosive_barrel" or enemy:GetUnitName() == "npc_dota_crate" then - --printf( "OgreTankThink: removed invalid target named %s", enemy:GetUnitName() ) - table.remove( enemies, i ) - else - local flDist = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < 210 then - nEnemiesRemoved = nEnemiesRemoved + 1 - table.remove( enemies, i ) - end - end - end - end - - if JumpAbility ~= nil and JumpAbility:IsFullyCastable() and nEnemiesRemoved > 0 then - return Jump() - end - - if #enemies == 0 then - return 1 - end - - if SmashAbility ~= nil and SmashAbility:IsFullyCastable() then - local hSmashTarget = enemies[ 1 ] - return Smash( hSmashTarget ) - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function Jump() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = JumpAbility:entindex(), - Queue = false, - }) - - return 2.5 -end - --------------------------------------------------------------------------------- - -function Smash( enemy ) - if enemy == nil then - return - end - - if ( not thisEntity:HasModifier( "modifier_provide_vision" ) ) then - --print( "If player can't see me, provide brief vision to his team as I start my Smash" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = SmashAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 3 / thisEntity:GetHasteFactor() -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/grimstroke.lua b/aghanim_singleplayer/scripts/vscripts/ai/grimstroke.lua deleted file mode 100755 index f70ae86..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/grimstroke.lua +++ /dev/null @@ -1,73 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.fMaxSearchRange = 800 - - thisEntity.hInkSwellAbility = thisEntity:FindAbilityByName( "aghsfort_grimstroke_spirit_walk" ) - - thisEntity:SetContextThink( "GrimstrokeThink", GrimstrokeThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function GrimstrokeThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fMaxSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 1 - end - - if thisEntity.hInkSwellAbility and thisEntity.hInkSwellAbility:IsFullyCastable() then - local hInkSwellTarget = nil - local fInkSwellRange = thisEntity.hInkSwellAbility:GetCastRange() - local friendlies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fInkSwellRange, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _, friendly in pairs ( friendlies ) do - if friendly ~= nil and friendly ~= thisEntity and friendly:GetUnitName() ~= "npc_dota_crate" then - hInkSwellTarget = friendly - if ( friendly:GetUnitName() == "npc_dota_creature_life_stealer" ) then - break - end - end - end - - if hInkSwellTarget then - return CastInkSwell( hInkSwellTarget ) - end - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastInkSwell( hTarget ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = thisEntity.hInkSwellAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/healing_burrower.lua b/aghanim_singleplayer/scripts/vscripts/ai/healing_burrower.lua deleted file mode 100755 index 267aad9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/healing_burrower.lua +++ /dev/null @@ -1,80 +0,0 @@ - ---[[ ai/healing_burrower.lua ]] - ----------------------------------------------------------------------------------------------- - -function Precache( context ) - - PrecacheResource( "model", "models/heroes/nerubian_assassin/mound.vmdl", context ) - -end - ----------------------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if thisEntity == nil then - return - end - - hHealAbility = thisEntity:FindAbilityByName( "nyx_suicide_heal" ) - hUnburrowAbility = thisEntity:FindAbilityByName( "nyx_assassin_unburrow" ) - - -- Start already burrowed - thisEntity:AddNewModifier( thisEntity, nil, "modifier_nyx_assassin_burrow", { duration = -1 } ) - hUnburrowAbility:SetHidden( false ) - - thisEntity:SetContextThink( "HealingNyxThink", HealingNyxThink, 0.5 ) -end - ----------------------------------------------------------------------------------------------- - -function HealingNyxThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - local bIsBurrowed = ( thisEntity:FindModifierByName( "modifier_nyx_assassin_burrow" ) ~= nil ) - if bIsBurrowed then - return CastUnburrow() - end - - local hCreatures = Entities:FindAllByClassnameWithin( "npc_dota_creature", thisEntity:GetAbsOrigin(), 2000 ) - local hGuardians = {} - for _, hCreature in pairs( hCreatures ) do - if ( hCreature:GetUnitName() == "npc_dota_creature_sand_king" ) and hCreature:IsAlive() then - return CastSuicideHeal( hCreature ) - end - end - - return 0.1 -end - ----------------------------------------------------------------------------------------------- - -function CastUnburrow() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hUnburrowAbility:entindex(), - }) - return 0.3 -end - ----------------------------------------------------------------------------------------------- - -function CastSuicideHeal( hCreature ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = hHealAbility:entindex(), - TargetIndex = hCreature:entindex(), - }) - return 1 -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/hellbear.lua b/aghanim_singleplayer/scripts/vscripts/ai/hellbear.lua deleted file mode 100755 index 34811cc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/hellbear.lua +++ /dev/null @@ -1,102 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - SmashAbility = thisEntity:FindAbilityByName( "hellbear_smash" ) - - thisEntity:SetContextThink( "HellbearThink", HellbearThink, 1 ) -end - --------------------------------------------------------------------------------- - -function HellbearThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 750 ) - thisEntity.bAcqRangeModified = true - end - - if thisEntity:GetAggroTarget() then - thisEntity.fTimeWeLostAggro = nil - end - - if thisEntity:GetAggroTarget() and ( thisEntity.fTimeAggroStarted == nil ) then - --print( "Do we have aggro and need to get a timestamp?" ) - thisEntity.fTimeAggroStarted = GameRules:GetGameTime() - end - - if ( not thisEntity:GetAggroTarget() ) and ( thisEntity.fTimeAggroStarted ~= nil ) then - --print( "We lost aggro." ) - thisEntity.fTimeWeLostAggro = GameRules:GetGameTime() - thisEntity.fTimeAggroStarted = nil - end - - if ( not thisEntity:GetAggroTarget() ) then - if thisEntity.fTimeWeLostAggro and ( GameRules:GetGameTime() > ( thisEntity.fTimeWeLostAggro + 1.0 ) ) then - return RetreatHome() - end - end - - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #enemies == 0 then - return 0.5 - end - - if SmashAbility ~= nil and SmashAbility:IsCooldownReady() then - return Smash() - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function Smash() - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.3 } ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = SmashAbility:entindex(), - Queue = false, - }) - - return 1.1 -- was 1.2 -end - --------------------------------------------------------------------------------- - -function RetreatHome() - --print( "RetreatHome - " .. thisEntity:GetUnitName() .. " is returning to home position" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.vInitialSpawnPos, - }) - - return 0.5 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/huge_broodmother.lua b/aghanim_singleplayer/scripts/vscripts/ai/huge_broodmother.lua deleted file mode 100755 index 5ba3244..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/huge_broodmother.lua +++ /dev/null @@ -1,84 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hWebAbility = thisEntity:FindAbilityByName( "broodmother_web" ) - thisEntity.hSummonEggsAbility = thisEntity:FindAbilityByName( "huge_brood_summon_eggs" ) - thisEntity.nHealthPctForSummon = 90 - - thisEntity:SetContextThink( "HugeBroodmotherThink", HugeBroodmotherThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function HugeBroodmotherThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local fSearchRange = thisEntity.hWebAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.1 - end - - if thisEntity:GetHealthPercent() <= thisEntity.nHealthPctForSummon then - if thisEntity.hSummonEggsAbility and thisEntity.hSummonEggsAbility:IsFullyCastable() then - return CastSummonEggs() - end - end - - if thisEntity.hWebAbility and thisEntity.hWebAbility:IsFullyCastable() then - local hFarthestEnemy = hEnemies[ #hEnemies ] - --local hRandomEnemy = hEnemies[ RandomInt( 1, #hEnemies ) ] - - return CastWeb( hFarthestEnemy ) - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function CastWeb( hTarget ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hTarget:GetOrigin(), - AbilityIndex = thisEntity.hWebAbility:entindex(), - Queue = false, - }) - - local fReturnTime = thisEntity.hWebAbility:GetCastPoint() + 0.1 - return fReturnTime -end - --------------------------------------------------------------------------------- - -function CastSummonEggs() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hSummonEggsAbility:entindex(), - Queue = false, - }) - - local fReturnTime = thisEntity.hSummonEggsAbility:GetCastPoint() + 0.1 - return fReturnTime -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/kidnap_spider.lua b/aghanim_singleplayer/scripts/vscripts/ai/kidnap_spider.lua deleted file mode 100755 index 90244e7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/kidnap_spider.lua +++ /dev/null @@ -1,257 +0,0 @@ - -require( "aghanim_utility_functions" ) - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if thisEntity == nil then - return - end - - thisEntity.hSummonEggsAbility = thisEntity:FindAbilityByName( "kidnap_spider_summon_eggs" ) - thisEntity.hLassoAbility = thisEntity:FindAbilityByName( "aghsfort_batrider_flaming_lasso" ) - - thisEntity:AddNewModifier( thisEntity, nil, "modifier_phased", { duration = -1 } ) - - thisEntity.vCurrentRunAwayPos = nil - thisEntity.nLassoDragDistance = thisEntity.hLassoAbility:GetSpecialValueFor( "drag_distance" ) - - thisEntity.hEntityKilledGameEvent = ListenToGameEvent( "entity_killed", Dynamic_Wrap( thisEntity:GetPrivateScriptScope(), "OnEntityKilled" ), nil ) - - thisEntity:SetContextThink( "KidnapSpiderThink", KidnapSpiderThink, 1 ) -end - --------------------------------------------------------------------------------- - -function UpdateOnRemove() - StopListeningToGameEvent( thisEntity.hEntityKilledGameEvent ) -end - --------------------------------------------------------------------------------- - -function KidnapSpiderThink() - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - if not IsServer() then - return - end - - -- This script was being broken by SetInitialGoalEntity in the encounter's OnSpawnerFinished - if not thisEntity.bGoalEntCleared then - thisEntity:SetInitialGoalEntity( nil ) - thisEntity.bGoalEntCleared = true - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 5000, - DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_CLOSEST, false - ) - - if #hEnemies == 0 then - return 0.1 - end - - -- Summon Eggs - if thisEntity.hSummonEggsAbility and thisEntity.hSummonEggsAbility:IsFullyCastable() then - return CastSummonEggs() - end - - -- Try to Lasso - if thisEntity.hLassoAbility and thisEntity.hLassoAbility:IsFullyCastable() then - for _, hEnemy in pairs( hEnemies ) do - if hEnemy ~= nil and hEnemy:IsRealHero() and hEnemy:IsAlive() and ( not hEnemy:HasModifier( "modifier_batrider_flaming_lasso" ) ) then - -- Ensure I have vision - local hVisionBuff = hEnemy:FindModifierByName( "modifier_provide_vision" ) - if hVisionBuff == nil then - hVisionBuff = hEnemy:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 15 } ) - end - - return CastLasso( hEnemy ) - end - end - end - - if thisEntity.vCurrentRunAwayPos ~= nil then - --printf( "Have I arrived?" ) - local fDistToRunAwayPos = ( thisEntity.vCurrentRunAwayPos - thisEntity:GetAbsOrigin() ):Length2D() - --printf( "fDistToRunAwayPos: %d", fDistToRunAwayPos ) - local nDistThreshold = 50 - if fDistToRunAwayPos <= nDistThreshold then - --printf( "I've arrived close enough to current RunAway position: %s", thisEntity.vCurrentRunAwayPos ) - thisEntity.vCurrentRunAwayPos = nil - return 3.0 - else - --printf( "Have not arrived at current RunAway position of: %s", thisEntity.vCurrentRunAwayPos ) - return 0.1 - end - end - - -- Find eggs at appropriate distances - local nMinEggDistance = 1400 - local nMinEggFarDistance = 2800 - local nMaxEggDistance = 4500 - local hEggs = {} - local hFarEggs = {} - local hAllies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, nMaxEggDistance, - DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_FARTHEST, false - ) - - for _, hAlly in pairs( hAllies ) do - if hAlly:GetUnitName() == "npc_dota_spider_sac" then - --printf( "found \"npc_dota_spider_sac\" ally" ) - local fDistToEgg = ( hAlly:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if fDistToEgg >= nMinEggFarDistance then - table.insert( hFarEggs, hAlly ) - elseif fDistToEgg >= nMinEggDistance then - table.insert( hEggs, hAlly ) - end - end - end - - -- I can't cast Lasso, and whether I currently have a hero Lasso'd or not I want to run away - -- First try to find a good position using any distant eggs I found - local vRunTargetPos = nil - - ShuffleListInPlace( hFarEggs ) - - if #hFarEggs > 0 then - --printf( "we have %d far egg candidates within %d-%d range", #hFarEggs, nMinEggDistance, nMaxEggDistance ) - for _, hEgg in pairs( hFarEggs ) do - local vToEgg = hEgg:GetOrigin() - thisEntity:GetOrigin() - local fDistToEgg = vToEgg:Length2D() - vToEgg.z = 0.0 - vToEgg = vToEgg:Normalized() - - local nDistPastEgg = thisEntity.nLassoDragDistance - vRunTargetPos = thisEntity:GetAbsOrigin() + ( vToEgg * ( fDistToEgg + nDistPastEgg ) ) - - --printf( "evaluating far egg position's pathability" ) - if GridNav:CanFindPath( thisEntity:GetOrigin(), vRunTargetPos ) then - --printf( "found valid far egg position, so break early -- %s", vRunTargetPos ) - break - end - end - else - --printf( "no far egg candidates" ) - end - - -- If I didn't get a good distant egg position, look through any medium-range eggs - if vRunTargetPos == nil then - ShuffleListInPlace( hEggs ) - - if #hEggs > 0 then - --printf( "we have %d egg candidates within %d-%d range", #hEggs, nMinEggDistance, nMaxEggDistance ) - for _, hEgg in pairs( hEggs ) do - local vToEgg = hEgg:GetOrigin() - thisEntity:GetOrigin() - local fDistToEgg = vToEgg:Length2D() - vToEgg.z = 0.0 - vToEgg = vToEgg:Normalized() - - local nDistPastEgg = thisEntity.nLassoDragDistance - vRunTargetPos = thisEntity:GetAbsOrigin() + ( vToEgg * ( fDistToEgg + nDistPastEgg ) ) - - --printf( "evaluating egg position's pathability" ) - if GridNav:CanFindPath( thisEntity:GetOrigin(), vRunTargetPos ) then - --printf( "found valid egg position, so break early -- %s", vRunTargetPos ) - break - end - end - else - --printf( "no medium distance egg candidates" ) - end - end - - -- If I didn't find any egg positions at all - if vRunTargetPos == nil then - vRunTargetPos = FindRandomPointInRoom( thisEntity:GetAbsOrigin(), 1500, 3000 ) - --printf( "had no vRunTargetPos after all the egg searching, so trying random point in room: %s", vRunTargetPos ) - end - - if vRunTargetPos then - --printf( " going to position: %s", vRunTargetPos ) - return RunAway( vRunTargetPos ) - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function CastSummonEggs() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hSummonEggsAbility:entindex(), - Queue = false, - }) - - local fReturnTime = thisEntity.hSummonEggsAbility:GetCastPoint() + 0.2 - return fReturnTime -end - --------------------------------------------------------------------------------- - -function CastLasso( unit ) - --printf( "kidnap_spider - CastLasso" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = unit:entindex(), - AbilityIndex = thisEntity.hLassoAbility:entindex(), - Queue = false, - }) - - thisEntity.vCurrentRunAwayPos = nil -- find a new destination - - return thisEntity.hLassoAbility:GetCastPoint() + 0.2 -end - --------------------------------------------------------------------------------- - -function RunAway( vPos ) - --printf( "kidnap_spider - RunAway" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vPos, - Queue = true, - }) - - thisEntity.vCurrentRunAwayPos = vPos - - return 1 --11 -end - --------------------------------------------------------------------------------- - -function OnEntityKilled( event ) - local hVictim = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - - if hVictim ~= thisEntity then - return - end - - -- Cleanup - for nPlayerID = 0, ( AGHANIM_PLAYERS - 1 ) do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - local hMyBuff = hPlayerHero:FindModifierByNameAndCaster( "modifier_provide_vision", thisEntity ) - if hMyBuff then - hMyBuff:Destroy() - --printf( "kidnap_spider - OnEntityKilled: removing vision buff" ) - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/kunkka.lua b/aghanim_singleplayer/scripts/vscripts/ai/kunkka.lua deleted file mode 100755 index 6de1e56..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/kunkka.lua +++ /dev/null @@ -1,201 +0,0 @@ ---[[ Kunkka AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorTorrent, BehaviorGhostShip } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, thisEntity:GetDayTimeVisionRange() ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorTorrent = {} - -function BehaviorTorrent:Evaluate() - --print( "BehaviorTorrent:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.torrentAbility = thisEntity:FindAbilityByName( "kunkka_torrent_dm" ) - if self.torrentAbility and self.torrentAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorTorrent:Begin() - --print( "BehaviorTorrent:Begin()" ) - if self.torrentAbility and self.torrentAbility:IsFullyCastable() then - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return nil - end - local hTarget = hEnemies[#hEnemies] - local vTarget = hTarget:GetAbsOrigin() - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = self.torrentAbility:entindex(), - Position = vTarget - } - return order - end - - return nil -end - -BehaviorTorrent.Continue = BehaviorTorrent.Begin - --------------------------------------------------------------------------------------------------------- ---[[ -BehaviorTidebringer = {} - -function BehaviorTidebringer:Evaluate() - --print( "BehaviorTorrent:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.tidebringerAbility = thisEntity:FindAbilityByName( "kunkka_tidebringer" ) - if self.tidebringerAbility and self.tidebringerAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 150, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies > 2 ) then - desire = #enemies + 2 - end - end - - return desire -end - -function BehaviorTidebringer:Begin() - --print( "BehaviorTorrent:Begin()" ) - if self.tidebringerAbility and self.tidebringerAbility:IsFullyCastable() then - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 150, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return nil - end - local hTarget = hEnemies[#hEnemies] - local vTarget = hTarget:GetAbsOrigin() - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = self.tidebringerAbility:entindex(), - Queue = false, - } - return order - end - - return nil -end - -BehaviorTidebringer.Continue = BehaviorTidebringer.Begin -]] --------------------------------------------------------------------------------------------------------- - -BehaviorGhostShip = {} - -function BehaviorGhostShip:Evaluate() - --print( "BehaviorGhostShip:Evaluate()" ) - local desire = 0 - - self.ghostShipAbility = thisEntity:FindAbilityByName( "kunkka_ghostship" ) - if self.ghostShipAbility and self.ghostShipAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 1 ) then - desire = #enemies + 5 - end - end - - return desire -end - -function BehaviorGhostShip:Begin() - --print( "BehaviorGhostShip:Begin()" ) - - if self.ghostShipAbility and self.ghostShipAbility:IsFullyCastable() then - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return nil - end - local hTarget = hEnemies[#hEnemies] - local targetPoint = hTarget:GetOrigin() + RandomVector( 100 ) - if self.ghostShipAbility and self.ghostShipAbility:IsFullyCastable() then - --print( "Casting Ghost Ship" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = self.ghostShipAbility:entindex(), - Position = targetPoint - } - return order - end - end - - return nil -end - -BehaviorGhostShip.Continue = BehaviorGhostShip.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorTorrent, BehaviorGhostShip } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/landmine_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/landmine_ai.lua deleted file mode 100755 index 5d79b54..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/landmine_ai.lua +++ /dev/null @@ -1,59 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - DetonateAblity = thisEntity:FindAbilityByName( "creature_landmine_detonate" ) - thisEntity:SetContextThink( "LandmineThink", LandmineThink, 1 ) -end - --------------------------------------------------------------------------------- - -function LandmineThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - - local fDetonateRadius = thisEntity.DetonateAblity:GetSpecialValueFor( "detonate_radius" ) - - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fDetonateRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #enemies == 0 then - return 0.5 - end - - return Detonate() -end - - --------------------------------------------------------------------------------- - -function Detonate() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.DetonateAblity:entindex(), - Queue = false, - }) - - return 3 -end - - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/legion_commander.lua b/aghanim_singleplayer/scripts/vscripts/ai/legion_commander.lua deleted file mode 100755 index 46971a4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/legion_commander.lua +++ /dev/null @@ -1,228 +0,0 @@ ---[[ Legion Commander AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.bInDuel = false - thisEntity.nDuelDuration = 0 - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorOverwhelmingOdds, BehaviorBlademail, BehaviorDuel } ) -end - -function AIThink() - if thisEntity.bInDuel then - thisEntity.nDuelDuration = thisEntity.nDuelDuration + 1 - end - if thisEntity.nDuelDuration > 6 then - thisEntity.bInDuel = false - thisEntity.nDuelDuration = 0 - end - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorOverwhelmingOdds = {} - -function BehaviorOverwhelmingOdds:Evaluate() - --print( "BehaviorOverwhelmingOdds:Evaluate()" ) - local desire = 0 - --[[ Testing without this ability for now - self.overwhelmingOddsAbility = thisEntity:FindAbilityByName( "legion_commander_overwhelming_odds" ) - if self.overwhelmingOddsAbility and self.overwhelmingOddsAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 500, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 2 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hAbilityhModifier = hUnit:FindModifierByName( "modifier_legion_commander_overwhelming_odds" ) - if hAbilityhModifier ~= nil then - --print("Enemy already has Overwhelming Odds") - desire = 0 - else - desire = #enemies + 1 - end - end - end - end - end - ]] - return desire -end - -function BehaviorOverwhelmingOdds:Begin() - --print( "BehaviorOverwhelmingOdds:Begin()" ) - if self.overwhelmingOddsAbility and self.overwhelmingOddsAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 500, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies == 0 then - return nil - end - local target = enemies[#enemies] - local targetPoint = target:GetOrigin() + RandomVector( 100 ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = self.overwhelmingOddsAbility:entindex(), - Position = targetPoint - } - return order - end - - return nil -end - -BehaviorOverwhelmingOdds.Continue = BehaviorOverwhelmingOdds.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorBlademail = {} - -function BehaviorBlademail:Evaluate() - --print( "BehaviorBlademail:Evaluate()" ) - local desire = 0 - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_blade_mail" then - self.blademailAbility = item - end - end - if self.blademailAbility and self.blademailAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 500, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( thisEntity:GetHealthPercent() < 100 ) then - if ( #enemies > 0 ) then - if thisEntity.bInDuel then - desire = 8 - else - desire = #enemies + 1 - end - end - end - end - - return desire -end - -function BehaviorBlademail:Begin() - --print( "BehaviorBlademail:Begin()" ) - if self.blademailAbility and self.blademailAbility:IsFullyCastable() then - --print( "Casting Blade Mail" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.blademailAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorBlademail.Continue = BehaviorBlademail.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorDuel = {} - -function BehaviorDuel:Evaluate() - --print( "BehaviorDuel:Evaluate()" ) - local desire = 0 - - self.duelAbility = thisEntity:FindAbilityByName( "legion_commander_duel" ) - if self.duelAbility and self.duelAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 500, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hAbilityModifier = hUnit:FindModifierByName( "modifier_legion_commander_duel" ) - if hAbilityModifier ~= nil then - --print("Enemy is in a duel") - desire = 0 - else - desire = #enemies + 1 - end - end - end - end - end - - return desire -end - -function BehaviorDuel:Begin() - --print( "BehaviorDuel:Begin()" ) - if self.duelAbility and self.duelAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 500, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hAbilityModifier = hUnit:FindModifierByName( "modifier_legion_commander_duel" ) - if hAbilityModifier ~= nil then - return nil - else - --print( "Casting Duel" ) - thisEntity.bInDuel = true - local target = hUnit - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = target:entindex(), - AbilityIndex = self.duelAbility:entindex() - } - return order - end - end - end - end - end - - return nil -end - -BehaviorDuel.Continue = BehaviorDuel.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorOverwhelmingOdds, BehaviorBlademail, BehaviorDuel } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/mirana_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/mirana_ai.lua deleted file mode 100755 index d649ad0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/mirana_ai.lua +++ /dev/null @@ -1,279 +0,0 @@ ---[[ Mirana AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorShootArrow, BehaviorStarfall, BehaviorRunAway } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, thisEntity:GetDayTimeVisionRange() ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorShootArrow = {} - -function BehaviorShootArrow:Evaluate() - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.arrowAbility = thisEntity:FindAbilityByName( "mirana_arrow" ) - - self.target = nil - local bestDistance = 0 - if not self.arrowAbility or not self.arrowAbility:IsFullyCastable() then - return desire - end - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), thisEntity, self.arrowAbility:GetCastRange(), DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies == 0 then - return desire - end - - for _,enemy in pairs(enemies) do - local enemyVec = enemy:GetOrigin() - thisEntity:GetOrigin() - local myForward = thisEntity:GetForwardVector() - local dotProduct = enemyVec:Dot( myForward ) - local enemyDesire = 5 - if enemy:IsStunned() then - enemyDesire = 3 - elseif dotProduct > 0 then - enemyDesire = 8 - end - - local distance = enemyVec:Length2D() - if distance > 350 then - if ( enemyDesire == desire and bestDistance > distance ) or ( desire < enemyDesire ) then - desire = enemyDesire - bestDistance = distance - self.target = enemy - thisEntity.lastTargetPosition = enemy:GetAbsOrigin() - end - end - end - - return desire -end - -function BehaviorShootArrow:Begin() - - if self.target and self.target:IsAlive() then - local targetPoint = self.target:GetOrigin() + RandomVector( 100 ) - if self.arrowAbility and self.arrowAbility:IsFullyCastable() then - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = self.arrowAbility:entindex(), - Position = targetPoint - } - end - end - - return nil - -end - -BehaviorShootArrow.Continue = BehaviorShootArrow.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorStarfall = {} - -function BehaviorStarfall:Evaluate() - --print( "BehaviorStarfall:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.starFallAbility = thisEntity:FindAbilityByName( "mirana_starfall" ) - if self.starFallAbility and self.starFallAbility:IsFullyCastable() then - local nRange = self.starFallAbility:GetSpecialValueFor( "starfall_radius" ) - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorStarfall:Begin() - --print( "BehaviorStarfall:Begin()" ) - - if self.starFallAbility and self.starFallAbility:IsFullyCastable() then - --print( "Casting Star Fall" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.starFallAbility:entindex() - } - return order - end - - return nil -end - -BehaviorStarfall.Continue = BehaviorStarfall.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRunAway = {} - -function BehaviorRunAway:Evaluate() - local desire = 0 - local retreatPoints = thisEntity.Encounter:GetRetreatPoints() - if retreatPoints == nil then - print( "*** WARNING: This AI requires info_targets named retreat_point in the map " .. thisEntity.Encounter:GetRoom():GetName() ) - return 0 - end - - -- let's not choose this twice in a row, or even too close to another escape - if behaviorSystem.currentBehavior == self or - ( self.startEscapeTime ~= nil and ( ( GameRules:GetGameTime() - self.startEscapeTime ) < 6 ) ) then - return desire - end - - local happyPlaceIndex = RandomInt( 1, #retreatPoints ) - self.escapePoint = retreatPoints[ happyPlaceIndex ]:GetAbsOrigin() - - self.leapAbility = thisEntity:FindAbilityByName( "mirana_leap" ) - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - local friendlies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO, 0, 0, false ) - --print( string.format( "found %d enemies and %d friendlies near us", #enemies, #friendlies ) ) - - -- Remember that mirana herself will be in the friendlies list, so it's one too big - if ( #enemies >= 2 ) and ( #friendlies <= 1 ) then - desire = #enemies + 1 - end - - return desire -end - - -function BehaviorRunAway:Begin() - --print( "BehaviorRunAway:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - self.bHasLeaped = false - - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_phase_boots" then - self.phaseAbility = item - end - end - - -- phase right away - if self.phaseAbility and self.phaseAbility:IsFullyCastable() then - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.phaseAbility:entindex() - } - end - - -- move towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -function BehaviorRunAway:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 6 ) ) or - ( ( thisEntity:GetAbsOrigin() - self.escapePoint ):Length2D() < 200 ) -end - -function BehaviorRunAway:Think( ) - - -- give ourselves time to turn towards escape point before leaping - if GameRules:GetGameTime() >= self.startEscapeTime + 0.6 and self.bHasLeaped == false then - if self.leapAbility and self.leapAbility:IsFullyCastable() then - -- Make sure we're not going to leap out of the room or into - -- somewhere not navigable - local vMyForward = thisEntity:GetForwardVector() - local vTargetPos = thisEntity:GetOrigin() + vMyForward * self.leapAbility:GetSpecialValueFor( "leap_distance" ) - if thisEntity.Encounter:GetRoom():IsValidSpawnPoint( vTargetPos ) and - GridNav:CanFindPath( thisEntity:GetOrigin(), vTargetPos ) then - self.bHasLeaped = true - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.leapAbility:entindex() - } - end - end - end - - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -BehaviorRunAway.Continue = BehaviorRunAway.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorShootArrow, BehaviorRunAway } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/naga_siren.lua b/aghanim_singleplayer/scripts/vscripts/ai/naga_siren.lua deleted file mode 100755 index b88fe0b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/naga_siren.lua +++ /dev/null @@ -1,322 +0,0 @@ ---[[ Naga Siren AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.nIllusionsCreated = 0 - thisEntity.nMaxIllusions = 10 - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorMirrorImage, BehaviorEnsnare, BehaviorRipTide, BehaviorSong, BehaviorRunAway } ) - - -- Turn on Radiance - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_radiance" then - thisEntity.RadianceAbility = item - end - end - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.RadianceAbility:entindex(), - Queue = false, - }) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, thisEntity:GetDayTimeVisionRange() ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorMirrorImage = {} - -function BehaviorMirrorImage:Evaluate() - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - if thisEntity.nIllusionsCreated == thisEntity.nMaxIllusions then - return desire - end - - self.mirrorImageAbility = thisEntity:FindAbilityByName( "aghsfort_naga_siren_mirror_image" ) - if not self.mirrorImageAbility or not self.mirrorImageAbility:IsFullyCastable() then - return desire - end - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), thisEntity, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - - return desire -end - -function BehaviorMirrorImage:Begin() - --print( "BehaviorMirrorImage:Begin()" ) - if self.mirrorImageAbility and self.mirrorImageAbility:IsFullyCastable() then - thisEntity.nIllusionsCreated = thisEntity.nIllusionsCreated + 1 - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.mirrorImageAbility:entindex(), - } - return order - end - - return nil - -end - -BehaviorMirrorImage.Continue = BehaviorMirrorImage.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorEnsnare = {} - -function BehaviorEnsnare:Evaluate() - --print( "BehaviorEnsnare:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.ensnareAbility = thisEntity:FindAbilityByName( "naga_siren_ensnare" ) - if self.ensnareAbility and self.ensnareAbility:IsFullyCastable() then - local nRange = 600 - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorEnsnare:Begin() - --print( "BehaviorEnsnare:Begin()" ) - - self.target = nil - local bestDistance = 0 - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), thisEntity, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - local hTarget = enemies[#enemies] - if not hTarget:IsStunned() then - if self.ensnareAbility and self.ensnareAbility:IsFullyCastable() then - --print( "Casting Star Fall" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = self.ensnareAbility:entindex(), - Queue = false, - } - return order - end - end - - return nil -end - -BehaviorEnsnare.Continue = BehaviorEnsnare.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRipTide = {} - -function BehaviorRipTide:Evaluate() - --print( "BehaviorRipTide:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.ripTideAbility = thisEntity:FindAbilityByName( "naga_siren_rip_tide" ) - if self.ripTideAbility and self.ripTideAbility:IsFullyCastable() then - local nRange = 300 - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorRipTide:Begin() - --print( "BehaviorRipTide:Begin()" ) - - if self.ripTideAbility and self.ripTideAbility:IsFullyCastable() then - --print( "Casting Star Fall" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.ripTideAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorRipTide.Continue = BehaviorRipTide.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorSong = {} - -function BehaviorSong:Evaluate() - --print( "BehaviorSong:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.songAbility = thisEntity:FindAbilityByName( "naga_siren_song_of_the_siren" ) - if self.songAbility and self.songAbility:IsFullyCastable() then - if ( thisEntity:GetHealthPercent() < 65 ) then - local nRange = 1000 - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - return desire - end - end - - return desire -end - -function BehaviorSong:Begin() - --print( "BehaviorSong:Begin()" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_invulnerable", { duration = 1 } ) - if self.songAbility and self.songAbility:IsFullyCastable() then - --print( "Casting Song of the Siren" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.songAbility:entindex(), - Queue = false, - } - return order - end - - return nil -end - -BehaviorSong.Continue = BehaviorSong.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRunAway = {} - -function BehaviorRunAway:Evaluate() - local desire = 0 - local retreatPoints = thisEntity.Encounter:GetRetreatPoints() - if retreatPoints == nil then - print( "*** WARNING: This AI requires info_targets named retreat_point in the map " .. thisEntity.Encounter:GetRoom():GetName() ) - return 0 - end - - local happyPlaceIndex = RandomInt( 1, #retreatPoints ) - self.escapePoint = retreatPoints[ happyPlaceIndex ]:GetAbsOrigin() - - local hSongModifier = thisEntity:FindModifierByName( "modifier_naga_siren_song_of_the_siren_aura" ) - if hSongModifier ~= nil then - --print("Naga Siren is singing!") - desire = 5 - end - - return desire -end - - -function BehaviorRunAway:Begin() - --print( "BehaviorRunAway:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - - -- move towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -function BehaviorRunAway:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 6 ) ) or - ( ( thisEntity:GetAbsOrigin() - self.escapePoint ):Length2D() < 200 ) -end - -function BehaviorRunAway:Think( ) - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -BehaviorRunAway.Continue = BehaviorRunAway.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorMirrorImage, BehaviorEnsnare, BehaviorRipTide, BehaviorSong, BehaviorRunAway } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/naga_siren_illusion.lua b/aghanim_singleplayer/scripts/vscripts/ai/naga_siren_illusion.lua deleted file mode 100755 index b0c957b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/naga_siren_illusion.lua +++ /dev/null @@ -1,176 +0,0 @@ ---[[ Naga Siren Illusion AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.nIllusionsCreated = 0 - thisEntity.nMaxIllusions = 10 - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorRipTide, BehaviorRunAway } ) - - -- Turn on Radiance - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_radiance" then - thisEntity.RadianceAbility = item - end - end - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.RadianceAbility:entindex(), - Queue = false, - }) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, thisEntity:GetDayTimeVisionRange() ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRipTide = {} - -function BehaviorRipTide:Evaluate() - --print( "BehaviorRipTide:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.ripTideAbility = thisEntity:FindAbilityByName( "naga_siren_rip_tide" ) - if self.ripTideAbility and self.ripTideAbility:IsFullyCastable() then - local nRange = 300 - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies > 1 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorRipTide:Begin() - --print( "BehaviorRipTide:Begin()" ) - - if self.ripTideAbility and self.ripTideAbility:IsFullyCastable() then - --print( "Casting Star Fall" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.ripTideAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorRipTide.Continue = BehaviorRipTide.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRunAway = {} - -function BehaviorRunAway:Evaluate() - local desire = 0 - local retreatPoints = thisEntity.Encounter:GetRetreatPoints() - if retreatPoints == nil then - print( "*** WARNING: This AI requires info_targets named retreat_point in the map " .. thisEntity.Encounter:GetRoom():GetName() ) - return 0 - end - - local creatures = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) - for _,hUnit in pairs( creatures ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hSongModifier = hUnit:FindModifierByName( "modifier_naga_siren_song_of_the_siren_aura" ) - if hSongModifier ~= nil then - --print("Naga Siren is singing!") - thisEntity.vNagaPosition = hUnit:GetAbsOrigin() - desire = 8 - end - end - end - - return desire -end - -function BehaviorRunAway:Begin() - --print( "BehaviorRunAway:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - - -- Move towards Naga - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity.vNagaPosition - } - -end - -function BehaviorRunAway:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 6 ) ) or - ( ( thisEntity:GetAbsOrigin() - thisEntity.vNagaPosition ):Length2D() < 200 ) -end - -function BehaviorRunAway:Think( ) - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity.vNagaPosition - } - -end - -BehaviorRunAway.Continue = BehaviorRunAway.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorRipTide, BehaviorRunAway } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ogre_magi.lua b/aghanim_singleplayer/scripts/vscripts/ai/ogre_magi.lua deleted file mode 100755 index 70c5029..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ogre_magi.lua +++ /dev/null @@ -1,116 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - IgniteAbility = thisEntity:FindAbilityByName( "ogre_magi_area_ignite" ) - BloodlustAbility = thisEntity:FindAbilityByName( "ogre_magi_channelled_bloodlust" ) - - thisEntity:SetContextThink( "OgreMagiThink", OgreMagiThink, 1 ) -end - --------------------------------------------------------------------------------- - -function OgreMagiThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if BloodlustAbility ~= nil and BloodlustAbility:IsChanneling() then - return 0.5 - end - - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - - local bIgniteReady = ( #enemies > 0 and IgniteAbility ~= nil and IgniteAbility:IsFullyCastable() ) - - if BloodlustAbility ~= nil and BloodlustAbility:IsFullyCastable() then - local friendlies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1500, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,friendly in pairs ( friendlies ) do - if friendly ~= nil then - if ( friendly:GetUnitName() == "npc_dota_creature_ogre_tank" ) then - local fDist = ( friendly:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - local fCastRange = BloodlustAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - --print( string.format( "fDist == %d, fCastRange == %d", fDist, fCastRange ) ) - if ( fDist <= fCastRange ) and ( ( #enemies > 0 ) or ( friendly:GetAggroTarget() ) ) then - return Bloodlust( friendly ) - elseif ( fDist > 400 ) and ( fDist < 900 ) then - if bIgniteReady == false then - return Approach( friendly ) - end - end - end - end - end - end - - if bIgniteReady then - return IgniteArea( enemies[ RandomInt( 1, #enemies ) ] ) - end - - local fFuzz = RandomFloat( -0.1, 0.1 ) -- Adds some timing separation to these magi - return 0.5 + fFuzz -end - --------------------------------------------------------------------------------- - -function Approach( hUnit ) - --print( "Ogre Magi is approaching unit named " .. hUnit:GetUnitName() ) - - local vToUnit = hUnit:GetOrigin() - thisEntity:GetOrigin() - vToUnit = vToUnit:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vToUnit * thisEntity:GetIdealSpeed() - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function Bloodlust( hUnit ) - --print( "Casting bloodlust on " .. hUnit:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = BloodlustAbility:entindex(), - TargetIndex = hUnit:entindex(), - Queue = false, - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function IgniteArea( hEnemy ) - --print( "Casting ignite on " .. hEnemy:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = IgniteAbility:entindex(), - Position = hEnemy:GetOrigin(), - Queue = false, - }) - - return 0.55 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ogre_seal.lua b/aghanim_singleplayer/scripts/vscripts/ai/ogre_seal.lua deleted file mode 100755 index d77da33..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ogre_seal.lua +++ /dev/null @@ -1,60 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hFlop = thisEntity:FindAbilityByName( "ogreseal_flop" ) - thisEntity.flSearchRadius = 700 - - thisEntity:SetContextThink( "OgreSealThink", OgreSealThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function OgreSealThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.flSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.5 - end - - if thisEntity.hFlop ~= nil and thisEntity.hFlop:IsFullyCastable() then - return CastBellyFlop( hEnemies[ #hEnemies ] ) - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastBellyFlop( enemy ) - local vToTarget = enemy:GetOrigin() - thisEntity:GetOrigin() - vToTarget = vToTarget:Normalized() - local vTargetPos = thisEntity:GetOrigin() + vToTarget * 50 - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hFlop:entindex(), - Position = vTargetPos, - Queue = false, - }) - - return 4 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ogre_seer.lua b/aghanim_singleplayer/scripts/vscripts/ai/ogre_seer.lua deleted file mode 100755 index 7a3dd2c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ogre_seer.lua +++ /dev/null @@ -1,123 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - IgniteAbility = thisEntity:FindAbilityByName( "ogre_seer_area_ignite" ) - BloodlustAbility = thisEntity:FindAbilityByName( "ogre_magi_channelled_bloodlust" ) - - thisEntity:SetContextThink( "OgreSeerThink", OgreSeerThink, 1 ) -end - --------------------------------------------------------------------------------- - -function OgreSeerThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if BloodlustAbility ~= nil and BloodlustAbility:IsChanneling() then - return 0.5 - end - - --[[ - local bPrioritizeIgnite = ( RandomFloat( 0, 1 ) > 0.5 ) - print( "bPrioritizeIgnite == " .. tostring( bPrioritizeIgnite ) ) - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 800, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if bPrioritizeIgnite and #enemies > 0 and IgniteAbility ~= nil and IgniteAbility:IsFullyCastable() then - return IgniteArea( enemies[ RandomInt( 1, #enemies ) ] ) - end - ]] - - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 800, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - - local bIgniteReady = ( #enemies > 0 and IgniteAbility ~= nil and IgniteAbility:IsFullyCastable() ) - - if BloodlustAbility ~= nil and BloodlustAbility:IsFullyCastable() then - local friendlies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1500, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,friendly in pairs ( friendlies ) do - if friendly ~= nil then - if ( friendly:GetUnitName() == "npc_dota_creature_ogre_tank" ) or ( friendly:GetUnitName() == "npc_dota_creature_ogre_tank_boss" ) then - local fDist = ( friendly:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - local fCastRange = BloodlustAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - --print( string.format( "fDist == %d, fCastRange == %d", fDist, fCastRange ) ) - if ( fDist <= fCastRange ) and ( ( #enemies > 0 ) or ( friendly:GetAggroTarget() ) ) then - return Bloodlust( friendly ) - elseif ( fDist > 400 ) and ( fDist < 1500 ) and friendly:GetUnitName() == "npc_dota_creature_ogre_tank_boss" then - if bIgniteReady == false then - return Approach( friendly ) - end - end - end - end - end - end - - if bIgniteReady then - return IgniteArea( enemies[ RandomInt( 1, #enemies ) ] ) - end - - local fFuzz = RandomFloat( -0.1, 0.1 ) -- Adds some timing separation to these seers - return 0.5 + fFuzz -end - --------------------------------------------------------------------------------- - -function Approach( hUnit ) - --print( "Ogre Magi is approaching unit named " .. hUnit:GetUnitName() ) - - local vToUnit = hUnit:GetOrigin() - thisEntity:GetOrigin() - vToUnit = vToUnit:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vToUnit * thisEntity:GetIdealSpeed() - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function Bloodlust( hUnit ) - --print( "Casting bloodlust on " .. hUnit:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = BloodlustAbility:entindex(), - TargetIndex = hUnit:entindex(), - Queue = false, - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function IgniteArea( hEnemy ) - --print( "Casting ignite" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = IgniteAbility:entindex(), - Position = hEnemy:GetOrigin(), - Queue = false, - }) - - return 0.55 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ogre_tank.lua b/aghanim_singleplayer/scripts/vscripts/ai/ogre_tank.lua deleted file mode 100755 index 5bfc3d0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ogre_tank.lua +++ /dev/null @@ -1,100 +0,0 @@ -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - SmashAbility = thisEntity:FindAbilityByName( "ogre_tank_melee_smash" ) - JumpAbility = thisEntity:FindAbilityByName( "ogre_tank_jump_smash" ) - thisEntity:SetContextThink( "OgreTankThink", OgreTankThink, 1 ) -end - -function OgreTankThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 850 ) - thisEntity.bAcqRangeModified = true - end - - local hWintersCurseBuff = thisEntity:FindModifierByName( "modifier_aghsfort_winter_wyvern_winters_curse" ) - if hWintersCurseBuff and hWintersCurseBuff:GetAuraOwner() ~= nil then - if SmashAbility ~= nil and SmashAbility:IsCooldownReady() then - return Smash( hWintersCurseBuff:GetAuraOwner() ) - end - return 0.1 - end - - local nEnemiesRemoved = 0 - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for i = 1, #enemies do - local enemy = enemies[i] - if enemy ~= nil then - local flDist = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < 300 then - nEnemiesRemoved = nEnemiesRemoved + 1 - table.remove( enemies, i ) - end - end - end - - if JumpAbility ~= nil and JumpAbility:IsFullyCastable() and nEnemiesRemoved > 0 then - return Jump() - end - - if #enemies == 0 then - -- @todo: Could check whether there are ogre magi nearby that I should be positioning myself next to. Either that or have the magi come to me. - return 1 - end - - if SmashAbility ~= nil and SmashAbility:IsFullyCastable() then - return Smash( enemies[ 1 ] ) - end - - return 0.5 -end - - -function Jump() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = JumpAbility:entindex(), - Queue = false, - }) - - return 2.5 -end - - -function Smash( enemy ) - if enemy == nil then - return - end - - if ( not thisEntity:HasModifier( "modifier_provide_vision" ) ) then - --print( "If player can't see me, provide brief vision to his team as I start my Smash" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = SmashAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 3 / thisEntity:GetHasteFactor() -end - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/ogre_tank_boss.lua b/aghanim_singleplayer/scripts/vscripts/ai/ogre_tank_boss.lua deleted file mode 100755 index 4a326c7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/ogre_tank_boss.lua +++ /dev/null @@ -1,108 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - SmashAbility = thisEntity:FindAbilityByName( "ogre_tank_boss_melee_smash" ) - JumpAbility = thisEntity:FindAbilityByName( "ogre_tank_boss_jump_smash" ) - - thisEntity:AddNewModifier( thisEntity, nil, "modifier_attack_speed_unslowable", { attack_speed_reduction_pct = 0 } ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_move_speed_unslowable", { move_speed_reduction_pct = 20 } ) - - thisEntity:SetContextThink( "OgreTankBossThink", OgreTankBossThink, 1 ) -end - --------------------------------------------------------------------------------- - -function OgreTankBossThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - - local hWintersCurseBuff = thisEntity:FindModifierByName( "modifier_aghsfort_winter_wyvern_winters_curse" ) - if hWintersCurseBuff and hWintersCurseBuff:GetAuraOwner() ~= nil then - if SmashAbility ~= nil and SmashAbility:IsCooldownReady() then - return Smash( hWintersCurseBuff:GetAuraOwner() ) - end - return 0.1 - end - - local nEnemiesRemoved = 0 - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1200, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for i = 1, #enemies do - local enemy = enemies[i] - if enemy ~= nil then - local flDist = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist < 300 then - nEnemiesRemoved = nEnemiesRemoved + 1 - table.remove( enemies, i ) - end - end - end - - if JumpAbility ~= nil and JumpAbility:IsFullyCastable() and nEnemiesRemoved > 0 then - return Jump() - end - - if #enemies == 0 then - return 0.5 - end - - if SmashAbility ~= nil and SmashAbility:IsFullyCastable() then - return Smash( enemies[ 1 ] ) - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function Jump() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = JumpAbility:entindex(), - Queue = false, - }) - - return 2.5 -end - --------------------------------------------------------------------------------- - -function Smash( enemy ) - if enemy == nil then - return - end - - if ( not thisEntity:HasModifier( "modifier_provide_vision" ) ) then - --print( "If player can't see me, provide brief vision to his team as I start my Smash" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = SmashAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 3 / thisEntity:GetHasteFactor() -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/phoenix.lua b/aghanim_singleplayer/scripts/vscripts/ai/phoenix.lua deleted file mode 100755 index 2927340..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/phoenix.lua +++ /dev/null @@ -1,134 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hIcarusDiveAbility = thisEntity:FindAbilityByName( "aghsfort_phoenix_icarus_dive" ) - thisEntity.hIcarusDiveStopAbility = thisEntity:FindAbilityByName( "aghsfort_phoenix_icarus_dive_stop" ) - thisEntity.hActivateSpiritsAbility = thisEntity:FindAbilityByName( "aghsfort_phoenix_fire_spirits" ) - thisEntity.hLaunchSpiritsAbility = thisEntity:FindAbilityByName( "aghsfort_phoenix_launch_fire_spirit" ) - thisEntity.hSupernovaAbility = thisEntity:FindAbilityByName( "aghsfort_phoenix_supernova" ) - - thisEntity.fDiveRange = 1400 - thisEntity.fSupernovaRange = thisEntity.hSupernovaAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - - thisEntity:SetContextThink( "PhoenixThink", PhoenixThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function PhoenixThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local hDiveRangeEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fDiveRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hDiveRangeEnemies == 0 then - -- thisEntity.fDiveRange is our max ability range so just don't think if there are no enemies within that range - return 0.1 - end - - local hRandomSpiritsTarget = hDiveRangeEnemies[ RandomInt( 1, #hDiveRangeEnemies ) ] - - if thisEntity.hActivateSpiritsAbility then - if thisEntity.hActivateSpiritsAbility:IsHidden() == false and thisEntity.hActivateSpiritsAbility:IsFullyCastable() then - return CastActivateSpirits() - end - end - - if thisEntity.hLaunchSpiritsAbility then - if thisEntity.hLaunchSpiritsAbility:IsHidden() == false and thisEntity.hLaunchSpiritsAbility:IsFullyCastable() then - return CastLaunchSpirits( hRandomSpiritsTarget:GetAbsOrigin() ) - end - end - - local fHealthThresholdPctIcarus = 90 - if thisEntity:GetHealthPercent() <= fHealthThresholdPctIcarus and thisEntity.hIcarusDiveAbility and thisEntity.hIcarusDiveAbility:IsFullyCastable() then - local hRandomDiveTarget = hDiveRangeEnemies[ RandomInt( 1, #hDiveRangeEnemies ) ] - return CastIcarusDive( hRandomDiveTarget:GetAbsOrigin() ) - end - - local hSupernovaRangeEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fSupernovaRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - - if #hSupernovaRangeEnemies > 0 then - local fHealthThresholdPctSupernova = 33 - if thisEntity:GetHealthPercent() <= fHealthThresholdPctSupernova and thisEntity.hSupernovaAbility and thisEntity.hSupernovaAbility:IsFullyCastable() then - local hNearestTarget = hSupernovaRangeEnemies[ 1 ] - return CastSupernova( hNearestTarget ) - end - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function CastIcarusDive( vTargetPos ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hIcarusDiveAbility:entindex(), - Position = vTargetPos, - Queue = false, - }) - - local fReturnTime = thisEntity.hIcarusDiveAbility:GetCastPoint() + 0.2 - return fReturnTime -end - --------------------------------------------------------------------------------- - -function CastActivateSpirits( vTargetPos ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hActivateSpiritsAbility:entindex(), - Queue = false, - }) - - return 0.0 -end - --------------------------------------------------------------------------------- - -function CastLaunchSpirits( vTargetPos ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hLaunchSpiritsAbility:entindex(), - Position = vTargetPos, - Queue = false, - }) - - return 1.0 -end - --------------------------------------------------------------------------------- - -function CastSupernova( hTarget ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = thisEntity.hSupernovaAbility:entindex(), - TargetIndex = hTarget:entindex(), - Queue = false, - }) - - local fReturnTime = thisEntity.hSupernovaAbility:GetCastPoint() + 0.2 - return fReturnTime -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/rhyzik.lua b/aghanim_singleplayer/scripts/vscripts/ai/rhyzik.lua deleted file mode 100755 index 70d2ccd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/rhyzik.lua +++ /dev/null @@ -1,506 +0,0 @@ - ---[[ ai/rhyzik.lua ]] - -PHASE_PHYSICAL = 0 -PHASE_SANDSTORM = 1 -PHASE_EPICENTER = 2 - -TRIGGER_PHASE_CD = 10 -PHASE_DURATION = 12 -BURROW_DURATION = 12 -MIN_BURROWSTRIKES = 4 -MAX_BURROWSTRIKES = 7 - -function Spawn( entityKeyValues ) - if IsServer() then - if thisEntity == nil then - return - end - - TailSwipeLeft = thisEntity:FindAbilityByName( "sand_king_tail_swipe_left" ) - TailSwipeRight = thisEntity:FindAbilityByName( "sand_king_tail_swipe_right" ) - BurrowStrike = thisEntity:FindAbilityByName( "sand_king_boss_burrowstrike" ) - BurrowDown = thisEntity:FindAbilityByName( "sand_king_boss_burrow" ) - BurrowUp = thisEntity:FindAbilityByName( "sand_king_boss_unburrow" ) - SandStorm = thisEntity:FindAbilityByName( "sand_king_boss_sandstorm" ) - Epicenter = thisEntity:FindAbilityByName( "sand_king_boss_epicenter" ) - ForwardTailSwipe = thisEntity:FindAbilityByName( "sand_king_burrowed_forward_strike" ) - BackwardsTailSwipe = thisEntity:FindAbilityByName( "sand_king_burrowed_backward_strike" ) - - DirectionalMoveLeft = thisEntity:FindAbilityByName( "sand_king_boss_move_left" ) - DirectionalMoveRight = thisEntity:FindAbilityByName( "sand_king_boss_move_right" ) - DirectionalMoveBack = thisEntity:FindAbilityByName( "sand_king_boss_move_back" ) - - --thisEntity.PHASE = PHASE_PHYSICAL - thisEntity.PHASE = PHASE_SANDSTORM - - Blink = thisEntity:FindItemInInventory( "item_blink" ) - Shivas = thisEntity:FindItemInInventory( "item_shivas_guard" ) - - thisEntity:SetContextThink( "SandKingThink", SandKingThink, 1 ) - thisEntity.flNextPhaseTime = nil - thisEntity.flPhaseTriggerEndTime = 0 - thisEntity.bBurrowStateQueued = false - thisEntity.nBurrowStrikesRemaining = MIN_BURROWSTRIKES - thisEntity.nCurrentBurrowStrikes = MIN_BURROWSTRIKES - thisEntity.flUnburrowTime = 0 - - thisEntity.BurrowSkill = BurrowStrike - - --thisEntity.fOrigSpawnPos = Vector( 11136, 12160, 384 ) -- Removed in AghsFort until we figure what this should mean - --print( string.format( "saved SK's spawn point: %.2f, %.2f, %.2f", thisEntity.fOrigSpawnPos.x, thisEntity.fOrigSpawnPos.y, thisEntity.fOrigSpawnPos.z ) ) - end -end - -function GetNumberBurrowStrikes() - local nHealthPct = thisEntity:GetHealthPercent() - if nHealthPct > 80 then - return MIN_BURROWSTRIKES - end - - if nHealthPct > 70 then - return MIN_BURROWSTRIKES + 1 - end - - if nHealthPct > 50 then - return MIN_BURROWSTRIKES + 2 - end - - return MAX_BURROWSTRIKES -end - -function TailIsReady() - if thisEntity:FindModifierByName( "modifier_sand_king_boss_burrow" ) == nil then - if TailSwipeLeft ~= nil and TailSwipeRight ~= nil and TailSwipeLeft:IsCooldownReady() and TailSwipeRight:IsCooldownReady() then - return true - end - else - if ForwardTailSwipe ~= nil and BackwardsTailSwipe ~= nil and ForwardTailSwipe:IsCooldownReady() and BackwardsTailSwipe:IsCooldownReady() then - return true - end - end - - return false -end - -function WalkIsReady() - if DirectionalMoveLeft ~= nil and DirectionalMoveRight ~= nil and DirectionalMoveBack ~= nil then - if DirectionalMoveLeft:IsCooldownReady() or DirectionalMoveRight:IsCooldownReady() or DirectionalMoveBack:IsCooldownReady() then - return true - end - end - - return false -end - -function ChangePhase() - if thisEntity.flNextPhaseTime > GameRules:GetGameTime() then - return false - end - - if thisEntity:FindModifierByName( "modifier_sand_king_boss_burrow" ) ~= nil then - return 0.1 - end - - if thisEntity.bBurrowStateQueued == true then - return false - end - - printf( "Changing Phase " .. GameRules:GetGameTime() ) - - if thisEntity.PHASE == PHASE_EPICENTER then - thisEntity.PHASE = PHASE_PHYSICAL - else - thisEntity.PHASE = thisEntity.PHASE + 1 - end - - return true -end - -function SandKingThink() - if GameRules:IsGamePaused() == true then - return 1 - end - - if thisEntity == nil then - return 1 - end - - if thisEntity:GetTeamNumber() == DOTA_TEAM_GOODGUYS then - return 1 - end - - if thisEntity:IsChanneling() == true then - return 0.1 - end - - --[[ Removed in Aghanim's Fortress - if thisEntity.bStarted ~= true then - return 0.1 - end - ]] - - --[[ Removed in Aghanim's Fortress until we figure out what fOriginalSpawnPos should mean - local fDistFromSpawn = ( thisEntity:GetOrigin() - thisEntity.fOrigSpawnPos ):Length2D() - if fDistFromSpawn > 7000 then - --print( "teleport SK back to his spawn point" ) - FindClearSpaceForUnit( thisEntity, thisEntity.fOrigSpawnPos, true ) - return 0.1 - end - ]] - - local hEndCamera = Entities:FindByName( nil, "boss_camera" ) - if hEndCamera ~= nil then - hEndCamera:SetAbsOrigin( thisEntity:GetAbsOrigin() ) - end - - if thisEntity.flNextPhaseTime == nil then - thisEntity.bBurrowStateQueued = true - thisEntity.flNextPhaseTime = GameRules:GetGameTime() + TRIGGER_PHASE_CD - -- print( "Setting inital phase time to " .. thisEntity.flNextPhaseTime ) - end - - if ChangePhase() then - -- print( "Changing Phase..") - thisEntity.flPhaseTriggerEndTime = GameRules:GetGameTime() + PHASE_DURATION - thisEntity.bBurrowStateQueued = true - if thisEntity.BurrowSkill == BurrowStrike then - thisEntity.BurrowSkill = BurrowDown - thisEntity.flUnburrowTime = GameRules:GetGameTime() + PHASE_DURATION + BURROW_DURATION - thisEntity.flNextPhaseTime = GameRules:GetGameTime() + TRIGGER_PHASE_CD + PHASE_DURATION + BURROW_DURATION - -- print( "Setting next phase time to " .. thisEntity.flNextPhaseTime ) - else - thisEntity.BurrowSkill = BurrowStrike - thisEntity.nBurrowStrikesRemaining = GetNumberBurrowStrikes() - thisEntity.nCurrentBurrowStrikes = GetNumberBurrowStrikes() - thisEntity.flNextPhaseTime = GameRules:GetGameTime() + TRIGGER_PHASE_CD + PHASE_DURATION --Burrowstrikes adds to this time later after tracking the duration of strikes - -- print( "Setting next phase time to " .. thisEntity.flNextPhaseTime ) - end - end - - if thisEntity.flPhaseTriggerEndTime > GameRules:GetGameTime() then - if thisEntity.PHASE == PHASE_SANDSTORM then - return SandstormThink() - end - if thisEntity.PHASE == PHASE_EPICENTER then - return EpicenterThink() - end - end - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 3000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies == 0 then - return 1 - end - - if thisEntity.bBurrowStateQueued == true then - return BurrowThink( enemies ) - end - - return PhysicalThink( enemies ) -end - -function BurrowThink( enemies ) - if thisEntity.BurrowSkill == BurrowDown then - if GameRules:GetGameTime() > thisEntity.flUnburrowTime then - thisEntity.bBurrowStateQueued = false - return CastBurrowUp() - end - if thisEntity:FindModifierByName( "modifier_sand_king_boss_burrow" ) == nil then - return CastBurrowDown() - else - return PhysicalThink( enemies ) - end - end - - if thisEntity.BurrowSkill == BurrowStrike then - if thisEntity:FindModifierByName( "modifier_sand_king_boss_burrowstrike" ) ~= nil or thisEntity:FindModifierByName( "modifier_sand_king_boss_burrowstrike_end" ) ~= nil then - return 0.1 - end - - if thisEntity.nBurrowStrikesRemaining == thisEntity.nCurrentBurrowStrikes then - thisEntity.flBurrowStrikesStartTime = GameRules:GetGameTime() - end - - if thisEntity.nBurrowStrikesRemaining <= 0 then - thisEntity.bBurrowStateQueued = false - thisEntity.flNextPhaseTime = thisEntity.flNextPhaseTime + ( GameRules:GetGameTime() - thisEntity.flBurrowStrikesStartTime ) - return 0.1 - end - - thisEntity.nBurrowStrikesRemaining = thisEntity.nBurrowStrikesRemaining - 1 - - for _, enemy in pairs ( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - return CastBurrowstrike( enemy ) - end - end - end - - return 1 -end - -function CastBurrowstrike( enemy ) - --print( "SandKingBoss - Cast Burrowstrike" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = BurrowStrike:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 2.5 -end - -function CastBurrowDown() - --print( "SandKingBoss - Cast BurrowDown" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = BurrowDown:entindex(), - Queue = false, - }) - - return 2.5 -end - -function CastBurrowUp() - --print( "SandKingBoss - Cast BurrowUp" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = BurrowUp:entindex(), - Queue = false, - }) - - return 2.5 -end - -function SandstormThink() - return CastSandstorm() -end - -function CastSandstorm() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = SandStorm:entindex() - }) - - return 1.0 -end - -function EpicenterThink() - return CastEpicenter() -end - -function CastEpicenter() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = Epicenter:entindex() - }) - - return 1.0 -end - -function PhysicalThink( enemies ) - if thisEntity:FindModifierByName( "modifier_sand_king_boss_directional_move" ) then - return 0.2 - end - - local vDirection = thisEntity:GetForwardVector() - local vRight = thisEntity:GetRightVector() - local vLeft = -vRight - local flQuadrantDistance = 200 - local bBurrowed = thisEntity:FindModifierByName( "modifier_sand_king_boss_burrow" ) ~= nil - - local vFrontRightQuadrant = thisEntity:GetOrigin() + (( vDirection + vRight ) * flQuadrantDistance ) - local vFrontLeftQuadrant = thisEntity:GetOrigin() + (( vDirection + vLeft ) * flQuadrantDistance ) - local vBackRightQuadrant = thisEntity:GetOrigin() + (( -vDirection + vRight ) * flQuadrantDistance ) - local vBackLeftQuadrant = thisEntity:GetOrigin() + (( -vDirection + vLeft ) * flQuadrantDistance ) - local frontRightEnemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vFrontRightQuadrant, enemies[1], 450, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - local frontLeftEnemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vFrontLeftQuadrant, enemies[1], 450, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - local backRightEnemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vBackRightQuadrant, enemies[1], 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - local backLeftEnemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vBackLeftQuadrant, enemies[1], 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - - local bEnemiesBehind = true - if #backRightEnemies == 0 and #backLeftEnemies == 0 then - bEnemiesBehind = false - end - - local bEnemiesInFront = true - if #frontRightEnemies == 0 and #frontLeftEnemies == 0 then - bEnemiesInFront = false - end - - if bBurrowed then - return CastForwardsTailSwipe( enemies[1] ) - end - - if bBurrowed then - return 1 - end - - if Blink ~= nil and Blink:IsFullyCastable() then - --print ( "Use Blink" ) - return CastBlink( enemies[#enemies]:GetOrigin() ) - else - if Blink == nil then - --print ( "blink is nil" ) - Blink = thisEntity:FindItemInInventory( "item_blink" ) - end - end - - if Shivas ~= nil and Shivas:IsFullyCastable() then - return CastShivas() - else - if Shivas == nil then - --print ( "shivas is nil" ) - Shivas = thisEntity:FindItemInInventory( "item_shivas_guard" ) - end - end - - if bEnemiesBehind == true and TailIsReady() then - if #backLeftEnemies > 0 and #backRightEnemies > 0 then - local nRoll = RandomInt( 0, 1 ) - if nRoll == 0 then - return CastTailSwipeLeft() - else - return CastTailSwipeRight() - end - else - if #backLeftEnemies > 0 then - return CastTailSwipeLeft() - end - if #backRightEnemies > 0 then - return CastTailSwipeRight() - end - end - end - - if TailIsReady() == false and WalkIsReady() == true and RandomInt( 0, 3 ) == 0 then - if enemies[1] ~= nil then - local flDist = ( enemies[1]:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - if flDist <= 200 and DirectionalMoveBack:IsCooldownReady() then - return MoveBack( enemies[1] ) - else - return MoveSideWays( enemies[1] ) - end - end - end - - return Attack( enemies[1] ) -end - -function CastBlink( vPos ) - --print ( "Use Blink" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vPos, - AbilityIndex = Blink:entindex() - }) - - return 0.5 -end - -function CastShivas() - --print ( "Use Shivas" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = Shivas:entindex() - }) - - return 0.25 -end - -function Attack( enemy ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = enemy:GetOrigin(), - }) - - return 2.0 -end - -function MoveBack( enemy ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = enemy:entindex(), - AbilityIndex = DirectionalMoveBack:entindex(), - }) - - return 1.0 -end - -function MoveSideWays( enemy ) - local Ability = DirectionalMoveRight - if RandomInt( 0, 1 ) == 1 then - Ability = DirectionalMoveLeft - end - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = enemy:entindex(), - AbilityIndex = Ability:entindex(), - }) - - return 1.0 -end - -function CastClawAttack( enemy ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = enemy:entindex(), - AbilityIndex = ClawAttack:entindex(), - }) - - return 1.1 -end - -function CastTailSwipeLeft() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = TailSwipeLeft:entindex() - }) - - return 2.5 -end - -function CastTailSwipeRight() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = TailSwipeRight:entindex() - }) - - return 2.5 -end - - -function CastBackwardsTailSwipe() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = BackwardsTailSwipe:entindex() - }) - - return 2.5 -end - -function CastForwardsTailSwipe( enemy ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = enemy:entindex(), - AbilityIndex = ForwardTailSwipe:entindex(), - }) - - return 2.5 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/scarab_priest.lua b/aghanim_singleplayer/scripts/vscripts/ai/scarab_priest.lua deleted file mode 100755 index 229c321..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/scarab_priest.lua +++ /dev/null @@ -1,147 +0,0 @@ -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.SpikedCarapaceAbility = thisEntity:FindAbilityByName( "aghsfort_creature_spiked_carapace" ) - thisEntity.SummonZealotsAbility = thisEntity:FindAbilityByName( "scarab_priest_summon_zealots" ) - thisEntity.nLastHealth = thisEntity:GetHealth() - thisEntity.bAcqRangeModified = false - - thisEntity.hEntityKilledGameEvent = ListenToGameEvent( "entity_killed", Dynamic_Wrap( thisEntity:GetPrivateScriptScope(), 'OnEntityKilled' ), nil ) - - thisEntity:SetContextThink( "ScarabPriestThink", ScarabPriestThink, 1 ) -end - -function UpdateOnRemove() - StopListeningToGameEvent( thisEntity.hEntityKilledGameEvent ) -end - -function ScarabPriestThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 850 ) - thisEntity.bAcqRangeModified = true - end - - local nHealth = thisEntity:GetHealth() - if thisEntity.nLastHealth > nHealth then - if thisEntity.SpikedCarapaceAbility ~= nil and thisEntity.SpikedCarapaceAbility:IsFullyCastable() then - return SpikedCarapace( ) - end - thisEntity.nLastHealth = nHealth - end - - if thisEntity.SummonZealotsAbility ~= nil and thisEntity.SummonZealotsAbility:IsFullyCastable() == true and - thisEntity.bAcqRangeModified == true then - - -- Only spawn zealots if we haven't got too many already - local nMyZealotCount = thisEntity.SummonZealotsAbility:GetSpecialValueFor( "max_summons" ) - local hZealots = thisEntity.Encounter:GetSpawnedUnitsOfType( "npc_dota_creature_zealot_scarab" ) - for i=1,#hZealots do - if hZealots[i]:GetOwnerEntity() == thisEntity then - nMyZealotCount = nMyZealotCount - 1 - if nMyZealotCount == 0 then - break - end - end - end - - if nMyZealotCount > 0 then - return SummonZealots() - end - end - - return 0.5 -end - -function OnEntityKilled( event ) - - local hVictim = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - - if hVictim ~= thisEntity then - return - end - - -- Check all of the other priests, and see if any others are aggroed. - -- If not, then we'll force aggro on the closest one - local flNearDist = 60000 - local hNearPriest = nil - local hPriests = thisEntity.Encounter:GetSpawnedUnitsOfType( "npc_dota_creature_scarab_priest" ) - for i=1,#hPriests do - if hPriests[i] ~= thisEntity then - - if hPriests[i].bAcqRangeModified then - hNearPriest = nil - break - end - - local flDist = ( hPriests[i]:GetAbsOrigin() - hVictim:GetAbsOrigin() ):Length2D() - if flDist < flNearDist then - flNearDist = flDist - hNearPriest = hPriests[i] - end - - end - end - - if hNearPriest == nil then - return - end - - hNearPriest:SetDayTimeVisionRange( 5000 ) - hNearPriest:SetNightTimeVisionRange( 5000 ) - hNearPriest:SetAcquisitionRange( 5000 ) - hNearPriest.bAcqRangeModified = true - - -- Order nearby zealots idle unonwned to start attacking also - local hZealots = thisEntity.Encounter:GetSpawnedUnitsOfType( "npc_dota_creature_zealot_scarab" ) - for i=1,#hZealots do - local hZealot = hZealots[i] - if hZealot:GetOwnerEntity() == nil and hZealot:GetAggroTarget() == nil and ( hNearPriest:GetAbsOrigin() - hZealot:GetAbsOrigin() ):Length2D() < 800 then - hZealot:SetDayTimeVisionRange( 5000 ) - hZealot:SetNightTimeVisionRange( 5000 ) - hZealot:SetAcquisitionRange( 5000 ) - end - end -end - - -function SpikedCarapace() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.SpikedCarapaceAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - - -function SummonZealots( ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.SummonZealotsAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/scarab_zealot.lua b/aghanim_singleplayer/scripts/vscripts/ai/scarab_zealot.lua deleted file mode 100755 index 8d3d563..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/scarab_zealot.lua +++ /dev/null @@ -1,92 +0,0 @@ -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.ImpaleAbility = thisEntity:FindAbilityByName( "aghsfort_creature_impale" ) - - thisEntity:SetContextThink( "ScarabZealotThink", ScarabZealotThink, 1 ) -end - -function LastTargetImpaleTime( hTarget ) - - local flLastTime = thisEntity.Encounter.ImpaleTargets[ tostring( hTarget:entindex() ) ] - if flLastTime == nil then - flLastTime = 0 - end - - return flLastTime - -end - -function ScarabZealotThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if thisEntity.Encounter.ImpaleTargets == nil then - thisEntity.Encounter.ImpaleTargets = {} - end - - if thisEntity.ImpaleAbility ~= nil and thisEntity.ImpaleAbility:IsFullyCastable() then - - -- Select a unit in range to attack - -- And don't pick a target who was impaled at in the last second - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, - thisEntity.ImpaleAbility:GetCastRange(), DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, 0, false ) - - local hPossibleEnemies = {} - for _,hEnemy in pairs( enemies ) do - local flTimeSinceLastImpale = GameRules:GetGameTime() - LastTargetImpaleTime( hEnemy ) - if hEnemy ~= nil and hEnemy:IsAlive() and hEnemy:IsInvulnerable() == false and - hEnemy:IsMagicImmune() == false and ( flTimeSinceLastImpale > 0.5 ) then - - table.insert( hPossibleEnemies, hEnemy ) - end - end - - -- Pick a random one, but prefer one who is at least 500 away - local hNearEnemy = nil - while #hPossibleEnemies > 0 do - local nIndex = math.random( 1, #hPossibleEnemies ) - local hEnemy = hPossibleEnemies[ nIndex ] - if ( ( hEnemy:GetAbsOrigin() - thisEntity:GetAbsOrigin() ):Length2D() > 500 ) then - return Impale( hEnemy ) - end - hNearEnemy = hEnemy - table.remove( hPossibleEnemies, nIndex ) - end - - -- If not, then pick a close one - if hNearEnemy ~= nil then - return Impale( hNearEnemy ) - end - - end - - return 0.1 -end - -function Impale( hTarget ) - - local vTargetPos = hTarget:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ) - thisEntity.Encounter.ImpaleTargets[ tostring( hTarget:entindex() ) ] = GameRules:GetGameTime() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.ImpaleAbility:entindex(), - Position = vTargetPos, - Queue = false, - }) - - return 0.5 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/shared.lua b/aghanim_singleplayer/scripts/vscripts/ai/shared.lua deleted file mode 100755 index 5bf0072..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/shared.lua +++ /dev/null @@ -1,584 +0,0 @@ - --------------------------------------------------------------------------------- - -function GetEnemyHeroesInRange( hUnit , flRange ) - if flRange == nil then - flRange = 1250 - end - local enemies = FindUnitsInRadius( hUnit:GetTeamNumber(), hUnit:GetAbsOrigin(), nil, flRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - return enemies -end - --------------------------------------------------------------------------------- - -function GetVisibleEnemyHeroesInRange( hUnit , flRange ) - if flRange == nil then - flRange = 1250 - end - local enemies = FindUnitsInRadius( hUnit:GetTeamNumber(), hUnit:GetAbsOrigin(), nil, flRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - return enemies -end - --------------------------------------------------------------------------------- - -function GetNoteworthyVisibleEnemiesNearby( hUnit, flRange ) - if flRange == nil then - flRange = 1250 - end - - local eTARGETED_UNITS = DOTA_UNIT_TARGET_CREEP + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO - local enemies = FindUnitsInRadius( hUnit:GetTeamNumber(), hUnit:GetAbsOrigin(), nil, flRange, DOTA_UNIT_TARGET_TEAM_ENEMY, eTARGETED_UNITS, DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - - for index, hEnemy in pairs( enemies ) do - if hEnemy:IsRealHero() == false and hEnemy:IsConsideredHero() == false and hEnemy:IsIllusion() == false then - -- Remove the most unimportant units - table.remove( enemies, index ) - end - end - - return enemies -end - --------------------------------------------------------------------------------- - -function FilterEntitiesOutsideOfRange( vPosition, hEntitiesTable, flRange ) - if hEntitiesTable == nil or #hEntitiesTable == 0 then - return {} - end - - for n=#hEntitiesTable,1,-1 do - local hEntity = hEntitiesTable[ n ] - if hEntity ~= nil then - local fDist = ( hEntity:GetOrigin() - vPosition ):Length2D() - if fDist > flRange then - table.remove( hEntitiesTable, n ) - end - end - end - - return hEntitiesTable -end - --------------------------------------------------------------------------------- --- General Utility Fucntions -- --------------------------------------------------------------------------------- - -function AdvancedRandomVector( MaxLength, MinLength, vAwayFromVec, vAwayFromDist ) - local vCandidate = nil - repeat - vCandidate = RandomVector(1):Normalized()*RandomFloat(MinLength,MaxLength) - until (vAwayFromVec == nil or vAwayFromDist == nil) or ( (vAwayFromVec - vCandidate):Length2D() > vAwayFromDist ) - return vCandidate -end - -function MoveOrder( hUnit, vPos ) - ExecuteOrderFromTable({ - UnitIndex = hUnit:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vPos, - }) - - return 1.0 -end - -function StopOrder( hUnit ) - ExecuteOrderFromTable({ - UnitIndex = hUnit:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP, - }) -end - --------------------------------------------------------------------------------- -function AttackMoveOrder( hAttacker, hEnemy ) - if (not hAttacker or not hEnemy or not hAttacker:HasAttackCapability() ) then - return 0.25 - end - - ExecuteOrderFromTable({ - UnitIndex = hAttacker:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = hEnemy:GetOrigin(), - }) - - return 1.0 -end - --------------------------------------------------------------------------------- - -function AttackTargetOrder( hAttacker, hEnemy ) - if ( not hAttacker or not hEnemy or not hAttacker:HasAttackCapability() ) then - return 0.25 - end - - --printf( "AttackTargetOrder -- attacker: %s, target: %s", hAttacker:GetUnitName(), hEnemy:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = hAttacker:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hEnemy:entindex(), - }) - - return 1.0 -end - --------------------------------------------------------------------------------- - -function SprintIsReady( hCaster ) - local hAbility = hCaster.abilities.hSprint - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastSprint( hCaster ) - local hAbility = hCaster.abilities.hSprint - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 5.0 -end - --------------------------------------------------------------------------------- - -function TailIsReady( hCaster ) - local hAbility = hCaster.abilities.hTailSpinCCW - if hCaster.bEnemiesInFront and hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastTailSpinCCW( hCaster ) - local hAbility = hCaster.abilities.hTailSpinCCW - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex() - }) - - return 5.0 -end - --------------------------------------------------------------------------------- - -function MindControlIsReady( hCaster, hEnemies ) - local nEnemiesAlive = 0 - for _, hEnemy in pairs( hEnemies ) do - if hEnemy:IsAlive() then - nEnemiesAlive = nEnemiesAlive + 1 - end - end - if nEnemiesAlive <= 1 then - return false - end - - local hAbility = hCaster.abilities.hMindControl - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastMindControl( hCaster, hEnemies ) - local hAbility = hCaster.abilities.hMindControl - local hTarget = hEnemies[ RandomInt( 1, #hEnemies ) ] - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 4.0 -end - --------------------------------------------------------------------------------- - -function TorrentsIsReady( hCaster ) - local hAbility = hCaster.abilities.hTorrents - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastTorrents( hCaster ) - local hAbility = hCaster.abilities.hTorrents - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 10 -end - --------------------------------------------------------------------------------- - -function LineWaveIsReady( hCaster ) - local hAbility = hCaster.abilities.hLineWave - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastLineWave( hCaster, hEnemies ) - local hAbility = hCaster.abilities.hLineWave - local hTarget = hEnemies[ RandomInt( 1, #hEnemies ) ] - - local fDist = -1 - local fHighestDist = 0 - local hFarthestEnemy = nil - for _, hEnemy in pairs( hEnemies ) do - fDist = ( hEnemy:GetOrigin() - hCaster:GetOrigin() ):Length2D() - if fDist > fHighestDist then - fHighestDist = fDist - hFarthestEnemy = hEnemy - end - end - - if hFarthestEnemy == nil then - return 0.5 - end - - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hFarthestEnemy:entindex(), - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 4 -end - --------------------------------------------------------------------------------- - -function WavesIsReady( hCaster ) - local hAbility = hCaster.abilities.hWaves - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastWaves( hCaster ) - local hAbility = hCaster.abilities.hWaves - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 14 -end - --------------------------------------------------------------------------------- - -function SummonMinionsIsReady( hCaster ) - local hAbility = hCaster.abilities.hSummonMinions - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastSummonMinions( hCaster ) - local hAbility = hCaster.abilities.hSummonMinions - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 7 -end - --------------------------------------------------------------------------------- - -function SummonMinionsMediumIsReady( hCaster ) - local hAbility = hCaster.abilities.hSummonMinionsMedium - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastSummonMinionsMedium( hCaster ) - local hAbility = hCaster.abilities.hSummonMinionsMedium - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 7 -end - --------------------------------------------------------------------------------- - -function SummonCloneIsReady( hCaster ) - local hAbility = hCaster.abilities.hSummonClone - if hAbility ~= nil and hAbility:IsFullyCastable() and hCaster.nSummonCloneCasts < ( hCaster.Phase - 1 ) then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastSummonClone( hCaster ) - local hAbility = hCaster.abilities.hSummonClone - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 2 -end - --------------------------------------------------------------------------------- - -function MouthBeamIsReady( hCaster ) - local hAbility = hCaster.abilities.hMouthBeam - if hAbility ~= nil and hAbility:IsFullyCastable() then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastMouthBeam( hCaster, hEnemies ) - local hAbility = hCaster.abilities.hMouthBeam - local hTarget = hEnemies[ RandomInt( 1, #hEnemies ) ] - if hTarget == nil then - return 1 - end - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = hTarget:GetOrigin(), - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - return 10.0 -end - --------------------------------------------------------------------------------- - -function FindItemAbility( hCaster, szItemName ) - for i = 0, 5 do - local item = hCaster:GetItemInSlot( i ) - if item then - if item:GetAbilityName() == szItemName then - return item - end - end - end -end - --------------------------------------------------------------------------------- - -function CastTargetedItem( hUnit, hTarget, szItemName ) - local hItem = hUnit:FindItemInInventory( szItemName ) - return CastTargetedAbility( hUnit, hTarget, hItem ) -end - --------------------------------------------------------------------------------- - -function CastUntargetedItem( hUnit, szItemName ) - local hItem = hUnit:FindItemInInventory( szItemName ) - return CastUntargetedAbility( hUnit, hItem ) -end - --------------------------------------------------------------------------------- - -function CastPositionalItem( hUnit, vPosition, szItemName ) - local hItem = hUnit:FindItemInInventory( szItemName ) - return CastPositionalAbility( hUnit, vPosition, hItem ) -end - --------------------------------------------------------------------------------- - -function CastTargetedAbility( hUnit, hTarget, hAbility ) - if type(hAbility) == "string" then - hAbility = hUnit:FindAbilityByName(hAbility) - printf("result of string ability is %s", hAbility:GetName()) - end - if hAbility and hAbility:IsFullyCastable() then - --printf( "%s casting %s on %s", hUnit:GetName(), hAbility:GetName(), hTarget:GetName() ) - ExecuteOrderFromTable({ - UnitIndex = hUnit:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = hAbility:entindex() - }) - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CastPositionalAbility( hUnit, vPosition, hAbility ) - if type(hAbility) == "string" then - hAbility = hUnit:FindAbilityByName(hAbility) - end - if hAbility and hAbility:IsFullyCastable() then - ExecuteOrderFromTable({ - UnitIndex = hUnit:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vPosition, - AbilityIndex = hAbility:entindex() - }) - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CastUntargetedAbility( hUnit, hAbility ) - if type(hAbility) == "string" then - hAbility = hUnit:FindAbilityByName(hAbility) - end - if hAbility and hAbility:IsFullyCastable() then - ExecuteOrderFromTable({ - UnitIndex = hUnit:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hAbility:entindex() - }) - return true - end - return false -end - --------------------------------------------------------------------------------- - -function GetAlliesInRange( hCaster, flRange ) - return FindUnitsInRadius( hCaster:GetTeamNumber(), hCaster:GetOrigin(), nil, flRange, - DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_OTHER, - DOTA_UNIT_TARGET_FLAG_NO_INVIS + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) -end - -function LastAllyCastTime( hCaster, hAbility, flRange, hTarget ) - if flRange == nil then - flRange = 1000 - end - local flLastCastTime = -999999 - local hAllies = GetAlliesInRange( hCaster, flRange ) - for index,hAlly in pairs(hAllies) do - local flAllyTime = hAlly["last_cast_time_"..hAbility:GetName()] - local hAllyTarget = hAlly["last_cast_target_"..hAbility:GetName()] - if flAllyTime ~= nil and (hTarget == nil or hTarget == hAllyTarget) then - flLastCastTime = math.max(flAllyTime,flLastCastTime) - end - end - return flLastCastTime -end - --------------------------------------------------------------------------------- - -function UpdateLastCastTime( hCaster, hAbility, hTarget ) - hCaster["last_cast_time_"..hAbility:GetName()] = GameRules:GetGameTime() - hCaster["last_cast_target_"..hAbility:GetName()] = hTarget -end - --------------------------------------------------------------------------------- - -function TeleportIsReady( hCaster ) - if ( GameRules:GetGameTime() > ( hCaster.fLastTeleportChain + hCaster.nTeleportChainCD ) ) then - hCaster.nRecentTeleportsCast = 0 - hCaster.fLastTeleportChain = GameRules:GetGameTime() - end - - local hAbility = hCaster.abilities.hTeleport - if hAbility ~= nil and hAbility:IsFullyCastable() and ( hCaster.nRecentTeleportsCast < hCaster.nTeleportsToChain ) then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CastTeleport( hCaster, hEnemies ) - local hAbility = hCaster.abilities.hTeleport - - local hFilteredEnemies = {} - for _, hEnemy in pairs( hEnemies ) do - local fDist = ( hEnemy:GetOrigin() - hCaster:GetOrigin() ):Length2D() - if fDist > 500 then - table.insert( hFilteredEnemies, hEnemy ) - end - end - - local hTarget = nil - if #hFilteredEnemies > 0 then - hTarget = hFilteredEnemies[ RandomInt( 1, #hFilteredEnemies ) ] - else - hTarget = hEnemies[ RandomInt( 1, #hEnemies ) ] - end - - local vTargetPos = hTarget:GetOrigin() - - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vTargetPos, - AbilityIndex = hAbility:entindex(), - Queue = false, - }) - - hCaster.nRecentTeleportsCast = hCaster.nRecentTeleportsCast + 1 - - if ( hCaster.nRecentTeleportsCast >= hCaster.nTeleportsToChain ) then - return 4.0 - end - - return 1.8 -end - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/sheep.lua b/aghanim_singleplayer/scripts/vscripts/ai/sheep.lua deleted file mode 100755 index 1e17ccb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/sheep.lua +++ /dev/null @@ -1,73 +0,0 @@ ---[[ Sheep AI ]] - -local bHasBeenSaved = false -local hPortal = nil -local vPortalPos = nil -local nHoldTime = 0 - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - hPortal = Entities:FindByName( nil, "portal_path_track" ) - vPortalPos = hPortal:GetOrigin() - - thisEntity:SetContextThink( "SheepThink", SheepThink, 1 ) -end - --------------------------------------------------------------------------------- - -function SheepThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - - if bHasBeenSaved == false then - if hPortal ~= nil then - thisEntity:MoveToPosition( vPortalPos ) - local vPos = thisEntity:GetOrigin() - local difference = vPos - vPortalPos - local distance = difference:Length() - if distance < 100 then - --print("Sheep has been saved!") - thisEntity:Hold() - local szPortalFX = "particles/econ/events/league_teleport_2014/teleport_start_league.vpcf" - local hPortalEffects = ParticleManager:CreateParticle( szPortalFX, PATTACH_CUSTOMORIGIN_FOLLOW, thisEntity ) - ParticleManager:SetParticleControlEnt( hPortalEffects, 0, thisEntity, PATTACH_POINT_FOLLOW, "attach_hitloc", thisEntity:GetAbsOrigin(), false ) - thisEntity:Attribute_SetIntValue( "effectsID", hPortalEffects ) - bHasBeenSaved = true - EmitSoundOn("Creature.Sheep.Portal_Start", thisEntity) - end - end - else - if nHoldTime < 3 then - nHoldTime = nHoldTime + 1 - --thisEntity:SetModelScale(nModelScale) - else - StopSoundOn("Creature.Sheep.Portal_Start", thisEntity) - EmitSoundOn("Creature.Sheep.Portal_End", thisEntity) - local hBase = Entities:FindByName( nil, "a1_1a_teamspawn_left" ) - local vTargetPoint = hBase:GetOrigin() - thisEntity:SetAbsOrigin( vTargetPoint ) - thisEntity:ForceKill(false) - end - end - - return 1 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/skeleton_king.lua b/aghanim_singleplayer/scripts/vscripts/ai/skeleton_king.lua deleted file mode 100755 index ce84797..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/skeleton_king.lua +++ /dev/null @@ -1,91 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hHellfireBlast = thisEntity:FindAbilityByName( "undead_woods_skeleton_king_hellfire_blast" ) - thisEntity.hMortalStrike = thisEntity:FindAbilityByName( "undead_woods_skeleton_king_mortal_strike" ) - thisEntity.bInitialSkeletons = false - - thisEntity:SetContextThink( "SkeletonKingThink", SkeletonKingThink, 1.0 ) -end - --------------------------------------------------------------------------------- - -function SkeletonKingThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 1 - end - - if thisEntity.hHellfireBlast and thisEntity.hHellfireBlast:IsFullyCastable() then - return CastHellFireBlast( hEnemies[#hEnemies] ) - end - - if thisEntity.hMortalStrike then - local hBuff = thisEntity:FindModifierByName( "modifier_skeleton_king_mortal_strike" ) - if hBuff ~= nil then - local nMaxSkeletons = thisEntity.hMortalStrike:GetSpecialValueFor( "max_skeleton_charges" ) - if thisEntity.bInitialSkeletons == false then - hBuff:SetStackCount( nMaxSkeletons ) - thisEntity.bInitialSkeletons = true - return CastMortalStrike() - end - - if hBuff:GetStackCount() < nMaxSkeletons then - hBuff:IncrementStackCount() - elseif thisEntity.hMortalStrike:IsFullyCastable() then - return CastMortalStrike() - end - end - end - - return 0.5 -end - - --------------------------------------------------------------------------------- - -function CastHellFireBlast( hTarget ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = thisEntity.hHellfireBlast:entindex(), - Queue = false, - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function CastMortalStrike( ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hMortalStrike:entindex(), - Queue = false, - }) - - return 1 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/skywrath_mage.lua b/aghanim_singleplayer/scripts/vscripts/ai/skywrath_mage.lua deleted file mode 100755 index 3f8cac6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/skywrath_mage.lua +++ /dev/null @@ -1,123 +0,0 @@ ---[[ Skywrath Mage AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorMysticFlare } ) -end - -function AIThink() - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorMysticFlare = {} - -function BehaviorMysticFlare:Evaluate() - --print( "BehaviorMysticFlare:Evaluate()" ) - local desire = 0 - - self.mysticFlareAbility = thisEntity:FindAbilityByName( "skywrath_mage_mystic_flare" ) - if self.mysticFlareAbility and self.mysticFlareAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hAbilityModifier = hUnit:FindModifierByName( "modifier_skywrath_mage_mystic_flare" ) - local hDuelModifier = hUnit:FindModifierByName( "modifier_legion_commander_duel" ) - if hAbilityModifier ~= nil then - --print("Enemy is being Mystic Flared") - desire = 0 - elseif hDuelModifier ~= nil then - --print("Enemy is in a Duel") - desire = 8 - else - desire = #enemies + 8 - end - end - end - end - end - - return desire -end - -function BehaviorMysticFlare:Begin() - --print( "BehaviorMysticFlare:Begin()" ) - if self.mysticFlareAbility and self.mysticFlareAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 800, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hAbilityhModifier = hUnit:FindModifierByName( "modifier_legion_commander_duel" ) - if hAbilityhModifier ~= nil then - --print( "Casting Mystic Flare" ) - local target = hUnit - local targetPoint = target:GetAbsOrigin() - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = self.mysticFlareAbility:entindex(), - Position = targetPoint, - } - return order - else - return nil - end - end - end - end - end - - return nil -end - -BehaviorMysticFlare.Continue = BehaviorMysticFlare.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorMysticFlare } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/slark.lua b/aghanim_singleplayer/scripts/vscripts/ai/slark.lua deleted file mode 100755 index cf1e76d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/slark.lua +++ /dev/null @@ -1,298 +0,0 @@ ---[[ Slark Peon AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity.vNagaPosition = nil - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorDarkPact, BehaviorPounce, BehaviorShadowDance, BehaviorRunAway } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, thisEntity:GetDayTimeVisionRange() ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorDarkPact = {} - -function BehaviorDarkPact:Evaluate() - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.darkPactAbility = thisEntity:FindAbilityByName( "slark_dark_pact" ) - if not self.darkPactAbility or not self.darkPactAbility:IsFullyCastable() then - return desire - end - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 400, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hDarkPactModifier = hUnit:FindModifierByName( "modifier_slark_dark_pact" ) - if hDarkPactModifier ~= nil then - --print("Enemy is already Dark Pacted") - desire = 0 - else - local nRandomInt = RandomInt(1,5) - if nRandomInt == 1 then - desire = #enemies + 1 - end - end - end - end - end - - return desire -end - -function BehaviorDarkPact:Begin() - --print( "BehaviorDarkPact:Begin()" ) - if self.darkPactAbility and self.darkPactAbility:IsFullyCastable() then - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.darkPactAbility:entindex(), - } - return order - end - return nil - -end - -BehaviorDarkPact.Continue = BehaviorDarkPact.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorPounce = {} - -function BehaviorPounce:Evaluate() - --print( "BehaviorPounce:Evaluate()" ) - local desire = 0 - - self.pounceAbility = thisEntity:FindAbilityByName( "slark_pounce" ) - if self.pounceAbility and self.pounceAbility:IsFullyCastable() then - local hGoal = Entities:FindByName( nil, "slark_room_center" ) - local vGoalPos = hGoal:GetOrigin() - local goalDifference = vGoalPos - thisEntity:GetOrigin() - local goalDistance = goalDifference:Length() - if goalDistance > 1500 then - --print("Too close to edge of room") - return desire - end - local nRange = 700 - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - for _,enemy in pairs(enemies) do - local enemyVec = enemy:GetOrigin() - thisEntity:GetOrigin() - local myForward = thisEntity:GetForwardVector() - local dotProduct = enemyVec:Dot( myForward ) - local enemyDesire = 0 - if dotProduct > 0 then - enemyDesire = 8 - end - local distance = enemyVec:Length2D() - if distance > 400 then - desire = enemyDesire - self.target = enemy - end - end - end - - return desire -end - -function BehaviorPounce:Begin() - --print( "BehaviorPounce:Begin()" ) - - if self.target and self.target:IsAlive() then - if self.pounceAbility and self.pounceAbility:IsFullyCastable() then - --print( "Casting Star Fall" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.pounceAbility:entindex(), - Queue = false, - } - return order - end - end - - return nil -end - -BehaviorPounce.Continue = BehaviorPounce.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorShadowDance = {} - -function BehaviorShadowDance:Evaluate() - --print( "BehaviorShadowDance:Evaluate()" ) - local desire = 0 - - local retreatPoints = thisEntity.Encounter:GetRetreatPoints() - if retreatPoints == nil then - print( "*** WARNING: This AI requires info_targets named retreat_point in the map " .. thisEntity.Encounter:GetRoom():GetName() ) - return 0 - end - - local happyPlaceIndex = RandomInt( 1, #retreatPoints ) - self.escapePoint = retreatPoints[ happyPlaceIndex ]:GetAbsOrigin() - - self.shadowDanceAbility = thisEntity:FindAbilityByName( "slark_shadow_dance" ) - local nRange = 300 - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if self.shadowDanceAbility and self.shadowDanceAbility:IsFullyCastable() then - if ( thisEntity:GetHealthPercent() < 25 ) and ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorShadowDance:Begin() - --print( "BehaviorShadowDance:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - - if self.shadowDanceAbility and self.shadowDanceAbility:IsFullyCastable() then - --print( "Casting Shadow Dance" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.shadowDanceAbility:entindex(), - } - return order - end - - return nil -end - -function BehaviorShadowDance:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 6 ) ) or - ( ( thisEntity:GetAbsOrigin() - self.escapePoint ):Length2D() < 200 ) -end - -function BehaviorShadowDance:Think( ) - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.escapePoint - } - -end - -BehaviorShadowDance.Continue = BehaviorShadowDance.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorRunAway = {} - -function BehaviorRunAway:Evaluate() - local desire = 0 - local retreatPoints = thisEntity.Encounter:GetRetreatPoints() - if retreatPoints == nil then - print( "*** WARNING: This AI requires info_targets named retreat_point in the map " .. thisEntity.Encounter:GetRoom():GetName() ) - return 0 - end - - local creatures = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) - for _,hUnit in pairs( creatures ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hSongModifier = hUnit:FindModifierByName( "modifier_naga_siren_song_of_the_siren_aura" ) - if hSongModifier ~= nil then - --print("Naga Siren is singing!") - thisEntity.vNagaPosition = hUnit:GetAbsOrigin() - desire = 8 - end - end - end - - return desire -end - -function BehaviorRunAway:Begin() - --print( "BehaviorRunAway:Begin()" ) - self.startEscapeTime = GameRules:GetGameTime() - - -- Move towards Naga - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity.vNagaPosition - } - -end - -function BehaviorRunAway:IsDone( ) - return ( GameRules:GetGameTime() > ( self.startEscapeTime + 6 ) ) or - ( ( thisEntity:GetAbsOrigin() - thisEntity.vNagaPosition ):Length2D() < 200 ) -end - -function BehaviorRunAway:Think( ) - -- keep moving towards our escape point - return - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity.vNagaPosition - } - -end - -BehaviorRunAway.Continue = BehaviorRunAway.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorDarkPact, BehaviorPounce, BehaviorShadowDance, BehaviorRunAway } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/small_hellbear.lua b/aghanim_singleplayer/scripts/vscripts/ai/small_hellbear.lua deleted file mode 100755 index 2555301..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/small_hellbear.lua +++ /dev/null @@ -1,77 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity:SetContextThink( "SmallHellbearThink", SmallHellbearThink, 1 ) -end - --------------------------------------------------------------------------------- - -function SmallHellbearThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 1 - end - - if not thisEntity.bInitialized then - thisEntity.vInitialSpawnPos = thisEntity:GetOrigin() - thisEntity.bInitialized = true - end - - -- Increase acquisition range after the initial aggro - if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then - thisEntity:SetAcquisitionRange( 750 ) - thisEntity.bAcqRangeModified = true - end - - if thisEntity:GetAggroTarget() then - thisEntity.fTimeWeLostAggro = nil - end - - if thisEntity:GetAggroTarget() and ( thisEntity.fTimeAggroStarted == nil ) then - --print( "Do we have aggro and need to get a timestamp?" ) - thisEntity.fTimeAggroStarted = GameRules:GetGameTime() - end - - if ( not thisEntity:GetAggroTarget() ) and ( thisEntity.fTimeAggroStarted ~= nil ) then - --print( "We lost aggro." ) - thisEntity.fTimeWeLostAggro = GameRules:GetGameTime() - thisEntity.fTimeAggroStarted = nil - end - - if ( not thisEntity:GetAggroTarget() ) then - if thisEntity.fTimeWeLostAggro and ( GameRules:GetGameTime() > ( thisEntity.fTimeWeLostAggro + 1.0 ) ) then - return RetreatHome() - end - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function RetreatHome() - --print( "RetreatHome - " .. thisEntity:GetUnitName() .. " is returning to home position" ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity.vInitialSpawnPos -- + RandomVector( RandomFloat( -300, 300 ) ) - }) - - return 0.5 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/spectral_tusk_mage.lua b/aghanim_singleplayer/scripts/vscripts/ai/spectral_tusk_mage.lua deleted file mode 100755 index 60a6634..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/spectral_tusk_mage.lua +++ /dev/null @@ -1,111 +0,0 @@ - -require( "ai/shared" ) - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hTombstoneAbility = thisEntity:FindAbilityByName( "undead_tusk_mage_tombstone" ) - - thisEntity.hTombstones = {} - - thisEntity.nMyMaxTombstones = 2 - thisEntity.nMaxTombstonesInArea = 4 - - thisEntity.fSearchRadius = thisEntity:GetAcquisitionRange() + 200 - - thisEntity:SetContextThink( "UndeadSpectralTuskMageThink", UndeadSpectralTuskMageThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function UndeadSpectralTuskMageThink() - if not IsServer() then - return - end - - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if ( not thisEntity:GetAggroTarget() ) then - return 1.0 - end - - -- Are we currently holding aggro? - if ( not thisEntity.bHasAggro ) and thisEntity:GetAggroTarget() then - thisEntity.timeOfLastAggro = GameRules:GetGameTime() - thisEntity.bHasAggro = true - elseif thisEntity.bHasAggro and ( not thisEntity:GetAggroTarget() ) then - thisEntity.bHasAggro = false - end - - if ( not thisEntity.bHasAggro ) then - return 1 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 1 - end - - if thisEntity.hTombstoneAbility ~= nil and thisEntity.hTombstoneAbility:IsFullyCastable() then - for k, hTombstone in pairs( thisEntity.hTombstones ) do - if hTombstone == nil or hTombstone:IsNull() or hTombstone:IsAlive() == false then - table.remove( thisEntity.hTombstones, k ) - end - end - - local nTombstonesAround = 0 - local nFlags = DOTA_UNIT_TARGET_FLAG_NONE - local friendlies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, nFlags, FIND_CLOSEST, false ) - for _, friendly in pairs ( friendlies ) do - if friendly ~= nil and friendly:GetUnitName() == "npc_dota_undead_tusk_tombstone" then - nTombstonesAround = nTombstonesAround + 1 - end - end - - if ( #friendlies < 80 ) and ( nTombstonesAround < thisEntity.nMaxTombstonesInArea ) and ( #thisEntity.hTombstones < thisEntity.nMyMaxTombstones ) then - local fNow = GameRules:GetGameTime() - local flLastAllyCastTime = LastAllyCastTime( thisEntity, thisEntity.hTombstoneAbility, 1000, nil ) - local fCastPoint = thisEntity.hTombstoneAbility:GetCastPoint() - if ( fNow - flLastAllyCastTime ) > ( fCastPoint + 0.1 ) then - local vCastLocation = thisEntity:GetAbsOrigin() + ( thisEntity:GetForwardVector() * 300 ) - if GridNav:CanFindPath( thisEntity:GetAbsOrigin(), vCastLocation ) then - UpdateLastCastTime( thisEntity, thisEntity.hTombstoneAbility, nil ) - return CastTombstone( vCastLocation ) - end - end - end - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastTombstone( vPos ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vPos, - AbilityIndex = thisEntity.hTombstoneAbility:entindex(), - Queue = false, - }) - - return 1.0 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/ai/spectre.lua b/aghanim_singleplayer/scripts/vscripts/ai/spectre.lua deleted file mode 100755 index 65b6121..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/spectre.lua +++ /dev/null @@ -1,56 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hDispersionAbility = thisEntity:FindAbilityByName( "aghsfort_spectre_active_dispersion" ) - - thisEntity:SetContextThink( "SpectreThink", SpectreThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function SpectreThink() - if not IsServer() then - return - end - - if thisEntity == nil or thisEntity:IsNull() or ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 1 - end - - if thisEntity.hDispersionAbility and thisEntity.hDispersionAbility:IsFullyCastable() then - return CastDispersion() - end - - return 0.5 -end - --------------------------------------------------------------------------------- - -function CastDispersion() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hDispersionAbility:entindex(), - Queue = false, - }) - - return 0.5 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/storegga.lua b/aghanim_singleplayer/scripts/vscripts/ai/storegga.lua deleted file mode 100755 index d3c0c15..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/storegga.lua +++ /dev/null @@ -1,271 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity:AddNewModifier( nil, nil, "modifier_invulnerable", { duration = -1 } ) - - SlamAbility = thisEntity:FindAbilityByName( "storegga_arm_slam" ) - GrabAbility = thisEntity:FindAbilityByName( "storegga_grab" ) - ThrowAbility = thisEntity:FindAbilityByName( "storegga_grab_throw" ) - GroundPoundAbility = thisEntity:FindAbilityByName( "storegga_ground_pound" ) - AvalancheAbility = thisEntity:FindAbilityByName( "storegga_avalanche" ) - - thisEntity.flThrowTimer = 0.0 -- externally updated - - thisEntity.fLongWaitTime = 5 - - thisEntity.fEnemySearchRange = 2500 - thisEntity.fRockSearchRange = 2500 - - thisEntity:SetContextThink( "StoreggaThink", StoreggaThink, 1 ) -end - --------------------------------------------------------------------------------- - -function StoreggaThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - if ( not thisEntity.bInitialInvulnRemoved ) then - thisEntity:RemoveModifierByName( "modifier_invulnerable" ) - thisEntity.bInitialInvulnRemoved = true - end - - if thisEntity:IsChanneling() then - return 0.1 - end - - if AvalancheAbility ~= nil and AvalancheAbility:IsFullyCastable() and thisEntity:GetHealthPercent() < 60 then - return CastAvalanche() - end - - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fEnemySearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - local rocks = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fRockSearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - - local nEnemiesAliveInRange = 0 - for i = 1, #enemies do - local enemy = enemies[ i ] - if enemy ~= nil then - if enemy:IsRealHero() and enemy:IsAlive() then - nEnemiesAliveInRange = nEnemiesAliveInRange + 1 - if enemy:FindModifierByName( "modifier_storegga_grabbed_debuff" ) ~= nil then - --printf( "removed %s from enemies table", enemy:GetUnitName() ) - table.remove( enemies, i ) - end - end - end - end - - local hNearestEnemy = enemies[ 1 ] - local hFarthestEnemy = enemies[ #enemies ] - - local hGrabbedEnemyBuff = thisEntity:FindModifierByName( "modifier_storegga_grabbed_buff" ) - local hGrabbedTarget = nil - if hGrabbedEnemyBuff == nil then - if GrabAbility ~= nil and GrabAbility:IsFullyCastable() then - if hNearestEnemy ~= nil and nEnemiesAliveInRange > 1 and RandomInt( 0, 1 ) == 0 then - printf( " Grab the nearest enemy (%s)", hNearestEnemy:GetUnitName() ) - return CastGrab( hNearestEnemy ) - elseif #rocks > 0 then - local hRandomRock = rocks[ RandomInt( 1, #rocks ) ] - if hRandomRock ~= nil then - printf( " Grab a random rock" ) - return CastGrab( hRandomRock ) - end - end - end - else - -- Note: hThrowObject and flThrowTimer are both set by the modifier - local hGrabbedTarget = hGrabbedEnemyBuff.hThrowObject - if GameRules:GetGameTime() > thisEntity.flThrowTimer and hGrabbedTarget ~= nil then - if ThrowAbility ~= nil and ThrowAbility:IsFullyCastable() then - if hFarthestEnemy ~= nil then - printf( " Throw at the farthest enemy; pos: %s", hFarthestEnemy:GetOrigin() ) - return CastThrow( hFarthestEnemy:GetOrigin() ) - elseif #rocks > 0 then - local hFarthestRock = rocks[ #rocks ] - if hFarthestRock ~= nil then - printf( " Throw at the farthest.. rock?; pos: %s", hFarthestRock:GetOrigin() ) - return CastThrow( hFarthestRock:GetOrigin() ) - end - elseif GameRules:GetGameTime() > ( thisEntity.flThrowTimer + thisEntity.fLongWaitTime ) then - printf( " a lot of time has passed and we're still holding onto an object, so just throw it somewhere pathable" ) - - -- If I've been waiting too long, throw grabbed object at some random location - local nMaxDistance = 1400 - local vRandomThrowPos = nil - - local nMaxAttempts = 7 - local nAttempts = 0 - - repeat - if nAttempts > nMaxAttempts then - vRandomThrowPos = nil - printf( "WARNING - storegga - failed to find valid position for throw target pos" ) - break - end - - local vPos = thisEntity:GetAbsOrigin() + RandomVector( nMaxDistance ) - vRandomThrowPos = FindPathablePositionNearby( vPos, 0, 500 ) - nAttempts = nAttempts + 1 - until ( GridNav:CanFindPath( thisEntity:GetOrigin(), vRandomThrowPos ) ) - --until ( GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vRandomThrowPos ) ) - - if vRandomThrowPos == nil then - printf( " never found a good random pos to throw to, so just use my own origin" ) - vRandomThrowPos = thisEntity:GetAbsOrigin() - end - - return CastThrow( vRandomThrowPos ) - end - end - end - end - - if GroundPoundAbility and GroundPoundAbility:IsFullyCastable() then - local fGroundPoundSearchRadius = 1000 - local hGroundPoundEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, fGroundPoundSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - if #hGroundPoundEnemies > 0 then - return CastGroundPound() - end - end - - if SlamAbility ~= nil and SlamAbility:IsFullyCastable() then - if RandomInt( 0, 1 ) == 1 then - if hNearestEnemy ~= nil then - --printf( "Slam the nearest enemy (%s)", hNearestEnemy:GetUnitName() ) - return CastSlam( hNearestEnemy ) - end - else - if hFarthestEnemy ~= nil then - --printf( "Slam the farthest enemy (%s)", hFarthestEnemy:GetUnitName() ) - return CastSlam( hFarthestEnemy ) - end - end - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function CastSlam( enemy ) - if enemy == nil or enemy:IsAlive() == false then - return 0.1 - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = enemy:entindex(), - AbilityIndex = SlamAbility:entindex(), - }) - - local fInterval = SlamAbility:GetCastPoint() + 0.1 - - -- Enemies may run away from us so we don't want to try to calculate exactly what our return interval should - -- be (e.g. based on the distance and our movespeed), so for larger distances we're just adding a little extra time - local fDistToEnemy = ( enemy:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - local fNearDistance = 800 - local fMediumDistance = 1300 - if fDistToEnemy > fMediumDistance then - printf( " enemy is beyond medium distance" ) - fInterval = fInterval + 1.0 - elseif fDistToEnemy > fNearDistance then - printf( " enemy is beyond near distance" ) - fInterval = fInterval + 0.5 - end - - return fInterval - --return 1.2 -end - --------------------------------------------------------------------------------- - -function CastGrab( enemy ) - if enemy == nil or enemy:IsAlive() == false then - return 0.1 - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = enemy:entindex(), - AbilityIndex = GrabAbility:entindex(), - }) - - local fInterval = GrabAbility:GetCastPoint() + 0.1 - return fInterval - --return 1.5 -end - --------------------------------------------------------------------------------- - -function CastThrow( vPos ) - local vDir = vPos - thisEntity:GetOrigin() - local flDist = vDir:Length2D() - vDir.z = 0.0 - vDir = vDir:Normalized() - - local vFinalPos = vPos - if flDist < 200 then - -- The target's too close and we don't want to throw the unit into our feet, so throw it forward instead - vFinalPos = thisEntity:GetOrigin() + vDir * flDist - end - - printf( "Casting throw at %s", vPos ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - Position = vFinalPos, - --Position = thisEntity:GetOrigin() + vDir * flDist, - AbilityIndex = ThrowAbility:entindex(), - Queue = false, - }) - - local fInterval = ThrowAbility:GetCastPoint() + 0.1 - return fInterval - --return 1.5 -end - --------------------------------------------------------------------------------- - -function CastAvalanche() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = AvalancheAbility:entindex(), - Queue = false, - }) - - local fInterval = AvalancheAbility:GetCastPoint() + AvalancheAbility:GetChannelTime() + 0.1 - return fInterval - --return 11 -end - --------------------------------------------------------------------------------- - -function CastGroundPound() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = GroundPoundAbility:entindex(), - Queue = false, - }) - - local fInterval = GroundPoundAbility:GetCastPoint() + GroundPoundAbility:GetChannelTime() + 0.1 - return fInterval - --return 4.0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/temple_guardian.lua b/aghanim_singleplayer/scripts/vscripts/ai/temple_guardian.lua deleted file mode 100755 index 4d187cf..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/temple_guardian.lua +++ /dev/null @@ -1,219 +0,0 @@ - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.bIsEnraged = false - thisEntity.nRageHealthPct = 30 - thisEntity.bBrotherDied = false - - thisEntity.Encounter = nil - - HammerSmashAbility = thisEntity:FindAbilityByName( "temple_guardian_hammer_smash" ) - HammerThrowAbility = thisEntity:FindAbilityByName( "temple_guardian_hammer_throw" ) - PurificationAbility = thisEntity:FindAbilityByName( "temple_guardian_purification" ) - WrathAbility = thisEntity:FindAbilityByName( "temple_guardian_wrath" ) - - RageHammerSmashAbility = thisEntity:FindAbilityByName( "temple_guardian_rage_hammer_smash" ) - RageHammerSmashAbility:SetHidden( false ) - - thisEntity:SetContextThink( "TempleGuardianThink", TempleGuardianThink, 1 ) -end - --------------------------------------------------------------------------------- - -function TempleGuardianThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if thisEntity.Encounter == nil then - return 1 - end - - if GameRules:IsGamePaused() == true then - return 0.1 - end - - if thisEntity:IsChanneling() == true then - return 0.1 - end - - local hWintersCurseBuff = thisEntity:FindModifierByName( "modifier_aghsfort_winter_wyvern_winters_curse" ) - if hWintersCurseBuff and hWintersCurseBuff:GetAuraOwner() ~= nil then - if not thisEntity.bIsEnraged then - if HammerSmashAbility ~= nil and HammerSmashAbility:IsCooldownReady() then - return Smash( hWintersCurseBuff:GetAuraOwner() ) - end - else - if RageHammerSmashAbility ~= nil and RageHammerSmashAbility:IsFullyCastable() then - return RageSmash( hWintersCurseBuff:GetAuraOwner() ) - end - end - - return 0.1 - end - - if ( not thisEntity.bIsEnraged ) and ( thisEntity:GetHealthPercent() <= thisEntity.nRageHealthPct ) then - thisEntity.bIsEnraged = true - thisEntity:SwapAbilities( "temple_guardian_hammer_smash", "temple_guardian_rage_hammer_smash", false, true ) - --printf( "thisEntity.bIsEnraged: %s", tostring( thisEntity.bIsEnraged ) ) - end - - local hCreatures = Entities:FindAllByClassnameWithin( "npc_dota_creature", thisEntity:GetAbsOrigin(), 2000 ) - local hGuardians = {} - for _, hCreature in pairs( hCreatures ) do - if ( hCreature:GetUnitName() == "npc_dota_creature_temple_guardian" ) and hCreature:IsAlive() then - table.insert( hGuardians, hCreature ) - end - end - - if #hGuardians == 1 and ( not thisEntity.bBrotherDied ) then - thisEntity.bBrotherDied = true - thisEntity.fTimeBrotherDied = GameRules:GetGameTime() - thisEntity.bIsEnraged = true - end - - if WrathAbility ~= nil and WrathAbility:IsCooldownReady() and #hGuardians == 1 and thisEntity:GetHealthPercent() <= 100 then - local fTimeBeforeWrath = 3 - if thisEntity.fTimeBrotherDied and ( GameRules:GetGameTime() > ( thisEntity.fTimeBrotherDied + fTimeBeforeWrath ) ) then - return Wrath() - end - end - - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity:GetAcquisitionRange(), DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return 0.1 - end - - if HammerThrowAbility ~= nil and HammerThrowAbility:IsCooldownReady() and thisEntity:GetHealthPercent() < 90 then - local hFarthestEnemy = hEnemies[ #hEnemies ] - if hFarthestEnemy ~= nil then - local flDist = (hFarthestEnemy:GetOrigin() - thisEntity:GetOrigin()):Length2D() - if flDist > 300 then - return Throw( hFarthestEnemy ) - end - end - end - - for _, hGuardian in pairs( hGuardians ) do - if hGuardian ~= nil and hGuardian:IsAlive() and ( hGuardian ~= thisEntity or #hGuardians == 1 ) and ( hGuardian:GetHealthPercent() < 80 ) and PurificationAbility ~= nil and PurificationAbility:IsFullyCastable() and #hEnemies >= 1 then - return Purification( hGuardian ) - end - end - - if not thisEntity.bIsEnraged then - if HammerSmashAbility ~= nil and HammerSmashAbility:IsCooldownReady() then - local hNearestEnemy = hEnemies[ 1 ] - return Smash( hNearestEnemy ) - end - else - if RageHammerSmashAbility ~= nil and RageHammerSmashAbility:IsFullyCastable() then - local hNearestEnemy = hEnemies[ 1 ] - return RageSmash( hNearestEnemy ) - end - end - - return 0.1 -end - --------------------------------------------------------------------------------- - -function Wrath() - --print( "temple_guardian - Wrath" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = WrathAbility:entindex(), - Queue = false, - }) - - local fReturnTime = WrathAbility:GetCastPoint() + WrathAbility:GetChannelTime() + 0.5 - --printf( "Wrath - return in %.2f", fReturnTime ) - return fReturnTime - - --return 8 -end - --------------------------------------------------------------------------------- - -function Throw( enemy ) - --print( "temple_guardian - Throw" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = HammerThrowAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - local fReturnTime = HammerThrowAbility:GetCastPoint() + 1.8 - --printf( "Throw - return in %.2f", fReturnTime ) - return fReturnTime - - --return 3 -end - --------------------------------------------------------------------------------- - -function Purification( friendly ) - --print( "temple_guardian - Purification" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = PurificationAbility:entindex(), - TargetIndex = friendly:entindex(), - Queue = false, - }) - - local fReturnTime = PurificationAbility:GetCastPoint() + 0.4 - --printf( "Purification - return in %.2f", fReturnTime ) - return fReturnTime - - --return 1.3 -end - --------------------------------------------------------------------------------- - -function Smash( enemy ) - --printf( "temple_guardian - Smash" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = HammerSmashAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - local fReturnTime = HammerSmashAbility:GetCastPoint() + 0.4 - --printf( "Smash - return in %.2f", fReturnTime ) - return fReturnTime - - --return 1.4 -end - --------------------------------------------------------------------------------- - -function RageSmash( enemy ) - --printf( "temple_guardian - RageSmash" ) - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = RageHammerSmashAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - local fReturnTime = RageHammerSmashAbility:GetCastPoint() + 0.4 - --printf( "RageSmash - return in %.2f", fReturnTime ) - return fReturnTime - - --return 1.1 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/tidehunter.lua b/aghanim_singleplayer/scripts/vscripts/ai/tidehunter.lua deleted file mode 100755 index 6ac6dc1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/tidehunter.lua +++ /dev/null @@ -1,95 +0,0 @@ ---[[ Tidehunter AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorAnchorSmash } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1500 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorAnchorSmash = {} - -function BehaviorAnchorSmash:Evaluate() - --print( "BehaviorAnchorSmash:Evaluate()" ) - local desire = 0 - - self.anchorSmashAbility = thisEntity:FindAbilityByName( "tidehunter_anchor_smash" ) - if self.anchorSmashAbility and self.anchorSmashAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 350, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 1 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorAnchorSmash:Begin() - --print( "BehaviorAnchorSmash:Begin()" ) - - if self.anchorSmashAbility and self.anchorSmashAbility:IsFullyCastable() then - --print( "Casting Anchor Smash" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.anchorSmashAbility:entindex() - } - return order - end - - return nil -end - -BehaviorAnchorSmash.Continue = BehaviorAnchorSmash.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorAnchorSmash } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/tidehunter_miniboss.lua b/aghanim_singleplayer/scripts/vscripts/ai/tidehunter_miniboss.lua deleted file mode 100755 index 17d65e0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/tidehunter_miniboss.lua +++ /dev/null @@ -1,193 +0,0 @@ ---[[ Tidehunter Miniboss AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorGush, BehaviorAnchorSmash } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1500 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorGush = {} - -function BehaviorGush:Evaluate() - --print( "BehaviorGush:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.gushAbility = thisEntity:FindAbilityByName( "creature_tidehunter_gush" ) - if self.gushAbility and self.gushAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 600, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - for _,hUnit in pairs( enemies ) do - if hUnit ~= nil and hUnit:IsAlive() then - local hGushModifier = hUnit:FindModifierByName( "modifier_tidehunter_gush" ) - if hGushModifier ~= nil then - --print("Enemy is already gushed") - desire = 0 - else - desire = #enemies + 1 - end - end - end - end - end - - return desire -end - -function BehaviorGush:Begin() - --print( "BehaviorGush:Begin()" ) - if self.gushAbility and self.gushAbility:IsFullyCastable() then - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #hEnemies == 0 then - return nil - end - local hTarget = hEnemies[#hEnemies] - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = hTarget:entindex(), - AbilityIndex = self.gushAbility:entindex(), - Queue = false, - } - return order - end - - return nil -end - -BehaviorGush.Continue = BehaviorGush.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorAnchorSmash = {} - -function BehaviorAnchorSmash:Evaluate() - --print( "BehaviorAnchorSmash:Evaluate()" ) - local desire = 0 - - self.anchorSmashAbility = thisEntity:FindAbilityByName( "tidehunter_anchor_smash" ) - if self.anchorSmashAbility and self.anchorSmashAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 350, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorAnchorSmash:Begin() - --print( "BehaviorAnchorSmash:Begin()" ) - - if self.anchorSmashAbility and self.anchorSmashAbility:IsFullyCastable() then - --print( "Casting Anchor Smash" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.anchorSmashAbility:entindex() - } - return order - end - - return nil -end - -BehaviorAnchorSmash.Continue = BehaviorAnchorSmash.Begin - --------------------------------------------------------------------------------------------------------- ---[[ Ravage now placed in passive modifier -BehaviorRavage = {} - -function BehaviorRavage:Evaluate() - --print( "BehaviorRavage:Evaluate()" ) - local desire = 0 - - self.ravageAbility = thisEntity:FindAbilityByName( "tidehunter_ravage" ) - if self.ravageAbility and self.ravageAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( thisEntity:GetHealthPercent() < 75 ) then - if ( #enemies > 1 ) then - desire = #enemies + 1 - end - end - end - - return desire -end - -function BehaviorRavage:Begin() - --print( "BehaviorRavage:Begin()" ) - - if self.ravageAbility and self.ravageAbility:IsFullyCastable() then - --print( "Casting Ravage" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.ravageAbility:entindex() - } - return order - end - - return nil -end - -BehaviorRavage.Continue = BehaviorRavage.Begin -]] --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorGush, BehaviorAnchorSmash } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/tornado_harpy_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/tornado_harpy_ai.lua deleted file mode 100755 index 0f6b70a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/tornado_harpy_ai.lua +++ /dev/null @@ -1,276 +0,0 @@ -require( "ai/ai_core" ) - - -function Precache( context ) - - PrecacheResource( "particle", "particles/neutral_fx/harpy_chain_lightning_head.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_dark_seer/dark_seer_surge.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/harpy_chain_lightning.vpcf", context ) - -end - - - - -function Spawn( entityKeyValues ) - - thisEntity.hSurgeAbility = thisEntity:FindAbilityByName( "tornado_harpy_intrinsic" ) - thisEntity.PreviousHealthPct = thisEntity:GetHealthPercent() - thisEntity.PreviousHealthPctGameTime = GameRules:GetGameTime() - - thisEntity:SetContextThink( "TornadoHarpyThink", TornadoHarpyThink, 0.5 ) -end - --------------------------------------------------------------------------------- - -function TornadoHarpyThink() - - if not IsServer() then - return - end - - if ( not thisEntity:IsAlive() ) then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - --check our health pct every 4 seconds - if GameRules:GetGameTime() > thisEntity.PreviousHealthPctGameTime + 4 then - thisEntity.PreviousHealthPctGameTime = GameRules:GetGameTime() - thisEntity.PreviousHealthPct = thisEntity:GetHealthPercent() - end - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - - if #hEnemies > 0 then - for i = 1, #hEnemies do - thisEntity.avoidTarget = hEnemies[i] - if thisEntity.avoidTarget ~= nil then - if thisEntity:GetHealthPercent() < thisEntity.PreviousHealthPct then - return Retreat(thisEntity.avoidTarget ) - else - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = thisEntity.avoidTarget:entindex(), - Queue = false - }) - end - break - end - end - end - - return 0.5 -end - - - --------------------------------------------------------------------------------- - -function Retreat(unit) - - local vAwayFromEnemy = thisEntity:GetOrigin() - unit:GetOrigin() - vAwayFromEnemy = vAwayFromEnemy:Normalized() - local vMoveToPos = thisEntity:GetOrigin() + vAwayFromEnemy * thisEntity:GetIdealSpeed()*4 - - -- if away from enemy is an unpathable area, find a new direction to run to - local nAttempts = 0 - while ( ( not GridNav:CanFindPath( thisEntity:GetOrigin(), vMoveToPos ) ) and ( nAttempts < 5 ) ) do - vMoveToPos = thisEntity:GetOrigin() + RandomVector( thisEntity:GetIdealSpeed() * 4 ) - nAttempts = nAttempts + 1 - end - - thisEntity.fTimeOfLastRetreat = GameRules:GetGameTime() - - thisEntity:AddNewModifier(thisEntity, thisEntity.hSurgeAbility, "modifier_tornado_harpy_surge", {duration = 2.0}) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vMoveToPos, - }) - - return 2.5 -end - ---[[ - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() --- print( "BehaviorNone:Begin()" ) - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, thisEntity:GetDayTimeVisionRange() ) - - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - for i=1,6 do - local vLoc = FindPathablePositionNearby(hTarget:GetAbsOrigin(), 650, 650 ) ---and thisEntity:IsMoving() == false - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - --orders = - --{ - -- UnitIndex = thisEntity:entindex(), - -- OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - -- Position = vLoc, - -- Queue = true, - --} - break - end - end - elseif thisEntity.lastTargetPosition ~= nil then - for i=1,6 do - local vLoc = FindPathablePositionNearby(thisEntity.lastTargetPosition, 650, 650 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - --orders = - --{ - -- UnitIndex = thisEntity:entindex(), - -- OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - -- Position = vLoc - --} - break - end - end - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorAttack = {} - -function BehaviorAttack:Evaluate() - - local desire = 6 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.chainLightningAbility = thisEntity:FindAbilityByName( "harpy_storm_chain_lightning" ) - - if self.chainLightningAbility and self.chainLightningAbility:IsFullyCastable() then - - self.target = AICore:ClosestEnemyHeroInRange( thisEntity, thisEntity:GetDayTimeVisionRange() ) - if self.target ~= nil and self.target:IsAlive() then - desire = 6 - end - end - - return desire -end - -function BehaviorAttack:Begin() --- print( "BehaviorAttack:Begin()" ) - - --if self.chainLightningAbility and self.chainLightningAbility:IsFullyCastable() then - if self.target and self.target:IsAlive() then - --print( "Casting Chain Lightning" ) - local targetPoint = self.target:GetAbsOrigin() + RandomVector( 100 ) - thisEntity.lastTargetPosition = self.target:GetAbsOrigin() - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - --AbilityIndex = self.chainLightningAbility:entindex(), - TargetIndex = self.target:entindex(), - Queue = false - }) - end - --end - - return nil -end - -BehaviorAttack.Continue = BehaviorAttack.Begin - - --------------------------------------------------------------------------------------------------------- - -BehaviorAvoid = {} - -function BehaviorAvoid:Evaluate() - - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - --don't even think about running if you can damage! - if self.chainLightningAbility and self.chainLightningAbility:IsFullyCastable() then - return desire - end - - --check our health pct every 5 seconds - if GameRules:GetGameTime() > thisEntity.PreviousHealthPctGameTime + 5 then - printf("reseting healthpct") - thisEntity.PreviousHealthPctGameTime = GameRules:GetGameTime() - thisEntity.PreviousHealthPct = thisEntity:GetHealthPercent() - end - - self.avoidTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 650 ) - if self.avoidTarget ~= nil then - desire = 4 - end - - if thisEntity:GetHealthPercent() < thisEntity.PreviousHealthPct then - printf("I'm hurt") - desire = 8 - end - - return desire -end - -function BehaviorAvoid:Begin() - print( "BehaviorAvoid:Begin()" ) - - for i=1,6 do - self.vEscapeLoc = FindPathablePositionNearby(thisEntity:GetAbsOrigin(), 350, 350 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( self.vEscapeLoc ) and ( self.vEscapeLoc - self.avoidTarget:GetAbsOrigin() ):Length2D() > 650 then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.vEscapeLoc - }) - printf("function BehaviorAvoid: Executing order()") - break - end - end - return nil -end - - -function BehaviorAvoid:Think(dt) - - -- keep moving towards our escape point - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.vEscapeLoc - }) - return nil -end - - -BehaviorAvoid.Continue = BehaviorAvoid.Begin ]]-- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/ai/troll_warlord_melee.lua b/aghanim_singleplayer/scripts/vscripts/ai/troll_warlord_melee.lua deleted file mode 100755 index d2bf877..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/troll_warlord_melee.lua +++ /dev/null @@ -1,182 +0,0 @@ ---[[ Troll Warlord Melee AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_troll_warlord_berserkers_rage", {} ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorWhirlingAxes, BehaviorBattleTrance, BehaviorBKB } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorWhirlingAxes = {} - -function BehaviorWhirlingAxes:Evaluate() - --print( "BehaviorWhirlingAxes:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.whirlingAxesAbility = thisEntity:FindAbilityByName( "troll_warlord_whirling_axes_melee" ) - if self.whirlingAxesAbility and self.whirlingAxesAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 450, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorWhirlingAxes:Begin() - --print( "BehaviorWhirlingAxes:Begin()" ) - if self.whirlingAxesAbility and self.whirlingAxesAbility:IsFullyCastable() then - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.whirlingAxesAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorWhirlingAxes.Continue = BehaviorWhirlingAxes.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorBattleTrance = {} - -function BehaviorBattleTrance:Evaluate() - --print( "BehaviorBattleTrance:Evaluate()" ) - local desire = 0 - - self.battleTranceAbility = thisEntity:FindAbilityByName( "troll_warlord_battle_trance" ) - if self.battleTranceAbility and self.battleTranceAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( thisEntity:GetHealthPercent() < 30 ) then - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - end - - return desire -end - -function BehaviorBattleTrance:Begin() - --print( "BehaviorBattleTrance:Begin()" ) - if self.battleTranceAbility and self.battleTranceAbility:IsFullyCastable() then - --print( "Casting Battle Trance" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.battleTranceAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorBattleTrance.Continue = BehaviorBattleTrance.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorBKB = {} - -function BehaviorBKB:Evaluate() - --print( "BehaviorBKB:Evaluate()" ) - local desire = 0 - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_creature_black_king_bar" then - self.blackKingBarAbility = item - end - end - if self.blackKingBarAbility and self.blackKingBarAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( thisEntity:GetHealthPercent() < 50 ) then - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - end - - - return desire -end - -function BehaviorBKB:Begin() - --print( "BehaviorBKB:Begin()" ) - if self.blackKingBarAbility and self.blackKingBarAbility:IsFullyCastable() then - --print( "Casting Primal Roar" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.blackKingBarAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorBKB.Continue = BehaviorBKB.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorWhirlingAxes, BehaviorBattleTrance, BehaviorBKB } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/troll_warlord_ranged.lua b/aghanim_singleplayer/scripts/vscripts/ai/troll_warlord_ranged.lua deleted file mode 100755 index 55d0978..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/troll_warlord_ranged.lua +++ /dev/null @@ -1,189 +0,0 @@ ---[[ Troll Warlord Ranged AI ]] - -require( "ai/ai_core" ) - -function Spawn( entityKeyValues ) - thisEntity:SetContextThink( "AIThink", AIThink, 0.25 ) - behaviorSystem = AICore:CreateBehaviorSystem( thisEntity, { BehaviorNone, BehaviorWhirlingAxes, BehaviorBattleTrance, BehaviorBKB } ) -end - -function AIThink() -- For some reason AddThinkToEnt doesn't accept member functions - return behaviorSystem:Think( ) -end - --------------------------------------------------------------------------------------------------------- - -BehaviorNone = {} - -function BehaviorNone:Evaluate() - return 1 -- must return a value > 0, so we have a default -end - -function BehaviorNone:Begin() - - local orders = nil - local hTarget = AICore:ClosestEnemyHeroInRange( thisEntity, 1000 ) - if hTarget ~= nil then - thisEntity.lastTargetPosition = hTarget:GetAbsOrigin() - hTarget:MakeVisibleDueToAttack( DOTA_TEAM_BADGUYS, 100 ) - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, - TargetIndex = hTarget:entindex() - } - elseif thisEntity.lastTargetPosition ~= nil then - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = thisEntity.lastTargetPosition - } - else - orders = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_STOP - } - end - - return orders -end - -BehaviorNone.Continue = BehaviorNone.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorWhirlingAxes = {} - -function BehaviorWhirlingAxes:Evaluate() - --print( "BehaviorWhirlingAxes:Evaluate()" ) - local desire = 0 - - -- let's not choose this twice in a row - if behaviorSystem.currentBehavior == self then - return desire - end - - self.whirlingAxesAbility = thisEntity:FindAbilityByName( "troll_warlord_whirling_axes_ranged" ) - if self.whirlingAxesAbility and self.whirlingAxesAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - - return desire -end - -function BehaviorWhirlingAxes:Begin() - --print( "BehaviorWhirlingAxes:Begin()" ) - if self.whirlingAxesAbility and self.whirlingAxesAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 700, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - if #enemies == 0 then - return nil - end - local target = enemies[#enemies] - local targetPoint = target:GetOrigin() + RandomVector( 100 ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - TargetIndex = target:entindex(), - AbilityIndex = self.whirlingAxesAbility:entindex(), - Queue = false, - } - return order - end - - return nil -end - -BehaviorWhirlingAxes.Continue = BehaviorWhirlingAxes.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorBattleTrance = {} - -function BehaviorBattleTrance:Evaluate() - --print( "BehaviorBattleTrance:Evaluate()" ) - local desire = 0 - - self.battleTranceAbility = thisEntity:FindAbilityByName( "troll_warlord_battle_trance" ) - if self.battleTranceAbility and self.battleTranceAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( thisEntity:GetHealthPercent() < 30 ) then - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - end - - return desire -end - -function BehaviorBattleTrance:Begin() - --print( "BehaviorBattleTrance:Begin()" ) - if self.battleTranceAbility and self.battleTranceAbility:IsFullyCastable() then - --print( "Casting Battle Trance" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.battleTranceAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorBattleTrance.Continue = BehaviorBattleTrance.Begin - --------------------------------------------------------------------------------------------------------- - -BehaviorBKB = {} - -function BehaviorBKB:Evaluate() - --print( "BehaviorBKB:Evaluate()" ) - local desire = 0 - for i = 0, DOTA_ITEM_MAX - 1 do - local item = thisEntity:GetItemInSlot( i ) - if item and item:GetAbilityName() == "item_creature_black_king_bar" then - self.blackKingBarAbility = item - end - end - if self.blackKingBarAbility and self.blackKingBarAbility:IsFullyCastable() then - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, thisEntity:GetOrigin(), nil, 300, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false ) - if ( thisEntity:GetHealthPercent() < 50 ) then - if ( #enemies >= 0 ) then - desire = #enemies + 1 - end - end - end - - - return desire -end - -function BehaviorBKB:Begin() - --print( "BehaviorBKB:Begin()" ) - if self.blackKingBarAbility and self.blackKingBarAbility:IsFullyCastable() then - --print( "Casting Primal Roar" ) - local order = - { - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self.blackKingBarAbility:entindex(), - } - return order - end - - return nil -end - -BehaviorBKB.Continue = BehaviorBKB.Begin - --------------------------------------------------------------------------------------------------------- - -AICore.possibleBehaviors = { BehaviorNone, BehaviorWhirlingAxes, BehaviorBattleTrance, BehaviorBKB } diff --git a/aghanim_singleplayer/scripts/vscripts/ai/underlord.lua b/aghanim_singleplayer/scripts/vscripts/ai/underlord.lua deleted file mode 100755 index 3426b0b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/underlord.lua +++ /dev/null @@ -1,118 +0,0 @@ - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hDamageAbility = thisEntity:FindAbilityByName( "aghsfort_underlord_firestorm" ) - thisEntity.hChannelledAbility = thisEntity:FindAbilityByName( "underlord_channelled_buff" ) - - thisEntity.fEnemySearchRange = 700 - - thisEntity:SetContextThink( "UnderlordThink", UnderlordThink, 1 ) -end - --------------------------------------------------------------------------------- - -function UnderlordThink() - if thisEntity == nil or thisEntity:IsNull() or thisEntity:IsAlive() == false then - return -1 - end - - if GameRules:IsGamePaused() then - return 1 - end - - if thisEntity.hChannelledAbility ~= nil and thisEntity.hChannelledAbility:IsChanneling() then - return 0.5 - end - - local enemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, thisEntity.fEnemySearchRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - - local bIgniteReady = ( #enemies > 0 and thisEntity.hDamageAbility ~= nil and thisEntity.hDamageAbility:IsFullyCastable() ) - - if thisEntity.hChannelledAbility ~= nil and thisEntity.hChannelledAbility:IsFullyCastable() then - local friendlies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), nil, 1500, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,friendly in pairs ( friendlies ) do - if friendly ~= nil then - if ( friendly:GetUnitName() == "npc_dota_creature_dragon_knight" ) then - local fDist = ( friendly:GetOrigin() - thisEntity:GetOrigin() ):Length2D() - local fCastRange = thisEntity.hChannelledAbility:GetCastRange( thisEntity:GetOrigin(), nil ) - --print( string.format( "fDist == %d, fCastRange == %d", fDist, fCastRange ) ) - if ( fDist <= fCastRange ) and ( ( #enemies > 0 ) or ( friendly:GetAggroTarget() ) ) then - return CastChannelledBuff( friendly ) - elseif ( fDist > 400 ) and ( fDist < 900 ) then - if bIgniteReady == false then - return Approach( friendly ) - end - end - end - end - end - end - - if bIgniteReady then - return IgniteArea( enemies[ RandomInt( 1, #enemies ) ] ) - end - - local fFuzz = RandomFloat( -0.1, 0.1 ) -- Adds some timing separation - - return 0.5 + fFuzz -end - --------------------------------------------------------------------------------- - -function Approach( hUnit ) - --printf( "\"%s\" is approaching unit named \"%s\"", thisEntity:GetUnitName(), hUnit:GetUnitName() ) - - local vToUnit = hUnit:GetOrigin() - thisEntity:GetOrigin() - vToUnit = vToUnit:Normalized() - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = thisEntity:GetOrigin() + vToUnit * thisEntity:GetIdealSpeed() - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function CastChannelledBuff( hUnit ) - --print( "Casting CastChannelledBuff on " .. hUnit:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = thisEntity.hChannelledAbility:entindex(), - TargetIndex = hUnit:entindex(), - Queue = false, - }) - - return 1 -end - --------------------------------------------------------------------------------- - -function IgniteArea( hEnemy ) - --print( "Casting ignite on " .. hEnemy:GetUnitName() ) - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hDamageAbility:entindex(), - Position = hEnemy:GetOrigin(), - Queue = false, - }) - - return 0.55 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/ai/walrus_pudge_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/walrus_pudge_ai.lua deleted file mode 100755 index 9ee3eb6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/walrus_pudge_ai.lua +++ /dev/null @@ -1,95 +0,0 @@ - - - -function Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_pudge/pudge_meathook.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_pudge/pudge_meathook_impact.vpcf", context ) -end - - - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - - HookAbility = thisEntity:FindAbilityByName( "aghsfort_walrus_pudge_harpoon" ) - flLastOrder = GameRules:GetGameTime() - thisEntity:SetContextThink( "WalrusPudgeThink", WalrusPudgeThink, 1 ) -end - - - - -function WalrusPudgeThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - if GameRules:IsGamePaused() == true then - return 1 - end - - if not thisEntity:GetAggroTarget() then - if (GameRules:GetGameTime() - flLastOrder) > (4 - RandomFloat(0 ,1 )) then - flLastOrder = GameRules:GetGameTime() - return DoMove() - end - end - - - if HookAbility and HookAbility:IsFullyCastable() then - local fHookSearchRadius = HookAbility:GetCastRange() - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, fHookSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_FARTHEST, false ) - if #hEnemies > 0 then - local hFarthestEnemy = hEnemies[ 1 ] - return ThrowHook( hFarthestEnemy ) - end - end - - return 0.5 -end - - -function ThrowHook( enemy ) - if ( not thisEntity:HasModifier( "modifier_provide_vision" ) ) then - --print( "If player can't see me, provide brief vision to his team as I start my hook" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = HookAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 0.2 - -end - - -function DoMove() - if IsServer() then - - for i=1,4 do - local vLoc = FindPathablePositionNearby(thisEntity:GetAbsOrigin(), 200, 800 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_ATTACK_MOVE, - Position = vLoc - }) - break - end - end - end - return 0.5 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ai/wave_blaster_ai.lua b/aghanim_singleplayer/scripts/vscripts/ai/wave_blaster_ai.lua deleted file mode 100755 index 1a7d57d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ai/wave_blaster_ai.lua +++ /dev/null @@ -1,111 +0,0 @@ - - -function Precache( context ) - PrecacheUnitByNameSync( "npc_aghsfort_creature_wave_blaster_ghost", context, -1 ) - PrecacheResource( "particle", "particles/econ/items/ancient_apparition/ancient_apparation_ti8/ancient_ice_vortex_ti8.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ancient_apparition/ancient_apparition_ice_blast_explode.vpcf", context ) -end - - -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - - thisEntity.hWaveAbility = thisEntity:FindAbilityByName( "aghsfort_wave_blast" ) - thisEntity.hLeapAbility = thisEntity:FindAbilityByName( "aghsfort_waveblaster_leap" ) - thisEntity.hSummonGhostAbility = thisEntity:FindAbilityByName( "aghsfort_waveblaster_summon_ghost" ) - thisEntity:SetContextThink( "WaveBlasterThink", WaveBlasterThink, 1 ) - -end - -function WaveBlasterThink() - if ( not thisEntity:IsAlive() ) then - return -1 - end - --print ("thinking") - - if GameRules:IsGamePaused() == true then - return 1 - end - - - if thisEntity.hWaveAbility and thisEntity.hWaveAbility:IsFullyCastable() then - local fWaveSearchRadius = thisEntity.hWaveAbility:GetCastRange() - local hEnemies = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, fWaveSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_FARTHEST, false ) - if #hEnemies > 0 then - local hFarthestEnemy = hEnemies[ 1 ] - return WaveBlast( hFarthestEnemy ) - end - end - - if thisEntity.hLeapAbility and thisEntity.hLeapAbility:IsFullyCastable() then - local fSearchRadius = 750 - local hEnemiesToAvoid = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, fSearchRadius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_CLOSEST, false ) - if #hEnemiesToAvoid > 0 then - return CastLeap() - end - end - - - return 0.5 -end - -function WaveBlast( enemy ) - if enemy == nil then - return - end - - if ( not thisEntity:HasModifier( "modifier_provide_vision" ) ) then - --print( "If player can't see me, provide brief vision to his team as I start my Smash" ) - thisEntity:AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = 1.5 } ) - end - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hWaveAbility:entindex(), - Position = enemy:GetOrigin(), - Queue = false, - }) - - return 0.2 -end - --------------------------------------------------------------------------------- - -function CastLeap() - if IsServer() then - local bLeapSuccess = false - for i=1,6 do - local vLoc = FindPathablePositionNearby(thisEntity:GetAbsOrigin(), 650, 1550 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_POSITION, - AbilityIndex = thisEntity.hLeapAbility:entindex(), - Position = vLoc, - Queue = false, - }) - bLeapSuccess = true - break - end - end - - if bLeapSuccess == true and thisEntity.hSummonGhostAbility and thisEntity.hSummonGhostAbility:IsFullyCastable() then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hSummonGhostAbility:entindex(), - Queue = false, - }) - end - end - return 3 -end diff --git a/aghanim_singleplayer/scripts/vscripts/ascension_levels.lua b/aghanim_singleplayer/scripts/vscripts/ascension_levels.lua deleted file mode 100755 index 8ff9e52..0000000 --- a/aghanim_singleplayer/scripts/vscripts/ascension_levels.lua +++ /dev/null @@ -1,233 +0,0 @@ - -_G.EXTRA_ABILITIES_PER_ASCENSION_LEVEL = -{ - 0, 1, 2, 3, 4 -} - -_G.ELITE_ABILITIES_PER_ASCENSION_LEVEL = -{ - 2, 2, 2, 2, 2 -} - --- Ascension ability type -_G.ASCENSION_ABILITY_CAPTAINS_ONLY = 0 -_G.ASCENSION_ABILITY_NON_CAPTAINS_ONLY = 1 -_G.ASCENSION_ABILITY_ALL_UNITS = 2 -_G.ASCENSION_ABILITY_GLOBAL = 3 - --- Ascension cast behavior -_G.ASCENSION_CAST_WHEN_COOLDOWN_READY = 0 -- Default -_G.ASCENSION_CAST_ON_DEATH = 1 -_G.ASCENSION_CAST_ON_LOW_HEALTH = 2 -_G.ASCENSION_CAST_ON_TAKE_MAGIC_DAMAGE = 3 -_G.ASCENSION_CAST_ON_NEARBY_ENEMY = 4 - --- Ascension tareting behavior [for targetted abilities] -_G.ASCENSION_TARGET_NO_TARGET = 0 -_G.ASCENSION_TARGET_RANDOM_PLAYER = 1 -_G.ASCENSION_TARGET_ATTACKER = 2 -_G.ASCENSION_TARGET_CLUMPED_PLAYER = 3 - --- Uncomment + change ability names for debugging ---_G.ASCENSION_ABILITIES_FORCE_LIST = ---{ --- "ascension_extra_fast", ---} - -_G.ASCENSION_ABILITIES = -{ --- example_ability_name = --- { --- nType = , --- nCastBehavior = , ASCENSION_CAST_WHEN_COOLDOWN_READY is used if unspecified --- nTargetType = , -- For targeted abilities, ASCENSION_TARGET_NO_TARGET is used if unspecified --- nMinAscensionLevel = 3, --- nMaxAscensionLevel = 5, --- nRestrictToAct = 1, -- Should this only appear in one act? Leave blank if not --- szRequiredBoss = "", -- Only used if nRestrictToAct is set --- flHealthPercent = 20, -- Only used for ASCENSION_CAST_ON_LOW_HEALTH, defaults to 25 if not set --- bEliteOnly = true, -- Indicates if this is an elite only ability --- vecBlacklistedEncounters = {}, -- List of encounter names to not use this ascension ability with --- }, - - aghsfort_ascension_firefly = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - bEliteOnly = true, - vecBlacklistedEncounters = - { - "encounter_enraged_wildwings", - } - }, - ---[[ - ascension_temple_guardian_wrath = - { - nType = ASCENSION_ABILITY_GLOBAL, - nRestrictToAct = 1, - szRequiredBoss = "npc_dota_creature_temple_guardian", - bEliteOnly = true, - }, - - ascension_timbersaw_chakram_dance = - { - nType = ASCENSION_ABILITY_GLOBAL, - nRestrictToAct = 1, - szRequiredBoss = "npc_dota_boss_timbersaw", - bEliteOnly = true, - }, -]]-- - ascension_plasma_field = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - nCastBehavior = ASCENSION_CAST_ON_DEATH, - bEliteOnly = true, - vecBlacklistedEncounters = - { - "encounter_drow_ranger_miniboss", - "encounter_alchemist", - "encounter_fire_roshan", - "encounter_big_ogres", - } - }, - - ascension_bomb = - { - nType = ASCENSION_ABILITY_GLOBAL, - nTargetType = ASCENSION_TARGET_CLUMPED_PLAYER, - bEliteOnly = true, - nRange = 700, - vecBlacklistedEncounters = - { - "encounter_bombers", - "encounter_bomb_squad", - } - }, - - ascension_flicker = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - nCastBehavior = ASCENSION_CAST_ON_NEARBY_ENEMY, - nRange = 500, - vecBlacklistedEncounters = - { - "encounter_dire_siege", - }, - }, - - - ascension_drunken = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - nCastBehavior = ASCENSION_CAST_ON_NEARBY_ENEMY, - nRange = 500, - }, - - ascension_bulwark = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - }, - - ascension_magic_resist = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - }, - - --[[ - ascension_crit = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - vecBlacklistedEncounters = - { - "encounter_zealot_scarabs", - } - }, - ]] - - ascension_extra_fast = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - vecBlacklistedEncounters = - { - "encounter_mushroom_mines", - "encounter_brewmaster", - "encounter_drow_ranger_miniboss", - "encounter_gauntlet", - } - }, - - ascension_chilling_touch = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - }, - - ascension_vampiric = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - nCastBehavior = ASCENSION_CAST_ON_LOW_HEALTH, - flHealthPercent = 25, - }, - - ascension_armor = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - }, - - ascension_damage = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - vecBlacklistedEncounters = - { - "encounter_mushroom_mines", - } - }, - - ascension_attack_speed = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - nCastBehavior = ASCENSION_CAST_ON_LOW_HEALTH, - flHealthPercent = 50, - vecBlacklistedEncounters = - { - "encounter_big_ogres", - "encounter_mushroom_mines", - } - }, - - ascension_magic_immunity = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - nCastBehavior = ASCENSION_CAST_ON_TAKE_MAGIC_DAMAGE, - }, - - ascension_armor_sapping = - { - nType = ASCENSION_ABILITY_ALL_UNITS, - nCastBehavior = ASCENSION_CAST_ON_DEATH, - nTargetType = ASCENSION_TARGET_ATTACKER, - vecBlacklistedEncounters = - { - "encounter_alchemist", - "encounter_fire_roshan", - } - }, - - ascension_heal_suppression = - { - bEliteOnly = true, - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - }, - - aghsfort_ascension_silence = - { - bEliteOnly = true, - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - nCastBehavior = ASCENSION_CAST_ON_NEARBY_ENEMY, - nRange = 400, - }, - - aghsfort_ascension_magnetic_field = - { - nType = ASCENSION_ABILITY_CAPTAINS_ONLY, - }, -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/blessings.lua b/aghanim_singleplayer/scripts/vscripts/blessings.lua deleted file mode 100755 index 5e4e1f7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/blessings.lua +++ /dev/null @@ -1,512 +0,0 @@ --- All blessing modifiers must be linked here -LinkLuaModifier( "modifier_blessing_bottle_upgrade", "modifiers/modifier_blessing_bottle_upgrade", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_armor", "modifiers/modifier_blessing_armor", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_attack_speed", "modifiers/modifier_blessing_attack_speed", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_evasion", "modifiers/modifier_blessing_evasion", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_mana_boost", "modifiers/modifier_blessing_mana_boost", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_health_boost", "modifiers/modifier_blessing_health_boost", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_magic_resist", "modifiers/modifier_blessing_magic_resist", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_magic_damage_bonus", "modifiers/modifier_blessing_magic_damage_bonus", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_damage_bonus", "modifiers/modifier_blessing_damage_bonus", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_movement_speed", "modifiers/modifier_blessing_movement_speed", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_damage_reflect", "modifiers/modifier_blessing_damage_reflect", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_spell_life_steal", "modifiers/modifier_blessing_spell_life_steal", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_life_steal", "modifiers/modifier_blessing_life_steal", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_arcanist", "modifiers/modifier_blessing_potion_arcanist", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_dragon", "modifiers/modifier_blessing_potion_dragon", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_echo_slam", "modifiers/modifier_blessing_potion_echo_slam", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_torrent", "modifiers/modifier_blessing_potion_torrent", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_shadow_wave", "modifiers/modifier_blessing_potion_shadow_wave", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_ravage", "modifiers/modifier_blessing_potion_ravage", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_purification", "modifiers/modifier_blessing_potion_purification", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_respawn_time_reduction", "modifiers/modifier_blessing_respawn_time_reduction", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_respawn_invulnerability", "modifiers/modifier_blessing_respawn_invulnerability", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_death_detonation", "modifiers/modifier_blessing_death_detonation", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_strength", "modifiers/modifier_blessing_strength", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_agility", "modifiers/modifier_blessing_agility", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_intelligence", "modifiers/modifier_blessing_intelligence", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_health", "modifiers/modifier_blessing_potion_health", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_potion_mana", "modifiers/modifier_blessing_potion_mana", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_restore_mana", "modifiers/modifier_blessing_restore_mana", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_book_strength", "modifiers/modifier_blessing_book_strength", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_book_agility", "modifiers/modifier_blessing_book_agility", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_book_intelligence", "modifiers/modifier_blessing_book_intelligence", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_blessing_refresher_shard", "modifiers/modifier_blessing_refresher_shard", LUA_MODIFIER_MOTION_NONE ) - --- Uncomment + change blessing modifier names for debugging -_G.BLESSING_MODIFIERS_FORCE_LIST = -{ --- modifier_blessing_bottle_upgrade = 1, -- 1 is the claim count --- modifier_blessing_armor = 1, --- modifier_blessing_attack_speed = 1, --- modifier_blessing_evasion = 1, --- modifier_blessing_mana_boost = 1, --- modifier_blessing_health_boost = 1, --- modifier_blessing_magic_resist = 1, --- modifier_blessing_magic_damage_bonus = 1, --- modifier_blessing_damage_bonus = 1, --- modifier_blessing_movement_speed = 1, --- modifier_blessing_spell_life_steal = 1, --- modifier_blessing_life_steal = 1, --- grant_blessing_bonus_life = 1, --- grant_blessing_potion_starting_mango = 1, --- modifier_blessing_potion_arcanist = 1, --- modifier_blessing_potion_dragon = 1, --- modifier_blessing_potion_echo_slam = 1, --- modifier_blessing_potion_torrent = 1, --- modifier_blessing_potion_shadow_wave = 1, --- modifier_blessing_potion_ravage = 1, --- modifier_blessing_potion_purification = 1, --- modifier_blessing_respawn_time_reduction = 1, --- modifier_blessing_potion_health = 1, --- modifier_blessing_potion_mana = 1, --- modifier_blessing_restore_mana = 1, --- grant_blessing_gold_start_bonus = 1, --- modifier_blessing_respawn_invulnerability = 1, --- modifier_blessing_death_detonation = 1, --- modifier_blessing_book_strength = 1, --- modifier_blessing_book_agility = 1, --- modifier_blessing_book_intelligence = 1, --- modifier_blessing_intelligence = 1, --- modifier_blessing_refresher_shard = 1, -} - -_G.BLESSING_MODIFIERS = -{ --- example_blessing_modifier_name = --- { --- action_name = , --- keys = --- { --- --- } --- }, --- --- This version allows you to specify different keys per action level --- example_blessing_modifier_name = --- { --- action_name = , --- keys = --- { --- { --- --- }, --- { --- --- }, --- } --- }, - - grant_blessing_potion_starting_mango = - { - scoreboard_order = 1, - action_name = "blessing_potion_starting_mango", - blessing_type = BLESSING_TYPE_ITEM_GRANT, - keys = - { - items = - { - item_flask = 1, - item_enchanted_mango = 1, - } - } - }, - - modifier_blessing_bottle_upgrade = - { - scoreboard_order = 1, - action_name = "blessing_bottle_upgrade", - keys = - { - max_charges = 1, - }, - }, - - -- Str Tree - modifier_blessing_strength = - { - scoreboard_order = 102, - action_names = - { - "blessing_stat_str", - "blessing_stat_str_2", - "blessing_stat_str_3", - }, - keys = - { - { - str_bonus = 2 - }, - { - str_bonus = 5 - }, - { - str_bonus = 9 - }, - }, - }, - - modifier_blessing_book_strength = - { - scoreboard_order = 101, - action_name = "blessing_book_strength", - keys = - { - bonus_stat = 1 - }, - }, - - modifier_blessing_armor = - { - scoreboard_order = 206, - action_name = "blessing_armor_bonus", - keys = - { - bonus_armor = 2 - }, - }, - - modifier_blessing_potion_health = - { - scoreboard_order = 103, - action_name = "blessing_potion_health", - keys = - { - hp_restore_pct_bonus = 20 - }, - }, - - modifier_blessing_respawn_time_reduction = - { - scoreboard_order = 104, - action_name = "blessing_respawn_time_reduction", - keys = - { - respawn_time_reduction = 0.25 - }, - }, - - modifier_blessing_potion_echo_slam = - { - scoreboard_order = 205, - action_name = "blessing_potion_echo_slam", - keys = - { - echo_slam_echo_damage_percent = 40, - } - }, - - modifier_blessing_health_boost = - { - scoreboard_order = 100, - action_name = "blessing_health_boost", - keys = - { - bonus_health_per_level = 10 - }, - }, - - modifier_blessing_damage_reflect = - { - scoreboard_order = 112, - action_name = "blessing_damage_reflection", - keys = - { - damage_reflect = 0.04 - } - }, - - modifier_blessing_potion_torrent = - { - scoreboard_order = 110, - action_name = "blessing_potion_torrent", - keys = - { - torrent_damage_percent = 50, - } - }, - - modifier_blessing_refresher_shard = - { - scoreboard_order = 11, - action_name = "blessing_refresher_shard", - keys = - { - health_restore_percent = 50, - } - }, - - grant_blessing_bonus_life = - { - scoreboard_order = 312, - action_name = "blessing_bonus_life", - blessing_type = BLESSING_TYPE_LIFE_GRANT, - keys = - { - lives = 1, - } - }, - - -- Agi tree - modifier_blessing_agility = - { - scoreboard_order = 202, - action_names = - { - "blessing_stat_agi", - "blessing_stat_agi_2", - "blessing_stat_agi_3", - }, - keys = - { - { - agi_bonus = 2 - }, - { - agi_bonus = 5 - }, - { - agi_bonus = 9 - }, - }, - }, - - modifier_blessing_evasion = - { - scoreboard_order = 207, - action_name = "blessing_evasion", - keys = - { - bonus_evasion = 5 - }, - }, - - modifier_blessing_attack_speed = - { - scoreboard_order = 200, - action_name = "blessing_attack_speed", - keys = - { - bonus_attack_speed = 10 - }, - }, - - modifier_blessing_book_agility = - { - scoreboard_order = 201, - action_name = "blessing_book_agility", - keys = - { - bonus_stat = 1 - }, - }, - - grant_blessing_gold_start_bonus = - { - scoreboard_order = 203, - action_name = "blessing_gold_start_bonus", - blessing_type = BLESSING_TYPE_GOLD_GRANT, - keys = - { - gold_amount = 125, - } - }, - - modifier_blessing_potion_purification = - { - scoreboard_order = 107, - action_name = "blessing_potion_purification", - keys = - { - radius_percent = 100, - } - }, - - modifier_blessing_life_steal = - { - scoreboard_order = 109, - action_name = "blessing_life_steal", - keys = - { - life_steal_pct = 5 - }, - }, - - modifier_blessing_respawn_invulnerability = - { - scoreboard_order = 204, - action_name = "blessing_respawn_invulnerability", - keys = - { - respawn_invulnerability_time_bonus = 0.0, - min_move_speed = 550, - bonus_attack_speed = 50, - }, - }, - - modifier_blessing_potion_arcanist = - { - scoreboard_order = 304, - action_name = "blessing_potion_arcanist", - keys = - { - cooldown_reduction_percent = 50, - manacost_reduction_percent = 50, - }, - }, - - modifier_blessing_potion_dragon = - { - scoreboard_order = 211, - action_name = "blessing_potion_dragon", - keys = - { - bonus_attack_damage_percent = 25, - }, - }, - - modifier_blessing_movement_speed = - { - scoreboard_order = 210, - action_name = "blessing_movement_speed", - keys = - { - bonus_movement_speed = 8 - }, - }, - - modifier_blessing_damage_bonus = - { - scoreboard_order = 212, - action_name = "blessing_damage_bonus", - keys = - { - bonus_damage = 2 - }, - }, - - -- Int tree - modifier_blessing_intelligence = - { - scoreboard_order = 302, - action_names = - { - "blessing_stat_int", - "blessing_stat_int_2", - "blessing_stat_int_3", - }, - keys = - { - { - int_bonus = 2 - }, - { - int_bonus = 5 - }, - { - int_bonus = 9 - }, - }, - }, - - modifier_blessing_book_intelligence = - { - scoreboard_order = 303, - action_name = "blessing_book_intelligence", - keys = - { - bonus_stat = 1 - }, - }, - - modifier_blessing_mana_boost = - { - scoreboard_order = 300, - action_name = "blessing_mana_boost", - keys = - { - bonus_mana = 10 - }, - }, - - modifier_blessing_potion_mana = - { - scoreboard_order = 301, - action_name = "blessing_potion_mana", - keys = - { - mana_restore_pct_bonus = 20 - }, - }, - - modifier_blessing_spell_life_steal = - { - scoreboard_order = 311, - action_name = "blessing_spell_life_steal", - keys = - { - spell_life_steal = 5 - }, - }, - - modifier_blessing_potion_shadow_wave = - { - scoreboard_order = 106, - action_name = "blessing_potion_shadow_wave", - keys = - { - damage_percent = 50, - } - }, - - modifier_blessing_death_detonation = - { - scoreboard_order = 105, - action_name = "blessing_death_detonation", - keys = - { - detonation_damage_per_level = 100, - detonation_radius = 350, - }, - }, - - modifier_blessing_magic_resist = - { - scoreboard_order = 307, - action_name = "blessing_magic_resist", - keys = - { - bonus_magic_resist = 5 - }, - }, - - modifier_blessing_potion_ravage = - { - scoreboard_order = 308, - action_name = "blessing_potion_ravage", - keys = - { - duration_percent = 50, - } - }, - - modifier_blessing_restore_mana = - { - scoreboard_order = 305, - action_name = "blessing_restore_mana", - keys = - { - mana_on_kill = 6 - }, - }, - - modifier_blessing_magic_damage_bonus = - { - scoreboard_order = 309, - action_name = "blessing_magic_damage_bonus", - keys = - { - bonus_magic_damage = 6 - }, - }, -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/constants.lua b/aghanim_singleplayer/scripts/vscripts/constants.lua deleted file mode 100755 index 88582c2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/constants.lua +++ /dev/null @@ -1,115 +0,0 @@ - --- General Game Mode Config -_G.AGHANIM_PLAYERS = 1 - -_G.AGHANIM_TIMED_RESPAWN_MODE = true -_G.AGHANIM_TIMED_RESPAWN_TIME = 5.0 - -_G.AGHANIM_STARTING_LIVES = 2 -_G.AGHANIM_MAX_LIVES = 4 - -_G.AGHANIM_STARTING_GOLD = 500 -_G.AGHANIM_STARTING_SALVES = 2 -_G.AGHANIM_STARTING_MANGOES = 2 -_G.AGHANIM_ENABLE_BOTTLE = true -_G.AGHANIM_ENCOUNTER_BOTTLE_CHARGES = 3 - -_G.LIFE_REVIVE_COST = 1 -_G.LIFE_BUYBACK_COST = 2 -_G.REVIVE_HEALTH_PCT = 100 -_G.REVIVE_MANA_PCT = 100 - -_G.GOLD_BAG_DROP_PCT = 33 -_G.HEALTH_POTION_DROP_PCT = 10 -_G.MANA_POTION_DROP_PCT = 10 -_G.HEAL_ON_ENCOUNTER_COMPLETE = true - -_G.NUM_VIABLE_ROOMS_FOR_DROPPED_ITEMS = 11 -_G.PCT_BASE_TWO_ITEM_DROP = 0 -_G.NUM_NEUTRAL_ITEMS_DROPPED = 40 -_G.PCT_BASE_NEUTRAL_ITEM_DROP = 16 -_G.NUM_CONSUMABLES_FROM_ROOM_REWARD = 2 - -_G.NUM_LIVES_FROM_BOSSES = 0 - --- Audio -_G.VOICE_LAUGH_COOLDOWN = 20.0 -_G.VOICE_PERIODIC_TAUNT_COOLDOWN = 35.0 -_G.VOICE_LINE_COOLDOWN = 4.0 -_G.VOICE_VOLUME = 1.4 - --- Atlas -_G.ROOM_TYPE_INVALID = 0 -_G.ROOM_TYPE_STARTING = 1 -_G.ROOM_TYPE_ENEMY = 2 -_G.ROOM_TYPE_TRAPS = 3 -_G.ROOM_TYPE_BOSS = 4 -_G.ROOM_TYPE_TRANSITIONAL = 5 -_G.ROOM_TYPE_BONUS = 6 - -_G.RoomTypeStrings = {} - -RoomTypeStrings[ ROOM_TYPE_ENEMY ]= "ROOM_TYPE_ENEMY" -RoomTypeStrings[ ROOM_TYPE_BOSS ] = "ROOM_TYPE_BOSS" -RoomTypeStrings[ ROOM_TYPE_STARTING ] = "ROOM_TYPE_STARTING" -RoomTypeStrings[ ROOM_TYPE_TRAPS ] = "ROOM_TYPE_TRAPS" -RoomTypeStrings[ ROOM_TYPE_TRANSITIONAL ] = "ROOM_TYPE_TRANSITIONAL" -RoomTypeStrings[ ROOM_TYPE_BONUS ] = "ROOM_TYPE_BONUS" - - -function GetStringForRoomType( nType ) - return _G.RoomTypeStrings[ nType ] -end - --- Room Exit directions -_G.ROOM_EXIT_LEFT = 0 -_G.ROOM_EXIT_TOP = 1 -_G.ROOM_EXIT_RIGHT = 2 - --- these are only used for UI purposes. -_G.ROOM_EXIT_BOTTOM = 3 -_G.ROOM_EXIT_INVALID = -1 - -function GetEntranceDirectionForExitType( nExitDirection ) - if nExitDirection == ROOM_EXIT_LEFT then - return ROOM_EXIT_RIGHT - end - if nExitDirection == ROOM_EXIT_TOP then - return ROOM_EXIT_BOTTOM - end - if nExitDirection == ROOM_EXIT_RIGHT then - return ROOM_EXIT_LEFT - end - - -- You can never exit from the bottom - return ROOM_EXIT_INVALID -end - --- Amount of XP earned per hero per depth (if the encounter gives XP) - --- setting this to a value greater than zero will level up every creature; increasing its max hp and attack damage --- a value of 1.0 will increase HP by 30%, and damage by 10%; other values scale accordingly -_G.GAME_DIFFICULTY_FACTOR = 0 - -_G.DEFAULT_PORTAL_SPAWN_INTERVAL = 30 -_G.PORTAL_ESCALATION_ENABLED = true -_G.PORTAL_ESCALATION_RATE = 2.5 - -_G.DEFAULT_MIN_CRATES_ENEMY_ENC = 8 -_G.DEFAULT_MAX_CRATES_ENEMY_ENC = 10 - -_G.DEFAULT_MIN_CRATES_BOSS_ENC = 12 -_G.DEFAULT_MAX_CRATES_BOSS_ENC = 15 - -_G.DEFAULT_MIN_CHESTS = 1 -_G.DEFAULT_MAX_CHESTS = 2 - -_G.ENCOUNTER_SPAWN_BARRELS_CHANCE = 40 -_G.DEFAULT_MIN_BARRELS_ENEMY_ENC = 3 -_G.DEFAULT_MAX_BARRELS_ENEMY_ENC = 6 - --- blessing constants -_G.BLESSING_TYPE_MODIFIER = 1 -_G.BLESSING_TYPE_ITEM_GRANT = 2 -_G.BLESSING_TYPE_LIFE_GRANT = 3 -_G.BLESSING_TYPE_GOLD_GRANT = 4 \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/containers/breakable_container_surprises.lua b/aghanim_singleplayer/scripts/vscripts/containers/breakable_container_surprises.lua deleted file mode 100755 index fa6f40a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/containers/breakable_container_surprises.lua +++ /dev/null @@ -1,177 +0,0 @@ -require( "rewards" ) -require( "reward_tables" ) -require( "map_encounter" ) - - -function CAghanim:ChooseBreakableSurprise( hAttacker, hBreakableEnt ) - hBreakableEnt.nRewardSpawnDist = 32 - - if hBreakableEnt.RoomReward ~= nil then - self:SpawnRoomReward( hBreakableEnt ) - return - end - -- Note: hAttacker can be nil - - --[[ - if hAttacker then - print( string.format( "CAghanim:ChooseBreakableSurprise() - hAttacker: %s", hAttacker:GetUnitName() ) ) - end - ]] - - --[[ - --These are initialized when the crate unit is spawned in map_encounter - printf( "----------------------------------------" ) - printf( " hBreakableEnt.fRareItemChance: %.2f", hBreakableEnt.fRareItemChance ) - printf( " hBreakableEnt.fCommonItemChance: %.2f", hBreakableEnt.fCommonItemChance ) - printf( " hBreakableEnt.fMonsterChance: %.2f", hBreakableEnt.fMonsterChance ) - printf( " hBreakableEnt.fGoldChance: %.2f", hBreakableEnt.fGoldChance ) - ]] - - local fRareItemThreshold = 1 - hBreakableEnt.fRareItemChance - local fCommonItemThreshold = fRareItemThreshold - hBreakableEnt.fCommonItemChance - local fMonsterThreshold = fCommonItemThreshold - hBreakableEnt.fMonsterChance - local fGoldThreshold = fMonsterThreshold - hBreakableEnt.fGoldChance - - local fRandRoll = RandomFloat( 0, 1 ) - - --[[ - printf( "----------------------------------------" ) - printf( "fRandRoll: %.2f", fRandRoll ) - printf( "fRareItemThreshold: %.2f", fRareItemThreshold ) - printf( "fCommonItemThreshold: %.2f", fCommonItemThreshold ) - printf( "fMonsterThreshold: %.2f", fMonsterThreshold ) - printf( "fGoldThreshold: %.2f", fGoldThreshold ) - ]] - - if fRandRoll >= fRareItemThreshold then - self:CreateBreakableContainerRareItemDrop( hAttacker, hBreakableEnt ) - --print( string.format( "fRandRoll (%.2f) >= fRareItemThreshold (%.2f)", fRandRoll, fRareItemThreshold ) ) - return - elseif fRandRoll >= fCommonItemThreshold then - self:CreateBreakableContainerCommonItemDrop( hAttacker, hBreakableEnt ) - --print( string.format( "fRandRoll (%.2f) >= fCommonItemThreshold (%.2f)", fRandRoll, fCommonItemThreshold ) ) - return - elseif fRandRoll >= fMonsterThreshold then - self:CreateBreakableContainerMonsterSpawn( hAttacker, hBreakableEnt ) - --print( string.format( "fRandRoll (%.2f) >= fMonsterThreshold (%.2f)", fRandRoll, fMonsterThreshold ) ) - return - elseif fRandRoll >= fGoldThreshold then - --print( string.format( "fRandRoll (%.2f) >= fGoldThreshold (%.2f)", fRandRoll, fGoldThreshold ) ) - self:CreateBreakableContainerGoldDrop( hAttacker, hBreakableEnt ) - return - else - -- Drop nothing - --print( string.format( "else drop nothing, fRandRoll was %.2f", fRandRoll ) ) - end -end - ---------------------------------------------------------------------------- - -function CAghanim:CreateBreakableContainerRareItemDrop( hAttacker, hBreakableEnt ) - if hBreakableEnt ~= nil and hBreakableEnt.RareItems ~= nil then - local nRandomIndex = RandomInt( 1, #hBreakableEnt.RareItems ) - local newItem = CreateItem( hBreakableEnt.RareItems[ nRandomIndex ], nil, nil ) - local drop = CreateItemOnPositionForLaunch( hBreakableEnt:GetAbsOrigin(), newItem ) - - local vPos = self:GetBreakableRewardSpawnPos( hBreakableEnt ) - - newItem:LaunchLootInitialHeight( false, 0, 100, 0.5, vPos ) - - EmitSoundOn( "Dungeon.TreasureItemDrop", hBreakableEnt ) - end -end - --------------------------------------------------------------------------------- - -function CAghanim:CreateBreakableContainerCommonItemDrop( hAttacker, hBreakableEnt ) - if hBreakableEnt ~= nil and hBreakableEnt.CommonItems ~= nil then - local nHealthPotChance = 55 -- hack for quick pseudo-randomness; we're not pulling in the items from the hBreakableEnt table - --printf( "nHealthPotChance: %d", nHealthPotChance ) - local szItem = nil - if RollPseudoRandomPercentage( nHealthPotChance, DOTA_PSEUDO_RANDOM_CUSTOM_GAME_1, hAttacker ) == true then - szItem = "item_health_potion" - --printf( "pseudo-random roll resulted in health pot" ) - else - szItem = "item_mana_potion" - --printf( "pseudo-random roll resulted in mana pot" ) - end - - local newItem = CreateItem( szItem, nil, nil ) - - --[[ - local nRandomIndex = RandomInt( 1, #hBreakableEnt.CommonItems ) - local newItem = CreateItem( hBreakableEnt.CommonItems[ nRandomIndex ], nil, nil ) - ]] - - local drop = CreateItemOnPositionForLaunch( hBreakableEnt:GetAbsOrigin(), newItem ) - - local vPos = self:GetBreakableRewardSpawnPos( hBreakableEnt ) - - if newItem:GetAbilityName() == "item_health_potion" or newItem:GetAbilityName() == "item_mana_potion" then - newItem:LaunchLootInitialHeight( true, 0, 100, 0.5, vPos ) - else - newItem:LaunchLootInitialHeight( false, 0, 100, 0.5, vPos ) - end - - EmitSoundOn( "Dungeon.TreasureItemDrop", hBreakableEnt ) - end -end - --------------------------------------------------------------------------------- - -function CAghanim:CreateBreakableContainerMonsterSpawn( hAttacker, hBreakableEnt ) - if hBreakableEnt == nil then - return - end - - local monsterUnits = hBreakableEnt.MonsterUnits - if monsterUnits ~= nil and #monsterUnits > 0 then - local nRandomIndex = RandomInt( 1, #monsterUnits ) - local szMonsterUnit = monsterUnits[ nRandomIndex ] - - local vPos = self:GetBreakableRewardSpawnPos( hBreakableEnt ) - - -- Spawn the monster at vPos - - EmitSoundOn( "Dungeon.TreasureItemDrop", hBreakableEnt ) - end -end - ---------------------------------------------------------------------------- - -function CAghanim:CreateBreakableContainerGoldDrop( hAttacker, hBreakableEnt ) - local nGoldToDrop = RandomInt( hBreakableEnt.nMinGold, hBreakableEnt.nMaxGold ) - - --print( "Breakable nGoldToDrop == " .. nGoldToDrop ) - - --print( "CAghanim:CreateBreakableContainerGoldDrop() - Drop a bag with " .. nGoldToDrop .. " gold.") - if nGoldToDrop > 0 then - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( nGoldToDrop ) - local drop = CreateItemOnPositionSync( hBreakableEnt:GetAbsOrigin(), newItem ) - - local vPos = self:GetBreakableRewardSpawnPos( hBreakableEnt ) - - newItem:LaunchLoot( true, 100, 0.5, vPos ) - EmitSoundOn( "Dungeon.TreasureItemDrop", hBreakableEnt ) - end -end - ---------------------------------------------------------------------------- - -function CAghanim:GetBreakableRewardSpawnPos( hBreakableEnt ) - local vPos = hBreakableEnt:GetAbsOrigin() + RandomVector( hBreakableEnt.nRewardSpawnDist ) - - local nAttempts = 0 - while ( ( not GridNav:CanFindPath( hBreakableEnt:GetOrigin(), vPos ) ) and ( nAttempts < 5 ) ) do - vPos = hBreakableEnt:GetOrigin() + RandomVector( hBreakableEnt.nRewardSpawnDist ) - nAttempts = nAttempts + 1 - - if nAttempts >= 5 then - vPos = hBreakableEnt:GetOrigin() - end - end - - return vPos -end diff --git a/aghanim_singleplayer/scripts/vscripts/containers/breakable_containers_data.lua b/aghanim_singleplayer/scripts/vscripts/containers/breakable_containers_data.lua deleted file mode 100755 index 4564215..0000000 --- a/aghanim_singleplayer/scripts/vscripts/containers/breakable_containers_data.lua +++ /dev/null @@ -1,37 +0,0 @@ - -_G.BreakablesData = -{ - { - fSpawnChance = 0.5, - szSpawnerName = "breakable_crate", - szNPCName = "npc_dota_crate", - nMaxSpawnDistance = 0, - - nMinGold = 160, - nMaxGold = 240, - fGoldChance = 0.0, - - fCommonItemChance = 1.0, - CommonItems = - { - "item_health_potion", - "item_mana_potion", - }, - - fMonsterChance = 0.0, - MonsterUnits = - { - --"npc_dota_creature_rock_golem_a", - }, - - fRareItemChance = 0.0, - RareItems = - { - "item_greater_salve", - "item_greater_clarity", - "item_book_of_strength", - "item_book_of_agility", - "item_book_of_intelligence", - }, - }, -} diff --git a/aghanim_singleplayer/scripts/vscripts/containers/explosive_barrel_data.lua b/aghanim_singleplayer/scripts/vscripts/containers/explosive_barrel_data.lua deleted file mode 100755 index 676c016..0000000 --- a/aghanim_singleplayer/scripts/vscripts/containers/explosive_barrel_data.lua +++ /dev/null @@ -1,10 +0,0 @@ - -_G.ExplosiveBarrelData = -{ - { - fSpawnChance = 0.5, - szSpawnerName = "explosive_barrel", - szNPCName = "npc_dota_explosive_barrel", - nMaxSpawnDistance = 0, - }, -} diff --git a/aghanim_singleplayer/scripts/vscripts/containers/treasure_chest_data.lua b/aghanim_singleplayer/scripts/vscripts/containers/treasure_chest_data.lua deleted file mode 100755 index a7e3945..0000000 --- a/aghanim_singleplayer/scripts/vscripts/containers/treasure_chest_data.lua +++ /dev/null @@ -1,30 +0,0 @@ - -_G.TreasureChestData = -{ - { - fSpawnChance = 1, --0.5, - szSpawnerName = "treasure_chest", - szNPCName = "npc_treasure_chest", - nMaxSpawnDistance = 0, - - fNeutralItemChance = 0.4, - nMinNeutralItems = 1, - nMaxNeutralItems = 2, - - fItemChance = 0.4, - nMinItems = 1, - nMaxItems = 2, - Items = - { - "item_life_rune", - }, - - fTrapChance = 0.0, - nTrapLevel = 1, - szTraps = - { - "creature_techies_land_mine", - "trap_sun_strike", - }, - }, -} diff --git a/aghanim_singleplayer/scripts/vscripts/containers/treasure_chest_surprises.lua b/aghanim_singleplayer/scripts/vscripts/containers/treasure_chest_surprises.lua deleted file mode 100755 index 9ab8cb5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/containers/treasure_chest_surprises.lua +++ /dev/null @@ -1,282 +0,0 @@ - -require( "rewards" ) -require( "reward_tables" ) -require( "map_encounter" ) - -function CAghanim:ChooseTreasureSurprise( hPlayerHero, hTreasureEnt ) - hTreasureEnt.nRewardSpawnDist = 64 - - if hTreasureEnt.RoomReward ~= nil then - self:SpawnRoomReward( hTreasureEnt ) - return - end - - if hTreasureEnt.fNeutralItemChance == nil then - printf( "ERROR -- ChooseTreasureSurprise(): No fNeutralItemChance specified for this chest." ) - end - - if hTreasureEnt.fItemChance == nil then - printf( "ERROR -- ChooseTreasureSurprise(): No fItemChance specified for this chest." ) - end - - if hTreasureEnt.nTrapLevel == nil or hTreasureEnt.nTrapLevel <= 0 then - printf( "ERROR -- ChooseTreasureSurprise(): Field \"nTrapLevel\" is missing or is 0 or less." ) - end - - if hTreasureEnt.fTrapChance == nil then - printf( "ERROR -- ChooseTreasureSurprise(): No fTrapChance specified for this chest." ) - end - - if hTreasureEnt.szTraps == nil or #hTreasureEnt.szTraps == 0 then - printf( "ERROR -- ChooseTreasureSurprise(): Field \"szTraps\" is missing or empty for this chest." ) - end - - --[[ - --These are initialized when the crate unit is spawned in map_encounter - printf( "----------------------------------------" ) - printf( " hTreasureEnt.fItemChance: %.2f", hTreasureEnt.fItemChance ) - printf( " hTreasureEnt.fNeutralItemChance: %.2f", hTreasureEnt.fNeutralItemChance ) - printf( " hTreasureEnt.fTrapChance: %.2f", hTreasureEnt.fTrapChance ) - ]] - - local fNeutralItemThreshold = 1 - hTreasureEnt.fNeutralItemChance - local fItemThreshold = fNeutralItemThreshold - hTreasureEnt.fItemChance - local fTrapThreshold = fItemThreshold - hTreasureEnt.fTrapChance - - local fRandRoll = RandomFloat( 0, 1 ) - - --[[ - printf( "----------------------------------------" ) - printf( "fRandRoll: %.2f", fRandRoll ) - printf( "fItemThreshold: %.2f", fItemThreshold ) - printf( "fNeutralItemThreshold: %.2f", fNeutralItemThreshold ) - printf( "fTrapThreshold: %.2f", fTrapThreshold ) - ]] - - if fRandRoll >= fNeutralItemThreshold then - self:CreateTreasureNeutralItemDrop( hPlayerHero, hTreasureEnt ) - --printf( "fRandRoll (%.2f) >= fNeutralItemThreshold (%.2f)", fRandRoll, fNeutralItemThreshold ) - return - elseif fRandRoll >= fItemThreshold then - self:CreateTreasureItemDrop( hPlayerHero, hTreasureEnt ) - --printf( "fRandRoll (%.2f) >= fItemThreshold (%.2f)", fRandRoll, fItemThreshold ) - return - elseif fRandRoll >= fTrapThreshold then - self:ChooseTreasureTrap( hPlayerHero, hTreasureEnt ) - --printf( "fRandRoll (%.2f) >= fTrapThreshold (%.2f)", fRandRoll, fTrapThreshold ) - return - else - self:CreateTreasureGoldDrop( hPlayerHero, hTreasureEnt ) - --printf( "else drop gold, fRandRoll was %.2f", fRandRoll ) - return - end -end - ---------------------------------------------------------------------------- - -function CAghanim:CreateTreasureNeutralItemDrop( hPlayerHero, hTreasureEnt ) - printf( "CreateTreasureNeutralItemDrop" ) - - local nNeutralItemsToDrop = RandomInt( hTreasureEnt.nMinNeutralItems, hTreasureEnt.nMaxNeutralItems ) - - for i = 1, nNeutralItemsToDrop do - local hCurrentEncounter = self:GetCurrentRoom():GetEncounter() - hCurrentEncounter:DropNeutralItemFromUnit( hTreasureEnt, hPlayerHero, true ) - end -end - ---------------------------------------------------------------------------- - -function CAghanim:CreateTreasureItemDrop( hPlayerHero, hTreasureEnt ) - printf( "CreateTreasureItemDrop" ) - if hTreasureEnt ~= nil and hTreasureEnt.Items ~= nil then - local nItemsToDrop = RandomInt( hTreasureEnt.nMinItems, hTreasureEnt.nMaxItems ) - - for i = 1, nItemsToDrop do - local nRandomIndex = RandomInt( 1, #hTreasureEnt.Items ) - local newItem = CreateItem( hTreasureEnt.Items[ nRandomIndex ], nil, nil ) - local drop = CreateItemOnPositionForLaunch( hTreasureEnt:GetAbsOrigin(), newItem ) - - local vPos = self:GetChestRewardSpawnPos( hTreasureEnt ) - - newItem:LaunchLootInitialHeight( false, 0, 200, 0.75, vPos ) - - EmitSoundOn( "Dungeon.TreasureItemDrop", hTreasureEnt ) - - local gameEvent = {} - gameEvent["player_id"] = hPlayerHero:GetPlayerID() - gameEvent["team_number"] = DOTA_TEAM_GOODGUYS - gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_" .. newItem:GetAbilityName() - gameEvent["message"] = "#Dungeon_FoundChestItem" - FireGameEvent( "dota_combat_event_message", gameEvent ) - end - end -end - ---------------------------------------------------------------------------- - -function CAghanim:ChooseTreasureTrap( hPlayerHero, hTreasureEnt ) - printf( "ChooseTreasureTrap" ) - local szTrapToUse = hTreasureEnt.szTraps[ RandomInt( 1, #hTreasureEnt.szTraps ) ] - --printf( "szTrapToUse == \"%s\"", szTrapToUse ) - - if szTrapToUse == "creature_techies_land_mine" then - self:CreateTreasureMineTrap( hPlayerHero, hTreasureEnt ) - elseif szTrapToUse == "trap_sun_strike" then - self:CreateTreasureSunStrikeTrap( hPlayerHero, hTreasureEnt ) - end -end - ---------------------------------------------------------------------------- - -function CAghanim:CreateTreasureMineTrap( hPlayerHero, hTreasureEnt ) - printf( "CreateTreasureMineTrap()" ) - local szAbilityName = "creature_techies_land_mine" - local hLandMineAbility = hTreasureEnt:FindAbilityByName( szAbilityName ) - if hLandMineAbility == nil then - printf( "ERROR -- CreateTreasureMineTrap: \"%s\" is missing required ability \"%s\"", hTreasureEnt:GetUnitName(), szAbilityName ) - return - end - hLandMineAbility:SetLevel( hTreasureEnt.nTrapLevel ) - - local vMinePos = hTreasureEnt:GetAbsOrigin() - local hMine = CreateUnitByName( "npc_dota_creature_techies_land_mine", vMinePos, true, hTreasureEnt, hTreasureEnt, DOTA_TEAM_BADGUYS ) - if hMine ~= nil then - hMine:AddNewModifier( hTreasureEnt, hLandMineAbility, "modifier_creature_techies_land_mine", { fadetime = 0 } ) - hMine:SetTeam( DOTA_TEAM_BADGUYS ) - local vAngles = hMine:GetAnglesAsVector() - hMine:SetAngles( vAngles.x, 0, vAngles.z ) - EmitSoundOnLocationWithCaster( hMine:GetOrigin(), "TreasureChest.MineTrap.Plant", hMine ) - - local gameEvent = {} - gameEvent["player_id"] = hPlayerHero:GetPlayerID() - gameEvent["team_number"] = DOTA_TEAM_GOODGUYS - gameEvent["locstring_value"] = "npc_dota_creature_techies_land_mine" - gameEvent["message"] = "#Dungeon_FoundChestTrap" - FireGameEvent( "dota_combat_event_message", gameEvent ) - end -end - ---------------------------------------------------------------------------- - -function CAghanim:CreateTreasureSunStrikeTrap( hPlayerHero, hTreasureEnt ) - printf( "CreateTreasureSunStrikeTrap()" ) - local szAbilityName = "trap_sun_strike" - local hSunStrikeAbility = hTreasureEnt:FindAbilityByName( szAbilityName ) - if hSunStrikeAbility == nil then - printf( "ERROR -- CreateTreasureSunStrikeTrap: \"%s\" is missing required ability \"%s\"", hTreasureEnt:GetUnitName(), szAbilityName ) - return - end - hSunStrikeAbility:SetLevel( hTreasureEnt.nTrapLevel ) - - hTreasureEnt:SetTeam( DOTA_TEAM_BADGUYS ) - - local hEnemies = FindUnitsInRadius( hTreasureEnt:GetTeamNumber(), hTreasureEnt:GetOrigin(), hTreasureEnt, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, 0, false ) - for _, hEnemy in pairs( hEnemies ) do - if hEnemy ~= nil and hEnemy:IsRealHero() then - local kv = - { - duration = hSunStrikeAbility:GetSpecialValueFor( "delay" ), - area_of_effect = hSunStrikeAbility:GetSpecialValueFor( "area_of_effect" ), - vision_distance = hSunStrikeAbility:GetSpecialValueFor( "vision_distance" ), - vision_duration = hSunStrikeAbility:GetSpecialValueFor( "vision_duration" ), - damage = hSunStrikeAbility:GetSpecialValueFor( "damage" ), - } - - local vTarget = hEnemy:GetOrigin() -- + hEnemy:GetForwardVector() * 100 - - CreateModifierThinker( hTreasureEnt, hSunStrikeAbility, "modifier_invoker_sun_strike", kv, vTarget, hTreasureEnt:GetTeamNumber(), false ) - - EmitSoundOnLocationForAllies( vTarget, "Creature.Flamestrike.Charge", hEnemy ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_invoker/invoker_sun_strike_team.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, vTarget ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 50, 1, 1 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - - local gameEvent = {} - gameEvent["player_id"] = hPlayerHero:GetPlayerID() - gameEvent["team_number"] = DOTA_TEAM_GOODGUYS - gameEvent["locstring_value"] = "trap_sun_strike" - gameEvent["message"] = "#Dungeon_FoundChestTrap" - FireGameEvent( "dota_combat_event_message", gameEvent ) -end - ---------------------------------------------------------------------------- - -function CAghanim:CreateTreasureGoldDrop( hPlayerHero, hTreasureEnt ) - printf( "CreateTreasureGoldDrop" ) - - local nDepth = self:GetCurrentRoom():GetDepth() - local nMinGold, nMaxGold = GetMinMaxGoldChoiceReward( nDepth, true ) - - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - newItem:SetPurchaseTime( 0 ) - local nGoldToDrop = math.random( nMinGold, nMaxGold ) - newItem:SetCurrentCharges( nGoldToDrop ) - - local drop = CreateItemOnPositionSync( hTreasureEnt:GetAbsOrigin(), newItem ) - - local vPos = self:GetChestRewardSpawnPos( hTreasureEnt ) - - newItem:LaunchLoot( true, 200, 0.75, vPos ) - EmitSoundOn( "Dungeon.TreasureItemDrop", hTreasureEnt ) - - local gameEvent = {} - gameEvent["player_id"] = hPlayerHero:GetPlayerID() - gameEvent["team_number"] = DOTA_TEAM_GOODGUYS - gameEvent["int_value"] = nGoldToDrop - gameEvent["message"] = "#Dungeon_FoundChestGold" - FireGameEvent( "dota_combat_event_message", gameEvent ) -end - ---------------------------------------------------------------------------- - -function CAghanim:GetChestRewardSpawnPos( hTreasureEnt ) - local vPos = hTreasureEnt:GetAbsOrigin() + RandomVector( hTreasureEnt.nRewardSpawnDist ) - - local nAttempts = 0 - while ( ( not GridNav:CanFindPath( hTreasureEnt:GetOrigin(), vPos ) ) and ( nAttempts < 5 ) ) do - vPos = hTreasureEnt:GetOrigin() + RandomVector( hTreasureEnt.nRewardSpawnDist ) - nAttempts = nAttempts + 1 - - if nAttempts >= 5 then - vPos = hTreasureEnt:GetOrigin() - end - end - - return vPos -end - ---------------------------------------------------------------------------- - - -function CAghanim:SpawnRoomReward( hTreasureEnt ) - if hTreasureEnt.Encounter == nil then - return - end - - hTreasureEnt.nRewardSpawnDist = 200 - - local nMinGold, nMaxGold = GetMinMaxGoldChoiceReward( hTreasureEnt.nDepth, hTreasureEnt.nEliteRank > 0 ) - for _, szReward in pairs( hTreasureEnt.RoomReward ) do - if szReward == "item_life_rune" then - hTreasureEnt.Encounter:DropLifeRuneFromUnit( hTreasureEnt, hTreasureEnt, false ) - elseif szReward == "item_bag_of_gold" then - local newItem = CreateItem( szReward, nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( math.random( nMinGold, nMaxGold ) ) - local drop = CreateItemOnPositionSync( hTreasureEnt:GetAbsOrigin(), newItem ) - local vPos = self:GetBreakableRewardSpawnPos( hTreasureEnt ) - newItem:LaunchLoot( true, 300, 0.5, vPos ) - else - hTreasureEnt.Encounter:DropItemFromRoomRewardContainer( hTreasureEnt, szReward, false ) - end - - EmitSoundOn( "Dungeon.TreasureItemDrop", hTreasureEnt ) - end -end - ---------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_aghanim.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_aghanim.lua deleted file mode 100755 index 5add080..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_aghanim.lua +++ /dev/null @@ -1,378 +0,0 @@ -require( "encounters/encounter_boss_base" ) -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - - --------------------------------------------------------------------------------- - -if CMapEncounter_Aghanim == nil then - CMapEncounter_Aghanim = class( {}, {}, CMapEncounter_BossBase ) -end - --------------------------------------------------------------------------------- - - -function CMapEncounter_Aghanim:Precache( context ) - CMapEncounter_BossBase.Precache( self, context ) - PrecacheUnitByNameSync( "npc_dota_boss_aghanim", context, -1 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:constructor( hRoom, szEncounterName ) - - CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName ) - - -- Agh Victory phase - self.AGH_VICTORY_NOT_STARTED = 0 - self.AGH_VICTORY_BESTED = 1 - self.AGH_VICTORY_VICTORY_SPEECH = 2 - self.AGH_VICTORY_BOWING = 3 - self.AGH_VICTORY_FINISHED = 4 - - self.nVictoryState = self.AGH_VICTORY_NOT_STARTED - self.szBossSpawner = "spawner_boss" - - self:AddSpawner( CDotaSpawner( self.szBossSpawner, self.szBossSpawner, - { - { - EntityName = "npc_dota_boss_aghanim", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:Start() - CMapEncounter_BossBase.Start( self ) - - self.nHeroOnTrigger1 = 0 - self.nHeroOnTrigger2 = 0 - self.nHeroOnTrigger3 = 0 - self.nHeroOnTrigger4 = 0 - self.nPlayersReady = 0 - ListenToGameEvent( "trigger_start_touch", Dynamic_Wrap( getclass( self ), "OnTriggerStartTouch" ), self ) - ListenToGameEvent( "trigger_end_touch", Dynamic_Wrap( getclass( self ), "OnTriggerEndTouch" ), self ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:OnTriggerStartTouch( event ) - if self.bAllButtonsReady == true then - return - end - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - -- Assign an integer to the trigger - if szTriggerName == "trigger_player_1" then - self.nHeroOnTrigger1 = 1 - elseif szTriggerName == "trigger_player_2" then - self.nHeroOnTrigger2 = 1 - elseif szTriggerName == "trigger_player_3" then - self.nHeroOnTrigger3 = 1 - elseif szTriggerName == "trigger_player_4" then - self.nHeroOnTrigger4 = 1 - end - local hHeroes = HeroList:GetAllHeroes() - local nTotalHeroes = #hHeroes - self.nPlayersReady = self.nHeroOnTrigger1 + self.nHeroOnTrigger2 + self.nHeroOnTrigger3 + self.nHeroOnTrigger4 - if self.nPlayersReady == nTotalHeroes then - - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "aghanim_gate_open_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - self.bAllButtonsReady = true - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:OnTriggerEndTouch( event ) - if self.bAllButtonsReady == true then - return - end - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - if szTriggerName == "trigger_player_1" then - self.nHeroOnTrigger1 = 0 - elseif szTriggerName == "trigger_player_2" then - self.nHeroOnTrigger2 = 0 - elseif szTriggerName == "trigger_player_3" then - self.nHeroOnTrigger3 = 0 - elseif szTriggerName == "trigger_player_4" then - self.nHeroOnTrigger4 = 0 - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:OnBossSpawned( hBoss ) - CMapEncounter_BossBase.OnBossSpawned( self, hBoss ) - - hBoss.AI:SetEncounter( self ) - self.hAghanim = hBoss - self.hAghanim.bOutroComplete = false -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:OnThink() - CMapEncounter_BossBase.OnThink( self ) - - if self.nVictoryState > self.AGH_VICTORY_NOT_STARTED then - self:OnThinkVictorySequence() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:IntroduceBoss( hEncounteredBoss ) - CMapEncounter_BossBase.IntroduceBoss( self, hEncounteredBoss ) - - -- local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "aghanim_gate_close_relay", false ) - -- for _, hRelay in pairs( hRelays ) do - -- hRelay:Trigger( nil, nil ) - -- end - - local hTriggers = self:GetRoom():FindAllEntitiesInRoomByName( "aghanim_boss_room_bounds", false ) - local hTeleportPositions = self:GetRoom():FindAllEntitiesInRoomByName( "teleport_players", false ) - if #hTriggers > 0 and #hTeleportPositions > 0 then - local hTrigger = hTriggers[1] - local hTeleportPosition = hTeleportPositions[1] - if hTrigger ~= nil and hTeleportPosition ~= nil then - - local vMins = hTrigger:GetBoundingMins() - local vMaxs = hTrigger:GetBoundingMaxs() - vMins = hTrigger:TransformPointEntityToWorld( vMins ) - vMaxs = hTrigger:TransformPointEntityToWorld( vMaxs ) - - local flSize = vMaxs.x - vMins.x - local flSizeY = vMaxs.y - vMins.y - if flSizeY > flSize then - flSize = flSizeY - end - - local netTable = {} - netTable[ "room_name" ] = self:GetRoom():GetName() - netTable[ "map_name" ] = "aghanim_arena_boss_room" - netTable[ "x" ] = hTrigger:GetAbsOrigin().x - netTable[ "y" ] = hTrigger:GetAbsOrigin().y - netTable[ "size" ] = flSize - netTable[ "scale" ] = 8 - - for nPlayerID = 0, AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - if not hTrigger:IsTouching( hPlayerHero ) then - FindClearSpaceForUnit( hPlayerHero, hTeleportPosition:GetAbsOrigin() + RandomVector( 250 ), true ) - end - - local kv = - { - min_x = vMins.x, - min_y = vMins.y, - max_x = vMaxs.x, - max_y = vMaxs.y, - } - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_morty_leash", kv ) - - CustomNetTables:SetTableValue( "game_global", "minimap_info" .. nPlayerID, netTable ) - end - end - end - - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:OnComplete() - CMapEncounter.OnComplete( self ) - GameRules.Aghanim:MarkGameWon() -end - ---------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:BossSpeak( szSoundEvent, bLaugh ) - - -- Use response rules to talk - return - -end - ---------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:AghanimSpeak( flDelay, bForce, hCriteriaTable ) - - -- Don't speak after we started our victory sequence - - if self.nVictoryState > self.AGH_VICTORY_VICTORY_SPEECH then - return false - end - - -- We're juking the announcer to speak through our own unit - -- So we can share in the "is speaking" logic as well as the global criteria - -- And also other game code that triggers announcer lines - return GameRules.Aghanim:GetAnnouncer():Speak( flDelay, bForce, hCriteriaTable ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:CheckForCompletion() - return self.nVictoryState == self.AGH_VICTORY_FINISHED -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:BeginVictorySequence() - - -- A brutal hack. We need to know how long the victory speech is to know when to stop - -- but the only way to achieve that is to make this line server-authoritative - GameRules.Aghanim:GetAnnouncer():SetServerAuthoritative( true ) - - self:AghanimSpeak( 0.0, true, - { - announce_event = "bested", - }) - - self.nVictoryState = self.AGH_VICTORY_BESTED - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:OnThinkVictorySequence() - -- Wait until he finishes his line - if GameRules.Aghanim:GetAnnouncer():IsCurrentlySpeaking() == false then - if self.nVictoryState == self.AGH_VICTORY_BESTED then - self:AghanimSpeak( 0.0, true, - { - announce_event = "victory_speech", - }) - - GameRules.Aghanim:GetAnnouncer():OverrideSpeakingUnit( nil ) - self.nVictoryState = self.AGH_VICTORY_VICTORY_SPEECH - elseif self.nVictoryState == self.AGH_VICTORY_VICTORY_SPEECH then - self.nVictoryState = self.AGH_VICTORY_BOWING - elseif self.nVictoryState == self.AGH_VICTORY_BOWING and self.hAghanim.bOutroComplete == true then - self.nVictoryState = self.AGH_VICTORY_FINISHED - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetPreviewUnit() - return "npc_dota_boss_aghanim" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetBossIntroVoiceLine() - - -- Sort of a hack. Starting with the intro voice, we are going to - -- juke the announcer to play lines through us. BossSpeak() is commented - -- out so it does nothing - - -- While the boss is spawned, don't do any announcer lines - GameRules.Aghanim:GetAnnouncer():OverrideSpeakingUnit( self.hAghanim ) - - self:AghanimSpeak( 0.0, true, - { - announce_event = "boss_intro", - }) - - return nil -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetBossIntroGesture() - return ACT_DOTA_SPAWN -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetBossIntroDuration() - return 5.0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetBossIntroCameraPitch() - return 40 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetBossIntroCameraDistance() - return 800 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetBossIntroCameraHeight() - return 225 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetLaughLine() - - -- No laughing after we started our end sequence - if self.nVictoryState > self.AGH_VICTORY_NOT_STARTED then - return "" - end - - local bDidSpeak = self:AghanimSpeak( 0.0, false, - { - announce_event = "laugh", - }) - - -- Just the laugh system into not trying to laugh again for a while - if bDidSpeak == true then - return "" - end - - return nil - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Aghanim:GetAbilityUseLine( szAbilityName ) - - local bForce = false - if ( szAbilityName == "aghanim_staff_beams" ) or ( szAbilityName == "aghanim_blink" ) or ( szAbilityName == "aghanim_shard_attack" ) - or ( szAbilityName == "aghanim_summon_portals" ) or ( szAbilityName == "aghanim_spell_swap" ) then - bForce = true - end - - self:AghanimSpeak( 0.0, bForce, - { - announce_event = "ability_use", - ability_name = szAbilityName, - }) - - return nil - -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_Aghanim diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_alchemist.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_alchemist.lua deleted file mode 100755 index fee2e51..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_alchemist.lua +++ /dev/null @@ -1,92 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Alchemist == nil then - CMapEncounter_Alchemist = class( {}, {}, CMapEncounter ) -end - -function CMapEncounter_Alchemist:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - -- Dynamic Spawns - self.vWaveSchedule = - { - { - Time = 5, - Count = 1, - }, - { - Time = 35, - Count = 1, - }, - } - - --DeepPrintTable( self.vWaveSchedule ) - - self.szDynamicPortal = "dynamic_portal" - local bInvulnerable = true - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szDynamicPortal, self.szDynamicPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_alchemist", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szDynamicPortal, self.vWaveSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Alchemist:GetPreviewUnit() - return "npc_dota_creature_alchemist" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Alchemist:InitializeObjectives() - self:AddEncounterObjective( "defeat_the_alchemists", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Alchemist:Start() - CMapEncounter.Start( self ) - - self:StartSpawnerSchedule( self.szDynamicPortal, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Alchemist:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - if hVictim and hVictim:GetUnitName() == "npc_dota_creature_alchemist" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_the_alchemists" ) - self:UpdateEncounterObjective( "defeat_the_alchemists", nCurrentValue + 1, nil ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Alchemist:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - self:SetInitialGoalEntityToNearestHero( hSpawnedUnit ) - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Alchemist diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_baby_ogres.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_baby_ogres.lua deleted file mode 100755 index defadb9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_baby_ogres.lua +++ /dev/null @@ -1,182 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_BabyOgres == nil then - CMapEncounter_BabyOgres = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BabyOgres:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - - self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_baby_ogre_magi", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 150.0, - }, - } - )) - - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_dota_creature_baby_ogre_tank", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - )) - - self.vWaveSchedule = - { - { - Time = 5, - Count = 2, - }, - { - Time = 30, - Count = 3, - }, - { - Time = 55, - Count = 3, - }, - { - Time = 80, - Count = 4, - }, - } - - local bInvulnerable = true - - self.szDynamicPortal = "dynamic_portal" - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szDynamicPortal, self.szDynamicPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_baby_ogre_magi", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_creature_baby_ogre_tank", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szDynamicPortal, self.vWaveSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BabyOgres:GetPreviewUnit() - return "npc_dota_creature_baby_ogre_tank" -end - --------------------------------------------------------------------------------- - ---[[ -function CMapEncounter_BabyOgres:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vWaveSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -- doesn't capture pre-placed spawns? -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BabyOgres:GetMaxSpawnedUnitCount() - local nCount = 0 - - local hPeonSpawners = self:GetSpawner( self.szPeonSpawner ) - if hPeonSpawners then - nCount = nCount + hPeonSpawners:GetSpawnPositionCount() - end - - local hCaptainSpawners = self:GetSpawner( self.szCaptainSpawner ) - if hCaptainSpawners then - nCount = nCount + hCaptainSpawners:GetSpawnPositionCount() - end - - return nCount -end -]] - --------------------------------------------------------------------------------- - -function CMapEncounter_BabyOgres:Start() - CMapEncounter.Start( self ) - - for _, hSpawner in pairs( self:GetSpawners() ) do - hSpawner:SpawnUnits() - end - - self:StartSpawnerSchedule( self.szDynamicPortal, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BabyOgres:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - --[[ - if hSpawner.szSpawnerName == self.szDynamicPortal then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - ]] - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - print( "CMapEncounter_BabyOgres:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - else - print( "CMapEncounter_BabyOgres:OnSpawnerFinished: WARNING: Can't find a living hero" ) - end - end - end -end - --------------------------------------------------------------------------------- - ---[[ -function CMapEncounter_BabyOgres:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end -]] - --------------------------------------------------------------------------------- - -return CMapEncounter_BabyOgres diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bandits.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bandits.lua deleted file mode 100755 index f771024..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bandits.lua +++ /dev/null @@ -1,303 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Bandits == nil then - CMapEncounter_Bandits = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_stifling_dagger_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_riki/riki_blink_strike.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- Pre-placed creatures (done this way to use a specific subset of existing map spawners) - self.vPreplacedSchedule = - { - { - Time = 0, - Count = 2, - }, - } - - self.szPreplacedSpawner = "spawner_preplaced" - - self:AddSpawner( CDotaSpawner( self.szPreplacedSpawner, self.szPreplacedSpawner, - { - { - EntityName = "npc_dota_creature_bandit", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_creature_bandit_archer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - -- Players have to kill the pre-placed creatures to trigger the dynamic portals - self:SetPortalTriggerSpawner( self.szPreplacedSpawner, 0.8 ) - self:SetSpawnerSchedule( self.szPreplacedSpawner, self.vPreplacedSchedule ) - - -- Additional creatures - self.szGroupSpawner = "spawner_group" - - self.vExtraCreaturesSchedule = - { - { - Time = 0, - Count = 1, - }, - } - - self:AddSpawner( CDotaSpawner( self.szGroupSpawner, self.szGroupSpawner, - { - { - EntityName = "npc_dota_creature_bandit_archer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - self:SetSpawnerSchedule( self.szGroupSpawner, self.vExtraCreaturesSchedule ) - - -- Wave 1 - local nNumPortals = 3 - local flInitialPortalSpawnDelay = 0.0 - local flInitialSummonTime = 6.0 - local flPortalIntervalInput = 60.0 - local flScaleInput = 1.0 - - local nNameCounter = 1 - local szLocatorName = "dynamic_portal" - self.nTotalPortals = nNumPortals - - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, 80 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_creature_bandit", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 250.0, - }, - { - EntityName = "npc_dota_creature_bandit_archer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - )) - end - - -- Wave 2A - nNumPortals = 3 - flInitialPortalSpawnDelay = 24.0 - flInitialSummonTime = 6.0 - flScaleInput = 1.0 - - self.nTotalPortals = self.nTotalPortals + nNumPortals - - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, 80 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_creature_bandit", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 250.0, - }, - { - EntityName = "npc_dota_creature_bandit_archer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - )) - end - - -- Wave 2B - nNumPortals = 1 - flInitialPortalSpawnDelay = 24.0 - flInitialSummonTime = 6.0 - flScaleInput = 1.3 - - self.nTotalPortals = self.nTotalPortals + nNumPortals - - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, 120 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_creature_bandit_captain", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - )) - end - - -- Wave 3A - nNumPortals = 2 - flInitialPortalSpawnDelay = 48.0 - flInitialSummonTime = 6.0 - flScaleInput = 1.0 - - self.nTotalPortals = self.nTotalPortals + nNumPortals - - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, 80 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_creature_bandit", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 250.0, - }, - { - EntityName = "npc_dota_creature_bandit_archer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - )) - end - - -- Wave 3B - nNumPortals = 2 - flInitialPortalSpawnDelay = 48.0 - flInitialSummonTime = 6.0 - flScaleInput = 1.3 - - self.nTotalPortals = self.nTotalPortals + nNumPortals - - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, 120 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_creature_bandit_archer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_creature_bandit_captain", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - )) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:GetPreviewUnit() - return "npc_dota_creature_bandit_captain" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "destroy_spawning_portals", 0, self.nTotalPortals ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:GetMaxSpawnedUnitCount() - local nCount = 0 - local hPeonSpawners = self:GetSpawner( self.szPreplacedSpawner ) - if hPeonSpawners then - nCount = nCount + hPeonSpawners:GetSpawnPositionCount() * 3 - end - - for _,hPortalSpawner in pairs ( self.PortalSpawners ) do - for _,rgUnitInfo in pairs ( hPortalSpawner.rgUnitsInfo ) do - nCount = nCount + rgUnitInfo.Count - end - end - - print( 'CMapEncounter_Bandits:GetMaxSpawnedUnitCount() calculated ' .. nCount .. ' units' ) - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:Start() - CMapEncounter.Start( self ) - - self:StartSpawnerSchedule( self.szPreplacedSpawner, 0 ) - self:StartSpawnerSchedule( self.szGroupSpawner, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bandits:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Bandits:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - else - print( "CMapEncounter_Bandits:OnSpawnerFinished: WARNING: Can't find a living hero" ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Bandits diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_big_ogres.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_big_ogres.lua deleted file mode 100755 index cedc70f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_big_ogres.lua +++ /dev/null @@ -1,119 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_BigOgres == nil then - CMapEncounter_BigOgres = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BigOgres:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - - self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_ogre_seer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 150.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_dota_creature_ogre_tank_boss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self.vMagiSchedule = - { - { - Time = 10, - Count = 1, - }, - { - Time = 25, - Count = 2, - }, - { - Time = 40, - Count = 3, - }, - } - - local bInvulnerable = true - - self.szDynamicPortal = "dynamic_portal" - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szDynamicPortal, self.szDynamicPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_ogre_seer", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szDynamicPortal, self.vMagiSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BigOgres:GetPreviewUnit() - return "npc_dota_creature_ogre_tank" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BigOgres:Start() - CMapEncounter.Start( self ) - - for _, hSpawner in pairs( self:GetSpawners() ) do - hSpawner:SpawnUnits() - end - - self:StartSpawnerSchedule( self.szDynamicPortal, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BigOgres:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_BigOgres:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_BigOgres diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bomb_squad.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bomb_squad.lua deleted file mode 100755 index 16837ed..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bomb_squad.lua +++ /dev/null @@ -1,137 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Bomb_Squad == nil then - CMapEncounter_Bomb_Squad = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - - -function CMapEncounter_Bomb_Squad:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.vPudgeSchedule = - { - { - Time = 0, - Count = 2, - }, - { - Time = 40, - Count = 3, - }, - { - Time = 80, - Count = 4, - }, - } - - self.vBombSquadSchedule = - { - { - Time = 0, - Count = 1, - }, - { - Time = 40, - Count = 2, - }, - { - Time = 80, - Count = 2, - }, - - } - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - local bInvulnerable = true - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szPeonSpawner, self.szPeonSpawner, 60 * hRoom:GetDepth(), 5, 1.0, - { - { - EntityName = "npc_aghsfort_creature_walrus_pudge", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szCaptainSpawner, self.szCaptainSpawner, 60 * hRoom:GetDepth(), 5, 1.0, - { - { - EntityName = "npc_aghsfort_creature_bomb_squad", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szPeonSpawner, self.vPudgeSchedule ) - self:SetSpawnerSchedule( self.szCaptainSpawner, self.vBombSquadSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bomb_Squad:GetPreviewUnit() - return "npc_aghsfort_creature_bomb_squad" -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Bomb_Squad:Start() - CMapEncounter.Start( self ) - - for _, hSpawner in pairs( self:GetSpawners() ) do - hSpawner:SpawnUnits() - end - - self:StartSpawnerSchedule( self.szPeonSpawner, 0 ) - self:StartSpawnerSchedule( self.szCaptainSpawner, 0 ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Bomb_Squad:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vPudgeSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bomb_Squad:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner.szSpawnerName == "spawner_peon" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end -end --------------------------------------------------------------------------------- - -function CMapEncounter_Bomb_Squad:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_aghsfort_creature_bomb_squad_landmine" then - return false - end - if hEnemyCreature:GetUnitName() == "npc_aghsfort_creature_bomb_squad_stasis_trap" then - return false - end - return true -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Bomb_Squad diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bombers.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bombers.lua deleted file mode 100755 index 7562edd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bombers.lua +++ /dev/null @@ -1,228 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Bombers == nil then - CMapEncounter_Bombers = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - local bInvulnerable = true - local nWaves = 8 - local flFirstWaveSpawnDelay = 0.0 - local flTimeBetweenWaves = 9.0 - - self.vWave1Schedule = - { - { - Time = 0, - Count = 1, - }, - { - Time = 30, - Count = 1, - }, - { - Time = 60, - Count = 1, - }, - } - - self.vWave2Schedule = - { - { - Time = 20, - Count = 1, - }, - { - Time = 40, - Count = 1, - }, - { - Time = 60, - Count = 1, - }, - } - - self.vWave3Schedule = - { - { - Time = 10, - Count = 2, - }, - { - Time = 50, - Count = 2, - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "wave_1", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_bomber", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 300.0, - }, - { - EntityName = "npc_dota_creature_gyrocopter", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "wave_2", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_bomber", - Team = DOTA_TEAM_BADGUYS, - Count = 5, - PositionNoise = 300.0, - }, - { - EntityName = "npc_dota_creature_gyrocopter", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "wave_3", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_bomber", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 300.0, - }, - { - EntityName = "npc_dota_creature_gyrocopter", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:SetSpawnerSchedule( "wave_1", self.vWave1Schedule ) - self:SetSpawnerSchedule( "wave_2", self.vWave2Schedule ) - self:SetSpawnerSchedule( "wave_3", self.vWave3Schedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_gyrocopter", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_rattletrap", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_gyrocopter.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_rattletrap.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:GetPreviewUnit() - return "npc_dota_creature_bomber" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) - - self.szObjectiveEnts = "objective" - self.hObjectiveEnts = self:GetRoom():FindAllEntitiesInRoomByName( self.szObjectiveEnts, true ) - - if #self.hObjectiveEnts == 0 then - printf( "WARNING - self.hObjectiveEnt is nil (looked for classname \"%s\")", self.szObjectiveEnts ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:Start() - CMapEncounter.Start( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vWave1Schedule + #self.vWave2Schedule + #self.vWave3Schedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner.szLocatorName == "spawner_peon" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - --print( heroes ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - elseif #self.hObjectiveEnts > 0 then - print( "Can't find a hero to attack - setting a goal position to Objective Entity" ) - hSpawnedUnit:SetInitialGoalPosition( self.hObjectiveEnts[1]:GetOrigin() ) - end - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Bombers:OnTriggerStartTouch( event ) - CMapEncounter.OnTriggerStartTouch( self, event ) - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - - printf( "szTriggerName: %s, hUnit:GetUnitName(): %s, hTriggerEntity:GetName(): %s", szTriggerName, hUnit:GetUnitName(), hTriggerEntity:GetName() ) - - if self.bCreatureSpawnsActivated == nil and szTriggerName == "trigger_spawn_creatures" then - self.bCreatureSpawnsActivated = true - - self:StartAllSpawnerSchedules( 0 ) - - printf( "Unit \"%s\" triggered creature spawning!", hUnit:GetUnitName() ) - EmitGlobalSound( "RoundStart" ) - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Bombers diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bonus_base.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bonus_base.lua deleted file mode 100755 index d2a9c1b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bonus_base.lua +++ /dev/null @@ -1,133 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_BonusBase == nil then - CMapEncounter_BonusBase = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.bGameStarted = false - self.PlayerGoldCollected = {} - self.flEndTime = 9999999999999 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:Precache( context ) - CMapEncounter.Precache( self, context ) -end --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:GetMaxSpawnedUnitCount() - return 0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:Start() - CMapEncounter.Start( self ) - - self.nItemPickedUpListener = ListenToGameEvent( "dota_item_picked_up", Dynamic_Wrap( getclass( self ), "OnItemPickedUp" ), self ) - self.nGoldReward = 0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:StartBonusRound( flTimeLimit ) - EmitGlobalSound( "RoundStart" ) - - self.bGameStarted = true - self.flEndTime = GameRules:GetGameTime() + flTimeLimit - - for nPlayerID=0,AGHANIM_PLAYERS-1 do - self.PlayerGoldCollected[ nPlayerID ] = {} - self.PlayerGoldCollected[ nPlayerID ][ "bags" ] = 0 - self.PlayerGoldCollected[ nPlayerID ][ "gold" ] = 0 - end - - local BonusStartData = {} - BonusStartData[ "end_time" ] = self.flEndTime - CustomNetTables:SetTableValue( "encounter_state", "bonus", self.PlayerGoldCollected ) - CustomGameEventManager:Send_ServerToAllClients( "bonus_start", BonusStartData ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:OnComplete() - CMapEncounter.OnComplete( self ) - - StopListeningToGameEvent( self.nItemPickedUpListener ) - - for nPlayerID=0,AGHANIM_PLAYERS-1 do - CenterCameraOnUnit( nPlayerID, PlayerResource:GetSelectedHeroEntity( nPlayerID ) ) - end - - CustomGameEventManager:Send_ServerToAllClients( "bonus_complete", self.PlayerGoldCollected ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusBase:CheckForCompletion() - return GameRules:GetGameTime() > self.flEndTime -end - ---------------------------------------------------------- --- dota_item_picked_up --- * PlayerID --- * HeroEntityIndex --- * UnitEntityIndex (only if parent is not a hero) --- * itemname --- * ItemEntityIndex ---------------------------------------------------------- - -function CMapEncounter_BonusBase:OnItemPickedUp( event ) - local item = EntIndexToHScript( event.ItemEntityIndex ) - local hCollector = nil - - if event.HeroEntityIndex then - hCollector = EntIndexToHScript( event.HeroEntityIndex ) - elseif event.UnitEntityIndex then - hCollector = EntIndexToHScript( event.UnitEntityIndex ) - end - - if hCollector and item and item:GetAbilityName() == "item_bag_of_gold" then - --printf( "hCollector name: %s", hCollector:GetUnitName() ) - --printf( "hCollector player id: %d", hCollector:GetPlayerID() ) - --printf( "self.PlayerGoldCollected table: " ) - --PrintTable( self.PlayerGoldCollected, " -- " ) - - if not self.PlayerGoldCollected or #self.PlayerGoldCollected <= 0 then - printf( "WARNING - self.PlayerGoldCollected is nil or empty" ) - return - end - - --printf( "encounter name: %s", self:GetEncounter():GetName() ) - self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "bags" ] = self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "bags" ] + 1 - self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "gold" ] = self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "gold" ] + item:GetCurrentCharges() - - CustomNetTables:SetTableValue( "encounter_state", "bonus", self.PlayerGoldCollected ) - end -end - ------------------------------------------ - -return CMapEncounter_BonusBase diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bonus_chicken.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bonus_chicken.lua deleted file mode 100755 index d3dbf40..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_bonus_chicken.lua +++ /dev/null @@ -1,74 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_bonus_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_BonusChicken == nil then - CMapEncounter_BonusChicken = class( {}, {}, CMapEncounter_BonusBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusChicken:constructor( hRoom, szEncounterName ) - CMapEncounter_BonusBase.constructor( self, hRoom, szEncounterName ) - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_bonus_chicken", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 200.0, - }, - } ) ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusChicken:GetPreviewUnit() - return "npc_dota_creature_bonus_chicken" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusChicken:OnEncounterLoaded() - CMapEncounter_BonusBase.OnEncounterLoaded( self ) - self:SetupBristlebackShop( false ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusChicken:OnTriggerStartTouch( event ) - CMapEncounter_BonusBase.OnTriggerStartTouch( self, event ) - - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - - if self.bGameStarted == false and szTriggerName == "trigger_spawn_creatures" then - self:GetSpawner( "spawner_peon" ):SpawnUnits() - self:StartBonusRound( 45.0 ) - - EmitGlobalSound( "BonusRoom.ChaseMusicLoop" ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusChicken:CheckForCompletion() - return self.bGameStarted == true and not self:HasRemainingEnemies() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BonusChicken:OnComplete() - CMapEncounter_BonusBase.OnComplete( self ) - - StopGlobalSound( "BonusRoom.ChaseMusicLoop" ) -end - --------------------------------------------------------------------------------- - -return CMapEncounter_BonusChicken diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_base.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_base.lua deleted file mode 100755 index dec0063..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_base.lua +++ /dev/null @@ -1,456 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - -_G.BOSS_SPEECH_COOLDOWN = 7.0 -_G.BOSS_LAUGH_COOLDOWN = 20.0 - --------------------------------------------------------------------------------- - -if CMapEncounter_BossBase == nil then - CMapEncounter_BossBase = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - self.bBossIntroduced = false - self.bBossFightStarted = false - self.bBossKilled = false - - self.flBossSpeechCooldown = -1 - self.flBossNextLaughTime = -1 - - self.flBossIntroEndTime = 9999999999999999999999 - self.Bosses = {} -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:OnThink() - CMapEncounter.OnThink( self ) - - if self.bBossIntroduced == false then - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - for _,hBoss in pairs( self.Bosses ) do - if hPlayerHero:CanEntityBeSeenByMyTeam( hBoss ) then - self:IntroduceBoss( hBoss ) - return - end - end - end - end - - return - end - - local flNow = GameRules:GetGameTime() - if self.bBossIntroduced and self.flBossIntroEndTime > flNow then - return - end - - if not self.bBossFightStarted and flNow > self.flBossIntroEndTime then - self:StartBossFight() - return - end - - if self.bBossFightStarted and flNow > self.flBossNextLaughTime then - local szLaughLine = self:GetLaughLine() - if szLaughLine ~= nil then - self:BossSpeak( szLaughLine ) - self.flBossNextLaughTime = flNow + BOSS_LAUGH_COOLDOWN - end - end - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - local hVisionBuff = hPlayerHero:FindModifierByName( "modifier_provide_vision" ) - if hVisionBuff == nil then - for _,hBoss in pairs( self.Bosses ) do - if hBoss and hBoss:IsNull() == false and hBoss:IsAlive() then - hPlayerHero:AddNewModifier( hBoss, nil, "modifier_provide_vision", { duration = -1 } ) - break - end - end - end - end - end - - self:UpdateBossHP() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:UpdateBossHP() - local flHPResolution = 500.0; - - local netTable = {} - local nEntIndex = -1; - local szUnitName = self:GetBossUnitName(); - - local flMaxHP = 0 - local flCurHP = 0 - local flBossHP = 0 - local bAnyActive = false - - for _,hBoss in pairs ( self.Bosses ) do - if hBoss and not hBoss:IsNull() then - if hBoss:IsAlive() then - bAnyActive = true - flCurHP = flCurHP + hBoss:GetHealth() - end - flMaxHP = flMaxHP + hBoss:GetMaxHealth() - nEntIndex = hBoss:entindex() - end - end - - flBossHP = math.floor( flHPResolution * ( flCurHP / flMaxHP ) ) / flHPResolution; - - CustomNetTables:SetTableValue( "boss_net_table", "current_boss", { active=bAnyActive, hp = flBossHP, ent_index=nEntIndex, unit_name=szUnitName } ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossUnitName() - return self:GetPreviewUnit() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossUnits() - return self.Bosses -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:OnBossSpawned( hBoss ) - hBoss.bIsBoss = true - hBoss:SetAbsAngles( 0, 270, 0 ) - hBoss:AddNewModifier( hPlayerHero, nil, "modifier_boss_intro", {} ) - hBoss:RemoveAbility( "ability_ascension" ) - hBoss:RemoveModifierByName( "modifier_ascension" ) - - table.insert( self.Bosses, hBoss ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroGesture() - return ACT_DOTA_VICTORY -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroCameraPitch() - return 30 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroCameraDistance() - return 800 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroCameraHeight() - return 50 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroCameraYawRotateSpeed() - return 0.1 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroCameraInitialYaw() - return 120 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroDuration() - return 4.0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetBossIntroVoiceLine() - return nil -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:IntroduceBoss( hEncounteredBoss ) - self.bBossIntroduced = true - - for _,hBoss in pairs ( self.Bosses ) do - hBoss:SetAbsAngles( 0, 270, 0 ) - hBoss:AddNewModifier( hBoss, nil, "modifier_provide_vision", { duration = -1 } ) - hBoss:StartGesture( self:GetBossIntroGesture() ) - end - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_boss_intro", { } ) - end - end - - self:AddEncounterObjective( tostring( "defeat_boss_" .. self:GetBossUnitName() ), 0, 0 ) - - local netTable = {} - netTable[ "boss_ent_index" ] = hEncounteredBoss:entindex() - netTable[ "camera_pitch" ] = self:GetBossIntroCameraPitch() - netTable[ "camera_distance" ] = self:GetBossIntroCameraDistance() - netTable[ "camera_height" ] = self:GetBossIntroCameraHeight() - netTable[ "camera_yaw_rotate_speed" ] = self:GetBossIntroCameraYawRotateSpeed() - netTable[ "camera_inital_yaw" ] = self:GetBossIntroCameraInitialYaw() - self.flBossIntroEndTime = GameRules:GetGameTime() + self:GetBossIntroDuration() - - CustomGameEventManager:Send_ServerToAllClients( "boss_intro_begin", netTable ) - - if self:GetBossIntroVoiceLine() ~= nil then - self:BossSpeak( self:GetBossIntroVoiceLine() ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:StartBossFight() - self.nAbilityListener = ListenToGameEvent( "dota_non_player_begin_cast", Dynamic_Wrap( getclass( self ), "OnNonPlayerBeginCast" ), self ) - self.bBossFightStarted = true - self:UpdateBossHP() - - for _,hBoss in pairs ( self.Bosses ) do - --hBoss:RemoveModifierByName( "modifier_boss_intro" - local hBuff = hBoss:FindModifierByName( "modifier_boss_intro" ) - if hBuff then - hBuff:SetDuration( 1.0, false ) - end - hBoss.Encounter = self - hBoss:RemoveGesture( self:GetBossIntroGesture() ) - end - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:RemoveModifierByName( "modifier_boss_intro" ) - end - - local hPlayer = PlayerResource:GetPlayer( nPlayerID ) - if hPlayer then - hPlayer:SetMusicStatus( 2, 1.0 ) -- turn on battle music - end - end - - CustomGameEventManager:Send_ServerToAllClients( "boss_intro_end", netTable ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetMaxSpawnedUnitCount() - return #self.Bosses -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:Start() - CMapEncounter.Start( self ) - - self.nGoldReward = 0 - self.Bosses = {} - - self:GetSpawner( "spawner_boss" ):SpawnUnits() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerName() == "spawner_boss" then - for _,hUnit in pairs ( hSpawnedUnits ) do - if hUnit then - self:OnBossSpawned( hUnit ) - end - end - end -end - ---------------------------------------------------------------------------- - -function CMapEncounter_BossBase:OnEnemyCreatureSpawned( hEnemyCreature ) - CMapEncounter.OnEnemyCreatureSpawned( self, hEnemyCreature ) -end - - ---------------------------------------------------------------------------- - -function CMapEncounter_BossBase:OnEntityKilled( event ) - CMapEncounter.OnEntityKilled( self, event ) - - local hVictim = nil - local hAttacker = nil - local hInflictor = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - if event.entindex_attacker ~= nil then - hAttacker = EntIndexToHScript( event.entindex_attacker ) - end - if event.entindex_inflictor ~= nil then - hInflictor = EntIndexToHScript( event.entindex_inflictor ) - end - - if hVictim ~= nil then - if hVictim.bIsBoss == true then - self:OnBossKilled( hVictim, hAttacker ) - end - - if hVictim:IsRealHero() and hAttacker.bIsBoss == true then - self:BossSpeak( self:GetKillTauntLine() ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:OnBossKilled( hBoss, hAttacker ) - for k,Boss in pairs ( self.Bosses ) do - if hBoss == Boss then - table.remove( self.Bosses, k ) - end - end - - if #self.Bosses == 0 then - self.bBossKilled = true - - CustomGameEventManager:Send_ServerToAllClients( "boss_fight_finished", netTable ) - - for i=1,NUM_LIVES_FROM_BOSSES do - self:DropLifeRuneFromUnit( hBoss, hAttacker, false ) - end - - self:DropNeutralItemFromUnit( hBoss, hAttacker, true ) - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:RemoveModifierByName( "modifier_provide_vision" ) - end - - local hPlayer = PlayerResource:GetPlayer( nPlayerID ) - if hPlayer then - hPlayer:SetMusicStatus( 0, 1.0 ) -- go back to laning music - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:OnComplete() - CMapEncounter.OnComplete( self ) - if self.nAbilityListener ~= nil then - StopListeningToGameEvent( self.nAbilityListener ) - end - if self.bBossFightStarted == false then - -- Fix for test encounter - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:RemoveModifierByName( "modifier_boss_intro" ) - end - end - self:UpdateBossHP() - CustomGameEventManager:Send_ServerToAllClients( "boss_intro_end", netTable ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:CheckForCompletion() - if self.bBossKilled then - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:DestroyRemainingSpawnedUnits() - - -- Necessary to make bosses drop loot in the case of win_encounter - for i = #self.Bosses,1,-1 do - self.Bosses[i]:ForceKill( false ) - end - - CMapEncounter.DestroyRemainingSpawnedUnits( self ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetLaughLine() - return nil -end - ---------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetKillTauntLine() - return nil -end - ---------------------------------------------------------------------------- - -function CMapEncounter_BossBase:GetAbilityUseLine( szAbilityName ) - return nil -end - ---------------------------------------------------------------------------- - -function CMapEncounter_BossBase:BossSpeak( szSoundEvent, bLaugh ) - if szSoundEvent == nil then - print( "CMapEncounter_BossBase:BossSpeak - szSoundEvent is nil! This might be ok if the boss doesn't have a response for this." ) - return - end - - local flNow = GameRules:GetGameTime() - if flNow > self.flBossSpeechCooldown then - self.flBossSpeechCooldown = GameRules:GetGameTime() + BOSS_SPEECH_COOLDOWN - EmitGlobalSound( szSoundEvent ) - end -end - ---------------------------------------------------------- --- dota_non_player_begin_cast --- * abilityname --- * caster_entindex ---------------------------------------------------------- -function CMapEncounter_BossBase:OnNonPlayerBeginCast( event ) - local hCaster = nil - if event.caster_entindex ~= nil and event.abilityname ~= nil then - hCaster = EntIndexToHScript( event.caster_entindex ) - if hCaster ~= nil and hCaster.bIsBoss then - self:BossSpeak( self:GetAbilityUseLine( event.abilityname ) ) - end - end -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_BossBase diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_timbersaw.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_timbersaw.lua deleted file mode 100755 index 95fa9c5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_timbersaw.lua +++ /dev/null @@ -1,223 +0,0 @@ -require( "encounters/encounter_boss_base" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_BossTimbersaw == nil then - CMapEncounter_BossTimbersaw = class( {}, {}, CMapEncounter_BossBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:constructor( hRoom, szEncounterName ) - CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName ) - - GameRules:SetTreeRegrowTime( 30.0 ) - - self:AddSpawner( CDotaSpawner( "spawner_boss", "spawner_boss", - { - { - EntityName = self:GetPreviewUnit(), - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:GetPreviewUnit() - return "npc_dota_boss_timbersaw" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:Precache( context ) - CMapEncounter_BossBase.Precache( self, context ) - - PrecacheUnitByNameSync( "npc_dota_creature_timbersaw_treant", context, -1 ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_shredder", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_shredder.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_shredder.vsndevts", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_chakram_aghs.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_chakram_stay.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_chakram_return.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:GetBossIntroVoiceLine() - local nLine = RandomInt( 0, 3 ) - if nLine == 0 then - return "shredder_timb_levelup_04" - end - - if nLine == 1 then - return "shredder_timb_levelup_05" - end - - if nLine == 2 then - return "shredder_timb_levelup_06" - end - - if nLine == 3 then - return "shredder_timb_levelup_07" - end - - return "shredder_timb_levelup_07" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:OnEncounterLoaded() - CMapEncounter_BossBase.OnEncounterLoaded( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:OnThink() - CMapEncounter_BossBase.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_dota_creature_timbersaw_treant" then - return false - end - return true -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:OnBossSpawned( hBoss ) - CMapEncounter_BossBase.OnBossSpawned( self, hBoss ) - - hBoss.AI:SetEncounter( self ) -end - ---------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:OnBossKilled( hBoss, hAttacker ) - CMapEncounter_BossBase.OnBossKilled( self, hBoss, hAttacker ) - - local vecTreants = self:GetRoom():FindAllEntitiesInRoomByName( "npc_dota_furion_treant_4", false ) - if #vecTreants > 0 then - for _,hTreant in pairs ( vecTreants ) do - hTreant:ForceKill( false ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:GetLaughLine() - - local szLines = - { - "shredder_timb_laugh_01", - "shredder_timb_laugh_02", - "shredder_timb_laugh_03", - "shredder_timb_laugh_04", - "shredder_timb_laugh_05", - "shredder_timb_laugh_06", - "shredder_timb_kill_15", - "shredder_timb_kill_16", - "shredder_timb_deny_14", - "shredder_timb_levelup_09", - } - - return szLines[ RandomInt( 1, #szLines ) ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:GetKillTauntLine() - local szLines = - { - "shredder_timb_kill_02", - "shredder_timb_kill_03", - "shredder_timb_kill_04", - "shredder_timb_kill_06", - "shredder_timb_kill_07", - "shredder_timb_kill_10", - "shredder_timb_kill_11", - "shredder_timb_kill_12", - } - - return szLines[ RandomInt( 1, #szLines ) ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossTimbersaw:GetAbilityUseLine( szAbilityName ) - local szLineToUse = self:GetLaughLine() - if szAbilityName == "boss_timbersaw_whirling_death" then - local szLines = - { - "shredder_timb_whirlingdeath_01", - "shredder_timb_whirlingdeath_02", - "shredder_timb_whirlingdeath_03", - "shredder_timb_whirlingdeath_04", - "shredder_timb_whirlingdeath_05", - "shredder_timb_whirlingdeath_06", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "boss_timbersaw_timber_chain" then - local szLines = - { - "shredder_timb_timberchain_01", - "shredder_timb_timberchain_02", - "shredder_timb_timberchain_05", - "shredder_timb_timberchain_04", - "shredder_timb_timberchain_07", - "shredder_timb_timberchain_08", - "shredder_timb_timberchain_09", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "boss_timbersaw_chakram_dance" then - local szLines = - { - "shredder_timb_attack_08", - "shredder_timb_attack_07", - "shredder_timb_attack_05", - "shredder_timb_attack_03", - "shredder_timb_attack_02", - "shredder_timb_cast_01", - "shredder_timb_levelup_10", - "shredder_timb_levelup_11", - "shredder_timb_levelup_12", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "shredder_chakram" then - local szLines = - { - "shredder_timb_chakram_01", - "shredder_timb_chakram_02", - "shredder_timb_chakram_03", - "shredder_timb_chakram_04", - "shredder_timb_chakram_05", - "shredder_timb_chakram_06", - "shredder_timb_chakram_07", - "shredder_timb_chakram_08", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - - return szLineToUse -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_BossTimbersaw diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_visage.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_visage.lua deleted file mode 100755 index cf1b0aa..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_visage.lua +++ /dev/null @@ -1,160 +0,0 @@ -require( "encounters/encounter_boss_base" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_BossVisage == nil then - CMapEncounter_BossVisage = class( {}, {}, CMapEncounter_BossBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:constructor( hRoom, szEncounterName ) - CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName ) - - self:AddSpawner( CDotaSpawner( "spawner_boss", "spawner_boss", - { - { - EntityName = self:GetPreviewUnit(), - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_familiar", "spawner_familiar", - { - { - EntityName = "npc_dota_boss_visage_familiar", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_familiar_statue_east", "spawner_familiar_statue_east", - { - { - EntityName = "npc_dota_boss_visage_familiar_statue", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_familiar_statue_west", "spawner_familiar_statue_west", - { - { - EntityName = "npc_dota_boss_visage_familiar_statue", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:GetPreviewUnit() - return "npc_dota_boss_visage" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:Precache( context ) - CMapEncounter_BossBase.Precache( self, context ) - - PrecacheUnitByNameSync( "npc_dota_boss_visage_familiar", context, -1 ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_visage", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_visage.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_visage.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:OnEncounterLoaded() - CMapEncounter_BossBase.OnEncounterLoaded( self ) - - self.vecFamiliars = self:GetSpawner( "spawner_familiar" ):SpawnUnits() - self.vecFamiliarStatuesWest = self:GetSpawner( "spawner_familiar_statue_west" ):SpawnUnits() - self.vecFamiliarStatuesEast = self:GetSpawner( "spawner_familiar_statue_east" ):SpawnUnits() - for _,Familiar in pairs ( self.vecFamiliars ) do - Familiar:FaceTowards( self:GetSpawner( "spawner_boss" ):GetSpawners()[1]:GetAbsOrigin() ) - end - - for _,StatueWest in pairs ( self.vecFamiliarStatuesWest ) do - StatueWest:SetAbsAngles( 0, 0, 0 ) - end - - for _,StatueEast in pairs ( self.vecFamiliarStatuesEast ) do - StatueEast:SetAbsAngles( 0, 180, 0 ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:OnThink() - CMapEncounter_BossBase.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_dota_boss_visage_familiar" then - return false - end - if hEnemyCreature:GetUnitName() == "npc_dota_boss_visage_familiar_statue" then - return false - end - return true -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:OnBossSpawned( hBoss ) - CMapEncounter_BossBase.OnBossSpawned( self, hBoss ) - hBoss.AI:SetEncounter( self ) - hBoss.WestStatues = self.vecFamiliarStatuesWest - hBoss.EastStatues = self.vecFamiliarStatuesEast - - for _,Familiar in pairs ( self.vecFamiliars ) do - Familiar:FaceTowards( self:GetSpawner( "spawner_boss" ):GetSpawners()[1]:GetAbsOrigin() ) - Familiar:FindAbilityByName( "boss_visage_familiar_stone_form" ):OnSpellStart() - end - - for _,StatueWest in pairs ( self.vecFamiliarStatuesWest ) do - StatueWest:FindAbilityByName( "boss_visage_familiar_stone_form" ):OnSpellStart() - end - - for _,StatueEast in pairs ( self.vecFamiliarStatuesEast ) do - StatueEast:FindAbilityByName( "boss_visage_familiar_stone_form" ):OnSpellStart() - end -end - ---------------------------------------------------------------------------- - -function CMapEncounter_BossVisage:OnBossKilled( hBoss, hAttacker ) - CMapEncounter_BossBase.OnBossKilled( self, hBoss, hAttacker ) - - for _,Familiar in pairs ( self.vecFamiliars ) do - Familiar:ForceKill( false ) - end - - for _,StatueWest in pairs ( self.vecFamiliarStatuesWest ) do - StatueWest:ForceKill( false ) - end - - for _,StatueEast in pairs ( self.vecFamiliarStatuesEast ) do - StatueEast:ForceKill( false ) - end -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_BossVisage diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_void_spirit.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_void_spirit.lua deleted file mode 100755 index dfd93dc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_void_spirit.lua +++ /dev/null @@ -1,263 +0,0 @@ - -require( "encounters/encounter_boss_base" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_BossVoidSpirit == nil then - CMapEncounter_BossVoidSpirit = class( {}, {}, CMapEncounter_BossBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:constructor( hRoom, szEncounterName ) - CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName ) - - self:AddSpawner( CDotaSpawner( "spawner_boss", "spawner_boss", - { - { - EntityName = self:GetPreviewUnit(), - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:GetPreviewUnit() - return "npc_dota_boss_void_spirit" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:Precache( context ) - CMapEncounter_BossBase.Precache( self, context ) - - PrecacheUnitByNameSync( "npc_dota_earth_spirit_statue", context, -1 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:OnEncounterLoaded() - CMapEncounter_BossBase.OnEncounterLoaded( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:Start() - CMapEncounter_BossBase.Start( self ) - - local vEarthSpiritSpawnPos = nil - local hEarthSpiritSpawners = self:GetRoom():FindAllEntitiesInRoomByName( "spawner_earth_spirit", true ) - local hBossSpawners = self:GetRoom():FindAllEntitiesInRoomByName( "spawner_boss", true ) - - self.hEarthSpirits = {} -- had some issue finding these units from Void's ability, so just track them as they get made - for _, hSpawner in pairs( hEarthSpiritSpawners ) do - local vSpawnPos = hSpawner:GetAbsOrigin() - local hEarthSpirit = CreateUnitByName( "npc_dota_earth_spirit_statue", vSpawnPos, true, nil, nil, DOTA_TEAM_BADGUYS ) - if hEarthSpirit ~= nil then - if #hBossSpawners > 0 and hBossSpawners[ 1 ] ~= nil then - -- Initially face statues towards the boss - local vBossPos = hBossSpawners[ 1 ]:GetOrigin() - local vDir = vBossPos - hEarthSpirit:GetOrigin() - vDir.z = 0.0 - vDir = vDir:Normalized() - hEarthSpirit:SetForwardVector( vDir ) - end - - --self:SuppressRewardsOnDeath( hEarthSpirit ) - table.insert( self.hEarthSpirits, hEarthSpirit ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:OnThink() - CMapEncounter_BossBase.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:MustKillForEncounterCompletion( hEnemyCreature ) - return true -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:OnBossSpawned( hBoss ) - CMapEncounter_BossBase.OnBossSpawned( self, hBoss ) - - hBoss.AI:SetEncounter( self ) -end - ---------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:OnBossKilled( hBoss, hAttacker ) - CMapEncounter_BossBase.OnBossKilled( self, hBoss, hAttacker ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:GetBossIntroVoiceLine() - local szLines = - { - "void_spirit_voidspir_battle_01_02", - "void_spirit_voidspir_battle_03_02", - "void_spirit_voidspir_battle_04", - "void_spirit_voidspir_battlebegins_01", - "void_spirit_voidspir_battlebegins_02", - "void_spirit_voidspir_battlebegins_03", - "void_spirit_voidspir_battlebegins_04", - "void_spirit_voidspir_inthebag_01", - "void_spirit_voidspir_inthebag_02", - } - - - return szLines[ RandomInt( 1, #szLines ) ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:GetLaughLine() - - local szLines = - { - "void_spirit_voidspir_laugh_01", - "void_spirit_voidspir_laugh_01_02", - "void_spirit_voidspir_laugh_01_03", - "void_spirit_voidspir_laugh_02", - "void_spirit_voidspir_laugh_03", - "void_spirit_voidspir_laugh_04", - "void_spirit_voidspir_laugh_07", - "void_spirit_voidspir_laugh_08", - "void_spirit_voidspir_laugh_09", - } - - return szLines[ RandomInt( 1, #szLines ) ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:GetKillTauntLine() - local szLines = - { - "void_spirit_voidspir_kill_06", - "void_spirit_voidspir_kill_08", - "void_spirit_voidspir_kill_09", - "void_spirit_voidspir_kill_10", - "void_spirit_voidspir_kill_13", - "void_spirit_voidspir_kill_14", - "void_spirit_voidspir_kill_15", - "void_spirit_voidspir_kill_16", - "void_spirit_voidspir_kill_18", - } - - return szLines[ RandomInt( 1, #szLines ) ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:GetAbilityUseLine( szAbilityName ) - local szLineToUse = self:GetLaughLine() - if szAbilityName == "aghsfort_void_spirit_boss_aether_remnant" then - local szLines = - { - "void_spirit_voidspir_ability1_13", - "void_spirit_voidspir_ability1_12", - "void_spirit_voidspir_ability1_11", - "void_spirit_voidspir_ability1_10", - "void_spirit_voidspir_ability1_09", - "void_spirit_voidspir_ability1_08", - "void_spirit_voidspir_ability1_06", - "void_spirit_voidspir_ability1_05", - "void_spirit_voidspir_ability1_03", - "void_spirit_voidspir_ability1_01", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "aghsfort_void_spirit_boss_dissimilate" then - local szLines = - { - "void_spirit_voidspir_ability2_20", - "void_spirit_voidspir_ability2_18", - "void_spirit_voidspir_ability2_17", - "void_spirit_voidspir_ability2_15", - "void_spirit_voidspir_ability2_14", - "void_spirit_voidspir_ability2_13", - "void_spirit_voidspir_ability2_09", - "void_spirit_voidspir_ability2_08", - "void_spirit_voidspir_ability2_07", - "void_spirit_voidspir_ability2_05", - "void_spirit_voidspir_ability2_02", - "void_spirit_voidspir_ability2_01", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "aghsfort_void_spirit_boss_resonant_pulse" then - local szLines = - { - "void_spirit_voidspir_ability3_15", - "void_spirit_voidspir_ability3_14", - "void_spirit_voidspir_ability3_10", - "void_spirit_voidspir_ability3_09", - "void_spirit_voidspir_ability3_08", - "void_spirit_voidspir_ability3_06", - "void_spirit_voidspir_ability3_04", - "void_spirit_voidspir_ability3_03", - "void_spirit_voidspir_ability3_01", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "void_spirit_boss_activate_earth_spirits" then - local szLines = - { - "void_spirit_voidspir_cast_03", - "void_spirit_voidspir_cast_02", - "void_spirit_voidspir_cast_01", - "void_spirit_voidspir_battlebegins_05", - "void_spirit_voidspir_levelup_11_02", - "void_spirit_voidspir_levelup_12", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "aghsfort_void_spirit_boss_astral_step" then - local szLines = - { - "void_spirit_voidspir_ability4_18", - "void_spirit_voidspir_ability4_13", - "void_spirit_voidspir_ability4_12", - "void_spirit_voidspir_ability4_08", - "void_spirit_voidspir_ability4_06", - "void_spirit_voidspir_ability4_04", - "void_spirit_voidspir_ability4_02", - "void_spirit_voidspir_ability4_01", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - - return szLineToUse -end - - - --------------------------------------------------------------------------------- - -function CMapEncounter_BossVoidSpirit:GetBossIntroGesture() - return ACT_DOTA_TELEPORT -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_BossVoidSpirit diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_brewmaster.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_brewmaster.lua deleted file mode 100755 index dca7a89..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_brewmaster.lua +++ /dev/null @@ -1,128 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Brewmaster == nil then - CMapEncounter_Brewmaster = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Brewmaster:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_brewmaster", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_brewmaster.vsndevts", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_stormspirit/stormspirit_static_remnant.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_stormspirit.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Brewmaster:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - local bInvulnerable = true - - self:AddSpawner( CDotaSpawner( "spawner_captain_trigger", "spawner_captain_trigger", - { - { - EntityName = "npc_dota_creature_brewmaster_boss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - } - } ) ) - - self:SetSpawnerSchedule( "spawner_captain_trigger", nil ) - self:SetPortalTriggerSpawner( "spawner_captain_trigger", 0.5 ) - - -- Captain: - self.vCaptainSchedule = - { - { - Time = 0, - Count = 3, - }, - { - Time = 22, - Count = 3, - }, - { - Time = 44, - Count = 3, - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "dynamic_portal", "dynamic_portal", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_brewmaster_boss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "dynamic_portal", self.vCaptainSchedule ) -end - -function CMapEncounter_Brewmaster:GetPreviewUnit() - return "npc_dota_creature_brewmaster_boss" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Brewmaster:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - self:AddEncounterObjective( "survive_waves", 0, #self.vCaptainSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Brewmaster:ShouldAutoStartGlobalAscensionAbilities() - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Brewmaster:Start() - CMapEncounter.Start( self ) - local spawnerFocusPath = self:GenerateSpawnFocusPath( "portal_v2_captain", 300, 1000 ) - self:AssignSpawnFocusPath( "portal_v2_peon", spawnerFocusPath ) - self:AssignSpawnFocusPath( "portal_v2_captain", spawnerFocusPath ) - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Brewmaster:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - if hSpawner.szSpawnerName == "dynamic_portal" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - --print( "CMapEncounter_Brewmaster:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), 1000 ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Brewmaster diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_broodmothers.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_broodmothers.lua deleted file mode 100755 index 2601269..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_broodmothers.lua +++ /dev/null @@ -1,224 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) - -require( "spawner" ) -require( "portalspawnerv2" ) -require( "utility_functions" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Broodmothers == nil then - CMapEncounter_Broodmothers = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Broodmothers:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_batrider/batrider_flaming_lasso.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Broodmothers:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- Pre-placed eggs (done this way to use only a subset of the map spawners) - self.szEggSpawner = "spider_sac_position" - - local nAscLevel = GameRules.Aghanim:GetAscensionLevel() - local nPreplacedSacs = 9 + ( 2 * nAscLevel ) - - self.vEggSchedule = - { - { - Time = 0, - Count = nPreplacedSacs, - }, - } - - self:AddSpawner( CDotaSpawner( self.szEggSpawner, self.szEggSpawner, - { - { - EntityName = "npc_dota_spider_sac", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - self:SetSpawnerSchedule( self.szEggSpawner, self.vEggSchedule ) - - -- Pre-placed broodmothers - self.szBroodmotherSpawner = "preplaced_broodmother" - - self.vBroodmotherSchedule = - { - { - Time = 0, - Count = 5, - }, - } - - self:AddSpawner( CDotaSpawner( self.szBroodmotherSpawner, self.szBroodmotherSpawner, - { - { - EntityName = "npc_dota_creature_broodmother", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - self:SetSpawnerSchedule( self.szBroodmotherSpawner, self.vBroodmotherSchedule ) - - -- Portals - self.vHugeBroodSchedule = - { - { - Time = 34, - Count = 1, - }, - { - Time = 64, - Count = 1, - }, - } - - self.vKidnapperSchedule = - { - { - Time = 10, - Count = 1, - }, - { - Time = 45, - Count = 1, - }, - { - Time = 80, - Count = 1, - }, - { - Time = 115, - Count = 1, - }, - } - - self.szHugeBroodPortal = "portal_huge_brood" - self.szKidnapperPortal = "portal_kidnapper" - - local bInvulnerable = true - local nHealth = 1 - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szHugeBroodPortal, self.szHugeBroodPortal, nHealth, 5, 1.0, - { - { - EntityName = "npc_dota_creature_huge_broodmother", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szKidnapperPortal, self.szKidnapperPortal, nHealth, 5, 1.0, - { - { - EntityName = "npc_dota_creature_kidnap_spider", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szHugeBroodPortal, self.vHugeBroodSchedule ) - self:SetSpawnerSchedule( self.szKidnapperPortal, self.vKidnapperSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Broodmothers:GetPreviewUnit() - return "npc_dota_creature_huge_broodmother" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Broodmothers:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Broodmothers:OnThink() - -- We'll pop the eggs when all the important spiders are dead - if self:AreScheduledSpawnsComplete() and not self:HasAnyPortals() then - --printf( "Scheduled spawns are complete and there are no portals" ) - -- Search for enemies remaining - local fSearchRange = 6000 - local vRoomOrigin = self:GetRoom():GetOrigin() - local hCreatures = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vRoomOrigin, nil, fSearchRange, - DOTA_TEAM_BADGUYS, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false - ) - - local nCaptainsRemaining = 0 - for _, hCreature in pairs( hCreatures ) do - if hCreature and ( not hCreature:IsNull() ) and hCreature:IsAlive() then - if hCreature:GetUnitName() == "npc_dota_creature_kidnap_spider" or hCreature:GetUnitName() == "npc_dota_creature_broodmother" or hCreature:GetUnitName() == "npc_dota_creature_huge_broodmother" then - nCaptainsRemaining = nCaptainsRemaining + 1 - end - end - end - - if nCaptainsRemaining == 0 then - --printf( "All the captain spiders are dead" ) - for _, hCreature in pairs( hCreatures ) do - if hCreature:GetUnitName() == "npc_dota_spider_sac" then - --printf( "Popping an egg" ) - hCreature:Kill( nil, nil ) - end - end - end - end - - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Broodmothers:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - if hSpawner:GetSpawnerName() == self.szKidnapperPortal then -- kidnap spiders do their own thing, their ai was getting broken by SetInitialGoalEntity - return - end - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Broodmothers diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_castle_traps.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_castle_traps.lua deleted file mode 100755 index 7505dd0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_castle_traps.lua +++ /dev/null @@ -1,46 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_trap_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_CastleTraps == nil then - CMapEncounter_CastleTraps = class( {}, {}, CMapEncounter_TrapBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CastleTraps:GetPreviewUnit() - return "npc_dota_spike_trap_ward" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CastleTraps:CheckForCompletion() - if not IsServer() then - return - end - local bIsComplete = CMapEncounter_TrapBase.CheckForCompletion( self ) - if bIsComplete then - self:DisableTraps() - end - - return bIsComplete -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CastleTraps:DisableTraps() - --print("Disabling Traps!") - -- Disable any traps in the map - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "disable_traps_relay", false ) - --local hRelays = Entities:FindAllByName( "disable_traps_relay" ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_CastleTraps diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_cliff_pass.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_cliff_pass.lua deleted file mode 100755 index 6c26a3c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_cliff_pass.lua +++ /dev/null @@ -1,46 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_trap_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_CliffPass == nil then - CMapEncounter_CliffPass = class( {}, {}, CMapEncounter_TrapBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CliffPass:GetPreviewUnit() - return "npc_dota_breathe_fire_trap" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CliffPass:CheckForCompletion() - if not IsServer() then - return - end - local bIsComplete = CMapEncounter_TrapBase.CheckForCompletion( self ) - if bIsComplete then - self:DisableTraps() - end - - return bIsComplete -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CliffPass:DisableTraps() - --print("Disabling Traps!") - -- Disable any traps in the map - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "disable_traps_relay", false ) - --local hRelays = Entities:FindAllByName( "disable_traps_relay" ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_CliffPass diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_crypt_traps.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_crypt_traps.lua deleted file mode 100755 index 6a44169..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_crypt_traps.lua +++ /dev/null @@ -1,72 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_trap_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_CryptTraps == nil then - CMapEncounter_CryptTraps = class( {}, {}, CMapEncounter_TrapBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CryptTraps:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheUnitByNameSync( "npc_dota_observer_ward_crypt", context, -1 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CryptTraps:GetPreviewUnit() - return "npc_dota_spike_trap_ward" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CryptTraps:Start() - CMapEncounter_TrapBase.Start( self ) - if not IsServer() then - return - end - local wardUnits = Entities:FindAllByName( "spawner_ward" ) - local wardUnit = "npc_dota_observer_ward_crypt" - for _, spawnerUnit in pairs(wardUnits) do - local hUnit = CreateUnitByName( wardUnit, spawnerUnit:GetAbsOrigin(), true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hUnit ~= nil then - --print("Placing a ward") - hUnit:SetForwardVector( RandomVector( 1 ) ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CryptTraps:CheckForCompletion() - if not IsServer() then - return - end - local bIsComplete = CMapEncounter_TrapBase.CheckForCompletion( self ) - if bIsComplete then - self:DisableTraps() - end - - return bIsComplete -end - --------------------------------------------------------------------------------- - -function CMapEncounter_CryptTraps:DisableTraps() - --print("Disabling Traps!") - -- Disable any traps in the map - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "disable_traps_relay", false ) - --local hRelays = Entities:FindAllByName( "disable_traps_relay" ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_CryptTraps diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dark_seer.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dark_seer.lua deleted file mode 100755 index 38c5710..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dark_seer.lua +++ /dev/null @@ -1,122 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_DarkSeer == nil then - CMapEncounter_DarkSeer = class( {}, {}, CMapEncounter ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_dark_seer", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_dark_seer.vsndevts", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_lich", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_lich.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_dark_seer", "spawner_dark_seer", - { - { - EntityName = "npc_dota_creature_dark_seer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_lich", "spawner_lich", - { - { - EntityName = "npc_dota_creature_lich", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_frost_kobold", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 0.0, - }, - } ) ) - -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:GetPreviewUnit() - return "npc_dota_creature_dark_seer" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:Start() - CMapEncounter.Start( self ) - - self:CreateEnemies() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DarkSeer:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Wildwings:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_DarkSeer diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dire_siege.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dire_siege.lua deleted file mode 100755 index 82ac6ba..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dire_siege.lua +++ /dev/null @@ -1,228 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_DireSiege == nil then - CMapEncounter_DireSiege = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.hDireCaptain = nil - self.nDireCaptainHealthPercentTrigger = 20 - self.nNumCatapultsToKillForReinforcements = 3 - self.bTriggeredReinforcements = false - - self.szMeleeSpawner = "spawner_melee" - self.szRangedSpawner = "spawner_ranged" - self.szCatapultSpawner = "spawner_catapult" - self.szCaptainSpawner = "spawner_captain" - - self:AddSpawner( CDotaSpawner( self.szMeleeSpawner, self.szMeleeSpawner, - { - { - EntityName = "npc_dota_assault_bad_melee_creep", - Team = DOTA_TEAM_BADGUYS, - Count = 5, - PositionNoise = 250.0, - }, - } ) ) - self:AddSpawner( CDotaSpawner( self.szRangedSpawner, self.szRangedSpawner, - { - { - EntityName = "npc_dota_assault_bad_ranged_creep", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 250.0, - }, - } ) ) - self:AddSpawner( CDotaSpawner( self.szCatapultSpawner, self.szCatapultSpawner, - { - { - EntityName = "npc_dota_creature_catapult", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_aghsfort_creature_dire_assault_captain", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - -- reinforcement wave through portals - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_ranged", "portal_ranged", 8, 5, 1.0, - { - { - EntityName = "npc_dota_assault_bad_ranged_creep", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 250.0, - }, - }, true - ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_melee", "portal_melee", 8, 5, 1.0, - { - { - EntityName = "npc_dota_assault_bad_melee_creep", - Team = DOTA_TEAM_BADGUYS, - Count = 5, - PositionNoise = 250.0, - }, - }, true - ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_captain", "portal_captain", 8, 5, 1.0, - { - { - EntityName = "npc_aghsfort_creature_dire_assault_captain", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, true - ) ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:GetPreviewUnit() - return "npc_dota_creature_catapult" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:GetMaxSpawnedUnitCount() - local nCount = 0 - - local hMeleeSpawners = self:GetSpawner( self.szMeleeSpawner ) - if hMeleeSpawners then - nCount = nCount + hMeleeSpawners:GetSpawnPositionCount() - end - - local hRangedSpawners = self:GetSpawner( self.szRangedSpawner ) - if hRangedSpawners then - nCount = nCount + hRangedSpawners:GetSpawnPositionCount() - end - - local hCatapultSpawners = self:GetSpawner( self.szCatapultSpawner ) - if hCatapultSpawners then - nCount = nCount + hCatapultSpawners:GetSpawnPositionCount() - end - - local hCaptainSpawners = self:GetSpawner( self.szCaptainSpawner ) - if hCaptainSpawners then - nCount = nCount + hCaptainSpawners:GetSpawnPositionCount() - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:Start() - CMapEncounter.Start( self ) - - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:SpawnReinforcements() - if self.bTriggeredReinforcements == true then - return - end - - self.bTriggeredReinforcements = true - - self.hDireCaptain = nil - for _, hPortalSpawner in pairs( self.PortalSpawnersV2 ) do - hPortalSpawner:SpawnUnitsFromRandomSpawners( 1 ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:OnThink() - CMapEncounter.OnThink( self ) - - if self.bTriggeredReinforcements == true then - return - end - - -- original dire captain is dead or goes below the health percent trigger - if self.hDireCaptain ~= nil and self.hDireCaptain:IsNull() == false then - --print( 'CMapEncounter_DireSiege:OnThink() Dire Assault Captain health percent is ' .. self.hDireCaptain:GetHealthPercent() ) - if self.hDireCaptain:IsAlive() == false or self.hDireCaptain:GetHealthPercent() < self.nDireCaptainHealthPercentTrigger then - self:SpawnReinforcements() - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - if self.bTriggeredReinforcements == true then - return - end - - -- trigger the reinforcements after killing a set number of catapults - if hVictim and hVictim:GetUnitName() == "npc_dota_creature_catapult" then - self.nNumCatapultsToKillForReinforcements = self.nNumCatapultsToKillForReinforcements - 1 - - if self.nNumCatapultsToKillForReinforcements <= 0 then - self:SpawnReinforcements() - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DireSiege:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - --print( "CMapEncounter_Pinecones:OnSpawnerFinished" ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - if hSpawnedUnit:GetUnitName() == "npc_aghsfort_creature_dire_assault_captain" then - print( 'CMapEncounter_DireSiege:OnSpawnerFinished() - found original Dire Assault Captain') - self.hDireCaptain = hSpawnedUnit - end - end - - elseif hSpawner:GetSpawnerType() == "CPortalSpawnerV2" then - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_DireSiege diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dragon_knight.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dragon_knight.lua deleted file mode 100755 index 3c61f16..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_dragon_knight.lua +++ /dev/null @@ -1,223 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_DragonKnight == nil then - CMapEncounter_DragonKnight = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - local bInvulnerable = true - - self.vWaveSchedule = - { - { - Time = 0, - Count = 1, - }, - { - Time = 20, - Count = 2, - }, - { - Time = 45, - Count = 2, - }, - { - Time = 70, - Count = 2, - }, - } - - --DeepPrintTable( self.vWaveSchedule ) - - self.szPortal = "spawner_peon" - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szPortal, self.szPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_underlord", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_creature_dragon_knight", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_peon", self.vWaveSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:Precache( context ) - CMapEncounter.Precache( self, context ) - - --[[ - local towerTable = - { - MapUnitName = "npc_dota_holdout_tower_tier2", - teamnumber = DOTA_TEAM_GOODGUYS, - } - ]] - local ogreTable = - { - MapUnitName = "npc_dota_creature_friendly_ogre_tank", - teamnumber = DOTA_TEAM_GOODGUYS, - } - - PrecacheUnitFromTableSync( ogreTable, context ) - - PrecacheResource( "particle", "particles/units/heroes/heroes_underlord/underlord_firestorm_pre.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/heroes_underlord/abyssal_underlord_firestorm_wave.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/heroes_underlord/abyssal_underlord_firestorm_wave_burn.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:GetPreviewUnit() - return "npc_dota_creature_dragon_knight" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vWaveSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) - - self.szObjectiveEnts = "objective" - self.hObjectiveEnts = self:GetRoom():FindAllEntitiesInRoomByName( self.szObjectiveEnts, true ) - - if #self.hObjectiveEnts == 0 then - printf( "WARNING - self.hObjectiveEnt is nil (looked for classname \"%s\")", self.szObjectiveEnts ) - return - end - - self.hOgre = CreateUnitByName( "npc_dota_creature_friendly_ogre_tank", self.hObjectiveEnts[1]:GetOrigin(), false, nil, nil, DOTA_TEAM_GOODGUYS ) - - if self.hOgre ~= nil then - self.hOgre:SetForwardVector( RandomVector( 1 ) ) - - local nAscLevel = GameRules.Aghanim:GetAscensionLevel() - self.hOgre:CreatureLevelUp( nAscLevel ) - - self.vGoalPos = self.hOgre:GetAbsOrigin() - else - printf( "WARNING - Failed to spawn the objective entity!" ) - return - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:ShouldAutoStartGlobalAscensionAbilities() - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:Start() - CMapEncounter.Start( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner.szSpawnerName == "spawner_peon" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - if self.hOgre ~= nil and ( not self.hOgre:IsNull() ) and self.hOgre:IsAlive() then - hSpawnedUnit:SetInitialGoalEntity( self.hOgre ) - else - if self.hObjectiveEnts[ 1 ] ~= nil and self.hObjectiveEnts[ 1 ]:IsNull() == false then - hSpawnedUnit:SetInitialGoalPosition( self.hObjectiveEnts[ 1 ]:GetOrigin() ) - else - hSpawnedUnit:SetInitialGoalPosition( self.vGoalPos ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:OnTriggerStartTouch( event ) - CMapEncounter.OnTriggerStartTouch( self, event ) - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - - --printf( "szTriggerName: %s, hUnit:GetUnitName(): %s, hTriggerEntity:GetName(): %s", szTriggerName, hUnit:GetUnitName(), hTriggerEntity:GetName() ) - - if self.bCreatureSpawnsActivated == nil and szTriggerName == "trigger_spawn_creatures" then - self.bCreatureSpawnsActivated = true - - self:StartGlobalAscensionAbilities() - self:StartAllSpawnerSchedules( 0 ) - - --printf( "Unit \"%s\" triggered creature spawning!", hUnit:GetUnitName() ) - EmitGlobalSound( "RoundStart" ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DragonKnight:OnComplete() - CMapEncounter.OnComplete( self ) - - -- If friendly ogre is still alive, grant some rewards and do other stuff - if self.hOgre ~= nil and ( not self.hOgre:IsNull() ) and self.hOgre:IsAlive() then - self.hOgre:Heal( self.hOgre:GetMaxHealth(), nil ) - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/fish_bones_active.vpcf", PATTACH_ABSORIGIN_FOLLOW, self.hOgre ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local nLives = 1 - for i = 1, nLives do - self:DropLifeRuneFromUnit( self.hOgre, nil, true ) - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_DragonKnight diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_drow_ranger_miniboss.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_drow_ranger_miniboss.lua deleted file mode 100755 index 8f4d9b5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_drow_ranger_miniboss.lua +++ /dev/null @@ -1,177 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_DrowRangerMiniboss == nil then - CMapEncounter_DrowRangerMiniboss = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.bBossSpawned = false - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_boss", "spawner_boss", - { - { - EntityName = self:GetPreviewUnit(), - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) ---[[ - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_drow_ranger_skeleton_archer", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 150.0, - }, - } ) ) ---]] - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_peon", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_drow_ranger_skeleton_warrior", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 300.0, - }, - }, true - ) ) - - self.nSkeletonSpawnersToUse = 4 - self.nSkeletonSpawnerIncrement = 2 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:GetPreviewUnit() - return "npc_dota_creature_drow_ranger_miniboss" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:Precache( context ) - CMapEncounter.Precache( self, context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:Start() - CMapEncounter.Start( self ) - - self.bBossSpawned = true - self:GetSpawner( "spawner_boss" ):SpawnUnits() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:GetMaxSpawnedUnitCount() - - -- count the drow ranger - local nCount = 1 - local nSkeletonSpawnersToUse = self.nSkeletonSpawnersToUse - local nSkeletonSpawnerIncrement = self.nSkeletonSpawnerIncrement - - -- drow is set to go invis 3 times and spawn an increasing number of skeletons - for i = 1, 3 do - local nSkeletonsPerSpawn = self:GetPortalSpawnerV2( "spawner_peon" ):GetSpawnCountPerSpawnPosition() - nCount = nCount + ( nSkeletonSpawnersToUse * nSkeletonsPerSpawn ) - nSkeletonsPerSpawn = nSkeletonsPerSpawn + nSkeletonSpawnerIncrement - end - - print( 'CMapEncounter_DrowRangerMiniboss:GetMaxSpawnedUnitCount() - max unit count is ' .. nCount ) - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerName() == "spawner_boss" then - for _,hUnit in pairs ( hSpawnedUnits ) do - if hUnit then - --hUnit:AddNewModifier( hUnit, nil, "modifier_provide_vision", { duration = -1 } ) - hUnit.AI:SetEncounter( self ) - end - end - else - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:KillSkeletons() - local vecSkeletons = self:GetSpawnedSecondaryUnits() - print( 'Trying to kill ' .. #vecSkeletons .. " Skeletons") - if #vecSkeletons > 0 then - for _,hSkeleton in pairs ( vecSkeletons ) do - print( 'Attempting to kill skeleton' ) - hSkeleton:ForceKill( false ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:OnDrowShadowBladed() - print( 'CMapEncounter_DrowRangerMiniboss:OnDrowShadowBladed()' ) - - --self:KillSkeletons() - - self:GetPortalSpawnerV2( "spawner_peon" ):SpawnUnitsFromRandomSpawners( self.nSkeletonSpawnersToUse ) - self.nSkeletonSpawnersToUse = self.nSkeletonSpawnersToUse + self.nSkeletonSpawnerIncrement -end - --------------------------------------------------------------------------------- ---[[ -function CMapEncounter_DrowRangerMiniboss:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_dota_creature_drow_ranger_skeleton_archer" then - return false - end - - return true -end ---]] ---------------------------------------------------------------------------- - -function CMapEncounter_DrowRangerMiniboss:CheckForCompletion() - --print( 'CMapEncounter_DrowRangerMiniboss:CheckForCompletion() ) - if self.bBossSpawned and not self:HasRemainingEnemies() then - return true - end - return false -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_DrowRangerMiniboss diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_elemental_tiny.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_elemental_tiny.lua deleted file mode 100755 index f5a201a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_elemental_tiny.lua +++ /dev/null @@ -1,134 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Elemental_Tiny == nil then - CMapEncounter_Elemental_Tiny = class( {}, {}, CMapEncounter ) -end - -function CMapEncounter_Elemental_Tiny:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - local bInvulnerable = true - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_peon", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_elemental_tiny", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 100.0, - }, - }, bInvulnerable ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain_trigger", "spawner_captain_trigger", - { - { - EntityName = "npc_dota_creature_elemental_tiny", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 100.0, - } - }, bInvulnerable ) ) - - self.nCaptains = 5 - -self.vPeonSchedule = - { - { - Time = 1, - Count = 2, - }, - { - Time = 26, - Count = 2, - }, - } - - self:SetPortalTriggerSpawner( "spawner_captain_trigger", 0.8 ) - self:SetSpawnerSchedule( "spawner_captain_trigger", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_peon", self.vPeonSchedule ) - self:SetCalculateRewardsFromUnitCount( true ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Elemental_Tiny:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - self:AddEncounterObjective( "kill_tinies", 0, self.nCaptains ) -end --------------------------------------------------------------------------------- - -function CMapEncounter_Elemental_Tiny:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - if hVictim and hVictim:GetUnitName() == "npc_dota_creature_elemental_tiny" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "kill_tinies" ) - self:UpdateEncounterObjective( "kill_tinies", nCurrentValue + 1, nil ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Elemental_Tiny:GetPreviewUnit() - return "npc_dota_creature_elemental_tiny" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Elemental_Tiny:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Elemental_Tiny:OnThink() - CMapEncounter.OnThink( self ) - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes <= 0 then - return - end - - --print( "CMapEncounter_Elemental_Tiny:OnThink() - iterating through portal units" ) - for _,hEnemy in pairs( self.SpawnedEnemies ) do - if hEnemy == nil or hEnemy:IsNull() or hEnemy:IsAlive() == false then - goto continue - end - - - ::continue:: - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Elemental_Tiny:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - --print( "CMapEncounter_Elemental_Tiny:OnSpawnerFinished" ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - --if #heroes > 0 then - -- for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - -- local hero = heroes[RandomInt(1, #heroes)] - -- if hero ~= nil then - -- --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - -- hSpawnedUnit:SetInitialGoalEntity( hero ) - -- end - -- end - --end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Elemental_Tiny diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_empty_beach.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_empty_beach.lua deleted file mode 100755 index 31302fb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_empty_beach.lua +++ /dev/null @@ -1,76 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_EmptyBeach == nil then - CMapEncounter_EmptyBeach = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyBeach:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheUnitByNameSync( "npc_dota_shop_keeper", context, -1 ) - PrecacheModel("models/items/wards/crab_trap_ward_ward/crab_trap_ward_ward.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_back.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_bracer.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_head.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_necklace.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_weapon.vmdl", context) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyBeach:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) - self:SetupBristlebackShop( true ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyBeach:OnComplete() - CMapEncounter.OnComplete( self ) - self:SpawnWards() -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyBeach:GetPreviewUnit() - return "npc_dota_shop_keeper" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyBeach:CheckForCompletion() - - local connectedPlayers = GameRules.Aghanim:GetConnectedPlayers() - for i=1,#connectedPlayers do - local nPlayerID = connectedPlayers[i] - if GameRules.Aghanim:GetPlayerCurrentRoom( nPlayerID ) ~= self:GetRoom() then - return false - end - end - - return true -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyBeach:SpawnWards() - local wardUnits = Entities:FindAllByName( "spawner_ward" ) - local wardUnit = "npc_dota_observer_ward_beach" - for _, spawnerUnit in pairs(wardUnits) do - local hUnit = CreateUnitByName( wardUnit, spawnerUnit:GetAbsOrigin(), true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hUnit ~= nil then - --print("Placing a ward") - hUnit:SetForwardVector( RandomVector( 1 ) ) - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_EmptyBeach diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_empty_cavern.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_empty_cavern.lua deleted file mode 100755 index 1cd3ba2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_empty_cavern.lua +++ /dev/null @@ -1,54 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_EmptyCavern == nil then - CMapEncounter_EmptyCavern = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyCavern:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheUnitByNameSync( "npc_dota_shop_keeper", context, -1 ) - PrecacheModel("models/heroes/bristleback/bristleback_back.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_bracer.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_head.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_necklace.vmdl", context) - PrecacheModel("models/heroes/bristleback/bristleback_weapon.vmdl", context) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyCavern:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) - self:SetupBristlebackShop( true ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyCavern:GetPreviewUnit() - return "npc_dota_shop_keeper" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_EmptyCavern:CheckForCompletion() - - local connectedPlayers = GameRules.Aghanim:GetConnectedPlayers() - for i=1,#connectedPlayers do - local nPlayerID = connectedPlayers[i] - print( ) - if GameRules.Aghanim:GetPlayerCurrentRoom( nPlayerID ) ~= self:GetRoom() then - return false - end - end - - return true -end - --------------------------------------------------------------------------------- - -return CMapEncounter_EmptyCavern diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_enraged_hellbears.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_enraged_hellbears.lua deleted file mode 100755 index ceafd1d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_enraged_hellbears.lua +++ /dev/null @@ -1,125 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounterEnragedHellbears == nil then - CMapEncounterEnragedHellbears = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounterEnragedHellbears:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - - self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_small_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 7, - PositionNoise = 225.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_dota_creature_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 75.0, - }, - } ) ) - - self.flEnrageTimer = 60 - -end - --------------------------------------------------------------------------------- - -function CMapEncounterEnragedHellbears:GetPreviewUnit() - return "npc_dota_creature_hellbear" -end - --------------------------------------------------------------------------------- - -function CMapEncounterEnragedHellbears:GetMaxSpawnedUnitCount() - local nCount = 0 - local hWarriorSpawners = self:GetSpawner( self.szPeonSpawner ) - if hWarriorSpawners then - nCount = nCount + hWarriorSpawners:GetSpawnPositionCount() * 6 - end - - local hChampionSpawners = self:GetSpawner( self.szCaptainSpawner ) - if hChampionSpawners then - nCount = nCount + hChampionSpawners:GetSpawnPositionCount() - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounterEnragedHellbears:Start() - CMapEncounter.Start( self ) - self:CreateEnemies() -end - --------------------------------------------------------------------------------- - -function CMapEncounterEnragedHellbears:OnThink() - CMapEncounter.OnThink( self ) - local flNow = GameRules:GetGameTime() - - if ( flNow - self.flStartTime ) > self.flEnrageTimer then - - --printf("ENRAGING!!") - - for _,hMob in pairs ( self:GetSpawnedUnits() ) do - - if hMob:GetLevel() < 2 then - --printf("UPGRADING CREATURE %s to level 2", hMob:GetUnitName()) - hMob:CreatureLevelUp(1) - hMob:AddNewModifier( hMob, nil, "modifier_aghsfort_enrage" , {} ) - hMob:SetAcquisitionRange(9000) - end - - local hAbility = hMob:FindAbilityByName("hellbear_smash") - if hAbility then - --printf("UPGRADING ABILITY %s from %d to %d", hAbility:GetAbilityName(), hAbility:GetLevel(), 2 ) - hAbility:SetLevel(2) - end - - end - - end -end - --------------------------------------------------------------------------------- - -function CMapEncounterEnragedHellbears:CheckForCompletion() - if not self:HasRemainingEnemies() then - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounterEnragedHellbears:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -return CMapEncounterEnragedHellbears diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_enraged_wildwings.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_enraged_wildwings.lua deleted file mode 100755 index 36fed99..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_enraged_wildwings.lua +++ /dev/null @@ -1,153 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Enraged_Wildwings == nil then - CMapEncounter_Enraged_Wildwings = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - self.nCaptains = 6 - local bInvulnerable = true - - self.vWaveSchedule = - { - { - Time = 0, - Count = 2, - }, - { - Time = 36, - Count = 3, - }, - } - - self:AddSpawner( CDotaSpawner( "spawner_captain_trigger", "spawner_captain_trigger", - { - { - EntityName = "npc_aghsfort_creature_enraged_wildwing", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 50.0, - } - } ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szCaptainSpawner, self.szCaptainSpawner, 4, 5, 1.0, - { - { - EntityName = "npc_aghsfort_creature_enraged_wildwing", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 100.0, - }, - { - EntityName = "npc_aghsfort_creature_tornado_harpy", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 100.0, - }, - - - - }, bInvulnerable ) ) - - self:SetPortalTriggerSpawner( "spawner_captain_trigger", 0.8 ) - self:SetSpawnerSchedule( "spawner_captain_trigger", nil ) -- means spawn once when triggered - --self:SetSpawnerSchedule( self.szPeonSpawner, self.vPeonSchedule ) - self:SetSpawnerSchedule( self.szCaptainSpawner, self.vWaveSchedule ) - self:SetCalculateRewardsFromUnitCount( true ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:GetPreviewUnit() - return "npc_aghsfort_creature_enraged_wildwing" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:GetMaxSpawnedUnitCount() - local nCount = 0 - local hWarriorSpawners = self:GetSpawner( self.szPeonSpawner ) - if hWarriorSpawners then - nCount = nCount + hWarriorSpawners:GetSpawnPositionCount() * 2 - end - - local hChampionSpawners = self:GetSpawner( self.szCaptainSpawner ) - if hChampionSpawners then - nCount = nCount + hChampionSpawners:GetSpawnPositionCount() - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - self:AddEncounterObjective( "kill_wildwings", 0, self.nCaptains ) -end --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - if hVictim and hVictim:GetUnitName() == "npc_aghsfort_creature_enraged_wildwing" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "kill_wildwings" ) - self:UpdateEncounterObjective( "kill_wildwings", nCurrentValue + 1, nil ) - end -end --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:Start() - CMapEncounter.Start( self ) - self:StartAllSpawnerSchedules( 0 ) - - --for _,Spawner in pairs ( self:GetSpawners() ) do - -- if Spawner:GetSpawnerName() == "spawner_peon" then - -- Spawner:SpawnUnitsFromRandomSpawners( Spawner:GetSpawnPositionCount() ) - -- else - -- Spawner:SpawnUnitsFromRandomSpawners( self.nCaptains ) - -- end - --end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Enraged_Wildwings:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_aghsfort_creature_enraged_wildwing_tornado" then - return false - end - return true -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_Enraged_Wildwings diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_fire_roshan.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_fire_roshan.lua deleted file mode 100755 index d5b406d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_fire_roshan.lua +++ /dev/null @@ -1,152 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_FireRoshan == nil then - CMapEncounter_FireRoshan = class( {}, {}, CMapEncounter ) -end - - -function CMapEncounter_FireRoshan:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheUnitByNameSync( "npc_dota_creature_baby_roshan", context, -1 ) - - PrecacheResource( "particle", "particles/units/heroes/hero_jakiro/jakiro_icepath_debuff.vpcf", context ) - PrecacheResource( "particle", "particles/neutral_fx/mini_rosh_fire.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_lich/lich_frost_nova.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_lich/lich_slowed_cold.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_frost_lich.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_burn.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_FireRoshan:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.nNumBabyRoshans = 3 - - self:AddSpawner( CDotaSpawner( "spawner_fire_roshan", "spawner_fire_roshan", - { - { - EntityName = "npc_dota_creature_fire_roshan", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_ice_roshan", "spawner_ice_roshan", - { - { - EntityName = "npc_dota_creature_ice_roshan", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - local bInvulnerable = true - self.vReinforcementSchedule = - { - { - Time = 5, - Count = 2, - }, - { - Time = 20, - Count = 2, - }, - { - Time = 35, - Count = 2, - }, - { - Time = 50, - Count = 2, - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_reinforcements", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_baby_roshan", - Team = DOTA_TEAM_BADGUYS, - Count = 4, - PositionNoise = 225.0, - }, - }, bInvulnerable ) ) - - self:SetSpawnerSchedule( "spawner_reinforcements", self.vReinforcementSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_FireRoshan:InitializeObjectives() - self:AddEncounterObjective( "defeat_blazhan", 0, 0 ) - self:AddEncounterObjective( "defeat_frozhan", 0, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_FireRoshan:GetPreviewUnit() - return "npc_dota_creature_fire_roshan" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_FireRoshan:Start() - CMapEncounter.Start( self ) - - self:CreateUnits() - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_FireRoshan:CreateUnits() - for _,Spawner in pairs ( self:GetSpawners() ) do - local vecUnits = Spawner:SpawnUnits() - for _,hUnit in pairs ( vecUnits ) do - if hUnit:GetUnitName() == "npc_dota_creature_ice_roshan" then - hUnit:SetMaterialGroup( "3" ) - end - if hUnit:GetUnitName() == "npc_dota_creature_fire_roshan" then - hUnit:SetMaterialGroup( "2" ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_FireRoshan:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - print( "CMapEncounter_FireRoshan:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - else - print( "CMapEncounter_FireRoshan:OnSpawnerFinished: WARNING: Can't find a living hero" ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_FireRoshan diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_gauntlet.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_gauntlet.lua deleted file mode 100755 index b01de49..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_gauntlet.lua +++ /dev/null @@ -1,144 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Gauntlet == nil then - CMapEncounter_Gauntlet = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_grimstroke/grimstroke_ink_swell_buff.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_grimstroke/grimstroke_cast_ink_swell.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_grimstroke/grimstroke_ink_swell_aoe.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_grimstroke/grimstroke_ink_swell_tick_damage.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_lifestealer", "spawner_lifestealer", - { - { - EntityName = "npc_dota_creature_life_stealer", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - self:AddSpawner( CDotaSpawner( "spawner_grimstroke", "spawner_grimstroke", - { - { - EntityName = "npc_dota_creature_grimstroke", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - --[[ - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_gauntlet_skeleton", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 0.0, - }, - } - ) ) - ]] -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:GetPreviewUnit() - return "npc_dota_creature_life_stealer" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:Start() - CMapEncounter.Start( self ) - - self:CreateEnemies() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:CheckForCompletion() - if not self:HasRemainingEnemies() and not self:HasAnyPortals() then - - -- Disable any traps in the map - local hRelays = Entities:FindAllByName( "disable_traps_relay" ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end - - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Gauntlet:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Wildwings:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Gauntlet diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears.lua deleted file mode 100755 index 929ea05..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears.lua +++ /dev/null @@ -1,107 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Hellbears == nil then - CMapEncounter_Hellbears = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - local flInitialPortalSpawnDelay = 0.0 - local flInitialSummonTime = 5.0 - local flPortalIntervalInput = DEFAULT_PORTAL_SPAWN_INTERVAL - local flScaleInput = 1.0 - local nNumPortals = 4 - - for i=1,nNumPortals do - local name = string.format( "portal_%i", i ) - - self:AddPortalSpawner( CPortalSpawner( name, "dynamic_portal", 60 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_creature_small_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 4, - PositionNoise = 0.0, - }, - { - EntityName = "npc_dota_creature_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 0.0, - }, - - } ) ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:GetPreviewUnit() - return "npc_dota_creature_hellbear" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:GetMaxSpawnedUnitCount() - local nCount = 0 - local hWarriorSpawners = self:GetSpawner( self.szPeonSpawner ) - if hWarriorSpawners then - nCount = nCount + hWarriorSpawners:GetSpawnPositionCount() * 4 - end - - local hChampionSpawners = self:GetSpawner( self.szCaptainSpawner ) - if hChampionSpawners then - nCount = nCount + hChampionSpawners:GetSpawnPositionCount() * 2 - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - --print( "CMapEncounter_Hellbears:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - else - print( "CMapEncounter_Hellbears:OnSpawnerFinished: WARNING: Can't find a living hero" ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Hellbears diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears_portal_v2.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears_portal_v2.lua deleted file mode 100755 index 4ad46ec..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears_portal_v2.lua +++ /dev/null @@ -1,217 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Hellbears == nil then - CMapEncounter_Hellbears = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.vPeonSchedule = - { - { - Time = 5, - Count = 4, - }, - { - Time = 25, - Count = 4, - }, - { - Time = 45, - Count = 6, - }, - { - Time = 65, - Count = 6, - }, - { - Time = 85, - Count = 6, - }, - { - Time = 105, - Count = 8, - }, - { - Time = 125, - Count = 8, - }, - { - Time = 145, - Count = 8, - }, - } - self.vCaptainSchedule = - { - { - Time = 5, - Count = 2, - }, - { - Time = 25, - Count = 2, - }, - { - Time = 45, - Count = 3, - }, - { - Time = 65, - Count = 3, - }, - { - Time = 85, - Count = 3, - }, - { - Time = 105, - Count = 4, - }, - { - Time = 125, - Count = 4, - }, - { - Time = 145, - Count = 4, - }, - } - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_small_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 225.0, - } - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain_trigger", "spawner_captain_trigger", - { - { - EntityName = "npc_dota_creature_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 225.0, - } - } ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_v2_peon", "portal_v2_peon", 8, 7.5, 0.7, - { - { - EntityName = "npc_dota_creature_small_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 0.0, - }, - } ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_v2_captain", "portal_v2_captain", 35, 7.5, 1.3, - { - { - EntityName = "npc_dota_creature_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:SetPortalTriggerSpawner( "spawner_captain_trigger", 0.5 ) - - self:SetSpawnerSchedule( "spawner_peon", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_captain_trigger", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "portal_v2_peon", self.vPeonSchedule ) - self:SetSpawnerSchedule( "portal_v2_captain", self.vCaptainSchedule ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:GetPreviewUnit() - return "npc_dota_creature_hellbear" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:Start() - CMapEncounter.Start( self ) - - local spawnerFocusPath = self:GenerateSpawnFocusPath( "portal_v2_captain", 300, 1000 ) - self:AssignSpawnFocusPath( "portal_v2_peon", spawnerFocusPath ) - self:AssignSpawnFocusPath( "portal_v2_captain", spawnerFocusPath ) - - self:StartAllSpawnerSchedules( 0 ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:InitializeObjectives() - --CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "destroy_spawning_portals", 0, 0 ) - self:AddEncounterObjective( "survive_waves", 0, #self.vCaptainSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnPortalV2Killed( hVictim, hAttacker, nUnitCountSuppressed ) - CMapEncounter.OnPortalV2Killed( self, hVictim, hAttacker, nUnitCountSuppressed ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + nUnitCountSuppressed, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - if hSpawner.szSpawnerName == "portal_v2_captain" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - --print( "CMapEncounter_Hellbears:OnSpawnerFinished " ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Hellbears diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears_portal_v3.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears_portal_v3.lua deleted file mode 100755 index 0b53eb8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellbears_portal_v3.lua +++ /dev/null @@ -1,217 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Hellbears == nil then - CMapEncounter_Hellbears = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.vPeonSchedule = - { - { - Time = 5, - Count = 3, - }, - { - Time = 15, - Count = 3, - }, - { - Time = 35, - Count = 3, - }, - { - Time = 50, - Count = 3, - }, - { - Time = 65, - Count = 3, - }, - { - Time = 80, - Count = 4, - }, - { - Time = 95, - Count = 4, - }, - { - Time = 110, - Count = 4, - }, - } - self.vCaptainSchedule = - { - { - Time = 5, - Count = 1, - }, - { - Time = 20, - Count = 2, - }, - { - Time = 35, - Count = 2, - }, - { - Time = 50, - Count = 2, - }, - { - Time = 65, - Count = 2, - }, - { - Time = 80, - Count = 3, - }, - { - Time = 95, - Count = 3, - }, - { - Time = 110, - Count = 3, - }, - } - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_small_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 225.0, - } - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain_trigger", "spawner_captain_trigger", - { - { - EntityName = "npc_dota_creature_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 225.0, - } - } ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_v2_peon", "portal_v2_peon", 16, 8, 0.8, - { - { - EntityName = "npc_dota_creature_small_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 4, - PositionNoise = 0.0, - }, - } ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_v2_captain", "portal_v2_captain", 70, 8, 1.5, - { - { - EntityName = "npc_dota_creature_hellbear", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:SetPortalTriggerSpawner( "spawner_captain_trigger", 0.5 ) - - self:SetSpawnerSchedule( "spawner_peon", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_captain_trigger", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "portal_v2_peon", self.vPeonSchedule ) - self:SetSpawnerSchedule( "portal_v2_captain", self.vCaptainSchedule ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:GetPreviewUnit() - return "npc_dota_creature_hellbear" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:Start() - CMapEncounter.Start( self ) - - local spawnerFocusPath = self:GenerateSpawnFocusPath( "portal_v2_captain", 300, 1000 ) - self:AssignSpawnFocusPath( "portal_v2_peon", spawnerFocusPath ) - self:AssignSpawnFocusPath( "portal_v2_captain", spawnerFocusPath ) - - self:StartAllSpawnerSchedules( 0 ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:InitializeObjectives() - --CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "destroy_spawning_portals", 0, 0 ) - self:AddEncounterObjective( "survive_waves", 0, #self.vCaptainSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnPortalV2Killed( hVictim, hAttacker, nUnitCountSuppressed ) - CMapEncounter.OnPortalV2Killed( self, hVictim, hAttacker, nUnitCountSuppressed ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + nUnitCountSuppressed, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Hellbears:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - if hSpawner.szSpawnerName == "portal_v2_captain" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - --print( "CMapEncounter_Hellbears:OnSpawnerFinished " ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Hellbears diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellfire_canyon.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellfire_canyon.lua deleted file mode 100755 index 4b3a67f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_hellfire_canyon.lua +++ /dev/null @@ -1,47 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_trap_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_HellfireCanyon == nil then - CMapEncounter_HellfireCanyon = class( {}, {}, CMapEncounter_TrapBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_HellfireCanyon:GetPreviewUnit() - return "npc_dota_breathe_fire_trap" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_HellfireCanyon:CheckForCompletion() - if not IsServer() then - return - end - local bIsComplete = CMapEncounter_TrapBase.CheckForCompletion( self ) - if bIsComplete then - self:DisableTraps() - end - - return bIsComplete -end - --------------------------------------------------------------------------------- - -function CMapEncounter_HellfireCanyon:DisableTraps() - --print("Disabling Traps!") - -- Disable any traps in the map - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "disable_traps_relay", false ) - --local hRelays = Entities:FindAllByName( "disable_traps_relay" ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_HellfireCanyon diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_jungle_fire_maze.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_jungle_fire_maze.lua deleted file mode 100755 index ae8353a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_jungle_fire_maze.lua +++ /dev/null @@ -1,46 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_trap_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_JungleFireMaze == nil then - CMapEncounter_JungleFireMaze = class( {}, {}, CMapEncounter_TrapBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleFireMaze:GetPreviewUnit() - return "npc_dota_breathe_fire_trap" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleFireMaze:CheckForCompletion() - if not IsServer() then - return - end - local bIsComplete = CMapEncounter_TrapBase.CheckForCompletion( self ) - if bIsComplete then - self:DisableTraps() - end - - return bIsComplete -end - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleFireMaze:DisableTraps() - --print("Disabling Traps!") - -- Disable any traps in the map - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "disable_traps_relay", false ) - --local hRelays = Entities:FindAllByName( "disable_traps_relay" ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_JungleFireMaze diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_jungle_hijinx.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_jungle_hijinx.lua deleted file mode 100755 index 0e5870a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_jungle_hijinx.lua +++ /dev/null @@ -1,109 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_JungleHijinx == nil then - CMapEncounter_JungleHijinx = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - - -function CMapEncounter_JungleHijinx:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_huskar", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_dazzle", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_dazzle.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_huskar.vsndevts", context ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleHijinx:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_wildwing_laborer", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 150.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_dazzle", "spawner_dazzle", - { - { - EntityName = "npc_dota_creature_dazzle", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_huskar", "spawner_huskar", - { - { - EntityName = "npc_dota_creature_huskar", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:SetSpawnerSchedule( "spawner_peon", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_dazzle", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_huskar", nil ) -- means spawn once when triggered - -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleHijinx:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleHijinx:GetPreviewUnit() - return "npc_dota_creature_huskar" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleHijinx:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_JungleHijinx:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerName() == "spawner_huskar" then - for _,hUnit in pairs ( hSpawnedUnits ) do - if hUnit then - local hBurningSpears = hUnit:FindAbilityByName( "huskar_burning_spear" ) - if hBurningSpears then - hBurningSpears:ToggleAutoCast() - end - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_JungleHijinx diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_kunkka_tide.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_kunkka_tide.lua deleted file mode 100755 index 57d9faf..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_kunkka_tide.lua +++ /dev/null @@ -1,183 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_KunkkaTide == nil then - CMapEncounter_KunkkaTide = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_KunkkaTide:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_tidehunter", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_kunkka", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_tidehunter.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_kunkka.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_KunkkaTide:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - local bInvulnerable = true - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - self.szBossSpawner = "spawner_boss" - - -- Peon: - self.vPeonSchedule = - { - { - Time = 0, - Count = 2, - }, - { - Time = 20, - Count = 2, - }, - { - Time = 40, - Count = 2, - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_peon", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_tidehunter_mini", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 0.0, - }, - { - EntityName = "npc_dota_creature_tidehunter_medium", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_peon", self.vPeonSchedule ) - - -- Captain: - self.vCaptainSchedule = - { - { - Time = 20, - Count = 1, - }, - { - Time = 40, - Count = 1, - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_captain", "spawner_captain", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_kunkka_medium", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_captain", self.vCaptainSchedule ) - - -- Boss: - self.vBossSchedule = - { - { - Time = 0, - Count = 1, - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_boss", "spawner_boss", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_tidehunter_large", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_boss", self.vBossSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_KunkkaTide:GetPreviewUnit() - return "npc_dota_creature_tidehunter_medium" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_KunkkaTide:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - --self:AddEncounterObjective( "survive_waves", 0, #self.vPeonSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_KunkkaTide:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_KunkkaTide:Start() - CMapEncounter.Start( self ) - - --self:StartSpawnerSchedule( self.szPeonSpawner, 6 ) - --self:StartSpawnerSchedule( self.szCaptainSpawner, 6 ) - --self:StartSpawnerSchedule( self.szBossSpawner, 6 ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_KunkkaTide:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Hellbears:OnSpawnerFinished " ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - else - print( "WARNING: Can't find a living hero and the objective entitiy is missing!" ) - end - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_KunkkaTide diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_legion_commander.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_legion_commander.lua deleted file mode 100755 index 57c7589..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_legion_commander.lua +++ /dev/null @@ -1,289 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_LegionCommander == nil then - CMapEncounter_LegionCommander = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.bInitialSpawn = true - self.bTrapsEnabled = false - self.nTrapTimer = 0 - self:SetCalculateRewardsFromUnitCount( true ) - - local bInvulnerable = true - - -- bespoke version: - self.vPeonSchedule = - { - { - Time = 0, - Count = 2, - }, - { - Time = 20, - Count = 2, - }, - { - Time = 40, - Count = 3, - }, - { - Time = 60, - Count = 3, - }, - } - - --DeepPrintTable( self.vPeonSchedule ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_peon", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_gladiator_creep", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 100.0, - }, - { - EntityName = "npc_dota_creature_skywrath_mage", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 100.0, - }, - - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_peon", self.vPeonSchedule ) - - -- Captain: - self.vCaptainSchedule = - { - { - Time = 0, - Count = 1, - }, - { - Time = 20, - Count = 1, - }, - { - Time = 40, - Count = 2, - }, - { - Time = 60, - Count = 2, - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_captain", "spawner_captain", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_legion_commander", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_captain", self.vCaptainSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheUnitByNameSync( "npc_dota_creature_gladiator_creep", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_skywrath_mage", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_legion_commander", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_skywrath_mage.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_legion_commander.vsndevts", context ) - PrecacheResource( "particle", "particles/econ/events/ti10/emblem/ti10_emblem_effect_gem_ring.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:GetPreviewUnit() - return "npc_dota_creature_legion_commander" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vPeonSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:ShouldAutoStartGlobalAscensionAbilities() - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:Start() - CMapEncounter.Start( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - if self.bInitialSpawn == true then - --self:SpawnTowers() - self.bInitialSpawn = false - end - - if hSpawner.szSpawnerName == "spawner_peon" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - --print( "CMapEncounter_Brewmaster:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:OnTriggerStartTouch( event ) - CMapEncounter.OnTriggerStartTouch( self, event ) - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - - printf( "szTriggerName: %s, hUnit:GetUnitName(): %s, hTriggerEntity:GetName(): %s", szTriggerName, hUnit:GetUnitName(), hTriggerEntity:GetName() ) - - if self.bCreatureSpawnsActivated == nil and szTriggerName == "trigger_spawn_creatures" then - self.bCreatureSpawnsActivated = true - - self:StartGlobalAscensionAbilities() - self:StartAllSpawnerSchedules( 0 ) - self.bTrapsEnabled = true - - printf( "Unit \"%s\" triggered creature spawning!", hUnit:GetUnitName() ) - EmitGlobalSound( "RoundStart" ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:OnThink() - CMapEncounter.OnThink( self ) - if self.bTrapsEnabled == true then - self.nTrapTimer = self.nTrapTimer + 1 - end - if self.nTrapTimer == 1 then - self:FireArrowTrap1() - elseif self.nTrapTimer == 2 then - self:FireArrowTrap2() - elseif self.nTrapTimer == 3 then - self:FireArrowTrap3() - elseif self.nTrapTimer == 4 then - self:FireArrowTrap4() - self.nTrapTimer = 0 - end - -end - -function CMapEncounter_LegionCommander:FireArrowTrap1() - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "arrow_trap_01_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - -function CMapEncounter_LegionCommander:FireArrowTrap2() - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "arrow_trap_02_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - -function CMapEncounter_LegionCommander:FireArrowTrap3() - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "arrow_trap_03_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - -function CMapEncounter_LegionCommander:FireArrowTrap4() - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "arrow_trap_04_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:CheckForCompletion() - if self.bInitialSpawn == false then - if not self:HasRemainingEnemies() and self:AreScheduledSpawnsComplete() and not self:HasAnyPortals() then - self.bTrapsEnabled = false - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "disable_traps_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end - - return true - end - end - - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_LegionCommander:OnComplete() - CMapEncounter.OnComplete( self ) - - local hHeroes = HeroList:GetAllHeroes() - for _, hHero in pairs ( hHeroes ) do - if hHero ~= nil and not hHero:IsNull() and hHero:IsRealHero() then - hHero:RemoveModifierByName( "modifier_legion_commander_duel_damage_boost" ) - end - end -end - - - --------------------------------------------------------------------------------- - -return CMapEncounter_LegionCommander - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_mirana.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_mirana.lua deleted file mode 100755 index 449b807..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_mirana.lua +++ /dev/null @@ -1,157 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Mirana == nil then - CMapEncounter_Mirana = class( {}, {}, CMapEncounter ) -end - -function CMapEncounter_Mirana:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- Initial Spawns - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_luna_mini", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 225.0, - } - } ) ) - - -- Wave Spawns - local vPeonSchedule = - { - { - Time = 0, - Count = 4, - }, - { - Time = 16, - Count = 5, - }, - { - Time = 32, - Count = 5, - }, - { - Time = 48, - Count = 5, - }, - { - Time = 64, - Count = 6, - }, - { - Time = 80, - Count = 6, - }, - } - local vCaptainSchedule = - { - { - Time = 0, - Count = 2, - }, - { - Time = 16, - Count = 2, - }, - { - Time = 32, - Count = 2, - }, - { - Time = 48, - Count = 2, - }, - { - Time = 64, - Count = 2, - }, - { - Time = 80, - Count = 3, - }, - } - - local nPeonPortalHealth = 10 * hRoom:GetDepth() - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_v2_peon", "portal_v2_peon", nPeonPortalHealth, 8, 0.7, - { - { - EntityName = "npc_dota_creature_luna_mini", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 0.0, - }, - } ), vPeonSchedule ) - - local nCaptainPortalHealth = 30 * hRoom:GetDepth() - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "portal_v2_captain", "portal_v2_captain", nCaptainPortalHealth, 8, 1.3, - { - { - EntityName = "npc_dota_creature_mirana", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ), vCaptainSchedule ) - - self:SetSpawnerSchedule( "spawner_peon", { { Time = 0, Count = 12 } } ) - self:SetSpawnerSchedule( "portal_v2_peon", vPeonSchedule ) - self:SetSpawnerSchedule( "portal_v2_captain", vCaptainSchedule ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Mirana:GetPreviewUnit() - return "npc_dota_creature_mirana" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Mirana:Start() - CMapEncounter.Start( self ) - - self:StartSpawnerSchedule( "spawner_peon", 0 ) - self:StartSpawnerSchedule( "portal_v2_peon", 4 ) - self:StartSpawnerSchedule( "portal_v2_captain", 4 ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Mirana:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Hellbears:OnSpawnerFinished " ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - else - print( "WARNING: Can't find a living hero and the objective entitiy is missing!" ) - end - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Mirana diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_morphlings_b.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_morphlings_b.lua deleted file mode 100755 index ab9ae2e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_morphlings_b.lua +++ /dev/null @@ -1,207 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Morphlings_B == nil then - CMapEncounter_Morphlings_B = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.szPeonSpawner = "spawner_peon" - - self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_tiny_crab", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 225.0, - }, - } ) ) - - self.szPeonPortalV2 = "portal_v2_peon" - self.szCaptainPortalV2 = "portal_v2_captain" - - local vPeonSchedule = - { - { - Time = 5, - Count = 4, - }, - { - Time = 40, - Count = 5, - }, - { - Time = 75, - Count = 6, - }, - { - Time = 110, - Count = 7, - }, - } - - self.vCaptainSchedule = - { - { - Time = 5, - Count = 2, - }, - { - Time = 40, - Count = 3, - }, - { - Time = 75, - Count = 3, - }, - { - Time = 110, - Count = 4, - }, - } - - -- szSpawnerNameInput, nPortalHealthInput, flSummonTimeInput, flScaleInput, rgUnitsInfoInput - - local nSmallPortalHealth = 12 * hRoom:GetDepth() - local nBigPortalHealth = 40 * hRoom:GetDepth() - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szPeonPortalV2, self.szPeonPortalV2, nSmallPortalHealth, 6, 0.7, - { - { - EntityName = "npc_dota_creature_tiny_crab", - Team = DOTA_TEAM_BADGUYS, - Count = 4, - PositionNoise = 0.0, - }, - } ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szCaptainPortalV2, self.szCaptainPortalV2, nBigPortalHealth, 6, 1.3, - { - { - EntityName = "npc_dota_creature_morphling_big", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 0.0, - }, - } ) ) - - self:SetSpawnerSchedule( self.szPeonPortalV2, vPeonSchedule ) - self:SetSpawnerSchedule( self.szCaptainPortalV2, self.vCaptainSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:InitializeObjectives() - --CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "destroy_spawning_portals", 0, 0 ) - self:AddEncounterObjective( "survive_waves", 0, #self.vCaptainSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:GetMaxSpawnedUnitCount() - local nCount = 0 - -- Standing trash - local hPeonSpawners = self:GetSpawner( "spawner_peon") - if hPeonSpawners then - nCount = nCount + hPeonSpawners:GetSpawnPositionCount() * 2 - end - -- Peons = 88 - nCount = nCount + 88 - -- Captains = 24 - nCount = nCount + 24 - -- Total should be 124 - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:OnPortalV2Killed( hVictim, hAttacker, nUnitCountSuppressed ) - CMapEncounter.OnPortalV2Killed( self, hVictim, hAttacker, nUnitCountSuppressed ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + nUnitCountSuppressed, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - ------------- - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:GetPreviewUnit() - return "npc_dota_creature_morphling_big" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:Start() - CMapEncounter.Start( self ) - - self:CreateUnits() - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:CreateUnits() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Morphlings_B:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - if hSpawner.szSpawnerName == "portal_v2_captain" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - --print( "CMapEncounter_Morphlings_B:OnSpawnerFinished " ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[ RandomInt( 1, #heroes ) ] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Morphlings_B diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_morty_transition.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_morty_transition.lua deleted file mode 100755 index b5e2c07..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_morty_transition.lua +++ /dev/null @@ -1,271 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_bonus_base" ) - - --------------------------------------------------------------------------------- - -if CMapEncounter_MortyTransition == nil then - CMapEncounter_MortyTransition = class( {}, {}, CMapEncounter_BonusBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:constructor( hRoom, szEncounterName ) - CMapEncounter_BonusBase.constructor( self, hRoom, szEncounterName ) - - LinkLuaModifier( "modifier_morty_start_passive", "modifiers/creatures/modifier_morty_start_passive", LUA_MODIFIER_MOTION_NONE ) - LinkLuaModifier( "modifier_ride_morty", "modifiers/modifier_ride_morty", LUA_MODIFIER_MOTION_BOTH ) - - self.nGoldPerBag = 25 - self.flMortyTimeLimit = 45.0 - - self:AddSpawner( CDotaSpawner( "morty_spawner", "morty_spawner", - { - { - EntityName = "npc_aghsfort_morty", - Team = DOTA_TEAM_GOODGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:Precache( context ) - CMapEncounter_BonusBase.Precache( self, context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_snapfire/hero_snapfire_cookie_receive.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_snapfire/hero_snapfire_cookie_landing.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_life_stealer/life_stealer_infested_unit.vpcf", context ) - PrecacheResource( "particle", "particles/dev/library/base_follow_absorigin_continuous.vpcf", context ) - PrecacheResource( "particle", "particles/gameplay/location_hint_goal.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_snapfire.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:GetPreviewUnit() - return "npc_aghsfort_morty" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:OnEncounterLoaded() - CMapEncounter_BonusBase.OnEncounterLoaded( self ) - self:SetupBristlebackShop( true ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:InitializeObjectives() - self:AddEncounterObjective( "objective_saddle_up_on_morty", 0, 4 ) - self:AddEncounterObjective( "objective_jump_to_collect_gold", 0, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:Start() - CMapEncounter_BonusBase.Start( self ) - - self.nAbilityListener = ListenToGameEvent( "dota_non_player_used_ability", Dynamic_Wrap( getclass( self ), "OnNonPlayerUsedAbility" ), self ) - - self.flEndTime = 99999999999999999 - self.Morties = {} - - local hUnits = self:GetSpawner( "morty_spawner" ):SpawnUnits() - local nPlayerID = 0 - for _,hMorty in pairs ( hUnits ) do - - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_bonus_room_start", {} ) - end - - hMorty:SetControllableByPlayer( nPlayerID, true ) - hMorty:SetOwner( hPlayerHero ) - local hBuff = hMorty:AddNewModifier( hMorty, nil, "modifier_morty_start_passive", {} ) - if hBuff then - hBuff.Encounter = self - end - - local kv = - { - min_x = self:GetRoom():GetMins().x + 1000, - min_y = self:GetRoom():GetMins().y + 2500, - max_x = self:GetRoom():GetMaxs().x - 3500, - max_y = self:GetRoom():GetMaxs().y - 550, - } - hMorty:AddNewModifier( hMorty, nil, "modifier_morty_leash", kv ) - - table.insert( self.Morties, hMorty ) - - hMorty.nFXIndex = ParticleManager:CreateParticleForPlayer( "particles/gameplay/location_hint_goal.vpcf", PATTACH_WORLDORIGIN, nil, PlayerResource:GetPlayer( nPlayerID ) ) - ParticleManager:SetParticleControl( hMorty.nFXIndex, 0, hMorty:GetAbsOrigin() ) - ParticleManager:SetParticleControl( hMorty.nFXIndex, 1, Vector( 1.0, 0.8, 0.2 ) ) - - local vLocation = hMorty:GetAbsOrigin() - local WorldTextHint = {} - WorldTextHint["hint_text"] = "hint_ride_morty" - WorldTextHint["command"] = 18 -- DOTA_KEYBIND_HERO_MOVE - WorldTextHint["ent_index"] = -1 - WorldTextHint["location_x"] = vLocation.x - WorldTextHint["location_y"] = vLocation.y - WorldTextHint["location_z"] = vLocation.z - - CustomGameEventManager:Send_ServerToPlayer( PlayerResource:GetPlayer( nPlayerID ), "start_world_text_hint", WorldTextHint ) - - nPlayerID = nPlayerID + 1 - end - - self.nGoldForBags = self.nGoldReward * AGHANIM_PLAYERS - self.nGoldReward = 0 - - local hTrigger = self:GetRoom():FindAllEntitiesInRoomByName( "gold_bag_trigger", false ) - if hTrigger[ 1 ] then - local vMins = hTrigger[ 1 ]:GetBoundingMins() - local vMaxs = hTrigger[ 1 ]:GetBoundingMaxs() - vMins = hTrigger[ 1 ]:TransformPointEntityToWorld( vMins ) - vMaxs = hTrigger[ 1 ]:TransformPointEntityToWorld( vMaxs ) - - local flMinHeight = 0 - local flMaxHeight = 128 - - self.GoldBags = {} - for i=1,300 do - local flHeight = flMinHeight - local nHigh = math.random( 0, 1 ) - if nHigh == 1 then - flHeight = flMaxHeight - end - - local vGoldBagPos = Vector( RandomFloat( vMins.x, vMaxs.x ), RandomFloat( vMins.y, vMaxs.y ), vMins.z ) - self.nGoldForBags = self.nGoldForBags - self.nGoldPerBag - - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( self.nGoldPerBag ) - - -- Bump the height up by a constant amount over the ground minimally - -- NOTE: We don't have to take flGroundHeight into account here - -- because CreateItemOnPositionSync will automatically drop to ground - flHeight = flHeight + 128 - - -- NOTE: CreateItemOnPositionSync will drop the item to the ground, - -- so the z height is going to be ignored - -- However, LaunchLootRequiredHeight will fix it back up for us. - local drop = CreateItemOnPositionSync( vGoldBagPos, newItem ) - drop:SetModelScale( 1.5 ) - newItem:LaunchLootRequiredHeight( true, flHeight, flHeight, 0.75, vGoldBagPos ) - table.insert( self.GoldBags, newItem ) - end - else - print( "trigger not found" ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:OnThink() - CMapEncounter_BonusBase.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:OnPlayerRideMorty( nPlayerID, hMorty ) - ParticleManager:DestroyParticle( hMorty.nFXIndex, true ) - CustomGameEventManager:Send_ServerToPlayer( PlayerResource:GetPlayer( nPlayerID ), "stop_world_text_hint", {} ) - - PlayerResource:SetCameraTarget( nPlayerID, hMorty ) - PlayerResource:SetOverrideSelectionEntity( nPlayerID, hMorty ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "objective_saddle_up_on_morty" ) - local nSaddledPlayers = nCurrentValue + 1 - self:UpdateEncounterObjective( "objective_saddle_up_on_morty", nSaddledPlayers, nil ) - - local nPlayerCount = 0 - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS and PlayerResource:IsValidPlayerID( nPlayerID ) then - nPlayerCount = nPlayerCount + 1 - end - end - - if nSaddledPlayers >= nPlayerCount then - self:StartBonusRound( self.flMortyTimeLimit ) - for _,hMorty in pairs ( self.Morties ) do - hMorty:RemoveModifierByName( "modifier_morty_start_passive" ) - - local vLocation = hMorty:GetAbsOrigin() - local WorldTextHint = {} - WorldTextHint["hint_text"] = "hint_hop_with_morty" - WorldTextHint["command"] = 53 -- DOTA_KEYBIND_ABILITY_PRIMARY1 - WorldTextHint["ent_index"] = -1 - WorldTextHint["location_x"] = vLocation.x - WorldTextHint["location_y"] = vLocation.y - WorldTextHint["location_z"] = vLocation.z - CustomGameEventManager:Send_ServerToPlayer( PlayerResource:GetPlayer( hMorty:GetPlayerOwnerID() ), "start_world_text_hint", WorldTextHint ) - end - end -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_MortyTransition:OnComplete() - CMapEncounter_BonusBase.OnComplete( self ) - - StopListeningToGameEvent( self.nAbilityListener ) - StopListeningToGameEvent( self.nItemPickedUpListener ) - - for _,hMorty in pairs ( self.Morties ) do - hMorty:SetControllableByPlayer( -1, true ) - hMorty:SetOwner( nil ) - end - - for nPlayerID=0,AGHANIM_PLAYERS-1 do - local hHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hHero then - hHero:RemoveModifierByName( "modifier_bonus_room_start" ) - hHero:RemoveModifierByName( "modifier_ride_morty" ) - - PlayerResource:SetCameraTarget( nPlayerID, nil ) - PlayerResource:SetOverrideSelectionEntity( nPlayerID, nil ) - - local hEndPosition = self:GetRoom():FindAllEntitiesInRoomByName( "bonus_room_end_position", true ) - FindClearSpaceForUnit( hHero, hEndPosition[1]:GetAbsOrigin(), true ) - CenterCameraOnUnit( nPlayerID, hHero ) - end - end - - for _,GoldBag in pairs ( self.GoldBags ) do - if GoldBag and not GoldBag:IsNull() then - UTIL_Remove( GoldBag:GetContainer() ) - UTIL_Remove( GoldBag ) - end - end -end - ---------------------------------------------------------- --- dota_non_player_used_ability --- * abilityname --- * caster_entindex ---------------------------------------------------------- - -function CMapEncounter_MortyTransition:OnNonPlayerUsedAbility( event ) - local szAbilityName = event.abilityname - local hCaster = EntIndexToHScript( event.caster_entindex ) - if hCaster and szAbilityName == "morty_hop" then - for _,hMorty in pairs ( self.Morties ) do - if hMorty == hCaster then - CustomGameEventManager:Send_ServerToPlayer( PlayerResource:GetPlayer( hMorty:GetPlayerOwnerID() ), "stop_world_text_hint", {} ) - break - end - end - end -end - ------------------------------------------ - -return CMapEncounter_MortyTransition diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_mushroom_mines.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_mushroom_mines.lua deleted file mode 100755 index b890df3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_mushroom_mines.lua +++ /dev/null @@ -1,203 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_MushroomMines == nil then - CMapEncounter_MushroomMines = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.nNumShroomGiantSpawners = 3 - - self.fShamanSpawnTimer = -1.0 - self.fShamanRespawnTimeMin = 3.0 - self.fShamanRespawnTimeMax = 7.0 - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_shroomling", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 500.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain", "spawner_captain", - { - { - EntityName = "npc_dota_creature_shroom_giant", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - } - } ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "shaman_portal", "shaman_portal", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_shadow_shaman", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, true - ) ) - - -- DON'T SET SCHEDULES FOR THESE - --self:SetSpawnerSchedule( "spawner_captain", nil ) - --self:SetSpawnerSchedule( "spawner_peon", nil ) - --self:SetSpawnerSchedule( "shaman_portal", nil ) - - self.bShroomGiantsKilled = false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:InitializeObjectives() - self.nTotalGiants = self.nNumShroomGiantSpawners - self:AddEncounterObjective( "kill_shroom_giants", 0, self.nTotalGiants ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:OnThink() - CMapEncounter.OnThink( self ) - - if self.fShamanSpawnTimer > 0 and self.fShamanSpawnTimer < GameRules:GetGameTime() then - print( 'Shaman ready to spawn!' ) - local hShamanPortal = self:GetPortalSpawnerV2( "shaman_portal" ) - hShamanPortal:SpawnUnitsFromRandomSpawners( 1 ) - self.fShamanSpawnTimer = -1.0 -- this will be reset when the shaman is killed - end -end - --------------------------------------------------------------------------------- - ---[[ -function CMapEncounter_MushroomMines:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_dota_creature_shadow_shaman" then - return false - end - - return true -end ---]] - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - if hVictim and hVictim:GetUnitName() == "npc_dota_creature_shroom_giant" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "kill_shroom_giants" ) - nCurrentValue = nCurrentValue + 1 - self:UpdateEncounterObjective( "kill_shroom_giants", nCurrentValue, nil ) - --print( 'Updating kills objective to ' .. nCurrentValue ) - - if nCurrentValue >= self.nTotalGiants then - self.bShroomGiantsKilled = true - self:AddEncounterObjective( "defeat_all_enemies", 0, 0 ) - self:WakeUpShroomlings() - end - - elseif hVictim and hVictim:GetUnitName() == "npc_dota_creature_shadow_shaman" then - print( 'Shadow Shaman killed!' ) - self:SetShamanRespawnTimer() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:SetShamanRespawnTimer() - local fTimer = RandomFloat( self.fShamanRespawnTimeMin, self.fShamanRespawnTimeMax ) - self.fShamanSpawnTimer = GameRules:GetGameTime() + fTimer - print( 'Shadow Shaman spawn set for GetGameTime() + ' .. fTimer ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:WakeUpShroomlings() - local vecShroomlings = self:GetSpawnedUnitsOfType( "npc_dota_creature_shroomling" ) - print( 'Waking up ' .. #vecShroomlings .. " Shroomlings") - if #vecShroomlings > 0 then - for _,hUnit in pairs ( vecShroomlings ) do - local flWakeTime = RandomFloat( 2.0, 15.0 ) - print( 'Wake up time set to ' .. flWakeTime ) - - local hSleepBuff = hUnit:FindModifierByName( "modifier_shroomling_sleep" ) - if hSleepBuff ~= nil then - hSleepBuff:SetDuration( flWakeTime, true ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:GetPreviewUnit() - return "npc_dota_creature_shroom_giant" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:GetMaxSpawnedUnitCount() - - local nCount = 0 - - for _,Spawner in pairs ( self.Spawners ) do - nCount = nCount + self:ComputeUnitsSpawnedBySchedule( Spawner ) - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:Start() - CMapEncounter.Start( self ) - - -- spawn a set number of captains from the available spawners - local GiantSpawner = self:GetSpawner( "spawner_captain" ) - GiantSpawner:SpawnUnitsFromRandomSpawners( self.nNumShroomGiantSpawners ) - - -- spawn standing trash at half of the peon spawn locations - local ShroomSpawner = self:GetSpawner( "spawner_peon" ) - local nSpawnPositionCount = ShroomSpawner:GetSpawnPositionCount() - ShroomSpawner:SpawnUnitsFromRandomSpawners( nSpawnPositionCount / 2 ) - - self:SetShamanRespawnTimer() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_MushroomMines:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - --print( "CMapEncounter_Pinecones:OnSpawnerFinished" ) - - if hSpawner:GetSpawnerType() == "CPortalSpawnerV2" then -- only aggro the shamans that pop out of the spawners - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end - end -end - -return CMapEncounter_MushroomMines diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_naga_siren.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_naga_siren.lua deleted file mode 100755 index ef5c70e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_naga_siren.lua +++ /dev/null @@ -1,309 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_NagaSiren == nil then - CMapEncounter_NagaSiren = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - self.bMinesSpawned = false - self.nMinesToDestroy = 4 - self.nMinesDestroyed = 0 - self.bInitialSpawn = false - self.bSongUsed = false - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_slark_peon", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 100.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain", "spawner_captain", - { - { - EntityName = "npc_dota_creature_naga_siren_illusion", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - -- Reinforcements: - local bInvulnerable = true - - local vBossSchedule = { { Time = 0, Count = 1 } } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_boss", "spawner_boss", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_naga_siren_boss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - { - EntityName = "npc_dota_creature_naga_siren_illusion", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 300.0, - }, - }, bInvulnerable - ) ) - - local vReinforcementsSchedule = { { Time = 0, Count = 4 } } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "dynamic_portal", "dynamic_portal", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_slark_peon", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 100.0, - }, - { - EntityName = "npc_dota_creature_naga_siren_illusion", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_peon", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_captain", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_boss", vBossSchedule ) - self:SetSpawnerSchedule( "dynamic_portal", vReinforcementsSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:GetPreviewUnit() - return "npc_dota_creature_naga_siren_boss" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_siren", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_siren.vsndevts", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_slark", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_slark.vsndevts", context ) - PrecacheUnitByNameSync( "npc_dota_underwater_mine", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:GetMaxSpawnedUnitCount() - local nCount = 0 - -- 5 Peon Spawners - local hPeonSpawners = self:GetSpawner( "spawner_peon" ) - if hPeonSpawners then - nCount = nCount + hPeonSpawners:GetSpawnPositionCount() * 2 - end - -- 4 Captain Spawners - local hCaptainSpawners = self:GetSpawner( "spawner_captain" ) - if hCaptainSpawners then - nCount = nCount + hCaptainSpawners:GetSpawnPositionCount() - end - --[[ - -- 1 Boss Spawner - local hBossSpawners = self:GetSpawner( "spawner_boss" ) - if hBossSpawners then - nCount = nCount + hBossSpawners:GetSpawnPositionCount() * 4 - end - -- 4 Dynamic Portals - local hReinforcementsSpawners = self:GetSpawner( "dynamic_portal" ) - if hBossSpawners then - nCount = nCount + hReinforcementsSpawners:GetSpawnPositionCount() * 3 - end - ]] - print( "Number of enemies = " .. nCount ) - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:Start() - CMapEncounter.Start( self ) - - self:CreateUnits() - ListenToGameEvent( "dota_non_player_used_ability", Dynamic_Wrap( getclass( self ), "OnAbilityUsed" ), self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self.nEnemies = self:GetMaxSpawnedUnitCount() - self:AddEncounterObjective( "defeat_all_enemies", 0, self.nEnemies ) - self:AddEncounterObjective( "destroy_all_mines", self.nMinesDestroyed, self.nMinesToDestroy ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:CheckForCompletion() - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - - if not self.bInitialSpawn then - return false - end - - if nCurrentValue >= self.nEnemies and self.nMinesDestroyed == self.nMinesToDestroy then - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:CreateUnits() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end - if not self.bMinesSpawned then - self:SpawnMines() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - self.bInitialSpawn = true - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - else - print( "WARNING: Can't find a living hero and the objective entity is missing!" ) - hSpawnedUnit:MoveToPosition( self.hRoom:GetOrigin() ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:SpawnMines() - --print("Spawning mines") - local goalUnits = Entities:FindAllByName( "spawner_mine" ) - - local mineUnit = "npc_dota_underwater_mine" - for _, goalUnit in pairs(goalUnits) do - local hUnit = CreateUnitByName( mineUnit, goalUnit:GetAbsOrigin(), true, nil, nil, DOTA_TEAM_BADGUYS ) - if hUnit ~= nil then - --print("Placing a mine") - hUnit:SetForwardVector( RandomVector( 1 ) ) - end - end - self.bMinesSpawned = true -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:OnEntityKilled( event ) - if not IsServer() then - return - end - - if self.bMinesSpawned == false then - return - end - - local killedUnit = EntIndexToHScript( event.entindex_killed ) - if killedUnit == nil then - return - end - - local killedUnit = EntIndexToHScript( event.entindex_killed ) - if killedUnit == nil or killedUnit:GetTeam() == DOTA_TEAM_GOODGUYS then - return - end - - if killedUnit:IsCreature() == true then - if killedUnit:GetUnitName() == "npc_dota_underwater_mine" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "destroy_all_mines" ) - self:UpdateEncounterObjective( "destroy_all_mines", nCurrentValue + 1, nil ) - self.nMinesDestroyed = self.nMinesDestroyed + 1 - if self.nMinesDestroyed == self.nMinesToDestroy then - self:StartSpawnerSchedule( "spawner_boss", 0 ) - self.nEnemies = self.nEnemies + 4 - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue, self.nEnemies ) - end - elseif killedUnit:GetUnitName() == "npc_dota_creature_slark_peon" or - killedUnit:GetUnitName() == "npc_dota_creature_naga_siren_illusion" or - killedUnit:GetUnitName() == "npc_dota_creature_naga_siren_boss" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, self.nEnemies ) - if not self.bSongUsed then - if killedUnit:GetUnitName() == "npc_dota_creature_naga_siren_boss" then - -- Backup if Naga doesn't get to use Song - self.bSongUsed = true - self:StartSpawnerSchedule( "dynamic_portal", 0 ) - self.nEnemies = self.nEnemies + 8 - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue, self.nEnemies ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_NagaSiren:OnAbilityUsed( event ) - --print("Ability used") - -- Add to the enemy counter if Naga uses Mirror Image - if event.abilityname == "aghsfort_naga_siren_mirror_image" then - --print("Naga Illusion Spawned") - self.nEnemies = self.nEnemies + 1 - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue, self.nEnemies ) - end - -- Start the schedule for the Reinforcements if Naga uses Song - if not self.bSongUsed then - if event.abilityname == "naga_siren_song_of_the_siren" then - --print("Naga used Song!") - self.bSongUsed = true - self:StartSpawnerSchedule( "dynamic_portal", 0 ) - self.nEnemies = self.nEnemies + 12 - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue, self.nEnemies ) - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_NagaSiren diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_ogre_seals.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_ogre_seals.lua deleted file mode 100755 index b881842..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_ogre_seals.lua +++ /dev/null @@ -1,172 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_OgreSeals == nil then - CMapEncounter_OgreSeals = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_OgreSeals:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - - -- Pre-placed creatures (done this way to use a specific subset of existing map spawners) - self.vPeonSchedule = - { - { - Time = 0, - Count = 4, - }, - } - - self.vCaptainSchedule = - { - { - Time = 0, - Count = 2, - }, - } - - self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_small_ogre_seal", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 225.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_dota_creature_large_ogre_seal", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - self:SetSpawnerSchedule( self.szPeonSpawner, self.vPeonSchedule ) - self:SetSpawnerSchedule( self.szCaptainSpawner, self.vCaptainSchedule ) - - -- Portal-spawned creatures - local bInvulnerable = true - self.vWaveSchedule = - { - { - Time = 15, - Count = 2, - }, - { - Time = 35, - Count = 2, - }, - { - Time = 55, - Count = 2, - }, - { - Time = 75, - Count = 3, - }, - } - - --DeepPrintTable( self.vWaveSchedule ) - - self.szPortal = "dynamic_portal" - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szPortal, self.szPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_small_ogre_seal", - Team = DOTA_TEAM_BADGUYS, - Count = 5, - PositionNoise = 225.0, - }, - { - EntityName = "npc_dota_creature_large_ogre_seal", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:SetSpawnerSchedule( self.szPortal, self.vWaveSchedule ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_OgreSeals:GetPreviewUnit() - return "npc_dota_creature_large_ogre_seal" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_OgreSeals:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_OgreSeals:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vWaveSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -- does this capture the pre-placed spawns? -end - --------------------------------------------------------------------------------- - -function CMapEncounter_OgreSeals:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_OgreSeals:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - if hSpawner.szSpawnerName == self.szPortal then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - --print( heroes ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_OgreSeals diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pangolier.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pangolier.lua deleted file mode 100755 index f72eac5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pangolier.lua +++ /dev/null @@ -1,239 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_bonus_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Pangolier == nil then - CMapEncounter_Pangolier = class( {}, {}, CMapEncounter_BonusBase ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:Precache( context ) - CMapEncounter_BonusBase.Precache( self, context ) - PrecacheModel( "models/heroes/pangolier/pangolier_gyroshell2.vmdl", context ) - PrecacheModel( "models/items/rattletrap/mechanised_pilgrim_cog/mechanised_pilgrim_cog.vmdl", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_pangolier", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_centaur/centaur_warstomp.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/greevil/greevil_prison_bottom_ring.vpcf", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_pangolier.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_obsidian_destroyer.vsndevts", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_obsidian_destroyer", context ) - LinkLuaModifier( "modifier_pango_bonus", "modifiers/modifier_pango_bonus", LUA_MODIFIER_MOTION_NONE ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:constructor( hRoom, szEncounterName ) - CMapEncounter_BonusBase.constructor( self, hRoom, szEncounterName ) - self.bAllButtonsReady = false - self.nPlayersReady = 0 - self.nHeroOnTrigger1 = 0 - self.nHeroOnTrigger2 = 0 - self.nHeroOnTrigger3 = 0 - self.nHeroOnTrigger4 = 0 - self.bCogsSpawned = false - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_bonus_greevil", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 300.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain", "spawner_captain", - { - { - EntityName = "npc_dota_creature_evil_greevil", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:OnEncounterLoaded() - CMapEncounter_BonusBase.OnEncounterLoaded( self ) - self:SetupBristlebackShop( false ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:Transform() - local hHeroes = HeroList:GetAllHeroes() - - for _, hHero in pairs ( hHeroes ) do - if hHero ~= nil and not hHero:IsNull() and hHero:IsRealHero() then - --printf( "Start - Transforming into gyroshell" ) - local hAbility = hHero:AddAbility( "aghsfort_pangolier_gyroshell" ) - hAbility:UpgradeAbility( true ) - if hAbility ~= nil then - PlayerResource:SetCameraTarget( hHero:GetPlayerOwnerID(), hHero ) - PlayerResource:SetOverrideSelectionEntity( hHero:GetPlayerOwnerID(), hHero ) - hHero:AddNewModifier( hHero, hAbility, "modifier_pango_bonus", { duration = -1 } ) - hHero:CastAbilityNoTarget( hAbility, hHero:GetPlayerOwnerID() ) - --hHero:AddNewModifier( hHero, hAbility, "modifier_pangolier_gyroshell", { duration = -1 } ) - else - printf( "Start - Can't find ability" ) - end - end - end - if not self.bCogsSpawned then - self:SpawnCogs() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:SpawnCogs() - --print("Spawning cogs") - local cogUnits = Entities:FindAllByName( "spawner_cog" ) - - for _, goalUnit in pairs(cogUnits) do - local cogPos = goalUnit:GetAbsOrigin() - local cogTable = - { - origin = "0 0 0", - angles = "0 0 0", - targetname = "bumper_cog", - model = "models/items/rattletrap/mechanised_pilgrim_cog/mechanised_pilgrim_cog.vmdl", - scales = "2 2 2", - defaultanim = "ACT_DOTA_IDLE" - } - local hUnit = SpawnEntityFromTableSynchronous( "prop_dynamic", cogTable ) - hUnit:SetAbsOrigin( cogPos ) - end - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "arena_obstruction_enable_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end - self.bCogsSpawned = true -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:RemoveCogs() - --print("Removing cogs") - local cogUnits = Entities:FindAllByName( "bumper_cog" ) - local vPos = nil - for _, cogUnit in pairs(cogUnits) do - vPos = cogUnit:GetAbsOrigin() - UTIL_Remove(cogUnit) - end - -- Remove Evil Greevils - local creatures = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vPos, nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_NONE, 0, false ) - for _, hUnit in pairs(creatures) do - if hUnit:GetUnitName() == "npc_dota_creature_evil_greevil" then - --print("Removing an Evil Greevil") - UTIL_Remove(hUnit) - end - end - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "arena_obstruction_disable_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:GetPreviewUnit() - return "npc_dota_creature_bonus_greevil" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:OnTriggerStartTouch( event ) - CMapEncounter_BonusBase.OnTriggerStartTouch( self, event ) - - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - - if self.bAllButtonsReady == true then - return - end - - if self.bGameStarted == false then - if szTriggerName == "trigger_player_1" then - self.nHeroOnTrigger1 = 1 - elseif szTriggerName == "trigger_player_2" then - self.nHeroOnTrigger2 = 1 - elseif szTriggerName == "trigger_player_3" then - self.nHeroOnTrigger3 = 1 - elseif szTriggerName == "trigger_player_4" then - self.nHeroOnTrigger4 = 1 - end - self.nPlayersReady = self.nHeroOnTrigger1 + self.nHeroOnTrigger2 + self.nHeroOnTrigger3 + self.nHeroOnTrigger4 - local vecPlayers = GameRules.Aghanim:GetConnectedPlayers() - if #vecPlayers > 0 then - if self.nPlayersReady == #vecPlayers then - --print("All players ready!") - self.bAllButtonsReady = true - self:GetSpawner( "spawner_peon" ):SpawnUnits() - self:GetSpawner( "spawner_captain" ):SpawnUnits() - self:StartBonusRound( 41.2 ) -- account for gyroshell cast time - self:Transform() - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:OnTriggerEndTouch( event ) - CMapEncounter_BonusBase.OnTriggerEndTouch( self, event ) - if self.bAllButtonsReady == true then - return - end - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - if szTriggerName == "trigger_player_1" then - self.nHeroOnTrigger1 = 0 - elseif szTriggerName == "trigger_player_2" then - self.nHeroOnTrigger2 = 0 - elseif szTriggerName == "trigger_player_3" then - self.nHeroOnTrigger3 = 0 - elseif szTriggerName == "trigger_player_4" then - self.nHeroOnTrigger4 = 0 - end -end - --------------------------------------------------------------------------------- ---[[ -function CMapEncounter_Pangolier:CheckForCompletion() - return self.bGameStarted == true and not self:HasRemainingEnemies() -end -]] --------------------------------------------------------------------------------- - -function CMapEncounter_Pangolier:OnComplete() - CMapEncounter_BonusBase.OnComplete( self ) - - local hHeroes = HeroList:GetAllHeroes() - for _, hHero in pairs ( hHeroes ) do - if hHero ~= nil and not hHero:IsNull() and hHero:IsRealHero() then - hHero:RemoveAbility( "pangolier_gyroshell" ) - hHero:RemoveModifierByName( "modifier_pangolier_gyroshell" ) - hHero:RemoveModifierByName( "modifier_pango_bonus" ) - PlayerResource:SetCameraTarget( hHero:GetPlayerOwnerID(), nil ) - PlayerResource:SetOverrideSelectionEntity( hHero:GetPlayerOwnerID(), nil ) - end - end - if self.bCogsSpawned then - self:RemoveCogs() - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Pangolier diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_penguins_transition.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_penguins_transition.lua deleted file mode 100755 index 1f1962e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_penguins_transition.lua +++ /dev/null @@ -1,341 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_bonus_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_PenguinsTransition == nil then - CMapEncounter_PenguinsTransition = class( {}, {}, CMapEncounter_BonusBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:constructor( hRoom, szEncounterName ) - CMapEncounter_BonusBase.constructor( self, hRoom, szEncounterName ) - - self.flPenguinTimeLimit = 55.0 - self:AddSpawner( CDotaSpawner( "penguin_spawner", "penguin_spawner", - { - { - EntityName = "npc_dota_sled_penguin", - Team = DOTA_TEAM_GOODGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:Precache( context ) - CMapEncounter_BonusBase.Precache( self, context ) - - PrecacheResource( "particle", "particles/gameplay/location_hint_goal.vpcf", context ) - - PrecacheUnitByNameSync( "npc_dota_creature_wandering_ogre_seal", context, -1 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:GetPreviewUnit() - return "npc_dota_sled_penguin" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:OnEncounterLoaded() - CMapEncounter_BonusBase.OnEncounterLoaded( self ) - self:SetupBristlebackShop( true ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:InitializeObjectives() - self:AddEncounterObjective( "objective_saddle_up_on_penguin", 0, 4 ) - self:AddEncounterObjective( "objective_sled_to_collect_gold", 0, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:Start() - CMapEncounter_BonusBase.Start( self ) - - if not IsServer() then - return - end - - self.flEndTime = 99999999999999999 - - local hUnits = self:GetSpawner( "penguin_spawner" ):SpawnUnits() - - self.Penguins = {} - - local hFacingTargets = self:GetRoom():FindAllEntitiesInRoomByName( "penguin_facing_target", true ) - local hFacingTarget = hFacingTargets[ 1 ] - - local nPlayerID = 0 - for _, hPenguin in pairs ( hUnits ) do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_bonus_room_start", {} ) - end - - hPenguin.Encounter = self - hPenguin:SetOwner( hPlayerHero ) - - hPenguin:FaceTowards( hFacingTarget:GetAbsOrigin() ) - - hPenguin.nFXIndex = ParticleManager:CreateParticleForPlayer( "particles/gameplay/location_hint_goal.vpcf", PATTACH_WORLDORIGIN, nil, PlayerResource:GetPlayer( nPlayerID ) ) - local vArrowFXPos = hPenguin:GetAbsOrigin() - ParticleManager:SetParticleControl( hPenguin.nFXIndex, 0, vArrowFXPos ) - ParticleManager:SetParticleControl( hPenguin.nFXIndex, 1, Vector( 1.0, 0.8, 0.2 ) ) - - local vLocation = hPenguin:GetAbsOrigin() - local WorldTextHint = {} - WorldTextHint["hint_text"] = "hint_ride_penguin" - WorldTextHint["command"] = 18 -- DOTA_KEYBIND_HERO_MOVE - WorldTextHint["ent_index"] = -1 - WorldTextHint["location_x"] = vLocation.x - WorldTextHint["location_y"] = vLocation.y - WorldTextHint["location_z"] = vLocation.z - - CustomGameEventManager:Send_ServerToPlayer( PlayerResource:GetPlayer( nPlayerID ), "start_world_text_hint", WorldTextHint ) - - table.insert( self.Penguins, hPenguin ) - nPlayerID = nPlayerID + 1 - end - - self.fCoinPileCreationInterval = 0.5 - self.fNextCoinPileSpawn = GameRules:GetGameTime() + self.fCoinPileCreationInterval - - local nTotalGold = 5000 -- this is probably not needed since we have the self.nGoldForBags value - self.nTotalGoldBagsToSpawn = 475 - self.nGoldPerBag = nTotalGold / self.nTotalGoldBagsToSpawn - --printf( "Start - self.nGoldPerBag: %d", self.nGoldPerBag ) - self.nGoldForBags = self.nGoldReward * AGHANIM_PLAYERS - --printf( "Start - self.nGoldForBags: %d", self.nGoldForBags ) - self.nGoldReward = 0 - self.nMinCoinsPerTarget = 8 - self.nMaxCoinsPerTarget = 8 - - self.nPreplacedBagsToSpawn = self.nTotalGoldBagsToSpawn / 3 - - self.GoldBags = {} - - self.hPreplacedBagTargets = self:GetRoom():FindAllEntitiesInRoomByName( "gold_bag_target_preplaced", true ) - - self.hDynamicBagTargets = self:GetRoom():FindAllEntitiesInRoomByName( "gold_bag_target", true ) - --printf( "#self.hDynamicBagTargets: %d", #self.hDynamicBagTargets ) - - for _, hBagTarget in pairs( self.hPreplacedBagTargets ) do - local nCoinSpawnsPerTarget = RandomInt( self.nMinCoinsPerTarget, self.nMaxCoinsPerTarget ) - for i = 1, nCoinSpawnsPerTarget do - if TableLength( self.GoldBags ) >= self.nPreplacedBagsToSpawn then - break - end - - local vGoldBagPos = self:GetValidCoinSpawnPos( hBagTarget ) - self.nGoldForBags = self.nGoldForBags - self.nGoldPerBag - - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( self.nGoldPerBag ) - - -- NOTE: CreateItemOnPositionSync will drop the item to the ground, so the z height is going to be ignored - -- However, LaunchLootRequiredHeight will fix it back up for us. - local drop = CreateItemOnPositionSync( vGoldBagPos, newItem ) - --drop:SetModelScale( 1.5 ) - local fHeight = 0 - newItem:LaunchLootRequiredHeight( true, fHeight, fHeight, 0.75, vGoldBagPos ) - table.insert( self.GoldBags, newItem ) - end - end - - --printf( "[preplaced] total gold bags: %d", #self.GoldBags ) - - -- Create wandering ogre seals - self.hOgreSeals = {} - self.hOgreSealSpawners = self:GetRoom():FindAllEntitiesInRoomByName( "ogre_seal", true ) - --printf( "#self.hOgreSealSpawners: %d", #self.hOgreSealSpawners ) - - local nAscLevel = GameRules.Aghanim:GetAscensionLevel() - local nTotalOgreSealsToSpawn = 7 + ( 2 * nAscLevel ) - --printf( "nTotalOgreSealsToSpawn: %d", nTotalOgreSealsToSpawn ) - - for i = 1, nTotalOgreSealsToSpawn do - if #self.hOgreSealSpawners > 0 then - local nRandomIndex = RandomInt( 1, #self.hOgreSealSpawners ) - local hRandomOgreSealSpawner = self.hOgreSealSpawners[ nRandomIndex ] - - local vSpawnPos = hRandomOgreSealSpawner:GetAbsOrigin() - local hOgreSeal = CreateUnitByName( "npc_dota_creature_wandering_ogre_seal", vSpawnPos, true, nil, nil, DOTA_TEAM_BADGUYS ) - if hOgreSeal ~= nil then - table.insert( self.hOgreSeals, hOgreSeal ) - table.remove( self.hOgreSealSpawners, nRandomIndex ) - end - else - printf( "WARNING - self.hOgreSealSpawners is empty, can't spawn more seals" ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:OnThink() - CMapEncounter_BonusBase.OnThink( self ) - - if not IsServer() or GameRules:IsGamePaused() then - return - end - - if not self.bGameStarted then - return - end - - if self.bGameStarted and not self.bStartedMusic then - EmitGlobalSound( "BonusRoom.ParadeMusicLoop" ) - self.bStartedMusic = true - end - - if self:HasStarted() and not self:IsComplete() then - if TableLength( self.GoldBags ) >= self.nTotalGoldBagsToSpawn then - return - end - - if GameRules:GetGameTime() >= self.fNextCoinPileSpawn then - local hRandomBagTarget = self.hDynamicBagTargets[ RandomInt( 1, #self.hDynamicBagTargets ) ] - local nCoinSpawnsPerTarget = RandomInt( self.nMinCoinsPerTarget, self.nMaxCoinsPerTarget ) - for i = 1, nCoinSpawnsPerTarget do - if TableLength( self.GoldBags ) >= self.nTotalGoldBagsToSpawn then - break - end - - local vGoldBagPos = self:GetValidCoinSpawnPos( hRandomBagTarget ) - self.nGoldForBags = self.nGoldForBags - self.nGoldPerBag - - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( self.nGoldPerBag ) - - -- NOTE: CreateItemOnPositionSync will drop the item to the ground, so the z height is going to be ignored - -- However, LaunchLootRequiredHeight will fix it back up for us. - local drop = CreateItemOnPositionSync( vGoldBagPos, newItem ) - --drop:SetModelScale( 1.5 ) - local fHeight = 0 - newItem:LaunchLootRequiredHeight( true, fHeight, fHeight, 0.75, vGoldBagPos ) - table.insert( self.GoldBags, newItem ) - end - --printf( "[dynamic] total gold bags: %d", #self.GoldBags ) - - self.fNextCoinPileSpawn = GameRules:GetGameTime() + self.fCoinPileCreationInterval - end - - --printf( "Total gold bags spawned: %d", TableLength( self.GoldBags ) ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:OnComplete() - CMapEncounter_BonusBase.OnComplete( self ) - - StopListeningToGameEvent( self.nItemPickedUpListener ) -- redundant? already done in BonusBase - - for _, hPenguin in pairs ( self.Penguins ) do - hPenguin:SetOwner( nil ) - hPenguin:RemoveModifierByName( "modifier_sled_penguin_passive" ) - end - - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - local hHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hHero then - hHero:RemoveModifierByName( "modifier_bonus_room_start" ) - PlayerResource:SetCameraTarget( nPlayerID, nil ) - PlayerResource:SetOverrideSelectionEntity( nPlayerID, nil ) - - local hEndPosition = self:GetRoom():FindAllEntitiesInRoomByName( "bonus_room_end_position", true ) - FindClearSpaceForUnit( hHero, hEndPosition[1]:GetAbsOrigin(), true ) - CenterCameraOnUnit( nPlayerID, hHero ) - end - end - - for _,GoldBag in pairs ( self.GoldBags ) do - if GoldBag and not GoldBag:IsNull() then - UTIL_Remove( GoldBag:GetContainer() ) - UTIL_Remove( GoldBag ) - end - end - - for _, hOgreSeal in pairs ( self.hOgreSeals ) do - if hOgreSeal and not hOgreSeal:IsNull() then - UTIL_Remove( hOgreSeal ) - end - end - - StopGlobalSound( "BonusRoom.ParadeMusicLoop" ) -end - ---------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:GetValidCoinSpawnPos( hBagTarget ) - local fMinOffset = 25 - local fMaxOffset = 600 - - local vPos = hBagTarget:GetAbsOrigin() + RandomVector( RandomFloat( fMinOffset, fMaxOffset ) ) - - local nAttempts = 0 - while ( ( not GridNav:CanFindPath( hBagTarget:GetOrigin(), vPos ) ) and ( nAttempts < 5 ) ) do - vPos = hBagTarget:GetOrigin() + RandomVector( fMaxOffset ) - nAttempts = nAttempts + 1 - - if nAttempts >= 5 then - vPos = hBagTarget:GetOrigin() - end - end - - return vPos -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:OnPlayerRidePenguin( nPlayerID, hPenguin ) - ParticleManager:DestroyParticle( hPenguin.nFXIndex, true ) - CustomGameEventManager:Send_ServerToPlayer( PlayerResource:GetPlayer( nPlayerID ), "stop_world_text_hint", {} ) - - --PlayerResource:SetCameraTarget( nPlayerID, hPenguin ) - --PlayerResource:SetOverrideSelectionEntity( nPlayerID, hPenguin ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "objective_saddle_up_on_penguin" ) - local nSaddledPlayers = nCurrentValue + 1 - self:UpdateEncounterObjective( "objective_saddle_up_on_penguin", nSaddledPlayers, nil ) - - local nPlayerCount = 0 - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS and PlayerResource:IsValidPlayerID( nPlayerID ) then - nPlayerCount = nPlayerCount + 1 - end - end - - if nSaddledPlayers >= nPlayerCount then - self:DisableBlocker() - self:StartBonusRound( self.flPenguinTimeLimit ) - end -end - ---------------------------------------------------------------------------- - -function CMapEncounter_PenguinsTransition:DisableBlocker() - --print("Disabling Starting Blockers!") - -- Disable any nav blockers in the start - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "starting_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - ---------------------------------------------------------------------------- - -return CMapEncounter_PenguinsTransition diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_phoenix.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_phoenix.lua deleted file mode 100755 index 7ee3853..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_phoenix.lua +++ /dev/null @@ -1,154 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Phoenix == nil then - CMapEncounter_Phoenix = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Phoenix:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- Portal-spawned creatures - self.vEmberSchedule = - { - { - Time = 3, - Count = 2, - }, - { - Time = 18, - Count = 2, - }, - { - Time = 33, - Count = 2, - }, - { - Time = 48, - Count = 2, - }, - } - - self.vPhoenixSchedule = - { - { - Time = 3, - Count = 1, - }, - { - Time = 20, - Count = 1, - }, - { - Time = 35, - Count = 1, - }, - { - Time = 50, - Count = 2, - }, - } - - local bInvulnerable = true - - self.szEmberPortal = "portal_v2_ember" - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szEmberPortal, self.szEmberPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_ember_spirit", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 150.0, - }, - }, bInvulnerable ) ) - - self.szPhoenixPortal = "portal_v2_phoenix" - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szPhoenixPortal, self.szPhoenixPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_phoenix", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:SetSpawnerSchedule( self.szEmberPortal, self.vEmberSchedule ) - self:SetSpawnerSchedule( self.szPhoenixPortal, self.vPhoenixSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Phoenix:GetPreviewUnit() - return "npc_dota_creature_phoenix" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Phoenix:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Phoenix:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - local nWaves = #self.vEmberSchedule + #self.vPhoenixSchedule - self:AddEncounterObjective( "survive_waves", 0, nWaves ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Phoenix:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Phoenix:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - if hSpawner.szSpawnerName == self.szEmberPortal or hSpawner.szSpawnerName == self.szPhoenixPortal then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - --print( heroes ) - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Phoenix diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pinecones.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pinecones.lua deleted file mode 100755 index 68bf03f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pinecones.lua +++ /dev/null @@ -1,263 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Pinecones == nil then - CMapEncounter_Pinecones = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pinecones:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - ------------------------ - -- Pre-placed units - ------------------------ - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_pinecone_warrior", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - } - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain_trigger", "spawner_captain_trigger", - { - { - EntityName = "npc_dota_pinecone_champion", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - } - } ) ) - - self:SetPortalTriggerSpawner( "spawner_captain_trigger", 0.8 ) - self:SetSpawnerSchedule( "spawner_peon", { { Time = 0, Count = 16 } } ) -- spawn N units when triggered - self:SetSpawnerSchedule( "spawner_captain_trigger", nil ) -- means spawn once when triggered - - ------------------------ - -- WAVE: A - ------------------------ - local nNumPortals = 1 - self.nTotalPortals = nNumPortals - - self.vWaveSchedule_A = - { - { - Time = 0, - Count = nNumPortals, - }, - } - - local PortalUnits_A = - { - { - EntityName = "npc_dota_pinecone_warrior", - Team = DOTA_TEAM_BADGUYS, - Count = 4, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_pinecone_champion", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - - local bInvulnerable = true - - local nHealth = 1 - local fSummonTime = 5 - local fModelScale = 1.0 - - local szLocatorNameA = "dynamic_portal_a" - local szNameA = szLocatorNameA - - self:AddPortalSpawnerV2( CPortalSpawnerV2( szNameA, szLocatorNameA, nHealth, fSummonTime, fModelScale, - PortalUnits_A, bInvulnerable - ) ) - - self:SetSpawnerSchedule( szLocatorNameA, self.vWaveSchedule_A ) - - ------------------------ - -- WAVE: B - ------------------------ - nNumPortals = 2 - self.nTotalPortals = self.nTotalPortals + nNumPortals - - self.vWaveSchedule_B = - { - { - Time = 15, - Count = nNumPortals, - }, - } - - local PortalUnits_B = - { - { - EntityName = "npc_dota_pinecone_warrior", - Team = DOTA_TEAM_BADGUYS, - Count = 5, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_pinecone_champion", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - - local szLocatorNameB = "dynamic_portal_b" - local szNameB = szLocatorNameB - - self:AddPortalSpawnerV2( CPortalSpawnerV2( szNameB, szLocatorNameB, nHealth, fSummonTime, fModelScale, - PortalUnits_B, bInvulnerable - ) ) - - self:SetSpawnerSchedule( szLocatorNameB, self.vWaveSchedule_B ) - - ------------------------ - -- WAVE: C - ------------------------ - nNumPortals = 3 - self.nTotalPortals = self.nTotalPortals + nNumPortals - - self.vWaveSchedule_C = - { - { - Time = 30, - Count = nNumPortals, - }, - } - - local PortalUnits_C = - { - { - EntityName = "npc_dota_pinecone_warrior", - Team = DOTA_TEAM_BADGUYS, - Count = 7, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_pinecone_champion", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } - - local szLocatorNameC = "dynamic_portal_c" - local szNameC = szLocatorNameC - - self:AddPortalSpawnerV2( CPortalSpawnerV2( szNameC, szLocatorNameC, nHealth, fSummonTime, fModelScale, - PortalUnits_C, bInvulnerable - ) ) - - self:SetSpawnerSchedule( szLocatorNameC, self.vWaveSchedule_C ) -end - --------------------------------------------------------------------------------- - - -function CMapEncounter_Pinecones:GetPreviewUnit() - return "npc_dota_pinecone_champion" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pinecones:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pinecones:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pinecones:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pinecones:OnThink() - CMapEncounter.OnThink( self ) - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes <= 0 then - return - end - - --print( "CMapEncounter_Pinecones:OnThink() - iterating through portal units" ) - for _,hEnemy in pairs( self.SpawnedEnemies ) do - if hEnemy == nil or hEnemy:IsNull() or hEnemy:IsAlive() == false then - goto continue - end - - if hEnemy.bPortalUnit ~= nil and hEnemy.bPortalUnit == true then - --print( "CMapEncounter_Pinecones:OnThink() -found a portal unit" ) - local hAggroTarget = hEnemy:GetAggroTarget() - local hInitialGoalEnt = hEnemy:GetInitialGoalEntity() - - if hAggroTarget == nil and hInitialGoalEnt == nil then - --print( "CMapEncounter_Pinecones:OnThink() - Found a portal unit that doesn't have an aggro target or a goal ent! Searching for a goal ent for this unit" ) - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "CMapEncounter_Pinecones:OnThink() - Set initial goal entity for unit \"%s\" to \"%s\"", hEnemy:GetUnitName(), hero:GetUnitName() ) - hEnemy:SetInitialGoalEntity( hero ) - end - end - end - - ::continue:: - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pinecones:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - --print( "CMapEncounter_Pinecones:OnSpawnerFinished" ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Pinecones diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pucks.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pucks.lua deleted file mode 100755 index db4509b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pucks.lua +++ /dev/null @@ -1,181 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Pucks == nil then - CMapEncounter_Pucks = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pucks:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_earth_splitter.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_earth_splitter_move.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_cast_combined.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_cast_combined_detail.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_physical.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_magical.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/puck/flying_bomb_destination.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pucks:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- Initial Spawns - self.szCaptainSpawner = "spawner_captain" - - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_dota_creature_puck", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 0.0, - }, - } ) ) - - -- Dynamic Spawns - self.vPuckSchedule = - { - { - Time = 5, - Count = 2, - }, - { - Time = 30, - Count = 2, - }, - { - Time = 55, - Count = 2, - }, - { - Time = 80, - Count = 2, - }, - } - - self.vTitanSchedule = - { - { - Time = 15, - Count = 1, - }, - { - Time = 45, - Count = 1, - }, - { - Time = 75, - Count = 1, - }, - } - - --DeepPrintTable( self.vWaveSchedule ) - - local bInvulnerable = true - - self.szPuckPortal = "dynamic_portal_puck" - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szPuckPortal, self.szPuckPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_puck", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 150.0, - }, - }, bInvulnerable - ) ) - - self.szTitanPortal = "dynamic_portal_titan" - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szTitanPortal, self.szTitanPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_large_elder_titan", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szPuckPortal, self.vPuckSchedule ) - self:SetSpawnerSchedule( self.szTitanPortal, self.vTitanSchedule ) -end - --------------------------------------------------------------------------------- - ---[[ -function CMapEncounter_Pucks:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vWaveSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end -]] - --------------------------------------------------------------------------------- - -function CMapEncounter_Pucks:GetPreviewUnit() - return "npc_dota_creature_puck" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Pucks:Start() - CMapEncounter.Start( self ) - - for _, hSpawner in pairs( self:GetSpawners() ) do - hSpawner:SpawnUnits() - end - - self:StartSpawnerSchedule( self.szPuckPortal, 0 ) - self:StartSpawnerSchedule( self.szTitanPortal, 0 ) -end - --------------------------------------------------------------------------------- - ---[[ -function CMapEncounter_Pucks:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end -]] - --------------------------------------------------------------------------------- - -function CMapEncounter_Pucks:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Pucks:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Pucks diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pudge_miniboss.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pudge_miniboss.lua deleted file mode 100755 index 296690d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_pudge_miniboss.lua +++ /dev/null @@ -1,226 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_PudgeMiniboss == nil then - CMapEncounter_PudgeMiniboss = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.flNextWaveSpawnTime = -1 - self.flSpawnInterval = 5 - self.flWaveDelay = 0 - self.nWaves = 16 - self.hHeroes = {} - self:SetCalculateRewardsFromUnitCount( false ) - self.szPeonSpawner = "spawner_peon" - self.szBossSpawner = "spawner_pudge" - - self.hPudge = nil - - self.bBossSpawned = false - - self.nMaxZombies = 100 - - self.hPeonSpawner = self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_pudge_miniboss_minion", - Team = DOTA_TEAM_BADGUYS, - Count = 5, - PositionNoise = 200.0, - }, - } ) ) - - self.hBossSpawner = self:AddSpawner( CDotaSpawner( self.szBossSpawner, self.szBossSpawner, - { - { - EntityName = "npc_dota_creature_pudge_miniboss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - -end - -------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_pudge", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_pudge.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_pudge.vsndevts", context ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:GetPreviewUnit() - return "npc_dota_creature_pudge_miniboss" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:OnThink() - CMapEncounter.OnThink( self ) - self:CreateMinions() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:CreateMinions() - if self.bCreatureSpawnsActivated ~= true then - return - end - - if self.nWaves > 0 and GameRules:GetGameTime() > self.flNextWaveSpawnTime then - - for _,Spawner in pairs ( self:GetSpawners() ) do - if Spawner ~= self.hBossSpawner and self.hPudge ~= nil and self.hPudge:IsNull() == false and self.hPudge:IsAlive() then - - local nSpawnedEnemies = #self.SpawnedEnemies + 1 - if self.nMaxZombies > nSpawnedEnemies then - Spawner:SpawnUnits() - else - print( "Skipping zombie minion spawn; too many zombies!" ) - end - end - end - - self.nWaves = self.nWaves - 1 - self.flNextWaveSpawnTime = GameRules:GetGameTime() + self.flSpawnInterval - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:AggroPudgeMinions( Mobs ) - if Mobs == nil or #Mobs == 0 then - return - end - - for _,Mob in pairs ( Mobs ) do - local hEnemies = self.hRoom:GetPlayerUnitsInRoom() - if #hEnemies > 0 then - AttackTargetOrder( Mob, hEnemies[ RandomInt( 1, #hEnemies)] ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner == self.hBossSpawner then - return - end - - -- randomize zombie speed - for _,Mob in pairs ( hSpawnedUnits ) do - Mob:SetBaseMoveSpeed( Mob:GetBaseMoveSpeed() + RandomFloat( -100, 100 ) ) - end - - self:AggroPudgeMinions( hSpawnedUnits ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:GetMaxSpawnedUnitCount() - local nCount = 0 - local hPeonSpawners = self:GetSpawner( self.szPeonSpawner ) - if hPeonSpawners then - nCount = nCount + hPeonSpawners:GetSpawnPositionCount() * 3 * self.nWaves - end - - nCount = nCount + 1 - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:CheckForCompletion() - if self.bBossSpawned and not self:HasRemainingEnemies() then - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:OnComplete() - CMapEncounter.OnComplete( self ) - - if self.nAbilityListener ~= nil then - StopListeningToGameEvent( self.nAbilityListener ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_PudgeMiniboss:OnTriggerStartTouch( event ) - CMapEncounter.OnTriggerStartTouch( self, event ) - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - - if self.bCreatureSpawnsActivated == nil and szTriggerName == "trigger_spawn_creatures" then - self.bCreatureSpawnsActivated = true - - if not self.bBossSpawned then - local hUnits = self.hBossSpawner:SpawnUnits() - for _,hBoss in pairs ( hUnits) do - EmitSoundOn( "pudge_pud_spawn_03", hBoss ) - self.hPudge = hBoss - self.nAbilityListener = ListenToGameEvent( "dota_non_player_used_ability", Dynamic_Wrap( getclass( self ), 'OnNonPlayerUsedAbility' ), self ) - end - self.bBossSpawned = true - end - - self.flNextWaveSpawnTime = GameRules:GetGameTime() + self.flWaveDelay - EmitGlobalSound( "RoundStart" ) - end -end - ---------------------------------------------------------- --- dota_non_player_used_ability --- * abilityname --- * caster_entindex ---------------------------------------------------------- -function CMapEncounter_PudgeMiniboss:OnNonPlayerUsedAbility( event ) - - local hCaster = nil - if event.caster_entindex ~= nil and event.abilityname ~= nil then - hCaster = EntIndexToHScript( event.caster_entindex ) - if hCaster ~= nil and hCaster == self.hPudge and event.abilityname == "creature_pudge_dismember" then - local nRandomInt = RandomInt( 1, 3 ) - if nRandomInt == 1 then - EmitSoundOn( "pudge_pud_ability_devour_02", self.hPudge ) - end - if nRandomInt == 2 then - EmitSoundOn( "pudge_pud_ability_devour_03", self.hPudge ) - end - if nRandomInt == 3 then - EmitSoundOn( "pudge_pud_ability_devour_04", self.hPudge ) - end - end - end -end - - - --------------------------------------------------------------------------------- - -return CMapEncounter_PudgeMiniboss diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_quill_beasts.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_quill_beasts.lua deleted file mode 100755 index d382900..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_quill_beasts.lua +++ /dev/null @@ -1,157 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_QuillBeasts == nil then - CMapEncounter_QuillBeasts = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_QuillBeasts:constructor( hRoom, szEncounterName ) - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_dire_hound", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 225.0, - } - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain_trigger", "spawner_captain_trigger", - { - { - EntityName = "npc_dota_creature_dire_hound_boss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 225.0, - } - } ) ) - - self:SetPortalTriggerSpawner( "spawner_captain_trigger", 0.8 ) - - self:SetSpawnerSchedule( "spawner_peon", { { Time = 0, Count = 8 } } ) -- spawn 8 units when triggered - self:SetSpawnerSchedule( "spawner_captain_trigger", nil ) -- means spawn once when triggered - - ------------------------ - -- Dynamic Portals - ------------------------ - local nNumPortals_1 = 2 - local nNumPortals_2 = 3 - local nNumPortals_3 = 3 - local nNumPortals_4 = 3 - self.nTotalPortals = nNumPortals_1 + nNumPortals_2 + nNumPortals_3 + nNumPortals_4 - - self.vWaveSchedule = - { - { - Time = 0, - Count = nNumPortals_1, - }, - { - Time = 20, - Count = nNumPortals_2, - }, - { - Time = 40, - Count = nNumPortals_3, - }, - { - Time = 60, - Count = nNumPortals_4, - }, - } - - local PortalUnits = - { - { - EntityName = "npc_dota_creature_dire_hound", - Team = DOTA_TEAM_BADGUYS, - Count = 6, - PositionNoise = 0.0, - }, - { - EntityName = "npc_dota_creature_dire_hound_boss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - - local bInvulnerable = true - - local nHealth = 1 - local fSummonTime = 5 - local fModelScale = 1.0 - - local szLocatorName = "dynamic_portal" - local szName = szLocatorName - - self:AddPortalSpawnerV2( CPortalSpawnerV2( szName, szLocatorName, nHealth, fSummonTime, fModelScale, - PortalUnits, bInvulnerable - ) ) - - self:SetSpawnerSchedule( szLocatorName, self.vWaveSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_QuillBeasts:GetPreviewUnit() - return "npc_dota_creature_dire_hound_boss" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_QuillBeasts:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_QuillBeasts:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_QuillBeasts:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_QuillBeasts:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - --print( "CMapEncounter_QuillBeasts:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_QuillBeasts diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_rhyzik.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_rhyzik.lua deleted file mode 100755 index 4ee9f92..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_rhyzik.lua +++ /dev/null @@ -1,67 +0,0 @@ -require( "map_encounter" ) -require( "encounters/encounter_boss_base" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Rhyzik == nil then - CMapEncounter_Rhyzik = class( {}, {}, CMapEncounter_BossBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Rhyzik:constructor( hRoom, szEncounterName ) - - CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName ) - self.szBossSpawner = "spawner_boss" - - self:AddSpawner( CDotaSpawner( self.szBossSpawner, self.szBossSpawner, - { - { - EntityName = "npc_dota_creature_sand_king", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Rhyzik:Precache( context ) - CMapEncounter_BossBase.Precache( self, context ) - - PrecacheUnitByNameSync( "npc_dota_creature_timbersaw_treant", context, -1 ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_sandking", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_sandking.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_nyx_assassin.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_sandking.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Rhyzik:GetBossUnitName() - return "npc_dota_creature_sand_king" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Rhyzik:Start() - CMapEncounter_BossBase.Start( self ) -end - --------------------------------------------------------------------------------- - - -function CMapEncounter_Rhyzik:OnThink() - CMapEncounter_BossBase.OnThink( self ) -end - --------------------------------------------------------------------------------- -function CMapEncounter_Rhyzik:OnComplete() - CMapEncounter.OnComplete( self ) - GameRules.Aghanim:MarkGameWon() -end - -return CMapEncounter_Rhyzik diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_rock_golems.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_rock_golems.lua deleted file mode 100755 index 6e5f641..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_rock_golems.lua +++ /dev/null @@ -1,135 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_RockGolems == nil then - CMapEncounter_RockGolems = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.vWaveSchedule = - { - { - Time = 3, - Count = 1, - }, - { - Time = 33, - Count = 2, - }, - { - Time = 63, - Count = 2, - }, - } - - local bInvulnerable = true - self.szPortal = "dynamic_portal" - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szPortal, self.szPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_rock_golem_a", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szPortal, self.vWaveSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_brewmaster/brewmaster_thunder_clap_debuff.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:GetPreviewUnit() - return "npc_dota_creature_rock_golem_a" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vWaveSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:GetMaxSpawnedUnitCount() - local nBigGolems = #self.PortalSpawnersV2 - local nMediumGolems = nBigGolems * 3 - local nSmallGolems = nMediumGolems * 4 - - local nTotal = nBigGolems + nMediumGolems + nSmallGolems -- isn't working, it's 0 - printf( "GetMaxSpawnedUnitCount - nTotal: %d", nTotal ) - return nTotal -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_RockGolems:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner.szSpawnerName == self.szPortal then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - self:SetInitialGoalEntityToNearestHero( hSpawnedUnit ) - end -end - --------------------------------------------------------------------------------- - ---[[ necessary due to split-generated golems? -function CMapEncounter_RockGolems:CheckForCompletion() - if self.nWaves == 0 and not self:HasRemainingEnemies() then - return true - end - - return false -end -]] - --------------------------------------------------------------------------------- - -return CMapEncounter_RockGolems diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_shadow_demons.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_shadow_demons.lua deleted file mode 100755 index d18c40f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_shadow_demons.lua +++ /dev/null @@ -1,233 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_ShadowDemons == nil then - CMapEncounter_ShadowDemons = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ShadowDemons:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- urns are standing trash - self.szUrnSpawner = "spawner_captain" - self:AddSpawner( CDotaSpawner( self.szUrnSpawner, self.szUrnSpawner, - { - { - EntityName = "npc_dota_creature_upheaval_urn", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - -- waves alternate between groups of necro melee warriors and a single shadow demon - -- one big Doom spawns in the middle of this nonsense - local bInvulnerable = true - - self.vNecroWarriorSchedule = - { - { - Time = 3, - Count = 3, - }, - { - Time = 24, - Count = 3, - }, - { - Time = 55, - Count = 3, - }, - { - Time = 76, - Count = 3, - }, - } - - self.vShadowDemonSchedule = - { - { - Time = 11, - Count = 1, - }, - { - Time = 30, - Count = 1, - }, - { - Time = 49, - Count = 1, - }, - { - Time = 68, - Count = 1, - }, - } - - self.vDoomSchedule = - { - { - Time = 20.0, - Count = 1 - }, - } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_shadow_demon", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_shadow_demon", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_necro_warrior", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_necro_warrior", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 250.0, - }, - }, bInvulnerable ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_doom", "spawner_doom", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_doom", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:SetSpawnerSchedule( self.szUrnSpawner, nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_shadow_demon", self.vShadowDemonSchedule ) - self:SetSpawnerSchedule( "spawner_necro_warrior", self.vNecroWarriorSchedule ) - self:SetSpawnerSchedule( "spawner_doom", self.vDoomSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ShadowDemons:GetPreviewUnit() - return "npc_dota_creature_doom" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ShadowDemons:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ShadowDemons:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ShadowDemons:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vShadowDemonSchedule + #self.vDoomSchedule + #self.vNecroWarriorSchedule ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - --- don't count urns as units that must be destroyed -function CMapEncounter_ShadowDemons:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_dota_creature_upheaval_urn" then - return false - end - - return true -end - --------------------------------------------------------------------------------- - --- only count the v2 portals for our max unit count - we don't want to count the urns since they're indestructible -function CMapEncounter_ShadowDemons:GetMaxSpawnedUnitCount() - - local nCount = 0 - - for _,PortalSpawner in pairs ( self.PortalSpawnersV2 ) do - nCount = nCount + self:ComputeUnitsSpawnedBySchedule( PortalSpawner ) - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ShadowDemons:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - ---[[function CMapEncounter_ShadowDemons:RemoveUrns() - print( 'CMapEncounter_ShadowDemons:RemoveUrns called') - local hUrns = FindUnitsInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_BOTH, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_ANY_ORDER, false ) - for i=1, #hUrns do - print( 'Found unit named ' .. hUrns[i]:GetUnitName() ) - if hUrns[i]:GetUnitName() == "npc_dota_creature_upheaval_urn" then - print( 'Removing urn #' .. i ) - hUrns[i]:ForceKill( false ) - UTIL_Remove( hUrns[i] ) - end - end -end ---]] --------------------------------------------------------------------------------- - -function CMapEncounter_ShadowDemons:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - --print( "CMapEncounter_Pinecones:OnSpawnerFinished" ) - - if hSpawner:GetSpawnerType() == "CPortalSpawnerV2" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end - - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - if hSpawnedUnit:GetUnitName() == "npc_dota_creature_doom" then - EmitSoundOn( "encounter_shadow_demons.doom.intro", hSpawnedUnit ) - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_ShadowDemons diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_spectres.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_spectres.lua deleted file mode 100755 index add31b2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_spectres.lua +++ /dev/null @@ -1,146 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Spectres == nil then - CMapEncounter_Spectres = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Spectres:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- Initial Spawns - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - - self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_wolf", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 75.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_dota_creature_spectre", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - -- Dynamic Spawns - self.vWaveSchedule = - { - { - Time = 15, - Count = 1, - }, - { - Time = 40, - Count = 2, - }, - { - Time = 65, - Count = 2, - }, - { - Time = 90, - Count = 2, - }, - } - - --DeepPrintTable( self.vWaveSchedule ) - - self.szDynamicPortal = "dynamic_portal" - local bInvulnerable = true - - self:AddPortalSpawnerV2( CPortalSpawnerV2( self.szDynamicPortal, self.szDynamicPortal, 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_wolf", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_creature_spectre", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( self.szDynamicPortal, self.vWaveSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Spectres:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "survive_waves", 0, #self.vWaveSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Spectres:GetPreviewUnit() - return "npc_dota_creature_spectre" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Spectres:Start() - CMapEncounter.Start( self ) - - self:CreateUnits() - self:StartSpawnerSchedule( self.szDynamicPortal, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Spectres:CreateUnits() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Spectres:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Spectres:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Spectres diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_starting_room.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_starting_room.lua deleted file mode 100755 index 58477ce..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_starting_room.lua +++ /dev/null @@ -1,230 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_StartingRoom == nil then - CMapEncounter_StartingRoom = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - self:GetRoom().hSpawnGroupHandle = GetActiveSpawnGroupHandle() - self.bRewardsSelected = false - self.bSpokenGameStartLine = false - self.bAllButtonsReady = false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:Start() - - self.flStartTime = GameRules:GetGameTime() - - if GameRules.Aghanim:HasSetAscensionLevel() == false then - - -- Default the ascension level now in case we do any developer shit, and juke the system to think we haven't set it yet - GameRules.Aghanim:SetAscensionLevel( 0 ) - GameRules.Aghanim.bHasSetAscensionLevel = false - - local nMaxOption = GameRules.Aghanim:GetMaxAllowedAscensionLevel() - local nOption = 0 - while nOption <= nMaxOption do - local hAscensionLocator = Entities:FindByName( nil, "ascension_picker_locator_" .. ( nOption + 1 ) ) - if hAscensionLocator == nil then - break - end - - local vOrigin = hAscensionLocator:GetAbsOrigin() - local vAngles = hAscensionLocator:GetAnglesAsVector() - local pickerTable = - { - MapUnitName = "npc_dota_aghsfort_watch_tower_option_1", - origin = tostring( vOrigin.x ) .. " " .. tostring( vOrigin.y ) .. " " .. tostring( vOrigin.z ), - angles = tostring( vAngles.x ) .. " " .. tostring( vAngles.y ) .. " " .. tostring( vAngles.z ), - OptionNumber = tostring( nOption + 1 ), - teamnumber = DOTA_TEAM_NEUTRALS, - AscensionLevelPicker = 1, - } - - CreateUnitFromTable( pickerTable, vOrigin ) - nOption = nOption + 1 - end - - if nOption == 0 then - print( "Unable to find ascension_picker_locator_ entities!\n" ) - self:OnAscensionLevelSelected( { level = 1 } ) - return - end - end - - -- Use encounter name to display "select ascension level" - self:Introduce() - - -- Players Ready - self.nPlayersReady = 0 - local nTriggerStartTouchEvent = ListenToGameEvent( "trigger_start_touch", Dynamic_Wrap( getclass( self ), "OnTriggerStartTouch" ), self ) - table.insert( self.EventListeners, nTriggerStartTouchEvent ) - local nTriggerEndTouchEvent = ListenToGameEvent( "trigger_end_touch", Dynamic_Wrap( getclass( self ), "OnTriggerEndTouch" ), self ) - table.insert( self.EventListeners, nTriggerEndTouchEvent ) - local nAscensionSelectedEvent = ListenToGameEvent( "aghsfort_ascension_level_selected", Dynamic_Wrap( getclass( self ), "OnAscensionLevelSelected" ), self ) - table.insert( self.EventListeners, nAscensionSelectedEvent ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:OnAscensionLevelSelected( event ) - print( "Ascension Level " .. event.level .. " selected" ) - GameRules.Aghanim:SetAscensionLevel( event.level - 1 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:OnThink() - CMapEncounter.OnThink( self ) - - -- Don't speak until all players are connected - if self.bSpokenGameStartLine == false then - - local nConnectedPlayerCount = 0 - local nPlayerCount = 0 - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS and PlayerResource:IsValidPlayerID( nPlayerID ) then - nPlayerCount = nPlayerCount + 1 - if PlayerResource:GetConnectionState( nPlayerID ) == DOTA_CONNECTION_STATE_CONNECTED then - nConnectedPlayerCount = nConnectedPlayerCount + 1 - end - end - end - - if nConnectedPlayerCount == nPlayerCount then - GameRules.Aghanim:GetAnnouncer():OnGameStarted( ) - self.bSpokenGameStartLine = true - end - - end - - -- Update UI indicating who has picked their reward - local vecRewardState = GameRules.Aghanim:DetermineRewardSelectionState() - if vecRewardState ~= nil then - local nNumSelected = 0 - local vecPlayers = GameRules.Aghanim:GetConnectedPlayers() - for i=1,#vecPlayers do - if vecRewardState[ tostring( vecPlayers[i] ) ] == true then - nNumSelected = nNumSelected + 1 - end - end - self:UpdateEncounterObjective( "objective_select_aghanims_fragmants", nNumSelected, nil ) - - if #vecPlayers > 0 and nNumSelected == #vecPlayers then - self:GetRoom().bSpawnGroupReady = true - self.bRewardsSelected = true - end - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:InitializeObjectives() - --CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "objective_stand_on_buttons", 0, 4 ) - self:AddEncounterObjective( "objective_select_aghanims_fragmants", 0, 4 ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:OnTriggerStartTouch( event ) - - if self.bAllButtonsReady == true then - return - end - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - if szTriggerName == "trigger_player_1" - or szTriggerName == "trigger_player_2" - or szTriggerName == "trigger_player_3" - or szTriggerName == "trigger_player_4" then - --printf( "szTriggerName: %s, hUnit:GetUnitName(): %s, hTriggerEntity:GetName(): %s", szTriggerName, hUnit:GetUnitName(), hTriggerEntity:GetName() ) - - self.nPlayersReady = self.nPlayersReady + 1 - self:UpdateEncounterObjective( "objective_stand_on_buttons", self.nPlayersReady, nil ) - - local vecPlayers = GameRules.Aghanim:GetConnectedPlayers() - if #vecPlayers > 0 then - if self.nPlayersReady == #vecPlayers then - - self.bAllButtonsReady = true - self:GenerateRewards() - - -- We want to announce rewards during the starting room - GameRules.Aghanim:GetAnnouncer():OnSelectRewards() - - -- Open the main gate - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "main_gate_open_relay", false ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:OnTriggerEndTouch( event ) - - if self.bAllButtonsReady == true then - return - end - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - if szTriggerName == "trigger_player_1" - or szTriggerName == "trigger_player_2" - or szTriggerName == "trigger_player_3" - or szTriggerName == "trigger_player_4" then - --printf( "szTriggerName: %s, hUnit:GetUnitName(): %s, hTriggerEntity:GetName(): %s", szTriggerName, hUnit:GetUnitName(), hTriggerEntity:GetName() ) - - self.nPlayersReady = self.nPlayersReady - 1 - self:UpdateEncounterObjective( "objective_stand_on_buttons", self.nPlayersReady, nil ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:CheckForCompletion() - return GameRules.Aghanim:HasSetAscensionLevel() == true and self.bRewardsSelected == true -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_StartingRoom:OnComplete() - CMapEncounter.OnComplete( self ) - - for nPlayerID=0,AGHANIM_PLAYERS-1 do - local hHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hHero then - hHero:SetAbilityPoints( 2 ) - EmitSoundOnClient( "General.LevelUp", hHero:GetPlayerOwner() ) - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/generic_hero_status/hero_levelup.vpcf", PATTACH_ABSORIGIN_FOLLOW, nil ) ) - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_StartingRoom diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_storegga.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_storegga.lua deleted file mode 100755 index dc73fa8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_storegga.lua +++ /dev/null @@ -1,269 +0,0 @@ - -require( "encounters/encounter_boss_base" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Storegga == nil then - CMapEncounter_Storegga = class( {}, {}, CMapEncounter_BossBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:constructor( hRoom, szEncounterName ) - - CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.szRockSpawner_1 = "spawner_rock1" - self.szRockSpawner_2 = "spawner_rock2" - self.szRockSpawner_3 = "spawner_rock3" - self.szBossSpawner = "spawner_boss" - - self.Rocks = {} - - self:AddSpawner( CDotaSpawner( self.szRockSpawner_1, self.szRockSpawner_1, - { - { - EntityName = "npc_dota_storegga_rock", - Team = DOTA_TEAM_GOODGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szRockSpawner_2, self.szRockSpawner_2, - { - { - EntityName = "npc_dota_storegga_rock2", - Team = DOTA_TEAM_GOODGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szRockSpawner_3, self.szRockSpawner_3, - { - { - EntityName = "npc_dota_storegga_rock3", - Team = DOTA_TEAM_GOODGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szBossSpawner, self.szBossSpawner, - { - { - EntityName = "npc_dota_creature_storegga", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:Precache( context ) - CMapEncounter_BossBase.Precache( self, context ) - - PrecacheUnitByNameSync( "npc_dota_creature_small_storegga", context, -1 ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_tiny", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_storegga.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_tiny.vsndevts", context ) - PrecacheResource( "model", "models/heroes/tiny_01/tiny_01.vmdl", context ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetPreviewUnit() - return "npc_dota_creature_storegga" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:Start() - CMapEncounter_BossBase.Start( self ) - self:CreateOtherUnits() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:OnThink() - CMapEncounter_BossBase.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:MustKillForEncounterCompletion( hEnemyCreature ) - if hEnemyCreature:GetUnitName() == "npc_dota_creature_small_storegga" then - return false - end - if hEnemyCreature:GetUnitName() == "npc_dota_storegga_rock" then - return false - end - if hEnemyCreature:GetUnitName() == "npc_dota_storegga_rock2" then - return false - end - if hEnemyCreature:GetUnitName() == "npc_dota_storegga_rock3" then - return false - end - return true -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:CreateOtherUnits() - for _,Spawner in pairs ( self:GetSpawners() ) do - if Spawner.szSpawnerName ~= "spawner_boss" then - local hRocks = Spawner:SpawnUnits() - for _,hRock in pairs ( hRocks ) do - table.insert( self.Rocks, hRock ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:OnComplete() - CMapEncounter_BossBase.OnComplete( self ) - - for _,hRock in pairs ( self.Rocks ) do - UTIL_Remove( hRock ) - end -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetBossIntroVoiceLine() - return "tiny_tiny_pres_t3_spawn_03" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetBossIntroGesture() - return ACT_TINY_GROWL -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetBossIntroCameraPitch() - return 40 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetBossIntroCameraDistance() - return 800 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetBossIntroCameraHeight() - return 350 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetLaughLine() - - local szLines = - { - "tiny_tiny_pres_t3_laugh_01", - "tiny_tiny_pres_t3_laugh_02", - "tiny_tiny_pres_t3_laugh_03", - "tiny_tiny_pres_t3_laugh_04", - "tiny_tiny_pres_t3_laugh_05", - "tiny_tiny_pres_t3_laugh_06", - "tiny_tiny_pres_t3_laugh_07", - "tiny_tiny_pres_t3_laugh_08", - } - - return szLines[ RandomInt( 1, #szLines ) ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetKillTauntLine() - local szLines = - { - "tiny_tiny_pres_t3_kill_01", - "tiny_tiny_pres_t3_kill_03", - "tiny_tiny_pres_t3_kill_04", - "tiny_tiny_pres_t3_kill_05", - "tiny_tiny_pres_t3_kill_06", - "tiny_tiny_pres_t3_kill_09", - "tiny_tiny_pres_t3_ability_toss_11", - "tiny_tiny_pres_t3_ability_toss_08", - "tiny_tiny_pres_t3_ability_toss_07", - "tiny_tiny_pres_t3_ability_toss_06", - "tiny_tiny_pres_t3_attack_08", - "tiny_tiny_pres_t3_attack_06", - } - - return szLines[ RandomInt( 1, #szLines ) ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Storegga:GetAbilityUseLine( szAbilityName ) - local szLineToUse = self:GetLaughLine() - if szAbilityName == "storegga_grab_throw" then - local szLines = - { - "tiny_tiny_pres_t3_ability_toss_13", - "tiny_tiny_pres_t3_ability_toss_12", - "tiny_tiny_pres_t3_ability_toss_05", - "tiny_tiny_pres_t3_ability_toss_04", - "tiny_tiny_pres_t3_ability_toss_03", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "storegga_arm_slam" then - local szLines = - { - "tiny_tiny_pres_t3_attack_12", - "tiny_tiny_pres_t3_attack_11", - "tiny_tiny_pres_t3_attack_07", - "tiny_tiny_pres_t3_ability_toss_01", - "tiny_tiny_pres_t3_ability_toss_02", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "storegga_ground_pound" then - local szLines = - { - "tiny_tiny_pres_t3_attack_04", - "tiny_tiny_pres_t3_attack_05", - "tiny_tiny_pres_t3_attack_03", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - if szAbilityName == "storegga_avalanche" then - local szLines = - { - "tiny_tiny_pres_t3_ability_toss_15", - "tiny_tiny_pres_t3_ability_toss_14", - "tiny_tiny_pres_t3_ability_grow_02", - } - szLineToUse = szLines[ RandomInt( 1, #szLines ) ] - end - - - return szLineToUse -end - - --------------------------------------------------------------------------------- - -return CMapEncounter_Storegga diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_temple_garden.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_temple_garden.lua deleted file mode 100755 index 3ee4233..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_temple_garden.lua +++ /dev/null @@ -1,65 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_trap_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_TempleGarden == nil then - CMapEncounter_TempleGarden = class( {}, {}, CMapEncounter_TrapBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGarden:GetPreviewUnit() - return "npc_dota_breathe_fire_trap" -end - --------------------------------------------------------------------------------- ---[[ -function CMapEncounter_TempleGarden:Start() - CMapEncounter_TrapBase.Start( self ) - if not IsServer() then - return - end - local wardUnits = Entities:FindAllByName( "spawner_ward" ) - local wardUnit = "npc_dota_observer_ward_journey" - for _, spawnerUnit in pairs(wardUnits) do - local hUnit = CreateUnitByName( wardUnit, spawnerUnit:GetAbsOrigin(), true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hUnit ~= nil then - --print("Placing a ward") - hUnit:SetForwardVector( RandomVector( 1 ) ) - end - end -end -]] --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGarden:CheckForCompletion() - if not IsServer() then - return - end - local bIsComplete = CMapEncounter_TrapBase.CheckForCompletion( self ) - if bIsComplete then - self:DisableTraps() - end - - return bIsComplete -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGarden:DisableTraps() - --print("Disabling Traps!") - -- Disable any traps in the map - local hRelays = self:GetRoom():FindAllEntitiesInRoomByName( "disable_traps_relay", false ) - --local hRelays = Entities:FindAllByName( "disable_traps_relay" ) - for _, hRelay in pairs( hRelays ) do - hRelay:Trigger( nil, nil ) - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_TempleGarden diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_temple_guardians.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_temple_guardians.lua deleted file mode 100755 index fc366c6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_temple_guardians.lua +++ /dev/null @@ -1,91 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "encounters/encounter_boss_base" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_TempleGuardians == nil then - CMapEncounter_TempleGuardians = class( {}, {}, CMapEncounter_BossBase ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:constructor( hRoom, szEncounterName ) - - CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName ) - - - self.szBossSpawner = "spawner_boss" - - self:AddSpawner( CDotaSpawner( self.szBossSpawner, self.szBossSpawner, - { - { - EntityName = "npc_dota_creature_temple_guardian", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetPreviewUnit() - return "npc_dota_creature_temple_guardian" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetBossIntroGesture() - return ACT_DOTA_CAPTURE -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetBossIntroCameraPitch() - return 30 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetBossIntroCameraDistance() - return 800 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetBossIntroCameraHeight() - return 85 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetBossIntroCameraYawRotateSpeed() - return 0.1 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetBossIntroCameraInitialYaw() - return 120 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:GetBossIntroDuration() - return 5.0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TempleGuardians:IntroduceBoss( hEncounteredBoss ) - CMapEncounter_BossBase.IntroduceBoss( self, hEncounteredBoss ) - - EmitGlobalSound( "Boss.Intro" ) -end - --------------------------------------------------------------------------------- - -return CMapEncounter_TempleGuardians diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_test_immediate_victory.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_test_immediate_victory.lua deleted file mode 100755 index 7072e27..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_test_immediate_victory.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_TestImmediateVictory == nil then - CMapEncounter_TestImmediateVictory = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TestImmediateVictory:GetPreviewUnit() - return "npc_dota_shop_keeper" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TestImmediateVictory:CheckForCompletion() - return true -end - --------------------------------------------------------------------------------- - -return CMapEncounter_TestImmediateVictory diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_test_reward_room.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_test_reward_room.lua deleted file mode 100755 index dcb4176..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_test_reward_room.lua +++ /dev/null @@ -1,19 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_TestRewardRoom == nil then - CMapEncounter_TestRewardRoom = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TestRewardRoom:CheckForCompletion() - return true -end - --------------------------------------------------------------------------------- - -return CMapEncounter_TestRewardRoom diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_transition.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_transition.lua deleted file mode 100755 index c8845af..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_transition.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Transition == nil then - CMapEncounter_Transition = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Transition:GetPreviewUnit() - return "npc_dota_creature_temple_guardian" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Transition:CheckForCompletion() - return true -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Transition diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_trap_base.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_trap_base.lua deleted file mode 100755 index e686148..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_trap_base.lua +++ /dev/null @@ -1,153 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_TrapBase == nil then - CMapEncounter_TrapBase = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_monkey_king/monkey_king_disguise.vpcf", context ) - PrecacheUnitByNameSync( "npc_dota_pendulum_trap", context, -1 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) - - self.HeroesOnGoal = {} - self.nHeroOnTrigger1 = 0 - self.nHeroOnTrigger2 = 0 - self.nHeroOnTrigger3 = 0 - self.nHeroOnTrigger4 = 0 - self.nHeroesOnGoal = 0 - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:InitializeObjectives() - self:AddEncounterObjective( "navigate_the_traps", 0, 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:GetMaxSpawnedUnitCount() - return 0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:Start() - CMapEncounter.Start( self ) - - local hHeroes = HeroList:GetAllHeroes() - - for _, hHero in pairs ( hHeroes ) do - if hHero ~= nil and not hHero:IsNull() and hHero:IsRealHero() then - hHero:AddNewModifier( hHero, nil, "modifier_aghsfort_player_transform", { duration = -1 } ) - end - end - - local PendulumSpawners = self:GetRoom():FindAllEntitiesInRoomByName( "pendulum_trap", false ) - for _,Spawner in pairs ( PendulumSpawners ) do - local hPendulum = CreateUnitByName( "npc_dota_pendulum_trap", Spawner:GetAbsOrigin(), false, nil, nil, DOTA_TEAM_BADGUYS ) - if hPendulum then - print( "Found pendulum") - hPendulum:SetForwardVector( Spawner:GetForwardVector() ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:CheckForCompletion() - local nHeroesAlive = 0 - local hHeroes = HeroList:GetAllHeroes() - for _, hHero in pairs ( hHeroes ) do - if hHero ~= nil and hHero:IsRealHero() and hHero:GetTeamNumber() == DOTA_TEAM_GOODGUYS then - if hHero:IsAlive() or hHero:GetRespawnsDisabled() == false then - nHeroesAlive = nHeroesAlive + 1 - end - end - end - self.nHeroesOnGoal = self.nHeroOnTrigger1 + self.nHeroOnTrigger2 + self.nHeroOnTrigger3 + self.nHeroOnTrigger4 - return nHeroesAlive > 0 and self.nHeroesOnGoal == nHeroesAlive -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:OnTriggerStartTouch( event ) - - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - local szTriggerName = event.trigger_name - if hUnit ~= nil and hUnit:IsRealHero() and hUnit:IsControllableByAnyPlayer() then - if szTriggerName == "trigger_player_1" then - self.nHeroOnTrigger1 = 1 - elseif szTriggerName == "trigger_player_2" then - self.nHeroOnTrigger2 = 1 - elseif szTriggerName == "trigger_player_3" then - self.nHeroOnTrigger3 = 1 - elseif szTriggerName == "trigger_player_4" then - self.nHeroOnTrigger4 = 1 - end - --table.insert( self.HeroesOnGoal, hUnit ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:OnTriggerEndTouch( event ) - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - local szTriggerName = event.trigger_name - if hUnit ~= nil and hUnit:IsRealHero() and hUnit:IsControllableByAnyPlayer() then - if szTriggerName == "trigger_player_1" then - self.nHeroOnTrigger1 = 0 - elseif szTriggerName == "trigger_player_2" then - self.nHeroOnTrigger2 = 0 - elseif szTriggerName == "trigger_player_3" then - self.nHeroOnTrigger3 = 0 - elseif szTriggerName == "trigger_player_4" then - self.nHeroOnTrigger4 = 0 - end - --[[ - for k,hHero in pairs( self.HeroesOnGoal ) do - if hHero == hUnit then - table.remove( self.HeroesOnGoal, k ) - end - end - ]] - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrapBase:OnComplete() - CMapEncounter.OnComplete( self ) - local hHeroes = HeroList:GetAllHeroes() - - for _, hHero in pairs ( hHeroes ) do - if hHero ~= nil and not hHero:IsNull() and hHero:IsRealHero() then - hHero:RemoveModifierByName( "modifier_aghsfort_player_transform" ) - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_TrapBase diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_troll_warlord.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_troll_warlord.lua deleted file mode 100755 index f79fdf4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_troll_warlord.lua +++ /dev/null @@ -1,316 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_TrollWarlord == nil then - CMapEncounter_TrollWarlord = class( {}, {}, CMapEncounter ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_troll_warlord", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_troll_warlord.vsndevts", context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_beastmaster", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_beastmaster.vsndevts", context ) - PrecacheUnitByNameSync( "npc_dota_creature_sheep_hostage", context ) - PrecacheModel( "npc_dota_creature_sheep_hostage", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_lone_druid/lone_druid_bear_entangle.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_lone_druid/lone_druid_bear_entangle_body.vpcf", context ) - PrecacheResource( "particle", "particles/econ/events/league_teleport_2014/teleport_start_league.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self.bInitialSpawn = true - self.bCagesSpawned = false - self.nSheepToRescue = 4 - self.nSheepRescued = 0 - --Hack to get objectives to work - self.nEnemies = 0 - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_beastmaster_boar", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 0.0, - }, - { - EntityName = "npc_dota_creature_beastmaster_boss", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - --Spawner schedule for Troll Warlord - local bInvulnerable = true - local vCaptainSchedule = { { Time = 0, Count = 1 } } - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_captain_1", "spawner_captain_1", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_troll_warlord_ranged", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_captain_2", "spawner_captain_2", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_troll_warlord_melee", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable ) ) - - self:SetSpawnerSchedule( "spawner_peon", nil ) -- means spawn once when triggered - self:SetSpawnerSchedule( "spawner_captain_1", vCaptainSchedule ) - self:SetSpawnerSchedule( "spawner_captain_2", vCaptainSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:SpawnCages() - print("Spawning cages") - local captureUnits = Entities:FindAllByName( "spawner_cage" ) - --Shuffling the table - local shuffledUnits = self:ShuffleCages(captureUnits) - - local cageUnit = "npc_dota_cage" - local nCageID = 0 - for _, captureUnit in pairs(shuffledUnits) do - - local vSpawnLoc = captureUnit:GetAbsOrigin() - local vAngles = VectorAngles( RandomVector( 1 ) ) - local cageTable = - { - MapUnitName = cageUnit, - origin = tostring( vSpawnLoc.x ) .. " " .. tostring( vSpawnLoc.y ) .. " " .. tostring( vSpawnLoc.z ), - angles = tostring( vAngles.x ) .. " " .. tostring( vAngles.y ) .. " " .. tostring( vAngles.z ), - teamnumber = DOTA_TEAM_BADGUYS, - NeverMoveToClearSpace = false, - } - - local hUnit = CreateUnitFromTable( cageTable, vSpawnLoc ) - if hUnit ~= nil then - --print("Placing a cage") - nCageID = nCageID + 1 - hUnit:Attribute_SetIntValue( "cageID", nCageID ) - --Don't double count the cages - self.nEnemies = self.nEnemies + 1 - end - end - self.bCagesSpawned = true - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue, self.nEnemies) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:StartExitPortal() - local szPortalFX = "particles/portals/portal_ground_spawn_endpoint.vpcf" - local PortalPoints = self:GetRoom():FindAllEntitiesInRoomByName( "dynamic_portal" ) - if PortalPoints == nil then - --print("No Portal Points Found!") - return - end - for _, hPortal in pairs ( PortalPoints ) do - --print("Spawning Portal FX") - local effects = ParticleManager:CreateParticle( szPortalFX, PATTACH_WORLDORIGIN, hPortal ) - ParticleManager:SetParticleControl( effects, 0, hPortal:GetAbsOrigin() ) - EmitGlobalSound("Aghsfort_DarkPortal.Created") - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - --Hack to get objectives to work - self.nEnemies = self:GetMaxSpawnedUnitCount() - self:AddEncounterObjective( "defeat_all_enemies", 0, self.nEnemies ) - self:AddEncounterObjective( "rescue_sheep", self.nSheepRescued, self.nSheepToRescue ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:GetMaxSpawnedUnitCount() - local nCount = 0 - -- Map has 7 peon spawners - local hPeonSpawners = self:GetSpawner( "spawner_peon") - if hPeonSpawners then - nCount = nCount + hPeonSpawners:GetSpawnPositionCount() * 4 - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:CheckForCompletion() - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - if nCurrentValue >= self.nEnemies and self.nSheepRescued == 4 then - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:GetPreviewUnit() - return "npc_dota_creature_troll_warlord_ranged" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:Start() - CMapEncounter.Start( self ) - self:CreateEnemies() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - if self.bInitialSpawn == true then - self:SpawnCages() - self.bInitialSpawn = false - end - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:OnEntityKilled( event ) - if not IsServer() then - return - end - - if self.bCagesSpawned == false then - return - end - - local killedUnit = EntIndexToHScript( event.entindex_killed ) - if killedUnit == nil then - return - end - - if killedUnit:GetUnitName() =="npc_dota_creature_beastmaster_boss" or - killedUnit:GetUnitName() == "npc_dota_creature_beastmaster_boar" or - killedUnit:GetUnitName() == "npc_dota_creature_troll_warlord_melee" or - killedUnit:GetUnitName() == "npc_dota_creature_troll_warlord_ranged" or - killedUnit:GetUnitName() == "npc_dota_cage" then - --print(killedUnit:GetUnitName()) - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, self.nEnemies ) - end - - --Check to see if it's a cage - if killedUnit:GetUnitName() == "npc_dota_cage" then - local cageAttribute = killedUnit:Attribute_GetIntValue( "cageID", -1 ) - if cageAttribute ~= -1 then - local szHostageUnit = "npc_dota_creature_beastmaster_boar" - local vCagePos = killedUnit:GetOrigin() - --print("Cage has been destroyed") - if cageAttribute < 5 then - --print("Cage has been released") - --self:StartExitPortal() - self.nSheepRescued = self.nSheepRescued + 1 - --Update the objectives - local nCurrentValue = self:GetEncounterObjectiveProgress( "rescue_sheep" ) - self:UpdateEncounterObjective( "rescue_sheep", nCurrentValue + 1, nil ) - --Spawn sheep - szHostageUnit = "npc_dota_creature_sheep_hostage" - local hHostage = CreateUnitByName( szHostageUnit, vCagePos, true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hHostage ~= nil then - --print("Spawning a sheep") - local hPortal = Entities:FindByName( nil, "portal_path_track" ) - hHostage:SetInitialGoalEntity( hPortal ) - EmitSoundOn("Creature.Sheep.Spawn", hHostage) - end - if self.nSheepRescued == 4 then - self:SpawnWarlord() - end - else - --Don't always spawn boars - local nRoll = RandomInt(1,2) - if nRoll == 1 then - local hBoar = CreateUnitByName( szHostageUnit, vCagePos, true, nil, nil, DOTA_TEAM_BADGUYS ) - hBoar:SetForwardVector( RandomVector( 1 ) ) - --Hack to get objectives to work - self.nEnemies = self.nEnemies + 1 - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue, self.nEnemies ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:SpawnWarlord() - print("Spawning Warlord") - self:StartSpawnerSchedule( "spawner_captain_1", 0 ) - self:StartSpawnerSchedule( "spawner_captain_2", 0 ) - self.nEnemies = self.nEnemies + 2 - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue, self.nEnemies ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TrollWarlord:ShuffleCages(orig_list) - local list = shallowcopy( orig_list ) - local result = {} - local count = #list - for i = 1, count do - local pick = RandomInt( 1, #list ) - result[ #result + 1 ] = list[ pick ] - table.remove( list, pick ) - end - return result -end - -return CMapEncounter_TrollWarlord diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_tusk_skeletons.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_tusk_skeletons.lua deleted file mode 100755 index fa8abe0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_tusk_skeletons.lua +++ /dev/null @@ -1,208 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawnerv2" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_TuskSkeletons == nil then - CMapEncounter_TuskSkeletons = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.vPeonSchedule = - { - { - Time = 0, - Count = 2, - }, - { - Time = 25, - Count = 3, - }, - { - Time = 50, - Count = 3, - }, - { - Time = 75, - Count = 4, - }, - } - - --DeepPrintTable( self.vPeonSchedule ) - - local bInvulnerable = true - - self:AddPortalSpawnerV2( CPortalSpawnerV2( "spawner_peon", "spawner_peon", 8, 5, 1.0, - { - { - EntityName = "npc_dota_creature_tusk_skeleton", - Team = DOTA_TEAM_BADGUYS, - Count = 6, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_creature_spectral_tusk_mage", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - }, bInvulnerable - ) ) - - self:SetSpawnerSchedule( "spawner_peon", self.vPeonSchedule ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:Precache( context ) - CMapEncounter.Precache( self, context ) - - local friendTable = - { - MapUnitName = "npc_dota_creature_friendly_ogre_seal", - teamnumber = DOTA_TEAM_GOODGUYS, - } - - PrecacheUnitFromTableSync( friendTable, context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:GetPreviewUnit() - return "npc_dota_creature_spectral_tusk_mage" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:InitializeObjectives() - self:AddEncounterObjective( "survive_waves", 0, #self.vPeonSchedule ) - self:AddEncounterObjective( "save_gary", 0, 0 ) - - CMapEncounter.InitializeObjectives( self ) - -- self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) - - self.szObjectiveEnts = "objective" - self.hObjectiveEnts = self:GetRoom():FindAllEntitiesInRoomByName( self.szObjectiveEnts, true ) - - if #self.hObjectiveEnts == 0 then - printf( "WARNING - self.hObjectiveEnt is nil (looked for classname \"%s\")", self.szObjectiveEnts ) - return - end - - self.hFriend = CreateUnitByName( "npc_dota_creature_friendly_ogre_seal", self.hObjectiveEnts[1]:GetOrigin(), false, nil, nil, DOTA_TEAM_GOODGUYS ) - - if self.hFriend ~= nil then - self.hFriend:SetForwardVector( RandomVector( 1 ) ) - - local nAscLevel = GameRules.Aghanim:GetAscensionLevel() - self.hFriend:CreatureLevelUp( nAscLevel ) - - self.vGoalPos = self.hFriend:GetAbsOrigin() - else - printf( "WARNING - Failed to spawn the objective entity!" ) - return - end - - --[[ - local objectiveAngles = self.hObjectiveEnts[ 1 ]:GetAngles() - self.hFriend:SetAbsAngles( objectiveAngles.x, objectiveAngles.y, objectiveAngles.z ) - ]] -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:ShouldAutoStartGlobalAscensionAbilities() - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:Start() - CMapEncounter.Start( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner.szSpawnerName == "spawner_peon" then - if hSpawner.schedule then - local nCurrentValue = self:GetEncounterObjectiveProgress( "survive_waves" ) - self:UpdateEncounterObjective( "survive_waves", nCurrentValue + 1, nil ) - end - end - - for _, hSpawnedUnit in pairs ( hSpawnedUnits ) do - if self.hFriend ~= nil and ( not self.hFriend:IsNull() ) and self.hFriend:IsAlive() then - hSpawnedUnit:SetInitialGoalEntity( self.hFriend ) - else - if self.hObjectiveEnts[ 1 ] ~= nil and self.hObjectiveEnts[ 1 ]:IsNull() == false then - hSpawnedUnit:SetInitialGoalPosition( self.hObjectiveEnts[ 1 ]:GetOrigin() ) - else - hSpawnedUnit:SetInitialGoalPosition( self.vGoalPos ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:OnTriggerStartTouch( event ) - CMapEncounter.OnTriggerStartTouch( self, event ) - - -- Get the trigger that activates the room - local szTriggerName = event.trigger_name - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - - --printf( "szTriggerName: %s, hUnit:GetUnitName(): %s, hTriggerEntity:GetName(): %s", szTriggerName, hUnit:GetUnitName(), hTriggerEntity:GetName() ) - - if self.bCreatureSpawnsActivated == nil and szTriggerName == "trigger_spawn_creatures" then - self.bCreatureSpawnsActivated = true - - self:StartGlobalAscensionAbilities() - self:StartAllSpawnerSchedules( 0 ) - - --printf( "Unit \"%s\" triggered creature spawning!", hUnit:GetUnitName() ) - EmitGlobalSound( "RoundStart" ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_TuskSkeletons:OnComplete() - CMapEncounter.OnComplete( self ) - - -- If friendly unit is still alive, grant some rewards and do other stuff - if self.hFriend ~= nil and ( not self.hFriend:IsNull() ) and self.hFriend:IsAlive() then - self.hFriend:Heal( self.hFriend:GetMaxHealth(), nil ) - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/fish_bones_active.vpcf", PATTACH_ABSORIGIN_FOLLOW, self.hFriend ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local nLives = 1 - for i = 1, nLives do - self:DropLifeRuneFromUnit( self.hFriend, nil, true ) - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_TuskSkeletons diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_undead_woods.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_undead_woods.lua deleted file mode 100755 index 75219ad..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_undead_woods.lua +++ /dev/null @@ -1,135 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_UndeadWoods == nil then - CMapEncounter_UndeadWoods = class( {}, {}, CMapEncounter ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle_folder", "particles/units/heroes/hero_skeleton_king", context ) - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_skeletonking.vsndevts", context ) - PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_skeleton_king.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_sk", "spawner_sk", - { - { - EntityName = "npc_dota_undead_woods_skeleton_king", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - - local flInitialPortalSpawnDelay = 0.0 - local flInitialSummonTime = 30.0 - local flPortalIntervalInput = DEFAULT_PORTAL_SPAWN_INTERVAL - local flScaleInput = 1.0 - self.nNumPortals = 4 - - for i=1,self.nNumPortals do - local name = string.format( "portal_%i", i ) - - self:AddPortalSpawner( CPortalSpawner( name, "dynamic_portal", 60 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_wraith_king_skeleton_warrior", - Team = DOTA_TEAM_BADGUYS, - Count = 10, - PositionNoise = 0.0, - }, - } ) ) - end -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "destroy_spawning_portals", 0, self.nNumPortals ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:GetPreviewUnit() - return "npc_dota_undead_woods_skeleton_king" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:Start() - CMapEncounter.Start( self ) - - self:CreateEnemies() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_UndeadWoods:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - -- if hSpawner:GetSpawnerName() ~= "spawner_sk" then - -- local SkeletonKings = self:GetRoom():FindAllEntitiesInRoomByName( "npc_dota_undead_woods_skeleton_king" ) - -- if #SkeletonKings > 0 then - -- local hAbility = SkeletonKings[1]:FindAbilityByName( "undead_woods_skeleton_king_mortal_strike" ) - -- if hAbility then - -- for _,hUnit in pairs( hSpawnedUnits ) do - -- hUnit:AddNewModifier( SkeletonKings[1], hAbility, "modifier_skeleton_king_mortal_strike_summon", {} ) - -- end - -- end - -- end - -- end - - --print( "CMapEncounter_Wildwings:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_UndeadWoods diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_warlocks.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_warlocks.lua deleted file mode 100755 index d4454c9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_warlocks.lua +++ /dev/null @@ -1,216 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Warlocks == nil then - CMapEncounter_Warlocks = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheResource( "particle", "particles/units/heroes/hero_invoker/invoker_sun_strike_team.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_invoker/invoker_sun_strike.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_warlock/warlock_shadow_word_buff.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - -- Pre-placed creatures (done this way to use a specific subset of existing map spawners) - self.vGatekeepersSchedule = - { - { - Time = 0, - Count = 2, - }, - } - - self:AddSpawner( CDotaSpawner( "spawner_gatekeepers", "spawner_gatekeepers", - { - { - EntityName = "npc_dota_creature_demon_golem", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 225.0, - }, - { - EntityName = "npc_dota_creature_warlock", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - -- Players have to kill these creatures to trigger the dynamic portals - self:SetPortalTriggerSpawner( "spawner_gatekeepers", 0.8 ) - self:SetSpawnerSchedule( "spawner_gatekeepers", self.vGatekeepersSchedule ) - - -- Additional creatures - self.vGroupCreaturesSchedule = - { - { - Time = 0, - Count = 1, - }, - } - - self:AddSpawner( CDotaSpawner( "spawner_group", "spawner_group", - { - { - EntityName = "npc_dota_creature_demon_golem", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 225.0, - }, - { - EntityName = "npc_dota_creature_warlock", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - ) ) - - self:SetSpawnerSchedule( "spawner_group", self.vGroupCreaturesSchedule ) - - -- Dynamic Portals - local nPortalHealth = 60 * hRoom:GetDepth() - local flInitialPortalSpawnDelay = 0.0 - local flInitialSummonTime = 6.0 - local flPortalIntervalInput = 45.0 - local flScaleInput = 1.0 - local nNumPortals = 3 - - local nNameCounter = 1 - local szLocatorName = "dynamic_portal" - self.nTotalPortals = nNumPortals - - local PortalUnits = - { - { - EntityName = "npc_dota_creature_demon_golem", - Team = DOTA_TEAM_BADGUYS, - Count = 2, - PositionNoise = 200.0, - }, - { - EntityName = "npc_dota_creature_warlock", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } - - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, nPortalHealth, flInitialPortalSpawnDelay, - flInitialSummonTime, flPortalIntervalInput, flScaleInput, PortalUnits - ) ) - end - - flInitialPortalSpawnDelay = 24.0 - flInitialSummonTime = 5.0 - nNumPortals = 3 - self.nTotalPortals = self.nTotalPortals + nNumPortals - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, nPortalHealth, flInitialPortalSpawnDelay, - flInitialSummonTime, flPortalIntervalInput, flScaleInput, PortalUnits - ) ) - end - - flInitialPortalSpawnDelay = 48.0 - flInitialSummonTime = 5.0 - nNumPortals = 3 - self.nTotalPortals = self.nTotalPortals + nNumPortals - for i = 1, nNumPortals do - local name = string.format( "portal_%i", nNameCounter ) - nNameCounter = nNameCounter + 1 - self:AddPortalSpawner( CPortalSpawner( name, szLocatorName, nPortalHealth, flInitialPortalSpawnDelay, - flInitialSummonTime, flPortalIntervalInput, flScaleInput, PortalUnits - ) ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "destroy_spawning_portals", 0, self.nTotalPortals ) - self:AddEncounterObjective( "defeat_all_enemies", 0, self:GetMaxSpawnedUnitCount() ) -- doesn't capture pre-placed spawns? -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:OnPortalV2Killed( hVictim, hAttacker, nUnitCountSuppressed ) - CMapEncounter.OnPortalV2Killed( self, hVictim, hAttacker, nUnitCountSuppressed ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + nUnitCountSuppressed, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - local nCurrentValue = self:GetEncounterObjectiveProgress( "defeat_all_enemies" ) - self:UpdateEncounterObjective( "defeat_all_enemies", nCurrentValue + 1, nil ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:GetPreviewUnit() - return "npc_dota_creature_warlock" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:Start() - CMapEncounter.Start( self ) - - self:StartSpawnerSchedule( "spawner_gatekeepers", 0 ) - self:StartSpawnerSchedule( "spawner_group", 0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Warlocks:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Warlocks:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _, hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt( 1, #heroes ) ] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Warlocks diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wave_blasters.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wave_blasters.lua deleted file mode 100755 index 7b9195b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wave_blasters.lua +++ /dev/null @@ -1,120 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - -LinkLuaModifier( "modifier_room_monster_sleep", "modifiers/modifier_room_monster_sleep", LUA_MODIFIER_MOTION_NONE ) --------------------------------------------------------------------------------- - -if CMapEncounter_WaveBlasters == nil then - CMapEncounter_WaveBlasters = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:Precache( context ) - CMapEncounter.Precache( self, context ) - PrecacheResource( "particle", "particles/generic_gameplay/generic_sleep.vpcf", context ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - self.nCaptains = 4 - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_aghsfort_creature_wave_blaster_ghost", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 400.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain", "spawner_captain", - { - { - EntityName = "npc_dota_creature_wave_blaster", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 200.0, - }, - } ) ) -end --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - self:AddEncounterObjective( "kill_waveblasters", 0, self.nCaptains ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - if hVictim and hVictim:GetUnitName() == "npc_dota_creature_wave_blaster" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "kill_waveblasters" ) - self:UpdateEncounterObjective( "kill_waveblasters", nCurrentValue + 1, nil ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:GetPreviewUnit() - return "npc_dota_creature_wave_blaster" -end --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:GetMaxSpawnedUnitCount() - - local nCount = 0 - - for _,Spawner in pairs ( self.Spawners ) do - nCount = nCount + self:ComputeUnitsSpawnedBySchedule( Spawner ) - end - - -- Assume we get 4 ghosts per boss - local hCaptainSpawners = self:GetSpawner( "spawner_captain" ) - if hCaptainSpawners then - nCount = nCount + hCaptainSpawners:GetSpawnCountPerSpawnPosition() * 3 - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:Start() - CMapEncounter.Start( self ) - - - for _,Spawner in pairs ( self:GetSpawners() ) do - if Spawner:GetSpawnerName() == "spawner_peon" then - Spawner:SpawnUnitsFromRandomSpawners( Spawner:GetSpawnPositionCount() ) - else - Spawner:SpawnUnitsFromRandomSpawners( self.nCaptains ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_WaveBlasters:OnSpawnerFinished( hSpawner, hSpawnedUnits) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - for _,enemy in pairs( hSpawnedUnits ) do - if enemy ~= nil then - enemy:AddNewModifier( enemy, nil, "modifier_room_monster_sleep", { duration = 15 } ) - end - end - -end - --------------------------------------------------------------------------------- - -return CMapEncounter_WaveBlasters diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wildwings.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wildwings.lua deleted file mode 100755 index 73b4ddd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wildwings.lua +++ /dev/null @@ -1,149 +0,0 @@ -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Wildwings == nil then - CMapEncounter_Wildwings = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self.szPeonSpawner = "spawner_peon" - self.szCaptainSpawner = "spawner_captain" - - self:AddSpawner( CDotaSpawner( self.szPeonSpawner, self.szPeonSpawner, - { - { - EntityName = "npc_dota_creature_wildwing_laborer", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 225.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( self.szCaptainSpawner, self.szCaptainSpawner, - { - { - EntityName = "npc_dota_creature_dazzle", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - } ) ) - - local flInitialPortalSpawnDelay = 0.0 - local flInitialSummonTime = 30.0 - local flPortalIntervalInput = DEFAULT_PORTAL_SPAWN_INTERVAL - local flScaleInput = 1.0 - self.nNumPortals = 4 - - for i=1,self.nNumPortals do - local name = string.format( "portal_%i", i ) - - self:AddPortalSpawner( CPortalSpawner( name, "dynamic_portal", 60 * hRoom:GetDepth(), flInitialPortalSpawnDelay, flInitialSummonTime, flPortalIntervalInput, flScaleInput, - { - { - EntityName = "npc_dota_creature_wildwing_laborer", - Team = DOTA_TEAM_BADGUYS, - Count = 3, - PositionNoise = 0.0, - }, - { - EntityName = "npc_dota_creature_dazzle", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 0.0, - }, - - } ) ) - end -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - - self:AddEncounterObjective( "destroy_spawning_portals", 0, self.nNumPortals ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:GetPreviewUnit() - return "npc_dota_creature_dazzle" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:GetMaxSpawnedUnitCount() - local nCount = 0 - local hWarriorSpawners = self:GetSpawner( self.szPeonSpawner ) - if hWarriorSpawners then - nCount = nCount + hWarriorSpawners:GetSpawnPositionCount() * 4 --* self.nWaves - end - - local hChampionSpawners = self:GetSpawner( self.szCaptainSpawner ) - if hChampionSpawners then - nCount = nCount + hChampionSpawners:GetSpawnPositionCount() --* self.nWaves - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:Start() - CMapEncounter.Start( self ) - - self:CreateEnemies() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:OnThink() - CMapEncounter.OnThink( self ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:CreateEnemies() - for _,Spawner in pairs ( self:GetSpawners() ) do - Spawner:SpawnUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wildwings:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) - - if hSpawner:GetSpawnerType() == "CDotaSpawner" then -- standing enemies in the map should not aggro to players - return - end - - --print( "CMapEncounter_Wildwings:OnSpawnerFinished" ) - local heroes = FindRealLivingEnemyHeroesInRadius( DOTA_TEAM_BADGUYS, self.hRoom:GetOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - for _,hSpawnedUnit in pairs( hSpawnedUnits ) do - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - --printf( "Set initial goal entity for unit \"%s\" to \"%s\"", hSpawnedUnit:GetUnitName(), hero:GetUnitName() ) - hSpawnedUnit:SetInitialGoalEntity( hero ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Wildwings diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wrath.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wrath.lua deleted file mode 100755 index 1baa361..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_wrath.lua +++ /dev/null @@ -1,138 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_Wrath == nil then - CMapEncounter_Wrath = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:GetPreviewUnit() - return "npc_dota_hero_zuus" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:OnEncounterLoaded() - CMapEncounter.OnEncounterLoaded( self ) - - self.bGreenLight = true - - self.HeroesOnGoal = {} -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:GetMaxSpawnedUnitCount() - return 0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:Start() - CMapEncounter.Start( self ) - - local hGreenLights = self:GetRoom():FindAllEntitiesInRoomByName( "green_light", true ) - if #hGreenLights > 0 then - self.hGreenLight = hGreenLights[ 1 ] - end - if self.hGreenLight == nil then - print( "Unable to find \"green_light\"" ) - end - - local hRedLights = self:GetRoom():FindAllEntitiesInRoomByName( "red_light", true ) - if #hRedLights > 0 then - self.hRedLight = hRedLights[ 1 ] - end - if self.hRedLight == nil then - print( "Unable to find \"red_light\"" ) - end - - self.fEncounterStartTime = GameRules:GetGameTime() - self.fNextLightChangeTime = self.fEncounterStartTime + self:GetNextLightChangeTime() -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:OnThink() - CMapEncounter.OnThink( self ) - - if GameRules:GetGameTime() >= self.fNextLightChangeTime then - printf( "self:ToggleLights()" ) - self:ToggleLights() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:GetNextLightChangeTime() - return RandomFloat( 1.0, 7.0 ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:ToggleLights() - if self.bGreenLight then - self.hGreenLight:Disable() - self.hRedLight:Enable() - self.bGreenLight = false - else - self.hGreenLight:Enable() - self.hRedLight:Disable() - self.bGreenLight = true - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:CheckForCompletion() - local nHeroesAlive = 0 - local hHeroes = HeroList:GetAllHeroes() - for _, hHero in pairs ( hHeroes ) do - if hHero ~= nil and hHero:IsRealHero() and hHero:GetTeamNumber() == DOTA_TEAM_GOODGUYS and ( hHero:IsAlive() or hHero:IsReincarnating() ) then - nHeroesAlive = nHeroesAlive + 1 - end - end - - return nHeroesAlive > 0 and #self.HeroesOnGoal == nHeroesAlive -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - CMapEncounter.OnSpawnerFinished( self, hSpawner, hSpawnedUnits ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:OnTriggerStartTouch( event ) - - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - if hUnit ~= nil and hUnit:IsRealHero() and hUnit:IsControllableByAnyPlayer() and event.trigger_name == "goal_trigger" then - table.insert( self.HeroesOnGoal, hUnit ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter_Wrath:OnTriggerEndTouch( event ) - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - if hUnit ~= nil and hUnit:IsRealHero() and hUnit:IsControllableByAnyPlayer() and event.trigger_name == "goal_trigger" then - for k,hHero in pairs( self.HeroesOnGoal ) do - if hHero == hUnit then - table.remove( self.HeroesOnGoal, k ) - end - end - end -end - --------------------------------------------------------------------------------- - -return CMapEncounter_Wrath diff --git a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_zealot_scarabs.lua b/aghanim_singleplayer/scripts/vscripts/encounters/encounter_zealot_scarabs.lua deleted file mode 100755 index 1994001..0000000 --- a/aghanim_singleplayer/scripts/vscripts/encounters/encounter_zealot_scarabs.lua +++ /dev/null @@ -1,108 +0,0 @@ - -require( "map_encounter" ) -require( "aghanim_utility_functions" ) -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapEncounter_ZealotScarabs == nil then - CMapEncounter_ZealotScarabs = class( {}, {}, CMapEncounter ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ZealotScarabs:constructor( hRoom, szEncounterName ) - - CMapEncounter.constructor( self, hRoom, szEncounterName ) - - self:SetCalculateRewardsFromUnitCount( true ) - - self:AddSpawner( CDotaSpawner( "spawner_peon", "spawner_peon", - { - { - EntityName = "npc_dota_creature_zealot_scarab", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 250.0, - }, - } ) ) - - self:AddSpawner( CDotaSpawner( "spawner_captain", "spawner_captain", - { - { - EntityName = "npc_dota_creature_scarab_priest", - Team = DOTA_TEAM_BADGUYS, - Count = 1, - PositionNoise = 250.0, - }, - } ) ) - - self:SetSpawnerSchedule( "spawner_peon", nil ) - self:SetSpawnerSchedule( "spawner_captain", nil ) - -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ZealotScarabs:Precache( context ) - CMapEncounter.Precache( self, context ) - - PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_nyx_assassin.vsndevts", context ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ZealotScarabs:InitializeObjectives() - CMapEncounter.InitializeObjectives( self ) - self:AddEncounterObjective( "kill_scarab_priests", 0, self:GetSpawner( "spawner_captain" ):GetSpawnPositionCount() ) -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_ZealotScarabs:OnRequiredEnemyKilled( hAttacker, hVictim ) - CMapEncounter.OnRequiredEnemyKilled( self, hAttacker, hVictim ) - - if hVictim and hVictim:GetUnitName() == "npc_dota_creature_scarab_priest" then - local nCurrentValue = self:GetEncounterObjectiveProgress( "kill_scarab_priests" ) - self:UpdateEncounterObjective( "kill_scarab_priests", nCurrentValue + 1, nil ) - end -end - - --------------------------------------------------------------------------------- - -function CMapEncounter_ZealotScarabs:GetPreviewUnit() - return "npc_dota_creature_zealot_scarab" -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ZealotScarabs:GetMaxSpawnedUnitCount() - - local nCount = 0 - - for _,Spawner in pairs ( self.Spawners ) do - nCount = nCount + self:ComputeUnitsSpawnedBySchedule( Spawner ) - end - - -- Assume we get 2 nyxes per boss - local hCaptainSpawners = self:GetSpawner( "spawner_captain" ) - if hCaptainSpawners then - nCount = nCount + hCaptainSpawners:GetSpawnCountPerSpawnPosition() * 2 - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter_ZealotScarabs:Start() - CMapEncounter.Start( self ) - - self:StartAllSpawnerSchedules( 0 ) -end - --------------------------------------------------------------------------------- - -return CMapEncounter_ZealotScarabs diff --git a/aghanim_singleplayer/scripts/vscripts/events.lua b/aghanim_singleplayer/scripts/vscripts/events.lua deleted file mode 100755 index f647eb7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/events.lua +++ /dev/null @@ -1,906 +0,0 @@ -LinkLuaModifier( "modifier_battle_royale", "modifiers/modifier_battle_royale", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_respawn_haste", "modifiers/modifier_respawn_haste", LUA_MODIFIER_MOTION_NONE ) - -require( "blessings") - ---------------------------------------------------------- --- game_rules_state_change ---------------------------------------------------------- - -function CAghanim:OnGameRulesStateChange() - local nNewState = GameRules:State_Get() - if nNewState == DOTA_GAMERULES_STATE_HERO_SELECTION then - self:OnHeroSelectionStarted() - elseif nNewState == DOTA_GAMERULES_STATE_STRATEGY_TIME then - self:ForceAssignHeroes() - elseif nNewState == DOTA_GAMERULES_STATE_PRE_GAME then - -- empty - elseif nNewState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then - self:OnGameStarted() - end -end - ---------------------------------------------------------- -local expertmode = false -function CAghanim:PlayerChat( keys ) - print("PlayerSay") - DeepPrintTable(keys) - local diffcult = keys.text - - if diffcult == "expert" - then - expertmode = true - print(expertmode) - return true - end -end - ---------------------------------------------------------- - -function CAghanim:OnHeroSelected( event ) - self:GetAnnouncer():OnHeroSelected( event.hero_unit ) -end - ---------------------------------------------------------- - -function CAghanim:OnGameStarted() - --SendToServerConsole( "say SEED: " .. self.nSeed .. " ASC LEVEL: " .. self:GetAscensionLevel() ) -end - ---------------------------------------------------------- - -function CAghanim:OnGameFinished() - self:AddResultToSignOut() - - print( "[ Aghanim Signing Out ]:" ) - PrintTable( self.SignOutTable, " " ) - - GameRules:SetEventSignoutCustomTable( self.SignOutTable ) - GameRules:SetEventMetadataCustomTable( self.SignOutTable ) -- Same data used for both -end - ---------------------------------------------------------- - -function CAghanim:AddResultToSignOut() - - self.SignOutTable["depth"] = self:GetCurrentRoom():GetDepth() - self.SignOutTable["ascension_level"] = self:GetAscensionLevel() - self.SignOutTable["won_game"] = self.bWonGame - self.SignOutTable["seed"] = self.nSeed - self.SignOutTable["event_window_start_time"] = GameRules:GetGameModeEntity():GetEventWindowStartTime() - self.SignOutTable["tournament_mode"] = ( self.SignOutTable["event_window_start_time"] > 0 ) and ( GameRules:GetGameModeEntity():GetEventGameSeed() > 0 ) - - - if self.SignOutTable["event_window_start_time"] > 0 then - printf("EVENT WINDOW START TIME: %d", self.SignOutTable["event_window_start_time"] ) - end - - -- we may want to subtract hero pick time or do something more complicated here - local flGameTime = GameRules:GetGameTime() - self.SignOutTable["game_time"] = flGameTime - printf("GAME TIME: %f", flGameTime ) - - local unScore = self:GetLeaderboardScore( self.SignOutTable ) - self.SignOutTable["score"] = unScore - printf("GAME SCORE (lower is better): %d", unScore ) - local aglevel = self:GetAscensionLevel() - - local scorecfi = 0 - if aglevel == 0 then scorecfi = 1.0 end - if aglevel == 1 then scorecfi = 1.2 end - if aglevel == 2 then scorecfi = 1.4 end - if aglevel == 3 then scorecfi = 1.6 end - local finalscore = unScore * scorecfi - local winner = tostring(PlayerResource:GetPlayerName( 0 )) - local heroname = tostring(PlayerResource:GetSelectedHeroName(0)) - - local hero = string.sub(heroname,15,-1) - --游戏获胜 - if self.bWonGame then - GameRules:SendCustomMessage(string.format("your score is : %d",finalscore), DOTA_TEAM_GOODGUYS, 0) - GameRules:SendCustomMessage(string.format("01 : %s---time : %s---diffcult : %s---hero : %s---score : %s",winner,flGameTime, aglevel, hero,finalscore),DOTA_TEAM_GOODGUYS, 0) - end - - -- only add leaderboard score message to signout if we're in an event window and have a custom seed - if self.SignOutTable["event_window_start_time"] > 0 and GameRules:GetGameModeEntity():GetEventGameSeed() > 0 then - local nData1 = 0 - local nData2 = 0 - local nData3 = 0 - local nData4 = 0 - local nData5 = 0 - local pszLeaderboardName = tostring( self.SignOutTable["event_window_start_time"] ) - GameRules:AddEventMetadataLeaderboardEntryRawScore( pszLeaderboardName, flGameTime, unScore, nData1, nData2, nData3, nData4, nData5 ) - end - - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - if PlayerResource:IsValidPlayerID( nPlayerID ) then - self.SignOutTable[ "player_list" ][ nPlayerID ][ "steam_id" ] = PlayerResource:GetSteamID( nPlayerID ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "hero_id" ] = PlayerResource:GetSelectedHeroID( nPlayerID ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "current_ascension_level" ] = PlayerResource:GetEventGameCustomActionClaimCountByName( nPlayerID, "ti10_event_game_current_ascension_level" ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "bp_remaining" ] = self:GetPointsCapRemaining( nPlayerID, true, false ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "bp_total_cap" ] = self:GetPointsCapRemaining( nPlayerID, true, true ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "fragments_remaining" ] = self:GetPointsCapRemaining( nPlayerID, false, false ) - self.SignOutTable[ "player_list" ][ nPlayerID ][ "fragments_total_cap" ] = self:GetPointsCapRemaining( nPlayerID, false, true ) - end - end -end - -function CAghanim:GetLeaderboardScore( SignOutTable ) - - -- if you won, treat it as one extra depth - local nEffectiveDepth = SignOutTable["depth"] - if self.bWonGame then - nEffectiveDepth = nEffectiveDepth + 1 - end - - -- set a theoretical max depth of 30, just so we have some wiggle room if we change things - -- it just means that a perfect score is still above zero - local nMaxScoreDepth = 15 - local nMaxScoreTime = 3600 - local agscore = 1600 - local deathtimes = tostring(PlayerResource:GetDeaths(0)) - local killnum = tostring(PlayerResource:GetKills(0)) - - local flCompletionTime = SignOutTable["game_time"] - - -- lower scores are better - - local nScore = math.ceil((nEffectiveDepth * 100 - deathtimes * 50 + killnum) / (math.floor(flCompletionTime) / nMaxScoreTime)) - return nScore -end - - ---------------------------------------------------------- --- player_connect_full --- * player_id ---------------------------------------------------------- - -function CAghanim:CenterSpectatorOnPlayers( nSpectatorPlayerID ) - - for nPlayerID = 0, AGHANIM_PLAYERS - 1 do - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - if PlayerResource:IsValidPlayerID( nPlayerID ) then - local hHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hHero ~= nil then - --print( "CenterCameraOnUnit " .. nSpectatorPlayerID, hHero:GetUnitName() ) - CenterCameraOnUnit( nSpectatorPlayerID, hHero ) - return - end - end - end - end - -end - ---------------------------------------------------------- --- player_connect_full --- * player_id ---------------------------------------------------------- - -function CAghanim:OnPlayerConnected( event ) -end - ---------------------------------------------------------- - -function CAghanim:OnPlayerTeamChanged( event ) - - -- If we're a spectator, center the camera on one of the heores - --print( "OnPlayerTeamChanged " .. event.player_id .. " " .. PlayerResource:GetTeam( event.player_id ) .. " " .. PlayerResource:GetLiveSpectatorTeam( event.player_id ) ) - if PlayerResource:GetTeam( event.player_id ) == TEAM_SPECTATOR or PlayerResource:GetLiveSpectatorTeam( event.player_id ) == DOTA_TEAM_GOODGUYS then - self:CenterSpectatorOnPlayers( event.player_id ) - end - -end - - ---------------------------------------------------------- --- dota_player_reconnected --- * player_id ---------------------------------------------------------- - -function CAghanim:OnPlayerReconnected( event ) - - --print( "OnPlayerReconnected " .. event.player_id .. " " .. PlayerResource:GetTeam( event.player_id ) .. " " .. PlayerResource:GetLiveSpectatorTeam( event.player_id ) ) - if PlayerResource:GetTeam( event.player_id ) == TEAM_SPECTATOR or PlayerResource:GetLiveSpectatorTeam( event.player_id ) == DOTA_TEAM_GOODGUYS then - self:CenterSpectatorOnPlayers( event.player_id ) - return - end - - local hPlayer = PlayerResource:GetPlayer( event.player_id ) - if hPlayer == nil then - return - end - - --If the player's hero is not in the current room, then teleport them to it - local hHero = PlayerResource:GetSelectedHeroEntity( event.player_id ) - if hHero == nil then - return - end - - CenterCameraOnUnit( event.player_id, hHero ) - -end - ---------------------------------------------------------- --- npc_spawned --- * entindex ---------------------------------------------------------- - -function CAghanim:OnNPCSpawned( event ) - - local spawnedUnit = EntIndexToHScript( event.entindex ) - if spawnedUnit == nil then - return - end - - if spawnedUnit:IsRealHero() then - self:OnNPCSpawned_PlayerHero( event ) - return - end - - --print( " CAghanim:OnNPCSpawned " .. spawnedUnit:entindex() .. " " .. tostring( spawnedUnit:IsCreature() ) ) - if spawnedUnit:IsCreature() and spawnedUnit:GetTeamNumber() == DOTA_TEAM_BADGUYS then - self:OnNPCSpawned_EnemyCreature( event ) - return - end - - if spawnedUnit:IsSummoned() and spawnedUnit:GetTeamNumber() == DOTA_TEAM_GOODGUYS then - self:OnNPCSpawned_AlliedSummon( event ) - return - end -end - --------------------------------------------------------------------------------- - --- Evaluate the state of the game -function CAghanim:InitBlessings( hHero ) - - if hHero == nil then - return - end - - print ( "Init Blessings -- " .. hHero:GetUnitName() ) - - local nPlayerID = hHero:GetPlayerOwnerID() - for blessing_name,blessing_keys in pairs(BLESSING_MODIFIERS) do - - local nClaimCount = 0 - local nBlessingType = nil - local szActionName = nil - - if blessing_keys.action_names ~= nil then - for i = #blessing_keys.action_names,1,-1 do - if PlayerResource:GetEventGameCustomActionClaimCountByName( nPlayerID, blessing_keys.action_names[i] ) > 0 then - szActionName = blessing_keys.action_names[i] - nClaimCount = i - break - end - end - else - szActionName = blessing_keys.action_name - nClaimCount = PlayerResource:GetEventGameCustomActionClaimCountByName( nPlayerID, szActionName ) - nBlessingType = blessing_keys.blessing_type - - -- Used to test blessings, even if they haven't claimed it - local nTestClaimCount = BLESSING_MODIFIERS_FORCE_LIST[blessing_name] - if nTestClaimCount ~= nil then - print( 'Forcing blessing ' .. blessing_name ) - nClaimCount = nTestClaimCount - end - end - - if nClaimCount > 0 then - local kv = - { - blessing_level = nClaimCount - } - - print( 'Player ' .. nPlayerID .. ' adding blessing ' .. blessing_name ) - - if nBlessingType == nil or nBlessingType == BLESSING_TYPE_MODIFIER then - --print( "Modifier Blessing added - " .. hHero:GetUnitName() .. " - " .. blessing_name ) - local hModifier = hHero:AddNewModifier( hHero, nil, blessing_name, kv ) - if hModifier.IsBlessing == nil then - print( "Blessing " .. blessing_name .. " doesn't inherit from modifier_blessing_base!!" ) - end - - elseif nBlessingType == BLESSING_TYPE_ITEM_GRANT then - --print( "Item Grant Blessing added - " .. hHero:GetUnitName() .. " - " .. blessing_name ) - - for k,v in pairs( blessing_keys.keys.items ) do - --print( 'Item Grant blessing - ' .. k ) - GrantItemDropToHero( hHero, k ) - end - - elseif nBlessingType == BLESSING_TYPE_GOLD_GRANT then - --print( "Gold Grant Blessing added - " .. hHero:GetUnitName() .. " - " .. blessing_name ) - --print( "Adding gold " .. blessing_keys.keys.gold_amount ) - - local nPlayerID = hHero:GetPlayerID() - PlayerResource:ModifyGold( nPlayerID, blessing_keys.keys.gold_amount, true, DOTA_ModifyGold_Unspecified ) - - elseif nBlessingType == BLESSING_TYPE_LIFE_GRANT then - --print( "Life Grant Blessing added - " .. hHero:GetUnitName() .. " - " .. blessing_name ) - --print( "Adding lives " .. blessing_keys.keys.lives ) - - hHero.nRespawnsRemaining = hHero.nRespawnsRemaining + blessing_keys.keys.lives - - else - print( "ERROR - bad BLESSING_TYPE detected for action " .. blessing_keys.action_name ) - return - end - - self:RegisterBlessingStat( nPlayerID, blessing_name, nClaimCount, szActionName, blessing_keys.scoreboard_order ) - end - end - -end - ---------------------------------------------------------- - -function CAghanim:CenterAllSpectatorsOnHero( hPlayerHero ) - - print( "CenterAllSpectatorsOnHero" ) - -- Center spectator cameras on the starting room - for nPlayerID = 0, DOTA_MAX_PLAYERS - 1 do - if PlayerResource:IsValidPlayerID( nPlayerID ) == true then - if PlayerResource:GetTeam( nPlayerID ) == TEAM_SPECTATOR or PlayerResource:GetLiveSpectatorTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - --print( "CenterAllSpectatorsOnHero " .. nPlayerID .. " " .. hPlayerHero:GetUnitName() ) - CenterCameraOnUnit( nPlayerID, hPlayerHero ) - end - end - end - -end - ---------------------------------------------------------- - -function CAghanim:OnNPCSpawned_PlayerHero( event ) - - local hPlayerHero = EntIndexToHScript( event.entindex ) - if hPlayerHero == nil or hPlayerHero:IsRealHero() == false then - return - end - - --[[ - if hPlayerHero.bFirstSpawnComplete and hPlayerHero:IsRealHero() and hPlayerHero:IsTempestDouble() == false then - FindClearSpaceForUnit( hPlayerHero, hPlayerHero.vDeathPos, true ) - end - ]] - - if hPlayerHero.bFirstSpawnComplete == nil then - - if self.bHasInitializedSpectatorCameras == false then - self:CenterAllSpectatorsOnHero( hPlayerHero ) - self.bHasInitializedSpectatorCameras = true - end - - hPlayerHero:SetStashEnabled( false ) - hPlayerHero:SetAbilityPoints( 0 ) - hPlayerHero.nRespawnsRemaining = AGHANIM_STARTING_LIVES - hPlayerHero:SetRespawnsDisabled( false ) - - local nPlayerID = hPlayerHero:GetPlayerOwnerID() - if nPlayerID ~= -1 then - PlayerResource:SetCustomBuybackCooldown( nPlayerID, 0 ) - PlayerResource:SetCustomBuybackCost( nPlayerID, 0 ) - end - - local hTP = hPlayerHero:GetItemInSlot( DOTA_ITEM_TP_SCROLL ) - if hTP then - UTIL_Remove( hTP ) - end - - -- Add blessing modifiers - self:InitBlessings( hPlayerHero ) - - if AGHANIM_ENABLE_BOTTLE == true then - local hBottle = GrantItemDropToHero( hPlayerHero, "item_bottle" ) - if hBottle ~= nil then - local nMaxCharges = hBottle:GetSpecialValueFor( "max_charges" ) - hBottle:SetCurrentCharges( nMaxCharges ) - end - else - local hFlask = GrantItemDropToHero( hPlayerHero, "item_flask" ) - if hFlask ~= nil then - hFlask:SetCurrentCharges( AGHANIM_STARTING_SALVES ) - end - local hMango = GrantItemDropToHero( hPlayerHero, "item_enchanted_mango" ) - if hMango ~= nil then - hMango:SetCurrentCharges( AGHANIM_STARTING_MANGOES ) - end - end - - -- blessings may give additional lives so make sure these net tables get set afterwards - --printf("setting remaining respawns on %d to %d", hPlayerHero:entindex(), hPlayerHero.nRespawnsRemaining ) - CustomNetTables:SetTableValue( "revive_state", string.format( "%d", hPlayerHero:entindex() ), { tombstone = false } ) - CustomNetTables:SetTableValue( "respawns_remaining", string.format( "%d", hPlayerHero:entindex() ), { respawns = hPlayerHero.nRespawnsRemaining } ) - - -- Add the battle royale modifier to all heroes - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_battle_royale", { } ) - - hPlayerHero.MinorAbilityUpgrades = {} - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_minor_ability_upgrades", {} ) - - -- Add and level up the base stats upgrade ability - local hAbility = hPlayerHero:FindAbilityByName( "aghsfort_minor_stats_upgrade" ) - if hAbility == nil then - hAbility = hPlayerHero:AddAbility("aghsfort_minor_stats_upgrade") - hAbility:UpgradeAbility( true ) - end - - else - local fInvulnDuration = 3.0 - - local hBlessing = hPlayerHero:FindModifierByName( "modifier_blessing_respawn_invulnerability" ) - if hBlessing ~= nil then - --print( 'Player revived w/ respawn invulnerability blessing - adding ' .. hBlessing.respawn_invulnerability_time_bonus .. ' seconds to invuln time' ) - fInvulnDuration = fInvulnDuration + hBlessing.respawn_invulnerability_time_bonus - - --print( 'OnNPCSpawned_PlayerHero - blessing values, min_move_speed = ' .. hBlessing.min_move_speed .. '. bonus_attack_speed = ' .. hBlessing.bonus_attack_speed ) - - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_respawn_haste", { duration = fInvulnDuration, min_move_speed = hBlessing.min_move_speed, bonus_attack_speed = hBlessing.bonus_attack_speed } ) - end - - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_invulnerable", { duration = fInvulnDuration } ) - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_omninight_guardian_angel", { duration = fInvulnDuration } ) - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_phased", { duration = fInvulnDuration } ) - hPlayerHero.Tombstone = nil - end - - hPlayerHero.bFirstSpawnComplete = true - - if self.bDataSent == nil then - -- Send the special ability data for each hero - --print ("sending special ability upgrade data") - CustomNetTables:SetTableValue( "special_ability_upgrades", tostring( 0 ), SPECIAL_ABILITY_UPGRADES ) - self.bDataSent = true - end - - self.bPlayerHasSpawned = true - -end - ---------------------------------------------------------- - -function CAghanim:OnNPCSpawned_EnemyCreature( event ) - local hEnemyCreature = EntIndexToHScript( event.entindex ) - if hEnemyCreature == nil then - return - end - - if hEnemyCreature:FindModifierByName( "modifier_breakable_container" ) then - return - end - - -- inform the encounter - if self:GetCurrentRoom() == nil then - return - end - - local hEncounter = self:GetCurrentRoom():GetEncounter() - if not hEncounter:IsComplete() then - hEncounter:OnEnemyCreatureSpawned( hEnemyCreature ) - end -end - ---------------------------------------------------------- - -function CAghanim:OnNPCSpawned_AlliedSummon( event ) - local hSummonedUnit = EntIndexToHScript( event.entindex ) - if hSummonedUnit == nil then - return - end - - local nPlayerID = hSummonedUnit:GetPlayerOwnerID() - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero ~= nil then - hSummonedUnit:AddNewModifier( hPlayerHero, nil, "modifier_battle_royale", { } ) - end -end - ---------------------------------------------------------- --- dota_on_hero_finish_spawn --- * heroindex --- * hero (string) ---------------------------------------------------------- - ---[[ -function CAghanim:OnHeroFinishSpawn( event ) - local hPlayerHero = EntIndexToHScript( event.heroindex ) - if hPlayerHero ~= nil and hPlayerHero:IsRealHero() then - if hPlayerHero.bFirstSpawnComplete == nil then - hPlayerHero.bEliminated = false - hPlayerHero.bFirstSpawnComplete = true - - local nPlayerID = hPlayerHero:GetPlayerOwnerID() - local PlayerBattlePointsData = {} - PlayerBattlePointsData["player_id"] = nPlayerID - PlayerBattlePointsData["steam_id"] = PlayerResource:GetSteamID( nPlayerID ) - PlayerBattlePointsData["points_earned"] = 0 - self.PlayerPointsData[nPlayerID] = PlayerBattlePointsData - - self.EventMetaData[nPlayerID] = {} - self.EventMetaData[nPlayerID]["kills"] = 0 - self.EventMetaData[nPlayerID]["revives"] = 0 - self.EventMetaData[nPlayerID]["eliminations"] = 0 - self.EventMetaData[nPlayerID]["battle_points"] = 0 - self.EventMetaData[nPlayerID]["level"] = 1 - self.EventMetaData[nPlayerID]["net_worth"] = 0 - - table.insert( self.HeroesByTeam[hPlayerHero:GetTeamNumber()], hPlayerHero ) - end - end -end -]] - ---------------------------------------------------------- --- entity_killed --- * entindex_killed --- * entindex_attacker --- * entindex_inflictor --- * damagebits ---------------------------------------------------------- - -function CAghanim:OnEntityKilled( event ) - local killedUnit = EntIndexToHScript( event.entindex_killed ) - if killedUnit ~= nil then - if killedUnit:IsRealHero() and killedUnit:IsTempestDouble() == false then - self:OnEntityKilled_PlayerHero( event ) - return - end - - if killedUnit:IsCreature() then - --self:OnEntityKilled_EnemyCreature( event ) - return - end - end -end - ---------------------------------------------------------- - -function CAghanim:OnEntityKilled_PlayerHero( event ) - local killedHero = EntIndexToHScript( event.entindex_killed ) - local killerUnit = EntIndexToHScript( event.entindex_attacker ) - if killedHero == nil or killedHero:IsRealHero() == false then - return - end - - local szKillerUnit = nil - - if killerUnit then - if killerUnit:IsCreature() then - szKillerUnit = killerUnit:GetUnitName() - - local gameEvent = {} - gameEvent["player_id"] = killedHero:GetPlayerID() - gameEvent["locstring_value"] = killerUnit:GetUnitName() - gameEvent["teamnumber"] = -1 - gameEvent["message"] = "#Aghanim_KilledByCreature" - FireGameEvent( "dota_combat_event_message", gameEvent ) - - --self:FireDeathTaunt( killerUnit ) - end - end - - self:GetAnnouncer():OnHeroKilled( killedHero:GetUnitName(), szKillerUnit, killedHero.nRespawnsRemaining ) - - local bDropTombstone = false--killedHero.nRespawnsRemaining > 0 - - if bDropTombstone then - local newItem = CreateItem( "item_tombstone", killedHero , killedHero ) - newItem:SetPurchaseTime( 0 ) - newItem:SetPurchaser( killedHero ) - local tombstone = SpawnEntityFromTableSynchronous( "dota_item_tombstone_drop", {} ) - tombstone:SetContainedItem( newItem ) - tombstone:SetAngles( 0, RandomFloat( 0, 360 ), 0 ) - FindClearSpaceForUnit( tombstone, killedHero:GetAbsOrigin(), true ) - killedHero.Tombstone = tombstone - killedHero.vDeathPos = killedHero:GetAbsOrigin() - end - - killedHero:SetRespawnsDisabled( killedHero.nRespawnsRemaining == 0 ) - killedHero:SetRespawnPosition( killedHero:GetAbsOrigin() ) - if killedHero:GetRespawnsDisabled() == false then - killedHero.nRespawnFX = ParticleManager:CreateParticle( "particles/items_fx/aegis_timer.vpcf", PATTACH_ABSORIGIN_FOLLOW, killedHero ) - ParticleManager:SetParticleControl( killedHero.nRespawnFX, 1, Vector( AGHANIM_TIMED_RESPAWN_TIME, 0, 0 ) ) - - AddFOWViewer( killedHero:GetTeamNumber(), killedHero:GetAbsOrigin(), 800.0, AGHANIM_TIMED_RESPAWN_TIME, false ) - end - - killedHero.nRespawnsRemaining = math.max( 0, killedHero.nRespawnsRemaining - LIFE_REVIVE_COST ) - - CustomGameEventManager:Send_ServerToPlayer( killedHero:GetPlayerOwner(), "life_lost", {} ) - CustomNetTables:SetTableValue( "revive_state", string.format( "%d", killedHero:entindex() ), { tombstone = bDropTombstone } ) - CustomNetTables:SetTableValue( "respawns_remaining", string.format( "%d", killedHero:entindex() ), { respawns = killedHero.nRespawnsRemaining } ) - - local hPlayer = killedHero:GetPlayerOwner() - if hPlayer ~= nil then - if killedHero.nRespawnsRemaining < LIFE_BUYBACK_COST then - PlayerResource:SetCustomBuybackCooldown( hPlayer:GetPlayerID(), 0 ) - PlayerResource:SetCustomBuybackCost( hPlayer:GetPlayerID(), 999999 ) - else - PlayerResource:SetCustomBuybackCooldown( hPlayer:GetPlayerID(), 0 ) - PlayerResource:SetCustomBuybackCost( hPlayer:GetPlayerID(), 0 ) - end - - self:RegisterPlayerDeathStat( hPlayer:GetPlayerID(), self:GetCurrentRoom():GetDepth() ) - end - -end - ---------------------------------------------------------- - ---------------------------------------------------------- --- dota_holdout_revive_complete --- * caster (reviver hero entity index) --- * target (revivee hero entity index) ---------------------------------------------------------- - -function CAghanim:OnPlayerRevived( event ) - - local hRevivedHero = EntIndexToHScript( event.target ) - local hReviverHero = EntIndexToHScript( event.caster ) - if hRevivedHero ~= nil and hRevivedHero:IsRealHero() then - hRevivedHero:SetHealth( hRevivedHero:GetMaxHealth() * 0.01 * REVIVE_HEALTH_PCT ) - hRevivedHero:SetMana( hRevivedHero:GetMaxMana() * 0.01 * REVIVE_MANA_PCT ) - EmitSoundOn( "Dungeon.HeroRevived", hRevivedHero ) - - if hReviverHero ~= nil and hReviverHero:IsRealHero() then - --self.EventMetaData[hReviverHero:GetPlayerOwnerID()]["revives"] = self.EventMetaData[hReviverHero:GetPlayerOwnerID()]["revives"] + 1 - end - - --self:RemoveTombstoneVisionDummy( hRevivedHero ) - - hRevivedHero.Tombstone = nil - local fInvulnDuration = 3 - - local hBlessing = hRevivedHero:FindModifierByName( "modifier_blessing_respawn_invulnerability" ) - if hBlessing ~= nil then - --print( 'Player revived w/ respawn invulnerability blessing - adding ' .. hBlessing.respawn_invulnerability_time_bonus .. ' seconds to invuln time' ) - fInvulnDuration = fInvulnDuration + hBlessing.respawn_invulnerability_time_bonus - - --print( 'OnPlayerRevived - blessing values, min_move_speed = ' .. hBlessing.min_move_speed .. '. bonus_attack_speed = ' .. hBlessing.bonus_attack_speed ) - - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_respawn_haste", { duration = fInvulnDuration, min_move_speed = hBlessing.min_move_speed, bonus_attack_speed = hBlessing.bonus_attack_speed } ) - end - - hRevivedHero:AddNewModifier( hRevivedHero, nil, "modifier_invulnerable", { duration = fInvulnDuration } ) - hRevivedHero:AddNewModifier( hRevivedHero, nil, "modifier_omninight_guardian_angel", { duration = fInvulnDuration } ) - hRevivedHero:AddNewModifier( hRevivedHero, nil, "modifier_phased", { duration = fInvulnDuration } ) - if hRevivedHero.nRespawnFX ~= nil then - ParticleManager:DestroyParticle( hRevivedHero.nRespawnFX, false ) - hRevivedHero.nRespawnFX = nil - end - hRevivedHero:RemoveModifierByName( "modifier_hide_on_minimap" ) - end -end - ---------------------------------------------------------- --- dota_buyback --- * entindex --- * player_id ---------------------------------------------------------- - -function CAghanim:OnPlayerBuyback( event ) - - local hPlayer = PlayerResource:GetPlayer( event.player_id ) - if hPlayer == nil then - return - end - - local hHero = hPlayer:GetAssignedHero() - if hHero == nil then - return - end - - hHero.nRespawnsRemaining = math.max( hHero.nRespawnsRemaining - LIFE_BUYBACK_COST, 0 ) - hHero:SetRespawnsDisabled( hHero.nRespawnsRemaining == 0 ) - CustomNetTables:SetTableValue( "revive_state", string.format( "%d", hHero:entindex() ), { tombstone = false } ) - CustomNetTables:SetTableValue( "respawns_remaining", string.format( "%d", hHero:entindex() ), { respawns = hHero.nRespawnsRemaining } ) - - if hHero.vDeathPos ~= nil then - FindClearSpaceForUnit( hHero, hHero.vDeathPos, true ) - end - - hHero.Tombstone = nil - hHero:AddNewModifier( hHero, nil, "modifier_invulnerable", { duration = 2.5 } ) - hHero:AddNewModifier( hHero, nil, "modifier_omninight_guardian_angel", { duration = 2.5 } ) - -end - ---------------------------------------------------------- --- dota_player_gained_level --- * player (player entity index) --- * level (new level) ---------------------------------------------------------- - -function CAghanim:OnPlayerGainedLevel( event ) - -- empty -end - ---------------------------------------------------------- --- dota_item-spawned --- * player_id --- * item_ent_index ---------------------------------------------------------- - -function CAghanim:OnItemSpawned( event ) - local item = EntIndexToHScript( event.item_ent_index ) -end - ---------------------------------------------------------- --- dota_item_picked_up --- * PlayerID --- * HeroEntityIndex --- * UnitEntityIndex (only if parent is not a hero) --- * itemname --- * ItemEntityIndex ---------------------------------------------------------- - -function CAghanim:OnItemPickedUp( event ) - local item = EntIndexToHScript( event.ItemEntityIndex ) - if event.PlayerID ~= nil and item ~= nil and item:GetAbilityName() == "item_bag_of_gold" then - self:RegisterGoldBagCollectedStat( event.PlayerID ) - end -end - ---------------------------------------------------------- --- dota_item_purchased --- * PlayerID --- * itemname --- * itemcost ---------------------------------------------------------- - -function CAghanim:OnItemPurchased( event ) - local szHeroName = null - if PlayerResource:IsValidPlayerID( event.PlayerID ) then - local nHeroID = PlayerResource:GetSelectedHeroID( event.PlayerID ) - szHeroName = DOTAGameManager:GetHeroUnitNameByID( nHeroID ) - end - - self:GetAnnouncer():OnItemPurchased( szHeroName, event.itemname ) -end - --------------------------------------------------------------------------------- - -function CAghanim:OnTreasureOpen( hPlayerHero, hTreasureEnt ) - --printf( "OnTreasureOpen()" ) - - self:ChooseTreasureSurprise( hPlayerHero, hTreasureEnt ) -end - --------------------------------------------------------------------------------- --- dota_hero_entered_shop --- > shop_type - short --- > shop_entindex - int --- > hero_entindex- int - --------------------------------------------------------------------------------- - -function CAghanim:OnHeroEnteredShop( event ) - local hHero = EntIndexToHScript( event.hero_entindex ) - local hShop = EntIndexToHScript( event.shop_entindex ) - if hHero and hShop then - local szLine = nil - local MeepoLines = - { - "meepo_meepo_levelup_01", - "meepo_meepo_move_19", - "meepo_meepo_spawn_04", - "meepo_meepo_begin_01", - "meepo_meepo_divided_25", - "meepo_meepo_respawn_05", - "meepo_meepo_respawn_08", - "meepo_meepo_rare_03", - "meepo_meepo_rare_04", - "meepo_meepo_win_04", - } - - local BBLines = - { - "bristleback_bristle_cast_02", - "bristleback_bristle_nasal_goo_02", - "bristleback_bristle_kill_09", - "bristleback_bristle_lasthit_02", - "bristleback_bristle_lasthit_05", - "bristleback_bristle_lasthit_13", - "bristleback_bristle_levelup_01", - "bristleback_bristle_purch_02", - "bristleback_bristle_win_04", - "bristleback_bristle_ally_08", - } - - if hShop:GetShopType() ~= DOTA_SHOP_CUSTOM then - szLine = MeepoLines[ RandomInt( 1, #MeepoLines ) ] - else - szLine = BBLines[ RandomInt( 1, #BBLines ) ] - - if hHero:GetUnitName() == "npc_dota_hero_tusk" and RandomInt( 0, 2 ) == 0 then - szLine = "bristleback_bristle_ally_09" - end - end - - EmitSoundOnLocationForPlayer( szLine, hShop:GetAbsOrigin(), hHero:GetPlayerOwnerID() ) - end -end - --------------------------------------------------------------------------------- --- trigger_start_touch --- > trigger_name - string --- > activator_entindex - short --- > caller_entindex- short - --------------------------------------------------------------------------------- - -function CAghanim:OnTriggerStartTouch( event ) - - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - local hTriggerSpawnGroup = hTriggerEntity:GetSpawnGroupHandle() - if hUnit ~= nil then - local i, j = string.find( event.trigger_name, "room_activate" ) - if i ~= nil then - -- Figure out if we've triggered a room trigger for the first time - if hTriggerEntity.bHasBeenTriggered == nil then - hTriggerEntity.bHasBeenTriggered = true - local room = self:FindRoomBySpawnGroupHandle( hTriggerSpawnGroup ) - if room ~= nil then - self:OnRoomTriggerInitialTouch( hUnit, hTriggerEntity, room:GetName() ) - else - print( "Unable to find room associated with spawn group " .. hTriggerSpawnGroup ) - end - end - end - end - -end - --------------------------------------------------------------------------------- --- trigger_end_touch --- > trigger_name - string --- > activator_entindex - short --- > caller_entindex- short - --------------------------------------------------------------------------------- - -function CAghanim:OnTriggerEndTouch( event ) - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - if hUnit ~= nil then - -- empty - end -end - --------------------------------------------------------------------------------- - -function CAghanim:OnRoomTriggerInitialTouch( hUnit, hTriggerEntity, szRoomName ) - --print( string.format( "OnRoomTriggerInitialTouch - szRoomName: %s", szRoomName ) ) - - self:ActivateRoom( szRoomName ) -end - --------------------------------------------------------------------------------- - -function CAghanim:ActivateRoom( szRoomName ) - local room = self:GetRoom( szRoomName ) - self:SetCurrentRoom( room ) - room:Activate() -end - --------------------------------------------------------------------------------- - ---------------------------------------------------------- --- dota_non_player_used_ability --- * abilityname --- * caster_entindex ---------------------------------------------------------- - ---[[ -function CAghanim:OnNonPlayerUsedAbility( event ) - local szAbilityName = event.abilityname - local hCaster = EntIndexToHScript( event.caster_entindex ) -end -]] - ---------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/filters.lua b/aghanim_singleplayer/scripts/vscripts/filters.lua deleted file mode 100755 index cfb4003..0000000 --- a/aghanim_singleplayer/scripts/vscripts/filters.lua +++ /dev/null @@ -1,100 +0,0 @@ ---------------------------------------------------------------------------- --- HealingFilter --- *entindex_target_const --- *entindex_healer_const --- *entindex_inflictor_const --- *heal ---------------------------------------------------------------------------- - -function CAghanim:HealingFilter( filterTable ) - return true -end - ---------------------------------------------------------------------------- --- DamageFilter --- *entindex_victim_const --- *entindex_attacker_const --- *entindex_inflictor_const --- *damagetype_const --- *damage ---------------------------------------------------------------------------- - -function CAghanim:DamageFilter( filterTable ) - return true -end - - ---------------------------------------------------------------------------- --- ItemAddedToInventoryFilter --- *item_entindex_const --- *item_parent_entindex_const --- *inventory_parent_entindex_const --- *suggested_slot ---------------------------------------------------------------------------- - -function CAghanim:ItemAddedToInventoryFilter( filterTable ) - return true -end - - ---------------------------------------------------------------------------- --- ModifierGainedFilter --- *entindex_parent_const --- *entindex_ability_const --- *entindex_caster_const --- *name_const --- *duration ---------------------------------------------------------------------------- - -function CAghanim:ModifierGainedFilter( filterTable ) - if filterTable["entindex_parent_const"] == nil then - return true - end - - if filterTable[ "name_const" ] == nil then - return true - end - - local BlackListModiifers = - { - "modifier_sheepstick_debuff", - "modifier_stunned", - "modifier_bashed", - "modifier_aghsfort_tusk_walrus_punch_air_time", - "modifier_aghsfort_mars_spear_stun", - } - - local hParent = EntIndexToHScript( filterTable[ "entindex_parent_const" ] ) - if hParent ~= nil and hParent.bAbsoluteNoCC ~= nil and hParent.bAbsoluteNoCC == true then - if hParent.bNoNullifier ~= nil and hParent.bNoNullifier == true then - table.insert( BlackListModiifers, "modifier_item_nullifier_mute" ) - table.insert( BlackListModiifers, "modifier_item_nullifier_slow" ) - end - - local bModifierInBlacklist = false - for _,szModifierName in pairs ( BlackListModiifers ) do - if szModifierName == filterTable[ "name_const" ] then - bModifierInBlacklist = true - break - end - end - - if bModifierInBlacklist then - local vMaxs = hParent:GetBoundingMaxs() - local vMins = hParent:GetBoundingMins() - local flFXScale = ( vMaxs.z - vMins.z / 1.5 ) - - local nFxIndex = ParticleManager:CreateParticle( "particles/generic_gameplay/disable_resist.vpcf", PATTACH_CUSTOMORIGIN, hParent ) - ParticleManager:SetParticleControlEnt( nFxIndex, 0, hParent, PATTACH_POINT_FOLLOW, "attach_hitloc", hParent:GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFxIndex, 1, Vector( flFXScale, flFXScale, flFXScale ) ) - ParticleManager:ReleaseParticleIndex( nFxIndex ) - - EmitSoundOn( "DisableResistance.EarlyDebuffEnd", hParent ) - return false - end - - return true - end - - return true -end diff --git a/aghanim_singleplayer/scripts/vscripts/gameplay_shared.lua b/aghanim_singleplayer/scripts/vscripts/gameplay_shared.lua deleted file mode 100755 index 420c724..0000000 --- a/aghanim_singleplayer/scripts/vscripts/gameplay_shared.lua +++ /dev/null @@ -1,47 +0,0 @@ -require( "utility_functions" ) - -function GrantItemDropToHero( hPlayerHero, szItemName ) - - local hItem = hPlayerHero:AddItemByName( szItemName ) - - if hItem == nil then - local newItem = CreateItem( szItemName, hPlayerHero, hPlayerHero ) - newItem:SetPurchaseTime( 0 ) - local drop = CreateItemOnPositionSync( hPlayerHero:GetAbsOrigin(), newItem ) - local dropTarget = hPlayerHero:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ) - newItem:LaunchLoot( false, 150, 0.75, dropTarget ) - - printf("launching loot for %s", hPlayerHero) - return newItem - end - return hItem -end - -function GetPlayerAbilitiesAndItems( nPlayerID ) - - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - - local vecAbilityNames = {} - - if hPlayerHero == nil then - --printf("GetPlayerAbilitiesAndItems: no entity for Player ID %d, returning empty list.", nPlayerID) - return vecAbilityNames - end - - for ii=0,15 do - local hItem = hPlayerHero:GetItemInSlot(ii) - if hItem and hItem:GetAbilityName() then - table.insert( vecAbilityNames, hItem:GetAbilityName() ) - end - end - - for ii=0,(hPlayerHero:GetAbilityCount()-1) do - local hAbility = hPlayerHero:GetAbilityByIndex(ii) - if hAbility and hAbility:GetAbilityName() then - table.insert( vecAbilityNames, hAbility:GetAbilityName() ) - end - end - - return vecAbilityNames; - -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_ambient_sorcery.lua b/aghanim_singleplayer/scripts/vscripts/items/item_ambient_sorcery.lua deleted file mode 100755 index de4648b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_ambient_sorcery.lua +++ /dev/null @@ -1,44 +0,0 @@ - -item_ambient_sorcery = class({}) -LinkLuaModifier( "modifier_item_ambient_sorcery", "modifiers/modifier_item_ambient_sorcery", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_ambient_sorcery_effect", "modifiers/modifier_item_ambient_sorcery_effect", LUA_MODIFIER_MOTION_NONE ) - - --------------------------------------------------------------------------------- - -function item_ambient_sorcery:GetIntrinsicModifierName() - return "modifier_item_ambient_sorcery" -end - --------------------------------------------------------------------------------- - -function item_ambient_sorcery:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_ambient_sorcery:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_ambient_sorcery:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_amorphotic_shell.lua b/aghanim_singleplayer/scripts/vscripts/items/item_amorphotic_shell.lua deleted file mode 100755 index 361a333..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_amorphotic_shell.lua +++ /dev/null @@ -1,42 +0,0 @@ -item_amorphotic_shell = class({}) -LinkLuaModifier( "modifier_item_amorphotic_shell", "modifiers/modifier_item_amorphotic_shell", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_amorphotic_shell_effect", "modifiers/modifier_item_amorphotic_shell_effect", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_amorphotic_shell:GetIntrinsicModifierName() - return "modifier_item_amorphotic_shell" -end - --------------------------------------------------------------------------------- - -function item_amorphotic_shell:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_amorphotic_shell:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_amorphotic_shell:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_arcane_fragments.lua b/aghanim_singleplayer/scripts/vscripts/items/item_arcane_fragments.lua deleted file mode 100755 index fab5bff..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_arcane_fragments.lua +++ /dev/null @@ -1,36 +0,0 @@ - -item_arcane_fragments = class({}) - --------------------------------------------------------------------------------- - -function item_arcane_fragments:Precache( context ) - PrecacheResource( "particle", "particles/msg_fx/msg_bp.vpcf", context ) - PrecacheResource( "particle", "particles/generic_gameplay/arcane_fragments_splash.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_arcane_fragments:GetBehavior() - return DOTA_ABILITY_BEHAVIOR_IMMEDIATE -end - --------------------------------------------------------------------------------- - -function item_arcane_fragments:OnSpellStart() - if IsServer() then - - self:GetCaster():EmitSoundParams( "Item.ArcaneFragmentsClaimed", 0, 0.5, 0) - local gameEvent = {} - gameEvent["player_id"] = self:GetCaster():GetPlayerID() - gameEvent["teamnumber"] = -1 - gameEvent["int_value"] = self:GetCurrentCharges() - gameEvent["message"] = "#Aghanim_ArcaneFragmentsFound" - FireGameEvent( "dota_combat_event_message", gameEvent ) - - GameRules.Aghanim:GrantAllPlayersPoints( self:GetCurrentCharges(), false, "item_arcane_fragments" ) - - UTIL_Remove( self ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_battle_points.lua b/aghanim_singleplayer/scripts/vscripts/items/item_battle_points.lua deleted file mode 100755 index b2cc954..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_battle_points.lua +++ /dev/null @@ -1,30 +0,0 @@ - -item_battle_points = class({}) - --------------------------------------------------------------------------------- - -function item_battle_points:GetBehavior() - return DOTA_ABILITY_BEHAVIOR_IMMEDIATE -end - --------------------------------------------------------------------------------- - -function item_battle_points:OnSpellStart() - if IsServer() then - - self:GetCaster():EmitSoundParams( "Item.BattlePointsClaimed", 0, 0.5, 0) - - local gameEvent = {} - gameEvent["player_id"] = self:GetCaster():GetPlayerID() - gameEvent["teamnumber"] = -1 - gameEvent["int_value"] = self:GetCurrentCharges() - gameEvent["message"] = "#Aghanim_BattlePointsFound" - FireGameEvent( "dota_combat_event_message", gameEvent ) - - GameRules.Aghanim:GrantAllPlayersPoints( self:GetCurrentCharges(), true, "item_battle_points" ) - - UTIL_Remove( self ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_bear_cloak.lua b/aghanim_singleplayer/scripts/vscripts/items/item_bear_cloak.lua deleted file mode 100755 index 7c4f1ea..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_bear_cloak.lua +++ /dev/null @@ -1,44 +0,0 @@ - -item_bear_cloak = class({}) -LinkLuaModifier( "modifier_item_bear_cloak", "modifiers/modifier_item_bear_cloak", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_bear_cloak_effect", "modifiers/modifier_item_bear_cloak_effect", LUA_MODIFIER_MOTION_NONE ) - - --------------------------------------------------------------------------------- - -function item_bear_cloak:GetIntrinsicModifierName() - return "modifier_item_bear_cloak" -end - --------------------------------------------------------------------------------- - -function item_bear_cloak:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_bear_cloak:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_bear_cloak:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_baldric.lua b/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_baldric.lua deleted file mode 100755 index 3107456..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_baldric.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_bogduggs_baldric = class({}) -LinkLuaModifier( "modifier_item_bogduggs_baldric", "modifiers/modifier_item_bogduggs_baldric", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_bogduggs_baldric:GetIntrinsicModifierName() - return "modifier_item_bogduggs_baldric" -end - --------------------------------------------------------------------------------- - -function item_bogduggs_baldric:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_bogduggs_baldric:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_bogduggs_baldric:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_cudgel.lua b/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_cudgel.lua deleted file mode 100755 index 9e90aed..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_cudgel.lua +++ /dev/null @@ -1,46 +0,0 @@ -item_bogduggs_cudgel = class({}) -LinkLuaModifier( "modifier_item_bogduggs_cudgel", "modifiers/modifier_item_bogduggs_cudgel", LUA_MODIFIER_MOTION_NONE ) - ----------------------------------------------------------------------------------------- - -function item_bogduggs_cudgel:Precache( context ) - - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) - -end - --------------------------------------------------------------------------------- - -function item_bogduggs_cudgel:GetIntrinsicModifierName() - return "modifier_item_bogduggs_cudgel" -end - --------------------------------------------------------------------------------- - -function item_bogduggs_cudgel:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_bogduggs_cudgel:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_bogduggs_cudgel:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_lucky_femur.lua b/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_lucky_femur.lua deleted file mode 100755 index e957c50..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_bogduggs_lucky_femur.lua +++ /dev/null @@ -1,44 +0,0 @@ -item_bogduggs_lucky_femur = class({}) -LinkLuaModifier( "modifier_item_bogduggs_lucky_femur", "modifiers/modifier_item_bogduggs_lucky_femur", LUA_MODIFIER_MOTION_NONE ) - - ----------------------------------------------------------------------------------------- - -function item_bogduggs_lucky_femur:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_ogre_magi/ogre_magi_multicast.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_bogduggs_lucky_femur:GetIntrinsicModifierName() - return "modifier_item_bogduggs_lucky_femur" -end - --------------------------------------------------------------------------------- - -function item_bogduggs_lucky_femur:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_bogduggs_lucky_femur:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_bogduggs_lucky_femur:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_carapace_of_qaldin.lua b/aghanim_singleplayer/scripts/vscripts/items/item_carapace_of_qaldin.lua deleted file mode 100755 index b777bf4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_carapace_of_qaldin.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_carapace_of_qaldin = class({}) -LinkLuaModifier( "modifier_item_carapace_of_qaldin", "modifiers/modifier_item_carapace_of_qaldin", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_carapace_of_qaldin:GetIntrinsicModifierName() - return "modifier_item_carapace_of_qaldin" -end - --------------------------------------------------------------------------------- - -function item_carapace_of_qaldin:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_carapace_of_qaldin:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_carapace_of_qaldin:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_corrupting_blade.lua b/aghanim_singleplayer/scripts/vscripts/items/item_corrupting_blade.lua deleted file mode 100755 index 1f04cf7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_corrupting_blade.lua +++ /dev/null @@ -1,42 +0,0 @@ - -item_corrupting_blade = class({}) -LinkLuaModifier( "modifier_item_corrupting_blade", "modifiers/modifier_item_corrupting_blade", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_corrupting_blade_buff", "modifiers/modifier_item_corrupting_blade_buff", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_corrupting_blade:GetIntrinsicModifierName() - return "modifier_item_corrupting_blade" -end - --------------------------------------------------------------------------------- - -function item_corrupting_blade:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_corrupting_blade:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_corrupting_blade:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_creed_of_omniscience.lua b/aghanim_singleplayer/scripts/vscripts/items/item_creed_of_omniscience.lua deleted file mode 100755 index 2a42eea..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_creed_of_omniscience.lua +++ /dev/null @@ -1,38 +0,0 @@ -item_creed_of_omniscience = class({}) -LinkLuaModifier( "modifier_item_creed_of_omniscience", "modifiers/modifier_item_creed_of_omniscience", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_creed_of_omniscience:GetIntrinsicModifierName() - return "modifier_item_creed_of_omniscience" -end - --------------------------------------------------------------------------------- - -function item_creed_of_omniscience:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_creed_of_omniscience:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_creed_of_omniscience:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_double_damage_potion.lua b/aghanim_singleplayer/scripts/vscripts/items/item_double_damage_potion.lua deleted file mode 100755 index 86ae37a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_double_damage_potion.lua +++ /dev/null @@ -1,22 +0,0 @@ - -item_double_damage_potion = class({}) -LinkLuaModifier( "modifier_item_double_damage_potion", "modifiers/modifier_item_double_damage_potion", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_double_damage_potion:OnSpellStart() - if IsServer() then - local kv = - { - duration = self:GetSpecialValueFor( "buff_duration" ), - } - - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_item_double_damage_potion", kv ) - - EmitSoundOn( "DoubleDamagePotion.Activate", self:GetCaster() ) - - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_dredged_trident.lua b/aghanim_singleplayer/scripts/vscripts/items/item_dredged_trident.lua deleted file mode 100755 index bc1dcc6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_dredged_trident.lua +++ /dev/null @@ -1,41 +0,0 @@ - -item_dredged_trident = class({}) -LinkLuaModifier( "modifier_item_dredged_trident", "modifiers/modifier_item_dredged_trident", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_dredged_trident:GetIntrinsicModifierName() - return "modifier_item_dredged_trident" -end - --------------------------------------------------------------------------------- - -function item_dredged_trident:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_dredged_trident:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_dredged_trident:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_evasion_potion.lua b/aghanim_singleplayer/scripts/vscripts/items/item_evasion_potion.lua deleted file mode 100755 index b73f2cc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_evasion_potion.lua +++ /dev/null @@ -1,28 +0,0 @@ - -item_evasion_potion = class({}) -LinkLuaModifier( "modifier_item_evasion_potion", "modifiers/modifier_item_evasion_potion", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_evasion_potion:Precache( context ) - PrecacheResource( "particle", "particles/generic_gameplay/evasion_potion_owner.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_evasion_potion:OnSpellStart() - if IsServer() then - local kv = - { - duration = self:GetSpecialValueFor( "buff_duration" ), - } - - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_item_evasion_potion", kv ) - - EmitSoundOn( "EvasionPotion.Activate", self:GetCaster() ) - - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_glimmerdark_shield.lua b/aghanim_singleplayer/scripts/vscripts/items/item_glimmerdark_shield.lua deleted file mode 100755 index 93257f7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_glimmerdark_shield.lua +++ /dev/null @@ -1,56 +0,0 @@ - -item_glimmerdark_shield = class({}) -LinkLuaModifier( "modifier_item_glimmerdark_shield", "modifiers/modifier_item_glimmerdark_shield", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_glimmerdark_shield_prism", "modifiers/modifier_item_glimmerdark_shield_prism", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_glimmerdark_shield:OnSpellStart() - self.prism_duration = self:GetSpecialValueFor( "prism_duration" ) - - if IsServer() then - local hCaster = self:GetCaster() - hCaster:AddNewModifier( hCaster, self, "modifier_item_glimmerdark_shield_prism", { duration = self.prism_duration } ) - - EmitSoundOn( "DOTA_Item.GhostScepter.Activate", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function item_glimmerdark_shield:GetIntrinsicModifierName() - return "modifier_item_glimmerdark_shield" -end - --------------------------------------------------------------------------------- - -function item_glimmerdark_shield:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_glimmerdark_shield:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_glimmerdark_shield:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_gravel_foot.lua b/aghanim_singleplayer/scripts/vscripts/items/item_gravel_foot.lua deleted file mode 100755 index cd077d0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_gravel_foot.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_gravel_foot = class({}) -LinkLuaModifier( "modifier_item_gravel_foot", "modifiers/modifier_item_gravel_foot", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_gravel_foot:GetIntrinsicModifierName() - return "modifier_item_gravel_foot" -end - --------------------------------------------------------------------------------- - -function item_gravel_foot:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_gravel_foot:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_gravel_foot:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_guardian_shell.lua b/aghanim_singleplayer/scripts/vscripts/items/item_guardian_shell.lua deleted file mode 100755 index 0806f3e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_guardian_shell.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_guardian_shell = class({}) -LinkLuaModifier( "modifier_item_guardian_shell", "modifiers/modifier_item_guardian_shell", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_guardian_shell:GetIntrinsicModifierName() - return "modifier_item_guardian_shell" -end - --------------------------------------------------------------------------------- - -function item_guardian_shell:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_guardian_shell:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_guardian_shell:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_health_potion.lua b/aghanim_singleplayer/scripts/vscripts/items/item_health_potion.lua deleted file mode 100755 index 8b08184..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_health_potion.lua +++ /dev/null @@ -1,40 +0,0 @@ - -item_health_potion = class({}) - --------------------------------------------------------------------------------- - -function item_health_potion:GetBehavior() - return DOTA_ABILITY_BEHAVIOR_IMMEDIATE -end - --------------------------------------------------------------------------------- - -function item_health_potion:OnSpellStart() - if IsServer() then - local hp_restore_pct = self:GetSpecialValueFor( "hp_restore_pct" ) - self:GetCaster():EmitSoundParams( "DOTA_Item.FaerieSpark.Activate", 0, 0.5, 0) - - local nTeamNumber = self:GetCaster():GetTeamNumber() - - local Heroes = HeroList:GetAllHeroes() - - for _,Hero in pairs ( Heroes ) do - if Hero ~= nil and Hero:IsRealHero() and Hero:IsAlive() and Hero:GetTeamNumber() == nTeamNumber then - local hBlessing = Hero:FindModifierByName( "modifier_blessing_potion_health" ) - if hBlessing ~= nil then - local nBonusHealPct = hBlessing:GetHealthRestorePercentBonus() - hp_restore_pct = hp_restore_pct * ( ( 100 + nBonusHealPct ) / 100 ) - --print( 'item_health_potion:OnSpellStart - adding ' .. nBonusHealPct .. '% to heal. Final heal % is ' .. hp_restore_pct ) - end - - local flHealAmount = Hero:GetMaxHealth() * hp_restore_pct / 100 - Hero:Heal( flHealAmount, self ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/fish_bones_active.vpcf", PATTACH_ABSORIGIN_FOLLOW, Hero ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - - self:SpendCharge() - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_ice_dragon_maw.lua b/aghanim_singleplayer/scripts/vscripts/items/item_ice_dragon_maw.lua deleted file mode 100755 index f6ef1b3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_ice_dragon_maw.lua +++ /dev/null @@ -1,46 +0,0 @@ -item_ice_dragon_maw = class({}) -LinkLuaModifier( "modifier_item_ice_dragon_maw", "modifiers/modifier_item_ice_dragon_maw", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_large_frostbitten_icicle", "modifiers/modifier_large_frostbitten_icicle", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_ice_dragon_maw:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_crystalmaiden/maiden_frostbite.vpcf", context ) - PrecacheResource( "particle", "particles/status_fx/status_effect_wyvern_cold_embrace.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_crystalmaiden/maiden_frostbite_buff.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_ice_dragon_maw:GetIntrinsicModifierName() - return "modifier_item_ice_dragon_maw" -end - --------------------------------------------------------------------------------- - -function item_ice_dragon_maw:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_ice_dragon_maw:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_ice_dragon_maw:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_life_rune.lua b/aghanim_singleplayer/scripts/vscripts/items/item_life_rune.lua deleted file mode 100755 index d83d7eb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_life_rune.lua +++ /dev/null @@ -1,46 +0,0 @@ -item_life_rune = class({}) - --------------------------------------------------------------------------------- - -function item_life_rune:GetBehavior() - return DOTA_ABILITY_BEHAVIOR_IMMEDIATE -end - --------------------------------------------------------------------------------- - -function item_life_rune:OnSpellStart() - if IsServer() then - if self:GetCaster() ~= nil and self:GetCaster():IsRealHero() then - if self:GetCaster().nRespawnsRemaining >= AGHANIM_MAX_LIVES then - local newItem = CreateItem( "item_life_rune", nil, nil ) - newItem:SetPurchaseTime( 0 ) - local drop = CreateItemOnPositionSync( self:GetCaster():GetAbsOrigin(), newItem ) - local dropTarget = self:GetCaster():GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ) - newItem:LaunchLoot( false, 150, 0.75, dropTarget ) - self:SpendCharge() - return - end - - self:GetCaster().nRespawnsRemaining = math.min( self:GetCaster().nRespawnsRemaining + 1, AGHANIM_MAX_LIVES ) - local hPlayer = self:GetCaster():GetPlayerOwner() - if hPlayer then - PlayerResource:SetCustomBuybackCooldown( hPlayer:GetPlayerID(), 0 ) - PlayerResource:SetCustomBuybackCost( hPlayer:GetPlayerID(), 0 ) - end - - local netTable = {} - CustomGameEventManager:Send_ServerToPlayer( self:GetCaster():GetPlayerOwner(), "gained_life", netTable ) - CustomNetTables:SetTableValue( "respawns_remaining", string.format( "%d", self:GetCaster():entindex() ), { respawns = self:GetCaster().nRespawnsRemaining } ) - - local gameEvent = {} - gameEvent["player_id"] = self:GetCaster():GetPlayerOwner():GetPlayerID() - gameEvent["team_number"] = DOTA_TEAM_GOODGUYS - gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_item_life_rune" - gameEvent["message"] = "#Dungeon_FoundLifeRune" - FireGameEvent( "dota_combat_event_message", gameEvent ) - end - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_lifestone.lua b/aghanim_singleplayer/scripts/vscripts/items/item_lifestone.lua deleted file mode 100755 index 1211f83..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_lifestone.lua +++ /dev/null @@ -1,56 +0,0 @@ - -item_lifestone = class({}) -LinkLuaModifier( "modifier_item_lifestone", "modifiers/modifier_item_lifestone", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_lifestone_pact", "modifiers/modifier_item_lifestone_pact", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_lifestone:GetIntrinsicModifierName() - return "modifier_item_lifestone" -end - --------------------------------------------------------------------------------- - -function item_lifestone:OnSpellStart() - if IsServer() then - local hCaster = self:GetCaster() - if hCaster:HasModifier( "modifier_item_lifestone_pact" ) then - hCaster:RemoveModifierByName( "modifier_item_lifestone_pact" ) - else - hCaster:AddNewModifier( hCaster, self, "modifier_item_lifestone_pact", { duration = -1 } ) - end - end -end - --------------------------------------------------------------------------------- - -function item_lifestone:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_lifestone:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_lifestone:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_longclaws_amulet.lua b/aghanim_singleplayer/scripts/vscripts/items/item_longclaws_amulet.lua deleted file mode 100755 index 7dd62cf..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_longclaws_amulet.lua +++ /dev/null @@ -1,38 +0,0 @@ -item_longclaws_amulet = class({}) -LinkLuaModifier( "modifier_item_longclaws_amulet", "modifiers/modifier_item_longclaws_amulet", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_longclaws_amulet:GetIntrinsicModifierName() - return "modifier_item_longclaws_amulet" -end - --------------------------------------------------------------------------------- - -function item_longclaws_amulet:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_longclaws_amulet:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_longclaws_amulet:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_mana_potion.lua b/aghanim_singleplayer/scripts/vscripts/items/item_mana_potion.lua deleted file mode 100755 index 9185202..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_mana_potion.lua +++ /dev/null @@ -1,42 +0,0 @@ - -item_mana_potion = class({}) - --------------------------------------------------------------------------------- - -function item_mana_potion:GetBehavior() - return DOTA_ABILITY_BEHAVIOR_IMMEDIATE -end - --------------------------------------------------------------------------------- - -function item_mana_potion:OnSpellStart() - if IsServer() then - local mana_restore_pct = self:GetSpecialValueFor( "mana_restore_pct" ) - self:GetCaster():EmitSoundParams( "DOTA_Item.Mango.Activate", 0, 0.5, 0 ) - - local nTeamNumber = self:GetCaster():GetTeamNumber() - - local Heroes = HeroList:GetAllHeroes() - - for _,Hero in pairs ( Heroes ) do - if Hero ~= nil and Hero:IsRealHero() and Hero:IsAlive() and Hero:GetTeamNumber() == nTeamNumber then - local hBlessing = Hero:FindModifierByName( "modifier_blessing_potion_mana" ) - if hBlessing ~= nil then - local nBonusManaPct = hBlessing:GetManaRestorePercentBonus() - mana_restore_pct = mana_restore_pct * ( ( 100 + nBonusManaPct ) / 100 ) - --print( 'item_mana_potion:OnSpellStart - adding ' .. nBonusManaPct .. '% to mana. Final mana % is ' .. mana_restore_pct ) - end - - local flManaAmount = Hero:GetMaxMana() * mana_restore_pct / 100 - Hero:GiveMana( flManaAmount ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/mango_active.vpcf", PATTACH_ABSORIGIN_FOLLOW, Hero ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_oblivions_locket.lua b/aghanim_singleplayer/scripts/vscripts/items/item_oblivions_locket.lua deleted file mode 100755 index 17f1588..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_oblivions_locket.lua +++ /dev/null @@ -1,61 +0,0 @@ -item_oblivions_locket = class({}) -LinkLuaModifier( "modifier_item_oblivions_locket", "modifiers/modifier_item_oblivions_locket", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_oblivions_locket:OnSpellStart() - if IsServer() then - EmitSoundOn( "DOTA_Item.GhostScepter.Activate", self:GetCaster() ) - - local kv = - { - duration = -1, - extra_spell_damage_percent = self:GetSpecialValueFor( "extra_spell_damage_percent" ), - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ghost_state", kv ) - end -end - --------------------------------------------------------------------------------- - -function item_oblivions_locket:OnChannelFinish( bInterrupted ) - if IsServer() then - self:GetCaster():RemoveModifierByName( "modifier_ghost_state" ) - end -end - --------------------------------------------------------------------------------- - -function item_oblivions_locket:GetIntrinsicModifierName() - return "modifier_item_oblivions_locket" -end - --------------------------------------------------------------------------------- - -function item_oblivions_locket:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_oblivions_locket:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_oblivions_locket:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_ogre_seal_totem.lua b/aghanim_singleplayer/scripts/vscripts/items/item_ogre_seal_totem.lua deleted file mode 100755 index ed99851..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_ogre_seal_totem.lua +++ /dev/null @@ -1,152 +0,0 @@ - -item_ogre_seal_totem = class({}) -LinkLuaModifier( "modifier_item_ogre_seal_totem", "modifiers/modifier_item_ogre_seal_totem", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_ogreseal_flop", "modifiers/creatures/modifier_ogreseal_flop", LUA_MODIFIER_MOTION_BOTH ) - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:Precache( context ) - PrecacheResource( "particle", "particles/creatures/ogre_seal/ogre_seal_warcry.vpcf", context ) - PrecacheResource( "particle", "particles/creatures/ogre/ogre_melee_smash.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:GetAOERadius() - return self:GetSpecialValueFor( "radius" ) -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:GetIntrinsicModifierName() - return "modifier_item_ogre_seal_totem" -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end - --------------------------------------------------------------------------------- - - -function item_ogre_seal_totem:OnAbilityPhaseStart() - if IsServer() then - --self:GetCaster():StartGesture( ACT_DOTA_VICTORY ) - end - - return true -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:OnAbilityPhaseInterrupted() - if IsServer() then - ParticleManager:DestroyParticle( self.nPreviewFXIndex, true ) - - --self:GetCaster():RemoveGesture( ACT_DOTA_VICTORY ) - self:GetCaster():RemoveModifierByName( "modifier_techies_suicide_leap_animation" ) - end -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:OnSpellStart() - if IsServer() then - if self.nPreviewFXIndex then - ParticleManager:DestroyParticle( self.nPreviewFXIndex, true ) - end - - --self:GetCaster():RemoveGesture( ACT_DOTA_VICTORY ) - - self.stun_duration = self:GetSpecialValueFor("stun_duration") - - local vToTarget = self:GetCursorPosition() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local vLocation = self:GetCaster():GetOrigin() + vToTarget * 25 - local kv = - { - vLocX = vLocation.x, - vLocY = vLocation.y, - vLocZ = vLocation.z - } - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_ogreseal_flop", kv ) - - EmitSoundOn( "OgreTank.Grunt", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function item_ogre_seal_totem:TryToDamage() - if IsServer() then - local radius = self:GetSpecialValueFor( "radius" ) - local damage = self:GetSpecialValueFor( "damage" ) - local silence_duration = self:GetSpecialValueFor( "silence_duration" ) - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), self:GetCaster(), radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - for _,enemy in pairs(enemies) do - if enemy ~= nil and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - ability = self, - damage = damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - } - ApplyDamage( DamageInfo ) - if enemy:IsAlive() == false and enemy:GetUnitName() ~= "npc_dota_crate" and enemy:GetUnitName() ~= "npc_dota_vase" then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", enemy ) - else - enemy:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.stun_duration } ) - end - end - end - end - - EmitSoundOnLocationWithCaster( self:GetCaster():GetOrigin(), "OgreTank.GroundSmash", self:GetCaster() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetCaster():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - GridNav:DestroyTreesAroundPoint( self:GetCaster():GetOrigin(), radius, false ) - end -end - - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_paw_of_lucius.lua b/aghanim_singleplayer/scripts/vscripts/items/item_paw_of_lucius.lua deleted file mode 100755 index 5d0246a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_paw_of_lucius.lua +++ /dev/null @@ -1,44 +0,0 @@ -item_paw_of_lucius = class({}) -LinkLuaModifier( "modifier_item_paw_of_lucius", "modifiers/modifier_item_paw_of_lucius", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_paw_of_lucius:GetIntrinsicModifierName() - return "modifier_item_paw_of_lucius" -end - --------------------------------------------------------------------------------- - -function item_paw_of_lucius:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_bloodseeker/bloodseeker_rupture.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_paw_of_lucius:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_paw_of_lucius:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_paw_of_lucius:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_pelt_of_the_old_wolf.lua b/aghanim_singleplayer/scripts/vscripts/items/item_pelt_of_the_old_wolf.lua deleted file mode 100755 index d9a7079..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_pelt_of_the_old_wolf.lua +++ /dev/null @@ -1,38 +0,0 @@ -item_pelt_of_the_old_wolf = class({}) -LinkLuaModifier( "modifier_item_pelt_of_the_old_wolf", "modifiers/modifier_item_pelt_of_the_old_wolf", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_pelt_of_the_old_wolf:GetIntrinsicModifierName() - return "modifier_item_pelt_of_the_old_wolf" -end - --------------------------------------------------------------------------------- - -function item_pelt_of_the_old_wolf:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_pelt_of_the_old_wolf:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_pelt_of_the_old_wolf:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_pocket_campfire.lua b/aghanim_singleplayer/scripts/vscripts/items/item_pocket_campfire.lua deleted file mode 100755 index 76a9ec5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_pocket_campfire.lua +++ /dev/null @@ -1,18 +0,0 @@ - -item_pocket_campfire = class({}) - --------------------------------------------------------------------------------- - -function item_pocket_campfire:OnSpellStart() - if IsServer() then - local vPos = self:GetCursorPosition() - local hPocketCampfire = CreateUnitByName( "npc_dota_pocket_campfire", vPos, true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hPocketCampfire ~= nil then - EmitSoundOn( "PocketCampfire.Create", hCampfire ) - end - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_precious_egg.lua b/aghanim_singleplayer/scripts/vscripts/items/item_precious_egg.lua deleted file mode 100755 index 3d92367..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_precious_egg.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_precious_egg = class({}) -LinkLuaModifier( "modifier_item_precious_egg", "modifiers/modifier_item_precious_egg", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_precious_egg:GetIntrinsicModifierName() - return "modifier_item_precious_egg" -end - --------------------------------------------------------------------------------- - -function item_precious_egg:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_precious_egg:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_precious_egg:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_preserved_skull.lua b/aghanim_singleplayer/scripts/vscripts/items/item_preserved_skull.lua deleted file mode 100755 index 03ed197..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_preserved_skull.lua +++ /dev/null @@ -1,39 +0,0 @@ -item_preserved_skull = class({}) -LinkLuaModifier( "modifier_item_preserved_skull", "modifiers/modifier_item_preserved_skull", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_preserved_skull_effect", "modifiers/modifier_item_preserved_skull_effect", LUA_MODIFIER_MOTION_NONE ) - - --------------------------------------------------------------------------------- - -function item_preserved_skull:GetIntrinsicModifierName() - return "modifier_item_preserved_skull" -end - --------------------------------------------------------------------------------- - -function item_preserved_skull:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_preserved_skull:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_preserved_skull:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_purification_potion.lua b/aghanim_singleplayer/scripts/vscripts/items/item_purification_potion.lua deleted file mode 100755 index e07a011..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_purification_potion.lua +++ /dev/null @@ -1,76 +0,0 @@ - -item_purification_potion = class({}) -LinkLuaModifier( "modifier_item_purification_potion", "modifiers/modifier_item_purification_potion", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_purification_potion:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_purification.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_purification_hit.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_purification_potion:OnSpellStart() - if IsServer() then - self.heal = self:GetSpecialValueFor( "heal" ) - self.radius = self:GetSpecialValueFor( "radius" ) - - --print( 'item_purification_potion:OnSpellStart() - radius is ' .. self.radius ) - - local kv = - { - duration = 0.1, - } - - self:HealAlly( self:GetCursorTarget() ) - - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- - -function item_purification_potion:HealAlly( hAlliedHero ) - if IsServer() then - hAlliedHero:Heal( self.heal, self ) - - SendOverheadEventMessage( self:GetCaster():GetPlayerOwner(), OVERHEAD_ALERT_HEAL, hAlliedHero, self.heal, nil ) - - -- blessing adds a dispel on the target - local hBuff = self:GetCaster():FindModifierByName( "modifier_blessing_potion_purification" ) - if hBuff ~= nil then - --print( "item_purification_potion:HealAlly - purging the target because we've got modifier_blessing_potion_purification!" ) - -- PositiveBuffs, NegativeBuffs, FrameOnly, RemoveStuns, RemoveExceptions - hAlliedHero:Purge( false, true, false, true, false ) - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_omniknight/omniknight_purification.vpcf", PATTACH_CUSTOMORIGIN, hAlliedHero ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hAlliedHero, PATTACH_ABSORIGIN_FOLLOW, nil, hAlliedHero:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "PurificationPotion.Activate", hAlliedHero ) - - local enemies = FindUnitsInRadius( hAlliedHero:GetTeamNumber(), hAlliedHero:GetOrigin(), nil, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _, enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy:IsMagicImmune() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.heal, - damage_type = self:GetAbilityDamageType(), - ability = self, - } - ApplyDamage( damageInfo ) - - local nFXIndex3 = ParticleManager:CreateParticle( "particles/units/heroes/hero_omniknight/omniknight_purification_hit.vpcf", PATTACH_ABSORIGIN_FOLLOW, enemy ) - ParticleManager:SetParticleControlEnt( nFXIndex3, 1, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex3 ) - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_rhyziks_eye.lua b/aghanim_singleplayer/scripts/vscripts/items/item_rhyziks_eye.lua deleted file mode 100755 index 2fda966..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_rhyziks_eye.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_rhyziks_eye = class({}) -LinkLuaModifier( "modifier_item_rhyziks_eye", "modifiers/modifier_item_rhyziks_eye", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_rhyziks_eye:GetIntrinsicModifierName() - return "modifier_item_rhyziks_eye" -end - --------------------------------------------------------------------------------- - -function item_rhyziks_eye:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_rhyziks_eye:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_rhyziks_eye:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_sign_of_the_arachnid.lua b/aghanim_singleplayer/scripts/vscripts/items/item_sign_of_the_arachnid.lua deleted file mode 100755 index 9468ecf..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_sign_of_the_arachnid.lua +++ /dev/null @@ -1,39 +0,0 @@ -item_sign_of_the_arachnid = class({}) -LinkLuaModifier( "modifier_item_sign_of_the_arachnid", "modifiers/modifier_item_sign_of_the_arachnid", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_sign_of_the_arachnid_effect", "modifiers/modifier_item_sign_of_the_arachnid_effect", LUA_MODIFIER_MOTION_NONE ) - - --------------------------------------------------------------------------------- - -function item_sign_of_the_arachnid:GetIntrinsicModifierName() - return "modifier_item_sign_of_the_arachnid" -end - --------------------------------------------------------------------------------- - -function item_sign_of_the_arachnid:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_sign_of_the_arachnid:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_sign_of_the_arachnid:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_slippers_of_the_abyss.lua b/aghanim_singleplayer/scripts/vscripts/items/item_slippers_of_the_abyss.lua deleted file mode 100755 index 85527dd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_slippers_of_the_abyss.lua +++ /dev/null @@ -1,57 +0,0 @@ - -item_slippers_of_the_abyss = class({}) -LinkLuaModifier( "modifier_item_slippers_of_the_abyss", "modifiers/modifier_item_slippers_of_the_abyss", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_slippers_of_the_abyss_sprint", "modifiers/modifier_item_slippers_of_the_abyss_sprint", LUA_MODIFIER_MOTION_NONE ) - ------------------------------------------------------------------------------------------ - -function item_slippers_of_the_abyss:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_slardar/slardar_sprint.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_slippers_of_the_abyss:GetIntrinsicModifierName() - return "modifier_item_slippers_of_the_abyss" -end - --------------------------------------------------------------------------------- - -function item_slippers_of_the_abyss:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_slippers_of_the_abyss:OnSpellStart() - if IsServer() then - self.sprint_duration = self:GetSpecialValueFor( "sprint_duration" ) - - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_item_slippers_of_the_abyss_sprint", { duration = self.sprint_duration } ) - - EmitSoundOn( "Siltbreaker.Sprint", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function item_slippers_of_the_abyss:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_slippers_of_the_abyss:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_spell_amp_potion.lua b/aghanim_singleplayer/scripts/vscripts/items/item_spell_amp_potion.lua deleted file mode 100755 index 86a323b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_spell_amp_potion.lua +++ /dev/null @@ -1,28 +0,0 @@ - -item_spell_amp_potion = class({}) -LinkLuaModifier( "modifier_item_spell_amp_potion", "modifiers/modifier_item_spell_amp_potion", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_spell_amp_potion:Precache( context ) - PrecacheResource( "particle", "particles/generic_gameplay/spell_amp_potion_owner.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_spell_amp_potion:OnSpellStart() - if IsServer() then - local kv = - { - duration = self:GetSpecialValueFor( "buff_duration" ), - } - - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_item_spell_amp_potion", kv ) - - EmitSoundOn( "SpellAmpPotion.Activate", self:GetCaster() ) - - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_stonework_pendant.lua b/aghanim_singleplayer/scripts/vscripts/items/item_stonework_pendant.lua deleted file mode 100755 index 4cd4839..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_stonework_pendant.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_stonework_pendant = class({}) -LinkLuaModifier( "modifier_item_stonework_pendant", "modifiers/modifier_item_stonework_pendant", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_stonework_pendant:GetIntrinsicModifierName() - return "modifier_item_stonework_pendant" -end - --------------------------------------------------------------------------------- - -function item_stonework_pendant:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_stonework_pendant:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_stonework_pendant:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_stony_coat.lua b/aghanim_singleplayer/scripts/vscripts/items/item_stony_coat.lua deleted file mode 100755 index 37988fc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_stony_coat.lua +++ /dev/null @@ -1,67 +0,0 @@ -item_stony_coat = class({}) -LinkLuaModifier( "modifier_item_stony_coat", "modifiers/modifier_item_stony_coat", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_stony_coat:Precache( context ) - PrecacheResource( "particle", "particles/neutral_fx/mud_golem_hurl_boulder.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_stony_coat:GetIntrinsicModifierName() - return "modifier_item_stony_coat" -end - --------------------------------------------------------------------------------- - -function item_stony_coat:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) - self.boulder_damage = self:GetSpecialValueFor( "boulder_damage" ) - self.boulder_stun_duration = self:GetSpecialValueFor( "boulder_stun_duration" ) -end - --------------------------------------------------------------------------------- - -function item_stony_coat:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_stony_coat:OnProjectileHit( hTarget, vLocation ) - if IsServer() then - if hTarget ~= nil and hTarget:IsMagicImmune() == false and hTarget:IsInvulnerable() == false then - local damageinfo = - { - victim = hTarget, - attacker = self:GetCaster(), - damage = self.boulder_damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - ApplyDamage( damageinfo ) - EmitSoundOn( "n_mud_golem.Boulder.Target", hTarget ) - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.boulder_stun_duration } ) - end - end - - return true -end - --------------------------------------------------------------------------------- - -function item_stony_coat:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_the_caustic_finale.lua b/aghanim_singleplayer/scripts/vscripts/items/item_the_caustic_finale.lua deleted file mode 100755 index 400cdbc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_the_caustic_finale.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_the_caustic_finale = class({}) -LinkLuaModifier( "modifier_item_the_caustic_finale", "modifiers/modifier_item_the_caustic_finale", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_the_caustic_finale:GetIntrinsicModifierName() - return "modifier_item_the_caustic_finale" -end - --------------------------------------------------------------------------------- - -function item_the_caustic_finale:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_the_caustic_finale:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_the_caustic_finale:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_tome_of_greater_knowledge.lua b/aghanim_singleplayer/scripts/vscripts/items/item_tome_of_greater_knowledge.lua deleted file mode 100755 index 7951165..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_tome_of_greater_knowledge.lua +++ /dev/null @@ -1,33 +0,0 @@ -item_tome_of_greater_knowledge = class({}) - --------------------------------------------------------------------------------- - -function item_tome_of_greater_knowledge:Precache( context ) - PrecacheResource( "model", "models/gameplay/attrib_tome_str.vmdl", context ) - PrecacheResource( "particle", "particles/generic_hero_status/hero_levelup.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_tome_of_greater_knowledge:OnSpellStart() - if IsServer() then - if self:GetCaster() ~= nil and self:GetCaster():IsRealHero() then - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - local nFXIndex = ParticleManager:CreateParticle( "particles/generic_hero_status/hero_levelup.vpcf", PATTACH_ABSORIGIN_FOLLOW, hPlayerHero ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local nXP = ( GetXPNeededToReachNextLevel( hPlayerHero:GetLevel() ) - GetXPNeededToReachNextLevel( hPlayerHero:GetLevel() - 1 ) ) / 2 - hPlayerHero:AddExperience( nXP, DOTA_ModifyXP_Unspecified, false, false ) - - EmitSoundOn( "Item.TomeOfKnowledge", hPlayerHero ) - end - end - end - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_torrent_effect_potion.lua b/aghanim_singleplayer/scripts/vscripts/items/item_torrent_effect_potion.lua deleted file mode 100755 index 96561ee..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_torrent_effect_potion.lua +++ /dev/null @@ -1,37 +0,0 @@ - -item_torrent_effect_potion = class({}) -LinkLuaModifier( "modifier_item_torrent_effect_potion", "modifiers/modifier_item_torrent_effect_potion", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_torrent_effect_potion:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_kunkka/kunkka_spell_torrent_bubbles.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_kunkka/kunkka_spell_torrent_splash.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_torrent_effect_potion:OnSpellStart() - if IsServer() then - self.proc_chance = self:GetSpecialValueFor( "proc_chance" ) - self.radius = self:GetSpecialValueFor( "radius" ) - self.movespeed_bonus = self:GetSpecialValueFor( "movespeed_bonus" ) - self.slow_duration = self:GetSpecialValueFor( "slow_duration" ) - self.stun_duration = self:GetSpecialValueFor( "stun_duration" ) - self.delay = self:GetSpecialValueFor( "delay" ) - self.torrent_damage = self:GetSpecialValueFor( "torrent_damage" ) - - local kv = - { - duration = -1, - } - - self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_item_torrent_effect_potion", kv ) - - EmitSoundOn( "TorrentEffectPotion.Activate", self:GetCaster() ) - - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_treads_of_ermacor.lua b/aghanim_singleplayer/scripts/vscripts/items/item_treads_of_ermacor.lua deleted file mode 100755 index cd3e0f2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_treads_of_ermacor.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_treads_of_ermacor = class({}) -LinkLuaModifier( "modifier_item_treads_of_ermacor", "modifiers/modifier_item_treads_of_ermacor", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_treads_of_ermacor:GetIntrinsicModifierName() - return "modifier_item_treads_of_ermacor" -end - --------------------------------------------------------------------------------- - -function item_treads_of_ermacor:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_treads_of_ermacor:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_treads_of_ermacor:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_treasure_box.lua b/aghanim_singleplayer/scripts/vscripts/items/item_treasure_box.lua deleted file mode 100755 index 7004f5b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_treasure_box.lua +++ /dev/null @@ -1,41 +0,0 @@ -item_treasure_box = class({}) - -function item_treasure_box:GetBehavior() - return DOTA_ABILITY_BEHAVIOR_IMMEDIATE -end - --------------------------------------------------------------------------------- - -function item_treasure_box:OnSpellStart() - if IsServer() then - local CurrentZone = nil - for _,Zone in pairs( GameRules.Dungeon.Zones ) do - if Zone ~= nil and Zone:ContainsUnit( self:GetCaster() ) then - CurrentZone = Zone - end - end - - if CurrentZone == nil then - self:SpendCharge() - return - end - - local ChestTable = CurrentZone.Chests[#CurrentZone.Chests] - local hTreasure = CreateUnitByName( ChestTable.szNPCName, self:GetCaster():GetOrigin() + RandomVector( RandomFloat( 50, 100 ) ), true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hTreasure ~= nil then - hTreasure.zone = CurrentZone - hTreasure.Items = ChestTable.Items - hTreasure.fItemChance = ChestTable.fItemChance - hTreasure.Relics = ChestTable.Relics - hTreasure.fRelicChance = ChestTable.fRelicChance - hTreasure.nMinGold = ChestTable.nMinGold - hTreasure.nMaxGold = ChestTable.nMaxGold - hTreasure.szTraps = ChestTable.szTraps - hTreasure.nTrapLevel = ChestTable.nTrapLevel - EmitSoundOn( "Dungeon.TreasureItemDrop", hTreasure ) - end - self:SpendCharge() - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_unhallowed_icon.lua b/aghanim_singleplayer/scripts/vscripts/items/item_unhallowed_icon.lua deleted file mode 100755 index 1255023..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_unhallowed_icon.lua +++ /dev/null @@ -1,39 +0,0 @@ -item_unhallowed_icon = class({}) -LinkLuaModifier( "modifier_item_unhallowed_icon", "modifiers/modifier_item_unhallowed_icon", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_unhallowed_icon_effect", "modifiers/modifier_item_unhallowed_icon_effect", LUA_MODIFIER_MOTION_NONE ) - - --------------------------------------------------------------------------------- - -function item_unhallowed_icon:GetIntrinsicModifierName() - return "modifier_item_unhallowed_icon" -end - --------------------------------------------------------------------------------- - -function item_unhallowed_icon:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_unhallowed_icon:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_unhallowed_icon:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_wand_of_the_brine.lua b/aghanim_singleplayer/scripts/vscripts/items/item_wand_of_the_brine.lua deleted file mode 100755 index 9280cef..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_wand_of_the_brine.lua +++ /dev/null @@ -1,60 +0,0 @@ - -item_wand_of_the_brine = class({}) -LinkLuaModifier( "modifier_item_wand_of_the_brine", "modifiers/modifier_item_wand_of_the_brine", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_item_wand_of_the_brine_bubble", "modifiers/modifier_item_wand_of_the_brine_bubble", LUA_MODIFIER_MOTION_NONE ) - - --------------------------------------------------------------------------------- - -function item_wand_of_the_brine:Precache( context ) - PrecacheResource( "particle", "particles/act_2/wand_of_the_brine_bubble.vpcf", context ) -end - --------------------------------------------------------------------------------- - -function item_wand_of_the_brine:OnSpellStart() - if IsServer() then - self.bubble_duration = self:GetSpecialValueFor( "bubble_duration" ) - - local hTarget = self:GetCursorTarget() - hTarget:AddNewModifier( self:GetCaster(), self, "modifier_item_wand_of_the_brine_bubble", { duration = self.bubble_duration } ) - - EmitSoundOn( "DOTA_Item.GhostScepter.Activate", self:GetCaster() ) - end -end - --------------------------------------------------------------------------------- - -function item_wand_of_the_brine:GetIntrinsicModifierName() - return "modifier_item_wand_of_the_brine" -end - --------------------------------------------------------------------------------- - -function item_wand_of_the_brine:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_wand_of_the_brine:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_wand_of_the_brine:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_watchers_gaze.lua b/aghanim_singleplayer/scripts/vscripts/items/item_watchers_gaze.lua deleted file mode 100755 index 9b581ab..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_watchers_gaze.lua +++ /dev/null @@ -1,72 +0,0 @@ -item_watchers_gaze = class({}) -LinkLuaModifier( "modifier_item_watchers_gaze", "modifiers/modifier_item_watchers_gaze", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_watchers_gaze:Precache( context ) - PrecacheResource( "particle", "particles/units/heroes/hero_medusa/medusa_stone_gaze_cast.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_medusa/medusa_stone_gaze_active.vpcf", context ) -end - - --------------------------------------------------------------------------------- - -function item_watchers_gaze:OnSpellStart() - if IsServer() then - local vision_cone = self:GetSpecialValueFor( "vision_cone" ) - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_medusa/medusa_stone_gaze_cast.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), nil, 800, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil then - local vToTarget = enemy:GetOrigin() - self:GetCaster():GetOrigin() - vToTarget = vToTarget:Normalized() - local flDirectionDot = DotProduct( vToTarget, self:GetCaster():GetForwardVector() ) - local flAngle = 180 * math.acos( flDirectionDot ) / math.pi - if flAngle < 60 then - enemy:AddNewModifier( self:GetCaster(), self, "modifier_medusa_stone_gaze_stone", {duration = self:GetSpecialValueFor( "stone_duration" ) } ) - EmitSoundOn( "WatchersGaze.Target" ,enemy ) - end - end - - end - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_medusa/medusa_stone_gaze_active.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetOrigin(), true ) - end -end - --------------------------------------------------------------------------------- - -function item_watchers_gaze:GetIntrinsicModifierName() - return "modifier_item_watchers_gaze" -end - --------------------------------------------------------------------------------- - -function item_watchers_gaze:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_watchers_gaze:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_watchers_gaze:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/items/item_winter_embrace.lua b/aghanim_singleplayer/scripts/vscripts/items/item_winter_embrace.lua deleted file mode 100755 index c903fc9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/items/item_winter_embrace.lua +++ /dev/null @@ -1,37 +0,0 @@ -item_winter_embrace = class({}) -LinkLuaModifier( "modifier_item_winter_embrace", "modifiers/modifier_item_winter_embrace", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -function item_winter_embrace:GetIntrinsicModifierName() - return "modifier_item_winter_embrace" -end - --------------------------------------------------------------------------------- - -function item_winter_embrace:Spawn() - self.required_level = self:GetSpecialValueFor( "required_level" ) -end - --------------------------------------------------------------------------------- - -function item_winter_embrace:OnHeroLevelUp() - if IsServer() then - if self:GetCaster():GetLevel() == self.required_level and self:IsInBackpack() == false then - self:OnUnequip() - self:OnEquip() - end - end -end - --------------------------------------------------------------------------------- - -function item_winter_embrace:IsMuted() - if self.required_level > self:GetCaster():GetLevel() then - return true - end - if not self:GetCaster():IsHero() then - return true - end - return self.BaseClass.IsMuted( self ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/map_encounter.lua b/aghanim_singleplayer/scripts/vscripts/map_encounter.lua deleted file mode 100755 index 753d14a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/map_encounter.lua +++ /dev/null @@ -1,2689 +0,0 @@ -require( "constants" ) -require( "ascension_levels" ) -require( "map_room" ) -require( "utility_functions" ) -require( "spawner" ) -require( "portalspawner" ) -require( "portalspawnerv2" ) - - -LinkLuaModifier( "modifier_monster_leash", "modifiers/modifier_monster_leash", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_passive_autocast", "modifiers/modifier_passive_autocast", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_ability_cast_warning", "modifiers/modifier_ability_cast_warning", LUA_MODIFIER_MOTION_NONE ) -LinkLuaModifier( "modifier_ascension_plasma_field_display", "modifiers/modifier_ascension_plasma_field_display", LUA_MODIFIER_MOTION_NONE ) - --------------------------------------------------------------------------------- - -if CMapEncounter == nil then - CMapEncounter = class({}) -end - --------------------------------------------------------------------------------- - -function CMapEncounter:constructor( hRoom, szEncounterName ) - self.szEncounterName = szEncounterName - self.hRoom = hRoom - - if self.hRoom == nil then - print( "ERROR - Nil room for " .. szEncounterName ) - return - end - - self.Spawners = {} - self.PortalSpawners = {} - self.RetreatPoints = {} - self.PortalSpawnersV2 = {} - - self.flStartTime = -1 - self.EventListeners = {} - self.bCompleted = false - self.flCompletionTime = nil - self.bDevForceCompleted = false - self.bHasGeneratedRewards = false - self.bHasSpawnedEndLevelEntities = false - self.vRoomRewardCratePos = self.hRoom:GetOrigin() - self.szPortalTriggerSpawner = nil - self.flPortalTriggerDelay = 0 - - self.nMaxSpawnedUnitCount = 0 - self.nUnitsRemainingForRewardDrops = 0 - - self.SpawnedEnemies = {} - self.SpawnedSecondaryEnemies = {} - self.SpawnedPortalTriggerUnits = {} - self.nKilledEnemies = 0 - self.nKilledSecondaryEnemies = 0 - - self.SpawnedBreakables = {} - self.SpawnedExplosiveBarrels = {} - - self.bCalculateRewardsFromUnitCount = false - - local nTotalGoldReward = self:GetTotalGoldRewardPerPlayer() - self.nGoldReward = nTotalGoldReward - self.nTotalGoldFromEnemies = nTotalGoldReward - self.nGoldReward - self.nRemainingGoldFromEnemies = self.nTotalGoldFromEnemies - - local nTotalXPReward = self:GetTotalXPRewardPerPlayer() - self.nXPReward = nTotalXPReward / 2 - self.nTotalXPFromEnemies = nTotalXPReward - self.nXPReward - self.nRemainingXPFromEnemies = self.nTotalXPFromEnemies - - self.nNumItemsToDrop = 0 - self.nNumBPToDrop = 0 - self.nNumFragmentsToDrop = 0 - - self.nChestsToSpawn = 0 - if self.hRoom:GetType() == ROOM_TYPE_TRAPS then - self.nChestsToSpawn = self:RoomRandomInt( DEFAULT_MIN_CHESTS, DEFAULT_MAX_CHESTS ) - --elseif self.hRoom:GetType() == ROOM_TYPE_STARTING then - --self.nChestsToSpawn = 8 -- dev test - end - - self.nCratesToSpawn = 0 - if self.hRoom:GetType() == ROOM_TYPE_ENEMY then - self.nCratesToSpawn = self:RoomRandomInt( DEFAULT_MIN_CRATES_ENEMY_ENC, DEFAULT_MAX_CRATES_ENEMY_ENC ) - elseif self.hRoom:GetType() == ROOM_TYPE_BOSS then - self.nCratesToSpawn = self:RoomRandomInt( DEFAULT_MIN_CRATES_BOSS_ENC, DEFAULT_MAX_CRATES_BOSS_ENC ) - end - - self.nExplosiveBarrelsToSpawn = 0 - local bSpawnExplosiveBarrels = self:RoomRollPercentage( ENCOUNTER_SPAWN_BARRELS_CHANCE ) - if bSpawnExplosiveBarrels then - if self.hRoom:GetType() == ROOM_TYPE_ENEMY then - self.nExplosiveBarrelsToSpawn = self:RoomRandomInt( DEFAULT_MIN_BARRELS_ENEMY_ENC, DEFAULT_MAX_BARRELS_ENEMY_ENC ) - end - end - - self.nObjectiveNumber = 1 - - self.ClientData = {} - self.ClientData[ "encounter_name" ] = szEncounterName - self.ClientData[ "encounter_depth" ] = self.hRoom:GetDepth() - self.ClientData[ "room_type" ] = GetStringForRoomType( self.hRoom:GetType() ) - self.ClientData[ "objectives" ] = {} -end - --------------------------------------------------------------------------------- - -function CMapEncounter:RoomRandomInt( nMinInt, nMaxInt ) - return self:GetRoom():RoomRandomInt( nMinInt, nMaxInt ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter:RoomRandomFloat( flMin, flMin ) - return self:GetRoom():RoomRandomFloat( flMin, flMin ) -end - ---------------------------------------------------------------------------- - -function CMapEncounter:RoomRollPercentage( nChance ) - local bOutcome = self:RoomRandomInt( 1, 100 ) <= nChance - return bOutcome -end - --------------------------------------------------------------------------------- - -function CMapEncounter:OnEliteRankChanged( nEliteDepthBonus ) - - if nEliteDepthBonus > 0 then - self.ClientData[ "hard_room" ] = 1 - else - self.ClientData[ "hard_room" ] = 0 - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SelectAscensionAbilities( ) - self.AscensionAbilities = {} - self.hDummyAscensionCaster = nil - self.ClientData[ "ascension_abilities" ] = {} - self.ClientData[ "total_difficulty" ] = 0 - - if self:GetRoom():GetType() ~= ROOM_TYPE_ENEMY then - return - end - - local nEliteLevel = self:GetRoom():GetEliteRank() - local nAscensionLevel = nEliteLevel + GameRules.Aghanim:GetAscensionLevel() - self.ClientData[ "total_difficulty" ] = nAscensionLevel - - local nDesiredAbilityCount = EXTRA_ABILITIES_PER_ASCENSION_LEVEL[ nAscensionLevel + 1 ] - if nDesiredAbilityCount == 0 then - return - end - - local vecAbilityOptions = {} - local vecEliteAbilityOptions = {} - for abilityName,hPossibleAbility in pairs( ASCENSION_ABILITIES ) do - if hPossibleAbility.vecBlacklistedEncounters ~= nil then - for i=1,#hPossibleAbility.vecBlacklistedEncounters do - local szBlacklisted = hPossibleAbility.vecBlacklistedEncounters[i] - if szBlacklisted == self.szEncounterName then - --print( "Encounter " .. self.szEncounterName .. " blacklisted " .. abilityName ) - goto continue - end - end - end - - if hPossibleAbility.nRestrictToAct ~= nil then - if hPossibleAbility.nRestrictToAct ~= self:GetRoom():GetAct() then - goto continue - end - - if hPossibleAbility.szRequiredBoss ~= nil and hPossibleAbility.szRequiredBoss ~= GameRules.Aghanim:GetBossUnitForAct( hPossibleAbility.nRestrictToAct ) then - goto continue - end - end - - if hPossibleAbility.nMinAscensionLevel ~= nil and hPossibleAbility.nMinAscensionLevel > nAscensionLevel then - goto continue - end - - if hPossibleAbility.nMaxAscensionLevel ~= nil and hPossibleAbility.nMaxAscensionLevel < nAscensionLevel then - goto continue - end - - if hPossibleAbility.bEliteOnly == true then - table.insert( vecEliteAbilityOptions, abilityName ) - else - table.insert( vecAbilityOptions, abilityName ) - end - ::continue:: - end - - -- Force specific abilities - local nStart = 1 - if ASCENSION_ABILITIES_FORCE_LIST ~= nil then - for i=1,#ASCENSION_ABILITIES_FORCE_LIST do - --print( "Encounter " .. self.szEncounterName .. " added ascension ability " .. ASCENSION_ABILITIES_FORCE_LIST[i] ) - table.insert( self.AscensionAbilities, ASCENSION_ABILITIES_FORCE_LIST[i] ) - self.ClientData[ "ascension_abilities" ][ tostring(i) ] = ASCENSION_ABILITIES_FORCE_LIST[i] - for j=1,#vecAbilityOptions do - if vecAbilityOptions[j] == ASCENSION_ABILITIES_FORCE_LIST[i] then - table.remove( vecAbilityOptions, j ) - break - end - end - for j=1,#vecEliteAbilityOptions do - if vecEliteAbilityOptions[j] == ASCENSION_ABILITIES_FORCE_LIST[i] then - table.remove( vecEliteAbilityOptions, j ) - break - end - end - end - nStart = #ASCENSION_ABILITIES_FORCE_LIST + 1 - end - - -- Pick elite-only abilities - if nEliteLevel > 0 then - - local nDesiredEliteAbilityCount = ELITE_ABILITIES_PER_ASCENSION_LEVEL[ nAscensionLevel + 1 ] - for i=nStart,nDesiredEliteAbilityCount do - if #vecEliteAbilityOptions == 0 then - break - end - - local nPick = self:RoomRandomInt( 1, #vecEliteAbilityOptions ) - print( "Encounter " .. self.szEncounterName .. " added ELITE ascension ability " .. vecEliteAbilityOptions[nPick] ) - table.insert( self.AscensionAbilities, vecEliteAbilityOptions[nPick] ) - self.ClientData[ "ascension_abilities" ][ tostring(i) ] = vecEliteAbilityOptions[nPick] - table.remove( vecEliteAbilityOptions, nPick ) - - nStart = nStart + 1 - end - - end - - -- Pick ascension abilities - for i=nStart,nDesiredAbilityCount do - if #vecAbilityOptions == 0 then - break - end - - local nPick = self:RoomRandomInt( 1, #vecAbilityOptions ) - print( "Encounter " .. self.szEncounterName .. " added ascension ability " .. vecAbilityOptions[nPick] ) - table.insert( self.AscensionAbilities, vecAbilityOptions[nPick] ) - self.ClientData[ "ascension_abilities" ][ tostring(i) ] = vecAbilityOptions[nPick] - table.remove( vecAbilityOptions, nPick ) - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:Precache( context ) - - -- By default, precache all units referenced by spawners - for _, hSpawner in pairs( self:GetSpawners() ) do - hSpawner:Precache( context ) - end - - for _, hPortalSpawner in pairs( self:GetPortalSpawners() ) do - hPortalSpawner:Precache( context ) - end - - for _, hPortalSpawner in pairs( self.PortalSpawnersV2 ) do - hPortalSpawner:Precache( context ) - end - - -- Precache preview units for exit directions - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = self:GetRoom():GetExit( nExitDirection ) - if szExitRoomName ~= nil then - local hExitRoom = GameRules.Aghanim:GetRoom( szExitRoomName ) - if hExitRoom ~= nil and hExitRoom:GetEncounter():GetPreviewUnit() ~= nil then - PrecacheUnitByNameSync( hExitRoom:GetEncounter():GetPreviewUnit(), context, -1 ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:OnEncounterLoaded() - --print( "CMapEncounter:OnEncounterLoaded " .. self.szEncounterName ) - - -- Some NPCs require retreat points - self.RetreatPoints = self:GetRoom():FindAllEntitiesInRoomByName( "retreat_point" ) - - -- All spawners can now look for their spawn info targets - for _, hSpawner in pairs( self:GetSpawners() ) do - hSpawner:OnEncounterLoaded( self ) - end - - -- find all potential portal locations and then assign them out to the portal spawners - local PortalLocations = {} - for _, hPortalSpawner in pairs ( self:GetPortalSpawners() ) do - local name = hPortalSpawner:GetLocatorName() - if PortalLocations[name] == nil then - PortalLocations[name] = {} - PortalLocations[name] = self:GetRoom():FindAllEntitiesInRoomByName( name ) - ShuffleListInPlace( PortalLocations[name] ) - --print( "Collected " .. #PortalLocations[name] .. " portal locations for name " .. name ) - end - end - - -- assign each portal spawner a unique spawn location - for _, hPortalSpawner in pairs ( self:GetPortalSpawners() ) do - local name = hPortalSpawner:GetLocatorName() - if #PortalLocations[name] <= 0 then - print( "ERROR: Can't find a unique portal location for portal spawner named " .. name ) - break - end - - local portalLocation = PortalLocations[name][1] - --print( "Grabbing portal named " .. name .. ". Location is " .. portalLocation:GetOrigin().x .. ", " .. portalLocation:GetOrigin().y .. ", " .. portalLocation:GetOrigin().z ) - table.remove( PortalLocations[name], 1 ) - - hPortalSpawner:SetLocation( portalLocation:GetOrigin() ) - hPortalSpawner:OnEncounterLoaded( self ) - end - - for _, hPortalSpawner in pairs ( self.PortalSpawnersV2 ) do - hPortalSpawner:OnEncounterLoaded( self ) - end - - -- We can also look for a boss preview entity - self:SpawnBossPreviewEntity() - - self:InitializeObjectives() -end - - --------------------------------------------------------------------------------- - -function CMapEncounter:InitializeObjectives() - if self.hRoom:GetType() == ROOM_TYPE_ENEMY then - self:AddEncounterObjective( "defeat_all_enemies", 0, 0 ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:Introduce() - GameRules.Aghanim:GetAnnouncer():OnEncounterSelected( self ) - CustomGameEventManager:Send_ServerToAllClients( "introduce_encounter", self.ClientData ) - self:UpdateClient() -end - --------------------------------------------------------------------------------- - -function CMapEncounter:AddEncounterObjective( szKey, nValue, nGoal ) - local Objective = {} - Objective[ "name" ] = szKey - Objective[ "value" ] = nValue - Objective[ "goal" ] = nGoal - Objective[ "order" ] = self.nObjectiveNumber - self.nObjectiveNumber = self.nObjectiveNumber + 1 - - self.ClientData[ "objectives" ][ szKey ] = Objective - self:UpdateClient() -end - --------------------------------------------------------------------------------- --- nGoal can be purposely nil to skip changing the goal --------------------------------------------------------------------------------- -function CMapEncounter:UpdateEncounterObjective( szKey, nValue, nGoal ) - if self.ClientData[ "objectives" ][ szKey ] == nil then - return - end - - self.ClientData[ "objectives" ][ szKey ][ "value" ] = nValue - if nGoal ~= nil then - self.ClientData[ "objectives" ][ szKey ][ "goal" ] = nGoal - end - self:UpdateClient() -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetEncounterObjectiveProgress( szKey ) - if self.ClientData[ "objectives" ][ szKey ] == nil then - return -1 - end - - return self.ClientData[ "objectives" ][ szKey ][ "value" ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetEncounterObjectiveGoal( szKey ) - if self.ClientData[ "objectives" ][ szKey ] == nil then - return -1 - end - - return self.ClientData[ "objectives" ][ szKey ][ "goal" ] -end - --------------------------------------------------------------------------------- - -function CMapEncounter:UpdateClient() - CustomNetTables:SetTableValue( "encounter_state", "depth", { tostring( self.hRoom:GetDepth() ) } ) - CustomNetTables:SetTableValue( "encounter_state", tostring( self.hRoom:GetDepth() ), self.ClientData ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SpawnBossPreviewEntity() - - local hBossPreviewEntity = self:GetRoom():FindAllEntitiesInRoomByName( "encounter_boss_preview_locator", false ) - if #hBossPreviewEntity == 0 then - return - end - - local nAct = self:GetRoom():GetAct() - --print( "CMapEncounter:SpawnBossPreviewEntity() " .. nAct ) - - -- Find the boss room for the act this encounter is in - local hBossRoom = nil - for _,room in pairs( GameRules.Aghanim:GetRoomList() ) do - - if room:GetType() == ROOM_TYPE_BOSS and room:GetAct() == nAct then - hBossRoom = room - break; - end - end - - if hBossRoom == nil then - return - end - - local strPreviewUnit = hBossRoom:GetEncounter():GetPreviewUnit() - local bossPreviewTable = - { - BossUnit = strPreviewUnit, - BossModelScale = ENCOUNTER_PREVIEW_SCALES[ strPreviewUnit ], - ExtraModelScale = 2, - EncounterType = ROOM_TYPE_BOSS, - } - - if bossPreviewTable.BossModelScale == nil then - bossPreviewTable.BossModelScale = 1.0 - end - - for i=1,#hBossPreviewEntity do - local vOrigin = hBossPreviewEntity[i]:GetAbsOrigin() - local vAngles = hBossPreviewEntity[i]:GetAnglesAsVector() - bossPreviewTable.origin = tostring( vOrigin.x ) .. " " .. tostring( vOrigin.y ) .. " " .. tostring( vOrigin.z ) - bossPreviewTable.angles = tostring( vAngles.x ) .. " " .. tostring( vAngles.y ) .. " " .. tostring( vAngles.z ) - - SpawnEntityFromTableAsynchronous( "dota_aghsfort_boss_preview", bossPreviewTable, nil, nil ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:IsComplete() - if self.flStartTime == -1 then - return false - end - - return self.bCompleted -end - --------------------------------------------------------------------------------- - -function CMapEncounter:CheckForCompletion() - if not self:HasRemainingEnemies() and self:AreScheduledSpawnsComplete() and not self:HasAnyPortals() then - return true - end - return false -end - --------------------------------------------------------------------------------- - -function CMapEncounter:ShouldAutoStartGlobalAscensionAbilities() - return true -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetAscensionAbilities() - return self.AscensionAbilities -end - --------------------------------------------------------------------------------- - -function CMapEncounter:StartGlobalAscensionAbilities() - - -- Protect against double calls - if self.hDummyAscensionCaster ~= nil then - return - end - - if #self.AscensionAbilities > 0 then - - local vOrigin = self:GetRoom():GetOrigin() - local dummyTable = - { - targetname = "ascension_global_caster", - MapUnitName = "npc_dota_dummy_caster", - teamnumber = DOTA_TEAM_BADGUYS, - } - self.hDummyAscensionCaster = CreateUnitFromTable( dummyTable, vOrigin ) - if self.hDummyAscensionCaster ~= nil then - self:AddAscensionAbilities( self.hDummyAscensionCaster ) - end - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:Start() - print( string.format( "Encounter %s starting..\n", self.szEncounterName ) ) - for nPlayerID=0,AGHANIM_PLAYERS-1 do - PlayerResource:SetCustomIntParam( nPlayerID, self.hRoom:GetDepth() - 1 ) - end - - for i=0,GameRules:NumDroppedItems()-1 do - local hDroppedItem = GameRules:GetDroppedItem( i ) - if hDroppedItem then - local hContainedItem = hDroppedItem:GetContainedItem() - if hContainedItem and hContainedItem:IsNeutralDrop() then - PlayerResource:AddNeutralItemToStash( 0, DOTA_TEAM_GOODGUYS, hContainedItem ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/items2_fx/neutralitem_teleport.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, hDroppedItem:GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "NeutralItem.TeleportToStash", hDroppedItem ) - - UTIL_Remove( hDroppedItem ) - end - end - end - - local nEntityKilledGameEvent = ListenToGameEvent( "entity_killed", Dynamic_Wrap( getclass( self ), "OnEntityKilled" ), self ) - table.insert( self.EventListeners, nEntityKilledGameEvent ) - - local nTriggerStartTouchEvent = ListenToGameEvent( "trigger_start_touch", Dynamic_Wrap( getclass( self ), "OnTriggerStartTouch" ), self ) - table.insert( self.EventListeners, nTriggerStartTouchEvent ) - - local nTriggerEndTouchEvent = ListenToGameEvent( "trigger_end_touch", Dynamic_Wrap( getclass( self ), "OnTriggerEndTouch" ), self ) - table.insert( self.EventListeners, nTriggerEndTouchEvent ) - - GameRules.Aghanim:GetAnnouncer():OnEncounterStarted( self ) - - self.nMaxSpawnedUnitCount = 0 - self.nUnitsRemainingForRewardDrops = 0 - if self.bCalculateRewardsFromUnitCount then - self.nMaxSpawnedUnitCount = self:GetMaxSpawnedUnitCount() - self.nUnitsRemainingForRewardDrops = self.nMaxSpawnedUnitCount - if self.nMaxSpawnedUnitCount == 0 then - print( "*** WARNING : Encounter " .. self.szEncounterName .. " indicates 0 units to be spawned.. Check your GetMaxSpawnedUnitCount()" ) - end - end - - self.flStartTime = GameRules:GetGameTime() - - if self:IsWaitingToSpawnPortals() == false then - for _,PortalSpawner in pairs ( self.PortalSpawners ) do - PortalSpawner:Start( self.flStartTime ) - end - end - - if self.flEnrageTimer then - CustomNetTables:SetTableValue( "room_data", "enrage_timer", { active=true, startTime=self.flStartTime, enrageTimer=self.flEnrageTimer } ) - else - CustomNetTables:SetTableValue( "room_data", "enrage_timer", { active=false } ) - end - - self:SpawnChests() - self:SpawnBreakableContainers() - self:SpawnExplosiveBarrels() - - CustomNetTables:SetTableValue( "room_data", "status", { complete=false } ) - - if self:ShouldAutoStartGlobalAscensionAbilities() == true then - self:StartGlobalAscensionAbilities() - end - - if self.hRoom:GetType() == ROOM_TYPE_ENEMY then - self.nNumItemsToDrop = GameRules.Aghanim:RollRandomNeutralItemDrops( self ) - self.nNumBPToDrop = self:RoomRandomInt( 0, 2 ) - end - - if self.hRoom:GetType() == ROOM_TYPE_ENEMY or self.hRoom:GetType() == ROOM_TYPE_TRAPS then - self.nNumFragmentsToDrop = GameRules.Aghanim:RollRandomFragmentDrops() - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SpawnChests() - printf( "-----------------------------------" ) - --printf( "CMapEncounter:SpawnChests()" ) - - --PrintTable( TreasureChestData, " " ) - - for i, chestData in ipairs( TreasureChestData ) do - --print( "" ) - --print( "Looking at chestData #" .. i ) - if ( chestData.szSpawnerName == nil ) then - printf( "ERROR -- CMapEncounter:SpawnChests(): No szSpawnerName specified for this chest." ) - end - - local fSpawnChance = chestData.fSpawnChance - if fSpawnChance == nil or fSpawnChance <= 0 then - printf( "ERROR -- CMapEncounter:SpawnChests: Treasure chest spawn chance is not valid." ) - end - - if chestData.nMaxSpawnDistance == nil or chestData.nMaxSpawnDistance < 0 then - printf( "WARNING -- CMapEncounter:SpawnChests: nMaxSpawnDistance is not valid. Defaulting to 0." ) - chestData.nMaxSpawnDistance = 0 - end - - local nChestsSpawned = 0 - - -- printf( "CMapEncounter:SpawnChests - chestData.szSpawnerName == %s", chestData.szSpawnerName ) - local hSpawners = self:GetRoom():FindAllEntitiesInRoomByName( chestData.szSpawnerName, false ) - for _, hSpawner in pairs( hSpawners ) do - printf( "Iterating over hSpawners" ) - if nChestsSpawned < self.nChestsToSpawn then - local vSpawnLoc = hSpawner:GetOrigin() + RandomVector( RandomFloat( 0, chestData.nMaxSpawnDistance ) ) - - local fThreshold = 1 - fSpawnChance - local bSpawnChest = self:RoomRandomFloat( 0, 1 ) >= fThreshold - - -- Force chest spawns if we'd run out of spawners otherwise - local nSpawnersRemaining = #hSpawners - i - local nChestsNeeded = self.nChestsToSpawn - nChestsSpawned - if nSpawnersRemaining <= nChestsNeeded then - --printf( " %d spawners remaining and still need to spawn %d chests, so force the rest of the spawners to spawn chests", nSpawnersRemaining, nChestsNeeded ) - bSpawnChest = true - end - - if bSpawnChest then - local hUnit = CreateUnitByName( chestData.szNPCName, vSpawnLoc, true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hUnit ~= nil then - local vSpawnerForward = hSpawner:GetForwardVector() - hUnit:SetForwardVector( vSpawnerForward ) - - -- print( "CMapEncounter:SpawnChests - Created chest unit named " .. hUnit:GetUnitName() ) - hUnit.fNeutralItemChance = chestData.fNeutralItemChance - hUnit.nMinNeutralItems = chestData.nMinNeutralItems - hUnit.nMaxNeutralItems = chestData.nMaxNeutralItems - hUnit.fItemChance = chestData.fItemChance - hUnit.nMinItems = chestData.nMinItems - hUnit.nMaxItems = chestData.nMaxItems - hUnit.Items = chestData.Items - hUnit.fTrapChance = chestData.fTrapChance - hUnit.nTrapLevel = chestData.nTrapLevel - hUnit.szTraps = chestData.szTraps - else - printf( "ERROR -- CMapEncounter:SpawnChests: Failed to spawn chest named \"%s\"", chestData.szNPCName ) - end - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SpawnBreakableContainers() - --print( "-----------------------------------" ) - --print( "CMapEncounter:SpawnBreakableContainers()" ) - --PrintTable( BreakablesData, " " ) - - for i, breakableData in ipairs( BreakablesData ) do - --print( "" ) - --print( "Looking at breakableData #" .. i ) - if ( breakableData.szSpawnerName == nil ) then - printf( "CMapEncounter:SpawnBreakableContainers() - ERROR: No szSpawnerName specified for this breakable container." ) - return - end - - local fSpawnChance = breakableData.fSpawnChance - if fSpawnChance == nil or fSpawnChance <= 0 then - printf( "CMapEncounter:SpawnBreakableContainers - ERROR: Breakable container spawn chance is not valid" ) - return - end - - if breakableData.nMaxSpawnDistance == nil or breakableData.nMaxSpawnDistance < 0 then - printf( "CMapEncounter:SpawnBreakableContainers - ERROR: nMaxSpawnDistance is not valid." ) - return - end - - local nCratesSpawned = 0 - - --printf( "This room wants to spawn %d crates", self.nCratesToSpawn ) - - if ( breakableData.szSpawnerName ~= nil ) then - --print( "breakableData.szSpawnerName == " .. breakableData.szSpawnerName ) - local hSpawners = self:GetRoom():FindAllEntitiesInRoomByName( breakableData.szSpawnerName, false ) - for i, hSpawner in pairs( hSpawners ) do - if nCratesSpawned < self.nCratesToSpawn then - local vSpawnLoc = hSpawner:GetOrigin() + RandomVector( RandomFloat( 0, breakableData.nMaxSpawnDistance ) ) - - local fThreshold = 1 - fSpawnChance - local bSpawnBreakable = self:RoomRandomFloat( 0, 1 ) >= fThreshold - - -- Force crate spawns if we'd run out of spawners otherwise - local nSpawnersRemaining = #hSpawners - i - local nCratesNeeded = self.nCratesToSpawn - nCratesSpawned - if nSpawnersRemaining <= nCratesNeeded then - --printf( " %d spawners remaining and still need to spawn %d crates, so force the rest of the spawners to spawn crates", nSpawnersRemaining, nCratesNeeded ) - bSpawnBreakable = true - end - - if bSpawnBreakable then - - local vAngles = VectorAngles( RandomVector( 1 ) ) - local breakableTable = - { - MapUnitName = breakableData.szNPCName, - origin = tostring( vSpawnLoc.x ) .. " " .. tostring( vSpawnLoc.y ) .. " " .. tostring( vSpawnLoc.z ), - angles = tostring( vAngles.x ) .. " " .. tostring( vAngles.y ) .. " " .. tostring( vAngles.z ), - teamnumber = DOTA_TEAM_BADGUYS, - NeverMoveToClearSpace = false, - } - local hUnit = CreateUnitFromTable( breakableTable, vSpawnLoc ) - if hUnit ~= nil then - --print( "Created breakable container unit named " .. hUnit:GetUnitName() ) - hUnit.CommonItems = breakableData.CommonItems - hUnit.fCommonItemChance = breakableData.fCommonItemChance - hUnit.MonsterUnits = breakableData.MonsterUnits - hUnit.fMonsterChance = breakableData.fMonsterChance - hUnit.RareItems = breakableData.RareItems - hUnit.fRareItemChance = breakableData.fRareItemChance - hUnit.nMinGold = breakableData.nMinGold - hUnit.nMaxGold = breakableData.nMaxGold - hUnit.fGoldChance = breakableData.fGoldChance - hUnit:AddNewModifier( hUnit, nil, "modifier_breakable_container", {} ) - - table.insert( self.SpawnedBreakables, hUnit ) - - nCratesSpawned = nCratesSpawned + 1 - --printf( " Spawned %d crates", nCratesSpawned ) - end - end - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SpawnExplosiveBarrels() - --printf( "-----------------------------------" ) - --printf( "CMapEncounter:SpawnExplosive()" ) - --PrintTable( ExplosiveBarrelData, " " ) - - for i, barrelData in ipairs( ExplosiveBarrelData ) do - --printf( "Looking at barrelData #", i ) - if ( barrelData.szSpawnerName == nil ) then - printf( "CMapEncounter:SpawnExplosiveBarrels() - ERROR: No szSpawnerName specified for this explosive barrel." ) - return - end - - local fSpawnChance = barrelData.fSpawnChance - if fSpawnChance == nil or fSpawnChance <= 0 then - printf( "CMapEncounter:SpawnExplosiveBarrels() - ERROR: Explosive barrel spawn chance is not valid" ) - return - end - - if barrelData.nMaxSpawnDistance == nil or barrelData.nMaxSpawnDistance < 0 then - printf( "CMapEncounter:SpawnExplosiveBarrels() - ERROR: nMaxSpawnDistance is not valid." ) - return - end - - local nExplosiveBarrelsSpawned = 0 - - --printf( "This room wants to spawn %d explosive barrels", self.nExplosiveBarrelsToSpawn ) - - if ( barrelData.szSpawnerName ~= nil ) then - --print( "barrelData.szSpawnerName == " .. barrelData.szSpawnerName ) - local hSpawners = self:GetRoom():FindAllEntitiesInRoomByName( barrelData.szSpawnerName, false ) - for i, hSpawner in pairs( hSpawners ) do - if nExplosiveBarrelsSpawned < self.nExplosiveBarrelsToSpawn then - local vSpawnLoc = hSpawner:GetOrigin() + RandomVector( RandomFloat( 0, barrelData.nMaxSpawnDistance ) ) - - local fThreshold = 1 - fSpawnChance - local bSpawnBarrel = self:RoomRandomFloat( 0, 1 ) >= fThreshold - - -- Force crate spawns if we'd run out of spawners otherwise - local nSpawnersRemaining = #hSpawners - i - local nBarrelsNeeded = self.nExplosiveBarrelsToSpawn - nExplosiveBarrelsSpawned - if nSpawnersRemaining <= nBarrelsNeeded then - --printf( " %d spawners remaining and still need to spawn %d barrels, so force the rest of the spawners to spawn barrels", nSpawnersRemaining, nBarrelsNeeded ) - bSpawnBarrel = true - end - - if bSpawnBarrel then - - local vAngles = VectorAngles( RandomVector( 1 ) ) - local barrelTable = - { - MapUnitName = barrelData.szNPCName, - origin = tostring( vSpawnLoc.x ) .. " " .. tostring( vSpawnLoc.y ) .. " " .. tostring( vSpawnLoc.z ), - angles = tostring( vAngles.x ) .. " " .. tostring( vAngles.y ) .. " " .. tostring( vAngles.z ), - teamnumber = DOTA_TEAM_BADGUYS, - NeverMoveToClearSpace = false, - } - local hUnit = CreateUnitFromTable( barrelTable, vSpawnLoc ) - if hUnit ~= nil then - -- Set the barrel's level based on the depth we're in. It'll use its level to set its - -- explosion ability level - local hAbility = hUnit:FindAbilityByName( "aghsfort_explosive_barrel" ) - local nDepth = self.hRoom:GetDepth() - --printf( "nDepth == %d", nDepth ) - - for i = 1, nDepth do - hAbility:UpgradeAbility( true ) - end - - --printf( "nDepth: %d; explosive barrel ability level: %d", nDepth, hAbility:GetLevel() ) - - --local vSpawnerForward = hSpawner:GetForwardVector() - --hUnit:SetForwardVector( vSpawnerForward ) - - --printf( "Created explosive barrel unit named \"%s\"", hUnit:GetUnitName() ) - --hUnit:AddNewModifier( hUnit, nil, "modifier_explosive_barrel", {} ) - - table.insert( self.SpawnedExplosiveBarrels, hUnit ) - - nExplosiveBarrelsSpawned = nExplosiveBarrelsSpawned + 1 - --printf( " Spawned %d crates", nExplosiveBarrelsSpawned ) - end - end - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:OnThink() - - --print( 'CMapEncounter:OnThink()' ) - if self.flStartTime ~= -1 and not self.bCompleted then - self:TrySpawningUnits() - self:TrySpawningPortalUnits() - self:TrySpawningPortalUnitsV2() - self:TryCompletingMapEncounter() - end - - if self.flCompletionTime ~= nil and ( GameRules:GetGameTime() - self.flCompletionTime ) > 0.6 then - self:GenerateRewards() - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:NeedsToThink() - return self.bHasGeneratedRewards == false or self.bHasSpawnedEndLevelEntities == false -end - --------------------------------------------------------------------------------- - -function CMapEncounter:TrySpawningPortalUnits() - --print( "CMapEncounter:TrySpawningPortalUnits" ) - for _,PortalSpawner in pairs ( self.PortalSpawners ) do - PortalSpawner:TrySpawningUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:RunSpawnSchedule( hSpawner ) - - if hSpawner.schedule == nil or hSpawner.schedule.flStartTime < 0 then - return - end - - -- Debug visualization of focus path --- if hSpawner.schedule.spawnFocusPath ~= nil then --- local flRelativeTime = GameRules:GetGameTime() - hSpawner.schedule.flStartTime --- local vSpawnFocus = self:ComputeSpawnFocusPosition( hSpawner.schedule.spawnFocusPath, flRelativeTime ) --- DebugDrawCircle( vSpawnFocus, Vector( 0, 255, 0 ), 0, hSpawner.schedule.spawnFocusPath.flRadius, false, 1.0 ) --- end - - -- Try to spawn this wave - for nWave = hSpawner.schedule.nCurrentWaveIndex, #hSpawner.schedule.waveSchedule do - local flRelativeTime = GameRules:GetGameTime() - hSpawner.schedule.flStartTime - if hSpawner.schedule.waveSchedule[nWave].Time > flRelativeTime then - break - end - local nCount = hSpawner.schedule.waveSchedule[nWave].Count - if nCount == nil or nCount <= 0 then - nCount = hSpawner:GetSpawnPositionCount() - end - - -- Used by spawners to force movement around the map - if hSpawner.schedule.spawnFocusPath ~= nil then - local vSpawnFocus = self:ComputeSpawnFocusPosition( hSpawner.schedule.spawnFocusPath, flRelativeTime ) - hSpawner:SetSpawnFocus( vSpawnFocus, hSpawner.schedule.spawnFocusPath.flRadius ) - end - - hSpawner:SpawnUnitsFromRandomSpawners( nCount ) - hSpawner.schedule.nCurrentWaveIndex = hSpawner.schedule.nCurrentWaveIndex + 1 - end - -end - - --------------------------------------------------------------------------------- - -function CMapEncounter:TrySpawningUnits() - for _,Spawner in pairs ( self.Spawners ) do - self:RunSpawnSchedule( Spawner ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:TrySpawningPortalUnitsV2() - for _,PortalSpawner in pairs ( self.PortalSpawnersV2 ) do - - self:RunSpawnSchedule( PortalSpawner ) - - -- This ticks the logic to see if any previously spawned portals need to spawn their units - PortalSpawner:TrySpawningPortalUnits() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:IsScheduledSpawnComplete( hSpawner ) - if hSpawner.schedule == nil then - return true - end - - if hSpawner.schedule.nCurrentWaveIndex <= #hSpawner.schedule.waveSchedule then - return false - end - - return true -end - --------------------------------------------------------------------------------- - -function CMapEncounter:AreScheduledSpawnsComplete() - for _,Spawner in pairs ( self.Spawners ) do - if self:IsScheduledSpawnComplete( Spawner ) == false then - return false - end - end - for _,PortalSpawner in pairs ( self.PortalSpawnersV2 ) do - if self:IsScheduledSpawnComplete( PortalSpawner ) == false then - return false - end - end - return true -end - --------------------------------------------------------------------------------- - -function CMapEncounter:TryCompletingMapEncounter() - --print( 'CMapEncounter:TryCompletingMapEncounter()' ) - local bCompleted = ( self.bDevForceCompleted == true or self:CheckForCompletion() == true ) - if bCompleted and self:GetRoom():AreAllExitRoomsReady() then - self.bCompleted = bCompleted - self.flCompletionTime = GameRules:GetGameTime() - - for i=1,#self.EventListeners do - StopListeningToGameEvent( self.EventListeners[i] ) - self.EventListeners[i] = nil - end - - self:DestroyRemainingSpawnedUnits() - self:ResetHeroState() - self:SpawnEndLevelEntities() - self:OnComplete() - - self.hRoom:OnEncounterCompleted() - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:RegisterSummonForAghanim() - if self.hRoom:GetType() == ROOM_TYPE_ENEMY then - GameRules.Aghanim:RegisterSummonForAghanim( self.hRoom:GetDepth(), self:GetAghanimSummon() ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:OnComplete() - GameRules.Aghanim:GetAnnouncer():OnEncounterComplete( self ) - - self:RegisterSummonForAghanim() - - --CustomNetTables:SetTableValue( "room_data", "status", { complete=true } ) - CustomGameEventManager:Send_ServerToAllClients( "complete_encounter", self.ClientData ) -end - --------------------------------------------------------------------------------- - -function CMapEncounter:AddSpawner( hSpawner ) - if hSpawner == nil then - print( "ERROR: AddSpawner called with a nil spawner." ) - return - end - - if self.Spawners[hSpawner:GetSpawnerName()] ~= nil then - print ( "WARNING: Multiple identical named spawners ( " .. hSpawner:GetSpawnerName() .. ") added to encounter! ") - return - end - - self.Spawners[hSpawner:GetSpawnerName()] = hSpawner - return hSpawner -end - --------------------------------------------------------------------------------- - -function CMapEncounter:AddPortalSpawner( hSpawner ) - if hSpawner == nil then - print( "ERROR: AddPortalSpawner called with a nil spawner." ) - return - end - - --print( 'Adding Portal Spawner named ' .. hSpawner:GetSpawnerName() .. '. Looking for locator named ' .. hSpawner:GetLocatorName() ) - - if self.PortalSpawners[hSpawner:GetSpawnerName()] ~= nil then - print ( "ERROR: Multiple identical named spawners ( " .. hSpawner:GetSpawnerName() .. ") added to encounter! ") - return - end - - self.PortalSpawners[hSpawner:GetSpawnerName()] = hSpawner - return hSpawner -end - --------------------------------------------------------------------------------- - -function CMapEncounter:AddPortalSpawnerV2( hSpawner ) - if hSpawner == nil then - print( "ERROR: AddPortalSpawnerV2 called with a nil spawner." ) - return - end - - if self.PortalSpawnersV2[hSpawner:GetSpawnerName()] ~= nil then - print( "ERROR: Multiple identical named spawners ( " .. hSpawner:GetSpawnerName() .. ") added to encounter! ") - return - end - - self.PortalSpawnersV2[ hSpawner:GetSpawnerName() ] = hSpawner - return hSpawner -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SetPortalTriggerSpawner( szSpawnerName, flDelay ) - - if szSpawnerName == nil then - print( "WARNING: CMapEncounter:SetPortalTriggerSpawner .. illegal to specify nil" ) - return - end - - if self.Spawners[szSpawnerName] == nil then - print( "WARNING: CMapEncounter:SetPortalTriggerSpawner specified unknown spawner ( " .. szSpawnerName .. ") in encounter " .. self.szEncounterName .. "! ") - return - end - - self.szPortalTriggerSpawner = szSpawnerName - self.flPortalTriggerDelay = flDelay - - for _, hPortalSpawner in pairs( self.PortalSpawnersV2 ) do - if hPortalSpawner.schedule ~= nil then - hPortalSpawner.schedule.bWaitingForTrigger = true - end - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:IsWaitingToSpawnPortals() - return self.szPortalTriggerSpawner ~= nil -end - --------------------------------------------------------------------------------- - -function CMapEncounter:StartSpawningPortals() - - if self.szPortalTriggerSpawner == nil then - return - end - - self.szPortalTriggerSpawner = nil - - for _, hPortalSpawner in pairs( self.PortalSpawnersV2 ) do - if hPortalSpawner.schedule ~= nil then - if hPortalSpawner.schedule.bWaitingForTrigger == true then - hPortalSpawner.schedule.bWaitingForTrigger = false - hPortalSpawner.schedule.flStartTime = GameRules:GetGameTime() + hPortalSpawner.schedule.flDelay + self.flPortalTriggerDelay - end - end - end - - for _,PortalSpawner in pairs ( self.PortalSpawners ) do - PortalSpawner:Start( GameRules:GetGameTime() + self.flPortalTriggerDelay ) - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SetSpawnerSchedule( szSpawnerName, waveScheduleInput ) - - if waveScheduleInput == nil then - waveScheduleInput = { { Time = 0 } } -- Not specifying count means spawn at all points - end - - -- Validate the schedule is valid - local nLastTime = 0 - for i=1,#waveScheduleInput do - if nLastTime > waveScheduleInput[i].Time then - print( "ERROR: BeginSpawnerSchedule: Wave schedule ( " .. szSpawnerName .. ") not specified in increasing order of time in encounter " .. self.szEncounterName ) - return - end - nLastTime = waveScheduleInput[i].Time - end - - -- Try to find a spawner in all of the lists to spawn - local bIsPortal = false - local hSpawner = self:GetSpawner( szSpawnerName ) - if hSpawner == nil then - hSpawner = self:GetPortalSpawnerV2( szSpawnerName ) - bIsPortal = true - end - - if hSpawner == nil then - print( "ERROR: BeginSpawnerSchedule: Spawner ( " .. szSpawnerName .. ") isn't found in this encounter " .. self.szEncounterName ) - return - end - - hSpawner.schedule = - { - nCurrentWaveIndex = 1, - waveSchedule = waveScheduleInput, - flStartTime = -1, - bWaitingForTrigger = ( bIsPortal == true ) and self:IsWaitingToSpawnPortals() - } - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:StartAllSpawnerSchedules( flDelay ) - - -- Start everything up - for _, hSpawner in pairs( self:GetSpawners() ) do - if hSpawner.schedule ~= nil then - hSpawner.schedule.flStartTime = GameRules:GetGameTime() + flDelay - end - end - - for _, hPortalSpawner in pairs( self.PortalSpawnersV2 ) do - if hPortalSpawner.schedule ~= nil then - if hPortalSpawner.schedule.bWaitingForTrigger == true then - hPortalSpawner.schedule.flDelay = flDelay - else - hPortalSpawner.schedule.flStartTime = GameRules:GetGameTime() + flDelay - end - end - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:StartSpawnerSchedule( szSpawnerName, flDelay ) - - -- Try to find a spawner in all of the lists to spawn - local bIsPortal = false - local hSpawner = self:GetSpawner( szSpawnerName ) - if hSpawner == nil then - bIsPortal = true - hSpawner = self:GetPortalSpawnerV2( szSpawnerName ) - end - - if hSpawner == nil then - print( "ERROR: StartSpawnerSchedule: Spawner ( " .. szSpawnerName .. ") isn't found in this encounter!" ) - return - end - - if hSpawner.schedule == nil then - print( "ERROR: StartSpawnerSchedule: Spawner ( " .. szSpawnerName .. ") doesn't have a specified schedule!" ) - return - end - - if hSpawner.schedule.bWaitingForTrigger == true then - hSpawner.schedule.flDelay = flDelay - return - end - - hSpawner.schedule.flStartTime = GameRules:GetGameTime() + flDelay - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GenerateSpawnFocusPath( szSpawnerName, flSpeed, flDesiredRadiusInput, flMaxTime ) - - -- For portal spawner V2s, we want to force the player to move through the space. - -- We do this by moving the region where portals are more likely to appear - local hSpawner = self:GetPortalSpawnerV2( szSpawnerName ) - if hSpawner == nil then - print( "ERROR: GenerateSpawnFocusPath: Spawner ( " .. szSpawnerName .. ") isn't found in encounter " .. self.szEncounterName ) - return nil - end - - -- If they didn't specify a max time, but we have a schedule, figure it out automatically - if flMaxTime == nil or flMaxTime <= 0 then - if hSpawner.schedule == nil then - print( "ERROR: GenerateSpawnFocusPath: Didn't specify duration for " .. szSpawnerName .. " in encounter " .. self.szEncounterName ) - return nil - end - flMaxTime = hSpawner.schedule.waveSchedule[ #hSpawner.schedule.waveSchedule ].Time - end - - local spawnFocusPath = - { - flRadius = flDesiredRadiusInput, - vecPathNodes = {} - } - - local flMaxDist = flMaxTime * flSpeed - local flCurrDist = 0 - local flTime = 0 - local vLastPos = nil - while flCurrDist < flMaxDist do - - local vecSpawnPositions = deepcopy( hSpawner:GetSpawnPositions() ) - local nIndex = math.random( 1, #vecSpawnPositions ) - while #vecSpawnPositions > 1 and vLastPos ~= nil and - ( ( vecSpawnPositions[nIndex]:GetAbsOrigin() - vLastPos ):Length2D() < flDesiredRadiusInput ) do - table.remove( vecSpawnPositions, nIndex ) - nIndex = math.random( 1, #vecSpawnPositions ) - end - - local bIdenticalPoint = false - local vNewPos = vecSpawnPositions[nIndex]:GetAbsOrigin() - if vLastPos ~= nil then - local flDist = ( vNewPos - vLastPos ):Length2D() - flCurrDist = flCurrDist + flDist - flTime = flCurrDist / flSpeed - if flDist == 0 then - bIdenticalPoint = true - end - end - vLastPos = vNewPos - if bIdenticalPoint == false then - table.insert( spawnFocusPath.vecPathNodes, { Time = flTime, Position = vNewPos } ) - end - - end - - return spawnFocusPath -end - --------------------------------------------------------------------------------- - -function CMapEncounter:AssignSpawnFocusPath( szSpawnerName, spawnerFocusPathInput ) - - -- Try to find a spawner in all of the lists to spawn - local hSpawner = self:GetPortalSpawnerV2( szSpawnerName ) - - if hSpawner == nil then - print( "ERROR: AssignSpawnFocusPath: Spawner ( " .. szSpawnerName .. ") isn't found in this encounter!" ) - return - end - - if hSpawner.schedule == nil then - print( "ERROR: StartSpawnerSchedule: Spawner ( " .. szSpawnerName .. ") doesn't have a specified schedule!" ) - return - end - - hSpawner.schedule.spawnFocusPath = spawnerFocusPathInput - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:ComputeSpawnFocusPosition( spawnFocusPath, flTime ) - - for i=1,#spawnFocusPath.vecPathNodes do - if flTime < spawnFocusPath.vecPathNodes[i].Time then - if i == 1 then - return spawnFocusPath.vecPathNodes[i].Position - end - - -- Lerp - local prev = spawnFocusPath.vecPathNodes[i-1] - local next = spawnFocusPath.vecPathNodes[i] - local t = ( flTime - prev.Time ) / ( next.Time - prev.Time ) - local vDelta = next.Position - prev.Position - local v = Vector( prev.Position.x + vDelta.x * t, prev.Position.y + vDelta.y * t, prev.Position.z + vDelta.z * t ) - return v - end - end - - return spawnFocusPath.vecPathNodes[#spawnFocusPath.vecPathNodes].Position -end - --------------------------------------------------------------------------------- - -function CMapEncounter:ComputeUnitsSpawnedBySchedule( hSpawner ) - - if hSpawner.schedule == nil then - return 0 - end - - local nCount = 0 - - local nUnitsPerPortal = hSpawner:GetSpawnCountPerSpawnPosition() - local nSpawnPositionCount = hSpawner:GetSpawnPositionCount() - - for j=1,#hSpawner.schedule.waveSchedule do - local wave = hSpawner.schedule.waveSchedule[j] - local nWaveCount = wave.Count - if nWaveCount == nil or nWaveCount <= 0 then - nWaveCount = nSpawnPositionCount - end - nCount = nCount + nWaveCount * nUnitsPerPortal - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetMaxSpawnedUnitCount() - - local nCount = 0 - - for _,Spawner in pairs ( self.Spawners ) do - nCount = nCount + self:ComputeUnitsSpawnedBySchedule( Spawner ) - end - - for _,PortalSpawner in pairs ( self.PortalSpawnersV2 ) do - nCount = nCount + self:ComputeUnitsSpawnedBySchedule( PortalSpawner ) - end - - for _,PortalSpawner in pairs ( self.PortalSpawners ) do - for _,rgUnitInfo in pairs ( PortalSpawner.rgUnitsInfo ) do - nCount = nCount + ( rgUnitInfo.Count * PortalSpawner:GetNumSpawnsRemaining() ) - end - end - - return nCount -end - --------------------------------------------------------------------------------- - -function CMapEncounter:MustKillForEncounterCompletion( hEnemyCreature ) - return true -end - ---------------------------------------------------------- - -function CMapEncounter:SuppressRewardsOnDeath( hEnemyCreature ) - hEnemyCreature.bSuppressRewardsOnDeath = true -end - ---------------------------------------------------------- - -function CMapEncounter:AddAscensionAbilities( hEnemyCreature ) - - if hEnemyCreature:IsBuilding() == true then - return - end - - if hEnemyCreature:GetUnitName() == "npc_dota_explosive_barrel" then - return - end - - local nAbilityLevel = self:GetRoom():GetEliteRank() + GameRules.Aghanim:GetAscensionLevel() - - local bIsGlobal = IsGlobalAscensionCaster( hEnemyCreature ) - - -- Ascension abilities make creatures harder. - -- ability_ascension is always granted and just deals with generic attributes like damage - -- The other abilities are more flavorful and specific and may be randomly selected - -- We must level it up once since all other abilities already were levelled on spawn - -- For the stats - if bIsGlobal == false then - local hAbility = hEnemyCreature:AddAbility( "ability_ascension" ) - hAbility:UpgradeAbility( true ) - - -- Bosses do not use ascension modifiers, but do want general ascension scaling for their minions. - if self.hRoom:GetType() == ROOM_TYPE_BOSS then - if nAbilityLevel > 0 then - hEnemyCreature:CreatureLevelUp( nAbilityLevel ) - end - return - end - end - - for i=1,#self.AscensionAbilities do - - local abilityInfo = ASCENSION_ABILITIES[ self.AscensionAbilities[i] ] - local nAbilityType = abilityInfo.nType - if nAbilityType == nil then - nAbilityType = ASCENSION_ABILITY_CAPTAINS_ONLY - end - - local bRequiresGlobal = ( nAbilityType == ASCENSION_ABILITY_GLOBAL ) - if bIsGlobal ~= bRequiresGlobal then - goto continue - end - - local bIsCaptain = hEnemyCreature:IsConsideredHero() or hEnemyCreature:IsBoss() - - if nAbilityType == ASCENSION_ABILITY_CAPTAINS_ONLY and bIsCaptain == false then - goto continue - elseif nAbilityType == ASCENSION_ABILITY_NON_CAPTAINS_ONLY and bIsCaptain == true then - goto continue - end - - --print( "Ascension adding ability " .. self.AscensionAbilities[i] .. " to unit " .. hEnemyCreature:GetUnitName() ) - hAbility = hEnemyCreature:AddAbility( self.AscensionAbilities[i] ) - hAbility:UpgradeAbility( true ) - - -- This is the glue that causes these abilities to autocast, but passive abilities don't need to do this - if IsServer() and bitand( hAbility:GetBehavior(), DOTA_ABILITY_BEHAVIOR_PASSIVE ) == 0 then - - -- This makes the global abilities not just autostart - if bIsGlobal then - hAbility:StartCooldown( -1 ) - end - - local kv = - { - cast_behavior = abilityInfo.nCastBehavior, - target_type = abilityInfo.nTargetType, - health_percent = abilityInfo.flHealthPercent, - range = abilityInfo.nRange, - } - - if kv.cast_behavior == nil then - kv.cast_behavior = ASCENSION_CAST_WHEN_COOLDOWN_READY - end - if kv.target_type == nil then - kv.target_type = ASCENSION_TARGET_NO_TARGET - end - if kv.health_percent == nil then - kv.health_percent = 25 - end - - hEnemyCreature:AddNewModifier( hEnemyCreature, hAbility, "modifier_passive_autocast", kv ) - end - - ::continue:: - end - - if nAbilityLevel > 0 then - hEnemyCreature:CreatureLevelUp( nAbilityLevel ) - end -end - ---------------------------------------------------------- - -function CMapEncounter:OnEnemyCreatureSpawned( hEnemyCreature ) - - if hEnemyCreature.Encounter ~= nil then - return - end - - -- Remove normal last hit gold / xp - hEnemyCreature:SetMinimumGoldBounty( 0 ) - hEnemyCreature:SetMaximumGoldBounty( 0 ) - hEnemyCreature:SetDeathXP( 0 ) - - -- Filter out creatures that aren't really creatures - if hEnemyCreature:GetUnitName() == "npc_dota_explosive_barrel" then - self:SuppressRewardsOnDeath( hEnemyCreature ) - return - end - - hEnemyCreature.Encounter = self - - local bIsDummy = hEnemyCreature:GetUnitName() == "npc_dota_dummy_caster" - if not bIsDummy then - if hEnemyCreature:GetUnitName() ~= "npc_dota_creature_bonus_chicken" and hEnemyCreature:GetUnitName() ~= "npc_dota_creature_bonus_greevil" then - hEnemyCreature:AddNewModifier( hEnemyCreature, nil, "modifier_monster_leash", {} ) - end - self:AddAscensionAbilities( hEnemyCreature ) - end - - local bIsGlobal = IsGlobalAscensionCaster( hEnemyCreature ) - if not bIsGlobal and self:MustKillForEncounterCompletion( hEnemyCreature ) == true then - table.insert( self.SpawnedEnemies, hEnemyCreature ) - else - table.insert( self.SpawnedSecondaryEnemies, hEnemyCreature ) - self:SuppressRewardsOnDeath( hEnemyCreature ) - end - - if hEnemyCreature:IsConsideredHero() then - hEnemyCreature:AddNewModifier( hEnemyCreature, nil, "modifier_ability_cast_warning", kv ) - end -end - ---------------------------------------------------------- --- spawner_finished --- * spawner_name ---------------------------------------------------------- -function CMapEncounter:OnSpawnerFinished( hSpawner, hSpawnedUnits ) - - -- NOTE: This is called *after* OnEnemyCreatureSpawned, and will be called - -- On the same units. The difference is that OnEnemyCreatureSpawned is called - -- for secondary summoned units not spawned by the spawner also *and* - -- OnEnemyCreatureSpawned is called prior to OnSpawnerFinished - local bIsPortalTriggerUnit = ( self.szPortalTriggerSpawner ~= nil ) and ( self.szPortalTriggerSpawner == hSpawner:GetSpawnerName() ) - - for _,hSpawnedUnit in pairs ( hSpawnedUnits ) do - if hSpawnedUnit ~= nil then - hSpawnedUnit:SetRequiresReachingEndPath( true ) -- this ensures that our spawned dudes won't shut down while getting to their goal ent - - if bIsPortalTriggerUnit == true then - table.insert( self.SpawnedPortalTriggerUnits, hSpawnedUnit ) - end - end - end -end - ---------------------------------------------------------- - -function CMapEncounter:SetInitialGoalEntityToNearestHero( hSpawnedUnit ) - - local hNearestHero = nil - local flNearestDistance = 1000000 - for nPlayerID = 0, ( DOTA_MAX_TEAM_PLAYERS - 1 ) do - - if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero ~= nil and hPlayerHero:IsAlive() then - local flDist = ( hPlayerHero:GetAbsOrigin() - hSpawnedUnit:GetAbsOrigin() ):Length2D() - if flDist < flNearestDistance then - flDist = flNearestDistance - hNearestHero = hPlayerHero - end - end - end - - end - - if hNearestHero ~= nil then - hSpawnedUnit:SetInitialGoalEntity( hNearestHero ) - end - -end - ---------------------------------------------------------- --- Grants rewards for killing N units ---------------------------------------------------------- -function CMapEncounter:GrantRewardsForKill( hVictim, hAttacker, nUnitCount ) - - -- Distribute using fixed rewards - if hVictim.bSuppressRewardsOnDeath == nil or hVictim.bSuppressRewardsOnDeath == false then - - if self.bCalculateRewardsFromUnitCount and self.nMaxSpawnedUnitCount > 0 then - - if self.nRemainingXPFromEnemies > 0 then - - local nDeathXP = math.floor( nUnitCount * self.nTotalXPFromEnemies / self.nMaxSpawnedUnitCount ) - local nXPPerHero = math.min( self.nRemainingXPFromEnemies, nDeathXP ) - - local Heroes = HeroList:GetAllHeroes() - for _,Hero in pairs ( Heroes ) do - if Hero ~= nil and Hero:IsRealHero() and Hero:GetTeamNumber() == DOTA_TEAM_GOODGUYS then - Hero:AddExperience( nXPPerHero, DOTA_ModifyXP_CreepKill, false, true ) - end - end - self.nRemainingXPFromEnemies = math.max( 0, self.nRemainingXPFromEnemies - nXPPerHero ) - end - - if self.nRemainingGoldFromEnemies > 0 then - - local nMinGoldBounty = math.floor( 0.8 * self.nTotalGoldFromEnemies / self.nMaxSpawnedUnitCount ) - local nMaxGoldBounty = math.ceil( 1.2 * self.nTotalGoldFromEnemies / self.nMaxSpawnedUnitCount ) - local nGoldToDrop = 0 - for i = 1,nUnitCount do - nGoldToDrop = nGoldToDrop + math.random( nMinGoldBounty, nMaxGoldBounty ) - end - nGoldToDrop = math.min( self.nRemainingGoldFromEnemies, nGoldToDrop ) - nGoldToDrop = math.floor( nGoldToDrop * 100 / GOLD_BAG_DROP_PCT ) -- Make it so with the randomness, we get roughly what we expect - if math.random( 1, 100 ) <= GOLD_BAG_DROP_PCT and nGoldToDrop > 0 then - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( nGoldToDrop * AGHANIM_PLAYERS ) - local drop = CreateItemOnPositionSync( hVictim:GetAbsOrigin(), newItem ) - local dropTarget = hVictim:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ) - newItem:LaunchLoot( true, 150, 0.75, dropTarget ) - self.nRemainingGoldFromEnemies = self.nRemainingGoldFromEnemies - nGoldToDrop - end - end - - end - - -- Logic for nUnitsRemainingForRewardDrops makes it more likely - -- that we drop the lives and items the more units we kill - if self.nUnitsRemainingForRewardDrops >= 0 then - self.nUnitsRemainingForRewardDrops = self.nUnitsRemainingForRewardDrops - nUnitCount - self.nUnitsRemainingForRewardDrops = math.max( 0, self.nUnitsRemainingForRewardDrops ) - end - - local nEstimatedUnitCount = self.nUnitsRemainingForRewardDrops - if nEstimatedUnitCount <= 0 then - nEstimatedUnitCount = max( #self.SpawnedEnemies, 1 ) - end - - if self.nNumItemsToDrop > 0 then - local nPct = math.max( 100 / nEstimatedUnitCount, 1 ) - if RollPercentage( nPct ) then - self:DropNeutralItemFromUnit( hVictim, hAttacker, true ) - self.nNumItemsToDrop = self.nNumItemsToDrop - 1 - end - end - - if self.nNumBPToDrop > 0 then - local nPct = math.max( 100 / nEstimatedUnitCount, 1 ) - if RollPercentage( nPct ) then - self:DropCurrencyFromUnit( hVictim, hAttacker, RandomInt( BATTLE_POINT_MIN_DROP_VALUE, BATTLE_POINT_MAX_DROP_VALUE ), true, false ) - self.nNumBPToDrop = self.nNumBPToDrop - 1 - end - end - - if self.nNumFragmentsToDrop > 0 then - local nPct = math.max( 100 / nEstimatedUnitCount, 1 ) - if RollPercentage( nPct ) then - self:DropCurrencyFromUnit( hVictim, hAttacker, self:GetArcaneFragmentDropValue(), false, false ) - self.nNumFragmentsToDrop = self.nNumFragmentsToDrop - 1 - end - end - end - - -- Always drop potions, even if other rewards are suppressed - local nHealthPct = HEALTH_POTION_DROP_PCT - local nManaPct = MANA_POTION_DROP_PCT - if hVictim.bBossMinion ~= nil and hVictim.bBossMinion == true then - nHealthPct = nHealthPct * 2 - nManaPct = nManaPct * 2 - end - if RollPercentage( nHealthPct ) then - local newItem = CreateItem( "item_health_potion", nil, nil ) - newItem:SetPurchaseTime( 0 ) - if newItem:IsPermanent() and newItem:GetShareability() == ITEM_FULLY_SHAREABLE then - item:SetStacksWithOtherOwners( true ) - end - local drop = CreateItemOnPositionSync( hVictim:GetAbsOrigin(), newItem ) - local dropTarget = hVictim:GetAbsOrigin() + RandomVector( RandomFloat( 50, 350 ) ) - newItem:LaunchLoot( true, 300, 0.75, dropTarget ) - end - - if RollPercentage( nManaPct ) then - local newItem = CreateItem( "item_mana_potion", nil, nil ) - newItem:SetPurchaseTime( 0 ) - if newItem:IsPermanent() and newItem:GetShareability() == ITEM_FULLY_SHAREABLE then - item:SetStacksWithOtherOwners( true ) - end - local drop = CreateItemOnPositionSync( hVictim:GetAbsOrigin(), newItem ) - local dropTarget = hVictim:GetAbsOrigin() + RandomVector( RandomFloat( 50, 350 ) ) - newItem:LaunchLoot( true, 300, 0.75, dropTarget ) - end - -end - - ---------------------------------------------------------- --- entity_killed --- * entindex_killed --- * entindex_attacker --- * entindex_inflictor --- * damagebits ---------------------------------------------------------- - -function CMapEncounter:OnEntityKilled( event ) - local hVictim = nil - local hAttacker = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - if event.entindex_attacker ~= nil then - hAttacker = EntIndexToHScript( event.entindex_attacker ) - end - - if hVictim == nil then - return - end - - if hVictim:IsReincarnating() then - return - end - - if hVictim:IsCreature() then - - if hAttacker and hAttacker:IsOwnedByAnyPlayer() then - EmitSoundOnClient( "DarkMoonLastHit", hAttacker:GetPlayerOwner() ) - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticleForPlayer( "particles/dark_moon/darkmoon_last_hit_effect.vpcf", PATTACH_ABSORIGIN_FOLLOW, hVictim, hAttacker:GetPlayerOwner() ) ) - - GameRules.Aghanim:RegisterPlayerKillStat( hAttacker:GetPlayerOwnerID(), self.hRoom:GetDepth() ) - end - - if hVictim:IsConsideredHero() or hVictim:IsBoss() then - GameRules.Aghanim:GetAnnouncer():OnCreatureKilled( self, hVictim ) - end - - -- Distribute using fixed rewards - self:GrantRewardsForKill( hVictim, hAttacker, 1 ) - - end - - if self.szPortalTriggerSpawner ~= nil then - for k,hSpawnedEnemy in pairs ( self.SpawnedPortalTriggerUnits ) do - if hSpawnedEnemy == hVictim then - table.remove( self.SpawnedPortalTriggerUnits, k ) - end - end - if #self.SpawnedPortalTriggerUnits == 0 then - self:StartSpawningPortals() - end - end - - if hVictim.bSuppressRewardsOnDeath == nil or hVictim.bSuppressRewardsOnDeath == false then - for k,hSpawnedEnemy in pairs ( self.SpawnedEnemies ) do - if hSpawnedEnemy == hVictim then - self.nKilledEnemies = self.nKilledEnemies + 1 - table.remove( self.SpawnedEnemies, k ) - self:OnRequiredEnemyKilled( hAttacker, hVictim ) - --print( "Remaining enemies: " .. #self.SpawnedEnemies ) - end - end - else - for k,hSpawnedSecondaryEnemy in pairs ( self.SpawnedSecondaryEnemies ) do - if hSpawnedSecondaryEnemy == hVictim then - self.nKilledSecondaryEnemies = self.nKilledSecondaryEnemies + 1 - self:OnSecondaryEnemyKilled( hAttacker, hVictim ) - table.remove( self.SpawnedSecondaryEnemies, k ) - --print( "Remaining enemies: " .. #self.SpawnedEnemies ) - end - end - end - - -- TODO ---[[ if hVictim:IsBuilding() then - if hVictim:GetUnitName() == "npc_aghsfort_dark_portal" then - local nPortalsCountBefore = self:GetRemainingPortalCount() + 1 - for k,PortalSpawner in pairs ( self.PortalSpawners ) do - if PortalSpawner.Portal.hPortalEnt == hVictim then - if PortalSpawner.Portal.nWarningFX ~= nil then - ParticleManager:DestroyParticle( PortalSpawner.Portal.nWarningFX, false ) - PortalSpawner.Portal.nWarningFX = nil - end - if PortalSpawner.Portal.nAmbientFX ~= nil then - ParticleManager:DestroyParticle( PortalSpawner.Portal.nAmbientFX, false ) - PortalSpawner.Portal.nAmbientFX = nil - end - - StopSoundOn( "Hero_AbyssalUnderlord.DarkRift.Target", PortalSpawner.Portal.hPortalEnt ) - self.PortalSpawners[ PortalSpawner:GetSpawnerName() ] = nil - --table.remove( self.PortalSpawners, k ) - print( "Dark Portal killed!" ) - - else - if PORTAL_ESCALATION_ENABLED == true then - --local flPreviousInterval = PortalSpawner.Portal.flPortalInterval - --print( "flPreviousInterval: " .. flPreviousInterval ) - - --local flPct = 1 - ( 1 / nPortalsCountBefore ) - --print( "flPct: " .. flPct ) - - PortalSpawner.Portal.flPortalInterval = PortalSpawner.Portal.flPortalInterval - PORTAL_ESCALATION_RATE - print( "Setting new portal interval: " .. PortalSpawner.Portal.flPortalInterval ) - - --local flIntervalDiff = flPreviousInterval - PortalSpawner.Portal.flPortalInterval - PortalSpawner.Portal.flNextSpawnTime = PortalSpawner.Portal.flNextSpawnTime - PORTAL_ESCALATION_RATE - --print( "Speeding up next spawn time by " .. flIntervalDiff ) - end - end - end - end - end ---]] -end - ---------------------------------------------------------- - -function CMapEncounter:OnRequiredEnemyKilled( hAttacker, hVictim ) -end - ---------------------------------------------------------- - -function CMapEncounter:OnSecondaryEnemyKilled( hAttacker, hVictim ) -end - ---------------------------------------------------------- - -function CMapEncounter:OnPortalKilled( hVictim, hAttacker, nUnitCountSuppressed ) - local nCurrentValue = self:GetEncounterObjectiveProgress( "destroy_spawning_portals" ) - if nCurrentValue ~= -1 then - self:UpdateEncounterObjective( "destroy_spawning_portals", nCurrentValue + 1, nil ) - end -end - ---------------------------------------------------------- --- When portals are killed, determine the XP to drop ---------------------------------------------------------- - -function CMapEncounter:OnPortalV2Killed( hVictim, hAttacker, nUnitCountSuppressed ) - - if hVictim == nil then - return - end - - if nUnitCountSuppressed > 0 then - self:GrantRewardsForKill( hVictim, hAttacker, nUnitCountSuppressed ) - end - -end - --------------------------------------------------------------------------------- - --- trigger_start_touch --- > trigger_name - string --- > activator_entindex - short --- > caller_entindex- short - -function CMapEncounter:OnTriggerStartTouch( event ) - - local hUnit = EntIndexToHScript( event.activator_entindex ) - local hTriggerEntity = EntIndexToHScript( event.caller_entindex ) - - -- currently empty - -end - --------------------------------------------------------------------------------- - --- trigger_end_touch --- > trigger_name - string --- > activator_entindex - short --- > caller_entindex- short - -function CMapEncounter:OnTriggerEndTouch( event ) - -- currently empty -end - --------------------------------------------------------------------------------- - -function CMapEncounter:DropNeutralItemFromUnit( hVictim, hAttacker, bAnnounce ) - local hHero = hAttacker - if hHero == nil or hHero:IsNull() or hHero:IsRealHero() == false then - hHero = PlayerResource:GetSelectedHeroEntity( 0 ) - end - - if hHero == nil or hVictim == nil then - print( "ERROR, trying to drop neutral item without a valid hero and victim" ) - return - end - - local szItemDrop = GameRules.Aghanim:PrepareNeutralItemDrop( self.hRoom, false ) - if szItemDrop == nil then - return - end - - DropNeutralItemAtPositionForHero( szItemDrop, hVictim:GetAbsOrigin(), hHero, -1, true ) - -- local newItem = CreateItem( szItemDrop, nil, nil ) - -- newItem:SetPurchaseTime( 0 ) - - -- local drop = CreateItemOnPositionSync( hVictim:GetAbsOrigin(), newItem ) - -- local dropTarget = hVictim:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ) - -- newItem:LaunchLoot( false, 150, 0.75, dropTarget ) - - - -- if bAnnounce then - -- AddFOWViewer( DOTA_TEAM_GOODGUYS, dropTarget, 300.0, 10.0, false ) - -- MinimapEvent( DOTA_TEAM_GOODGUYS, hVictim, dropTarget.x, dropTarget.y, DOTA_MINIMAP_EVENT_HINT_LOCATION, 10.0 ) - -- EmitSoundOn( "NeutralLootDrop.TierComplete", hVictim ) - -- if hAttacker and hAttacker:IsOwnedByAnyPlayer() then - -- local gameEvent = {} - -- gameEvent["player_id"] = hAttacker:GetPlayerID() - -- gameEvent["teamnumber"] = DOTA_TEAM_GOODGUYS - -- gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_" .. szItemDrop - -- gameEvent["message"] = "#Aghanim_FoundItem" - -- FireGameEvent( "dota_combat_event_message", gameEvent ) - -- else - -- local gameEvent = {} - -- gameEvent["player_id"] = 0 --fixme - -- gameEvent["teamnumber"] = DOTA_TEAM_GOODGUYS - -- gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_" .. szItemDrop - -- gameEvent["message"] = "#Aghanim_FoundItem" - -- FireGameEvent( "dota_combat_event_message", gameEvent ) - -- end - -- end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:DropLifeRuneFromUnit( hVictim, hAttacker, bAnnounce ) - local newItem = CreateItem( "item_life_rune", nil, nil ) - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( 1 ) - local drop = CreateItemOnPositionSync( hVictim:GetAbsOrigin(), newItem ) - local dropTarget = hVictim:GetAbsOrigin() + RandomVector( RandomFloat( 125, 175 ) ) - newItem:LaunchLoot( false, 150, 0.75, dropTarget ) - - if bAnnounce then - AddFOWViewer( DOTA_TEAM_GOODGUYS, dropTarget, 300.0, 10.0, false ) - MinimapEvent( DOTA_TEAM_GOODGUYS, hVictim, dropTarget.x, dropTarget.y, DOTA_MINIMAP_EVENT_HINT_LOCATION, 10.0 ) - EmitSoundOn( "Rune.Bounty", hVictim ) - if hAttacker and hAttacker:IsOwnedByAnyPlayer() then - - local gameEvent = {} - gameEvent["player_id"] = hAttacker:GetPlayerID() - gameEvent["teamnumber"] = DOTA_TEAM_GOODGUYS - gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_item_life_rune" - gameEvent["message"] = "#Aghanim_FoundLifeRune" - FireGameEvent( "dota_combat_event_message", gameEvent ) - - else - - local gameEvent = {} - gameEvent["player_id"] = 0 - gameEvent["teamnumber"] = DOTA_TEAM_GOODGUYS - gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_item_life_rune" - gameEvent["message"] = "#Aghanim_FoundLifeRune" - FireGameEvent( "dota_combat_event_message", gameEvent ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:DropCurrencyFromUnit( hVictim, hAttacker, nPoints, bBattlePoints, bAnnounce ) - - -- Suppress drop if everyone has maxed out - if GameRules.Aghanim:CanPlayersAcceptCurrency( bBattlePoints ) == false then - return - end - - local newItem = nil - if bBattlePoints == true then - newItem = CreateItem( "item_battle_points", nil, nil ) - else - newItem = CreateItem( "item_arcane_fragments", nil, nil ) - end - - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( nPoints ) - local drop = CreateItemOnPositionSync( hVictim:GetAbsOrigin(), newItem ) - if bBattlePoints == true then - drop:SetMaterialGroup( "ti10" ) - else - drop:SetMaterialGroup( "arcane_fragment" ) - end - local dropTarget = hVictim:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ) - newItem:LaunchLoot( true, 150, 0.75, dropTarget ) - - -- if bAnnounce then - -- AddFOWViewer( DOTA_TEAM_GOODGUYS, dropTarget, 300.0, 10.0, false ) - -- MinimapEvent( DOTA_TEAM_GOODGUYS, hVictim, dropTarget.x, dropTarget.y, DOTA_MINIMAP_EVENT_HINT_LOCATION, 10.0 ) - -- EmitSoundOn( "Rune.Bounty", hVictim ) - -- if hAttacker and hAttacker:IsOwnedByAnyPlayer() then - - -- local gameEvent = {} - -- gameEvent["player_id"] = hAttacker:GetPlayerID() - -- gameEvent["teamnumber"] = DOTA_TEAM_GOODGUYS - -- gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_item_life_rune" - -- gameEvent["message"] = "#Aghanim_FoundLifeRune" - -- FireGameEvent( "dota_combat_event_message", gameEvent ) - - -- else - - -- local gameEvent = {} - -- gameEvent["player_id"] = 0 - -- gameEvent["teamnumber"] = DOTA_TEAM_GOODGUYS - -- gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_item_life_rune" - -- gameEvent["message"] = "#Aghanim_FoundLifeRune" - -- FireGameEvent( "dota_combat_event_message", gameEvent ) - -- end - -- end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:DropItemFromRoomRewardContainer( hContainer, szItemName, bAnnounce ) - for szNeutralItem,v in pairs ( PRICED_ITEM_REWARD_LIST ) do - if szNeutralItem == szItemName then - DropNeutralItemAtPositionForHero( szItemName, hContainer:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ), PlayerResource:GetSelectedHeroEntity( 0 ), -1, true ) - return - end - end - - local newItem = CreateItem( szItemName, nil, nil ) - newItem:SetPurchaseTime( 0 ) - - local drop = CreateItemOnPositionSync( hContainer:GetAbsOrigin(), newItem ) - local dropTarget = hContainer:GetAbsOrigin() + RandomVector( RandomFloat( 50, 150 ) ) - newItem:LaunchLoot( false, 150, 0.75, dropTarget ) - - if bAnnounce then - AddFOWViewer( DOTA_TEAM_GOODGUYS, dropTarget, 300.0, 10.0, false ) - MinimapEvent( DOTA_TEAM_GOODGUYS, hContainer, dropTarget.x, dropTarget.y, DOTA_MINIMAP_EVENT_HINT_LOCATION, 10.0 ) - EmitSoundOn( "NeutralLootDrop.TierComplete", hContainer ) - - local gameEvent = {} - gameEvent["player_id"] = 0 --fixme - gameEvent["teamnumber"] = DOTA_TEAM_GOODGUYS - gameEvent["locstring_value"] = "#DOTA_Tooltip_Ability_" .. szItemDrop - gameEvent["message"] = "#Aghanim_FoundConsumableItem" - FireGameEvent( "dota_combat_event_message", gameEvent ) - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:DestroyRemainingSpawnedUnits() - - for k, hSpawner in pairs( self.Spawners ) do - self.Spawners[k] = nil - end - - for k, hPortalSpawner in pairs ( self.PortalSpawners ) do - hPortalSpawner:DestroyPortal( true ) - self.PortalSpawners[k] = nil - end - - for k,hSpawnedEnemy in pairs ( self.SpawnedEnemies ) do - UTIL_Remove( hSpawnedEnemy ) - self.SpawnedEnemies[k] = nil - end - - for k,hSpawnedEnemy in pairs ( self.SpawnedSecondaryEnemies ) do - UTIL_Remove( hSpawnedEnemy ) - self.SpawnedSecondaryEnemies[k] = nil - end - - for k, hBreakable in pairs ( self.SpawnedBreakables ) do - UTIL_Remove( hBreakable ) - self.SpawnedBreakables[ k ] = nil - end - - for k, hExplosiveBarrel in pairs ( self.SpawnedExplosiveBarrels ) do - UTIL_Remove( hExplosiveBarrel ) - self.SpawnedExplosiveBarrels[ k ] = nil - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:FindEncounterEndLocator() - - local hExitLocatorList = self:GetRoom():FindAllEntitiesInRoomByName( "encounter_end_locator", false ) - if #hExitLocatorList == 0 then - return nil - end - - return hExitLocatorList[1] -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SpawnEndLevelEntities() - - self.bHasSpawnedEndLevelEntities = true - - local vExitTemplate = Entities:FindByName( nil, "encounter_end_template" ) - if vExitTemplate == nil then - print( "Unable to find encounter_end_template\n" ) - return - end - - local hExitLocator = self:FindEncounterEndLocator() - if hExitLocator == nil then - return - end - - local vExitLocation = hExitLocator:GetAbsOrigin() - local vSpawnLocation = Vector( vExitLocation.x, vExitLocation.y, GetGroundHeight( vExitLocation, nil ) ) - vExitTemplate:SetAbsOrigin( vSpawnLocation ) - vExitTemplate:ForceSpawn() - - --meh - local nDepth = self.hRoom:GetDepth() - - for _,hTemplateEnt in pairs ( vExitTemplate:GetSpawnedEntities() ) do - if hTemplateEnt:GetName() == "room_reward_spawn" then - self.vRoomRewardCratePos = hTemplateEnt:GetAbsOrigin() - end - if nDepth == 6 or nDepth == 11 or nDepth == 13 or nDepth == 17 then - if hTemplateEnt:GetName() == "shop" or hTemplateEnt:GetName() == "shop_trigger" or hTemplateEnt:GetName() == "shop_obstruction" or hTemplateEnt:GetName() == "shop_particles" or hTemplateEnt:GetName() == "neutral_stash" then - UTIL_Remove( hTemplateEnt ) - end - end - end - - if self.hRoom:HasCrystal() then - local hCrystal = CreateUnitByName( "npc_dota_story_crystal", self.vRoomRewardCratePos + Vector( 0, 350, 0 ), true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hCrystal ~= nil then - print( "spawned story crystal" ) - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:ResetHeroState() - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - if HEAL_ON_ENCOUNTER_COMPLETE then - if not hPlayerHero:IsAlive() then - local vLocation = hPlayerHero:GetOrigin() - if self.hRoom:GetType() == ROOM_TYPE_TRAPS then - local hExitLocator = self:FindEncounterEndLocator() - if hExitLocator == nil then - return - else - vLocation = hExitLocator:GetAbsOrigin() - end - end - - hPlayerHero:RespawnHero( false, false ) - FindClearSpaceForUnit( hPlayerHero, vLocation, true ) - CenterCameraOnUnit( nPlayerID, hPlayerHero ) - end - - -- PositiveBuffs, NegativeBuffs, FrameOnly, RemoveStuns, RemoveExceptions - hPlayerHero:Purge( false, true, false, true, false ) - --结束奖励 - -- make the players invulnerable for a few seconds after winning - just generally protecting them from stuff that might be lingering in the room - hPlayerHero:AddNewModifier( hPlayerHero, nil, "modifier_invulnerable", { duration = 5 } ) - - hPlayerHero:SetHealth( hPlayerHero:GetMaxHealth() ) - hPlayerHero:SetMana( hPlayerHero:GetMaxMana() ) - end - - for i = 0,DOTA_MAX_ABILITIES-1 do - local hAbility = hPlayerHero:GetAbilityByIndex( i ) - if hAbility and hAbility:IsRefreshable() then - hAbility:SetFrozenCooldown( false ) - hAbility:EndCooldown() - hAbility:RefreshCharges() - end - end - - --for j = 0,DOTA_ITEM_INVENTORY_SIZE-1 do - local j = DOTA_ITEM_TP_SCROLL - local hItem = hPlayerHero:GetItemInSlot( j ) - if hItem then - if hItem:GetAbilityName() == "item_bottle" then - local nMaxCharges = hItem:GetSpecialValueFor( "max_charges" ) - --print( "filling bottle: current charges = " .. hItem:GetCurrentCharges() .. ". Max Charges = " .. nMaxCharges .. ". Restoring up to " .. AGHANIM_ENCOUNTER_BOTTLE_CHARGES ) - hItem:SetCurrentCharges( math.min( hItem:GetCurrentCharges() + AGHANIM_ENCOUNTER_BOTTLE_CHARGES, nMaxCharges ) ) - elseif hItem:IsRefreshable() then - hItem:SetFrozenCooldown( false ) - hItem:EndCooldown() - end - end - --end - - local hNeutralItem = hPlayerHero:GetItemInSlot( DOTA_ITEM_NEUTRAL_SLOT ) - if hNeutralItem and hNeutralItem:IsRefreshable() then - hNeutralItem:SetFrozenCooldown( false ) - hNeutralItem:EndCooldown() - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/items2_fx/refresher.vpcf", PATTACH_CUSTOMORIGIN, hPlayerHero ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hPlayerHero, PATTACH_POINT_FOLLOW, "attach_hitloc", hPlayerHero:GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - end - end -end - --------------------------------------------------------------------------------- - -function CMapEncounter:AddRewardItemsToCrate( hRewardCrate, bDebug ) - - local bHardRoom = ( self.hRoom:GetEliteRank() > 0 ) - if self.hRoom:GetRoomChoiceReward() == "REWARD_TYPE_EXTRA_LIVES" then - if bDebug == true then - return - end - - local nNumLives = 2 - if bHardRoom then - nNumLives = 4 - end - for i=1,nNumLives do - table.insert( hRewardCrate.RoomReward, "item_life_rune" ) - end - end - - if self.hRoom:GetRoomChoiceReward() == "REWARD_TYPE_GOLD" then - if bDebug == true then - -- Can't do this here since it'll drop at the final depth value - return - end - for i=1,AGHANIM_PLAYERS do - table.insert( hRewardCrate.RoomReward, "item_bag_of_gold" ) - end - end - - if self.hRoom:GetRoomChoiceReward() == "REWARD_TYPE_TREASURE" then - local nTier = 1 - if bHardRoom then - nTier = 2 - end - - table.insert( hRewardCrate.RoomReward, "item_tome_of_greater_knowledge" ) - - for nItem=1,nTier do - local szItemName = GameRules.Aghanim:PrepareNeutralItemDrop( self.hRoom, bHardRoom ) - if szItemName ~= nil then - table.insert( hRewardCrate.RoomReward, szItemName ) - end - end - - local vecItems = TREASURE_REWARDS[ nTier ] - for i = 1, NUM_CONSUMABLES_FROM_ROOM_REWARD do - table.insert( hRewardCrate.RoomReward, vecItems[ self:RoomRandomInt( 1, #vecItems ) ] ) - end - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:CreateRewardCrate() - - if self.hRoom:GetRoomChoiceReward() == nil or self.nGoldReward == 0 then - return - end - - local hDebugRoom = GameRules.Aghanim:GetTestEncounterDebugRoom() - if hDebugRoom ~= nil then - self:AddRewardItemsToCrate( GameRules.Aghanim.debugItemsToStuffInCrate, true ) - end - - local hRewardCrate = CreateUnitByName( "npc_treasure_chest", self.vRoomRewardCratePos, true, nil, nil, DOTA_TEAM_GOODGUYS ) - if hRewardCrate == nil then - return - end - - hRewardCrate:SetAbsAngles( 0, 270, 0 ) - hRewardCrate.CommonItems = {} - hRewardCrate.fCommonItemChance = 0.0 - hRewardCrate.RareItems = {} - hRewardCrate.fRareItemChance = {} - hRewardCrate.nMinGold = 0 - hRewardCrate.nMaxGold = 0 - hRewardCrate.fGoldChance = 0 - if bHardRoom then - hRewardCrate:SetModelScale( 4.0 ) - else - hRewardCrate:SetModelScale( 2.0 ) - end - hRewardCrate.Encounter = self - hRewardCrate.RoomReward = {} - hRewardCrate.nDepth = self.hRoom:GetDepth() - hRewardCrate.nEliteRank = self.hRoom:GetEliteRank() - self:AddRewardItemsToCrate( hRewardCrate, false ) - - if self.hRoom:GetType() == ROOM_TYPE_ENEMY then - local nNumItemsToDrop = self.nNumItemsToDrop - if ( nNumItemsToDrop == 0 ) and GameRules.Aghanim:GetTestEncounterDebugRoom() ~= nil then - nNumItemsToDrop = GameRules.Aghanim:RollRandomNeutralItemDrops() - end - - if nNumItemsToDrop > 0 then - for i=1,nNumItemsToDrop do - local szItemName = GameRules.Aghanim:PrepareNeutralItemDrop( self.hRoom, false ) - if szItemName ~= nil then - print( "adding " .. szItemName .. " to reward crate" ) - table.insert( hRewardCrate.RoomReward, szItemName ) - end - end - end - - -- Spawn any un-dropped BPs - if self.nNumBPToDrop > 0 then - for i=1,self.nNumBPToDrop do - self:DropCurrencyFromUnit( hRewardCrate, hRewardCrate, RandomInt( BATTLE_POINT_MIN_DROP_VALUE, BATTLE_POINT_MAX_DROP_VALUE ), true, false ) - end - end - end - - if self.hRoom:GetType() == ROOM_TYPE_ENEMY or self.hRoom:GetType() == ROOM_TYPE_TRAPS then - -- Spawn any un-dropped Arcance Fragments - if self.nNumFragmentsToDrop > 0 then - print( "WARNING! Number of random Arcane Fragment Drops is not 0 at the end of the round! Dropping at exit locator. This is ok for TRAP ROOMS!" ) - for i=1,self.nNumFragmentsToDrop do - self:DropCurrencyFromUnit( hRewardCrate, hRewardCrate, self:GetArcaneFragmentDropValue(), false, false ) - end - end - end - - -- Stuff items we would have dropped during winning encounters into this crate - if GameRules.Aghanim:GetTestEncounterDebugRoom() == nil and GameRules.Aghanim.debugItemsToStuffInCrate ~= nil then - for i = 1,#GameRules.Aghanim.debugItemsToStuffInCrate.RoomReward do - print( GameRules.Aghanim.debugItemsToStuffInCrate.RoomReward[i] ) - table.insert( hRewardCrate.RoomReward, GameRules.Aghanim.debugItemsToStuffInCrate.RoomReward[i] ) - end - GameRules.Aghanim.debugItemsToStuffInCrate = nil - end - -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetArcaneFragmentDropValue() - local fPoints = ENCOUNTER_DEPTH_ARCANE_FRAGMENTS[ self.hRoom:GetDepth() ] - --print( 'CMapEncounter:GetArcaneFragmentDropValue() - base value: ' .. fPoints ) - - local fDropEV = GameRules.Aghanim:GetFragmentDropEV() - fPoints = fPoints / fDropEV - --print( 'CMapEncounter:GetArcaneFragmentDropValue() - modified by drop EV to ' .. fPoints ) - - local fMultiplier = ARCANE_FRAGMENT_DIFFICULTY_MODIFIERS[ GameRules.Aghanim:GetAscensionLevel() + 1 ] - fPoints = fPoints * fMultiplier - --print( 'CMapEncounter:GetArcaneFragmentDropValue() - modified by Ascension multiplier: ' .. fMultiplier .. '. result is: ' .. fPoints ) - - --print( 'CMapEncounter:GetArcaneFragmentDropValue() - adding variance +/-: ' .. ARCANE_FRAGMENT_DROP_VALUE_VARIANCE ) - - local fLow = fPoints - (fPoints * ARCANE_FRAGMENT_DROP_VALUE_VARIANCE) - local fHigh = fPoints + (fPoints * ARCANE_FRAGMENT_DROP_VALUE_VARIANCE) - --print( 'CMapEncounter:GetArcaneFragmentDropValue() - adding variance between: ' .. fLow .. ' and: ' .. fHigh ) - - fPoints = RandomFloat( fLow, fHigh ) - --print( 'CMapEncounter:GetArcaneFragmentDropValue() - rolled ' .. fPoints ) - - fPoints = math.ceil( fPoints * ARCANE_FRAGMENT_DROP_VALUE ) - --print( 'CMapEncounter:GetArcaneFragmentDropValue() - trimmed down by drop EV: ' .. ARCANE_FRAGMENT_DROP_VALUE .. ' and rounded to: ' .. fPoints ) - - return fPoints -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GenerateRewards() - - if self.bHasGeneratedRewards == true then - return - end - - local bHardRoom = ( self.hRoom:GetEliteRank() > 0 ) or ( self.hRoom:GetType() == ROOM_TYPE_TRAPS ) - - local nBPReward = ENCOUNTER_DEPTH_BATTLE_POINTS[ self.hRoom:GetDepth() ] - nBPReward = nBPReward * BATTLE_POINT_DIFFICULTY_MODIFIERS[ GameRules.Aghanim:GetAscensionLevel() + 1 ] - - local nArcaneFragmentsReward = ENCOUNTER_DEPTH_ARCANE_FRAGMENTS[ self.hRoom:GetDepth() ] - - --print( 'CMapEncounter:GenerateRewards() - base Arcane Fragment reward: ' .. nArcaneFragmentsReward ) - - -- only reward a percentage of the points since the rest is given as drops - if self.hRoom:GetType() == ROOM_TYPE_ENEMY or self.hRoom:GetType() == ROOM_TYPE_TRAPS then - nArcaneFragmentsReward = nArcaneFragmentsReward * ARCANE_FRAGMENT_ROOM_CLEAR_VALUE - --print( 'CMapEncounter:GenerateRewards() - reducing room clear reward to: ' .. nArcaneFragmentsReward ) - end - - -- scale the reward by the difficulty of the run. - local fMultiplier = ARCANE_FRAGMENT_DIFFICULTY_MODIFIERS[ GameRules.Aghanim:GetAscensionLevel() + 1 ] - nArcaneFragmentsReward = nArcaneFragmentsReward * fMultiplier - --print( 'CMapEncounter:GenerateRewards() - Arcane Fragment reward increased by ' .. fMultiplier .. ' for Ascension. new reward: ' .. nArcaneFragmentsReward ) - nArcaneFragmentsReward = math.ceil( nArcaneFragmentsReward ) - --print( 'CMapEncounter:GenerateRewards() - Arcane Fragment reward rounded up to ' .. nArcaneFragmentsReward ) - - local vecBPRewards = {} - if nBPReward > 0 then - vecBPRewards = GameRules.Aghanim:GrantAllPlayersPoints( nBPReward, true, "completing " .. self.szEncounterName .. " at depth " .. tostring( self.hRoom:GetDepth() ) ) - end - - local vecArcaneFragmentRewards = {} - if nArcaneFragmentsReward > 0 then - vecArcaneFragmentRewards = GameRules.Aghanim:GrantAllPlayersPoints( nArcaneFragmentsReward, false, "completing " .. self.szEncounterName .. " at depth " .. tostring( self.hRoom:GetDepth() ) ) - end - - self:CreateRewardCrate() - - local RewardOptions = {} - CustomNetTables:SetTableValue( "reward_options", "current_depth", { tostring(self.hRoom:GetDepth()) } ) - - -- certain abilities (like auras) we want to prevent being rolled more than once by the party as a whole - local vecAbilityNamesToExclude = {} - - local nXPReward = self.nXPReward + self.nRemainingXPFromEnemies - local nGoldReward = self.nGoldReward + self.nRemainingGoldFromEnemies - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:AddExperience( nXPReward, DOTA_ModifyXP_Unspecified, false, true ) - PlayerResource:ModifyGold( nPlayerID, nGoldReward, true, DOTA_ModifyGold_Unspecified ) - end - - for _,szAbilityName in pairs( GetPlayerAbilitiesAndItems( nPlayerID ) ) do - if string.match( szAbilityName, "aghsfort_aura" ) or string.match( szAbilityName, "aghsfort_tempbuff" ) then - table.insert( vecAbilityNamesToExclude, szAbilityName ) - end - end - end - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local vecPlayerRewards = GetRoomRewards( self.hRoom:GetDepth(), self.hRoom:GetType(), bHardRoom, nPlayerID, vecAbilityNamesToExclude ) - RewardOptions[ tostring(nPlayerID) ] = vecPlayerRewards; - --print( "CMapEncounter:GenerateRewards - Sending rewards to player id " .. nPlayerID .. " for encounter " .. self.szEncounterName ) - --DeepPrintTable( vecPlayerRewards ) - end - - - -- figure out the overall rarity of the rewards for the main block of the reward panel - local szRarity = "common" - if bHardRoom then - szRarity = "elite" - end - if self.hRoom:GetType() == ROOM_TYPE_BOSS or self.hRoom:GetDepth() == 1 then - szRarity = "epic" - end - - if TableLength(RewardOptions) > 0 then - RewardOptions[ "battle_points" ] = vecBPRewards - RewardOptions[ "arcane_fragments" ] = vecArcaneFragmentRewards - RewardOptions[ "xp" ] = nXPReward - RewardOptions[ "gold" ] = nGoldReward - RewardOptions[ "rarity" ] = szRarity - - --printf("sending reward options") - --DeepPrintTable( RewardOptions ) - CustomNetTables:SetTableValue( "reward_options", tostring(self.hRoom:GetDepth()), RewardOptions ) - end - - self.bHasGeneratedRewards = true -end - --------------------------------------------------------------------------------- - -function CMapEncounter:HasStarted() - return self.flStartTime ~= -1 -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetStartTime() - return self.flStartTime -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetRoom() - return self.hRoom -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetSpawners() - return self.Spawners -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetPortalSpawners() - return self.PortalSpawners -end - - --------------------------------------------------------------------------------- - -function CMapEncounter:GetRemainingPortalCount() - - local nPortals = 0 - - if self.PortalSpawners ~= nil then - for _,hPortalSpawner in pairs ( self.PortalSpawners ) do - if hPortalSpawner and hPortalSpawner:IsDestroyed() == false then - nPortals = nPortals + 1 - end - end - end - - if self.PortalSpawnersV2 ~= nil then - for _,hPortalSpawner in pairs ( self.PortalSpawnersV2 ) do - if hPortalSpawner ~= nil then - nPortals = nPortals + hPortalSpawner:GetPortalUnitCount() - end - end - end - - return nPortals -end - --------------------------------------------------------------------------------- - -function CMapEncounter:HasAnyPortals() - return self:GetRemainingPortalCount() > 0 -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetSpawner( szSpawnerName ) - return self.Spawners[szSpawnerName] -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetPortalSpawner( szSpawnerName ) - return self.PortalSpawners[szSpawnerName] -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetPortalSpawnerV2( szSpawnerName ) - return self.PortalSpawnersV2[szSpawnerName] -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetDepth() - return self.hRoom:GetDepth() -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetTotalGoldRewardPerPlayer() - return ENCOUNTER_DEPTH_GOLD_REWARD[self:GetDepth()] -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetTotalXPRewardPerPlayer() - return ENCOUNTER_DEPTH_XP_REWARD[self:GetDepth()] -end - --------------------------------------------------------------------------------- --- If this is true, the gold and XP rewards from killing an enemy will be --- distrubuted evenly amongst the total enemy count. If false, use the --- values from the unit data. --------------------------------------------------------------------------------- - -function CMapEncounter:SetCalculateRewardsFromUnitCount( bCalculate ) - self.bCalculateRewardsFromUnitCount = bCalculate -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetPreviewUnit() - return nil -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetName() - return self.szEncounterName -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetRetreatPoints() - return self.RetreatPoints -end - ----------------------------------------------------------------------- - -function CMapEncounter:HasRemainingEnemies() - return #self.SpawnedEnemies > 0 -end - ----------------------------------------------------------------------- - -function CMapEncounter:GetSpawnedUnits() - return self.SpawnedEnemies -end - ---------------------------------------------------------- - -function CMapEncounter:GetSpawnedSecondaryUnits() - return self.SpawnedSecondaryEnemies -end - ---------------------------------------------------------- - -function CMapEncounter:GetSpawnedUnitsOfType( szUnitName ) - - local hUnits = {} - - for i=1,#self.SpawnedEnemies do - - if self.SpawnedEnemies[i] ~= nil and self.SpawnedEnemies[i]:GetUnitName() == szUnitName then - table.insert( hUnits, self.SpawnedEnemies[i] ) - end - - end - - return hUnits -end - --------------------------------------------------------------------------------- - -function CMapEncounter:Dev_ForceCompleteEncounter() - self.bDevForceCompleted = true -end - --------------------------------------------------------------------------------- - -function CMapEncounter:GetAghanimSummon() - return self:GetPreviewUnit() -end - --------------------------------------------------------------------------------- - -function CMapEncounter:SetupBristlebackShop( bRepopulateNeutralItems ) - if bRepopulateNeutralItems then - local vecPricedItems1 = GetPricedNeutralItems( self.hRoom:GetDepth() - 1, false ) - local vecPricedItems2 = GetPricedNeutralItems( self.hRoom:GetDepth() - 2, false ) - - for _,szLessItem in pairs ( vecPricedItems1 ) do - local bFound = false - for _,szThisDepthItem in pairs ( vecPricedItems2 ) do - if szThisDepthItem == szLessItem then - bFound = true - break - end - end - - if not bFound then - table.insert( vecPricedItems2, szLessItem ) - end - end - - local vecFilteredItems = GameRules.Aghanim:FilterPreviouslyDroppedItems( vecPricedItems1 ) - - for nItem = #GameRules.Aghanim.BristlebackItems,1,-1 do - local szPreviousItemName = GameRules.Aghanim.BristlebackItems[ nItem ] - GameRules:GetGameModeEntity():RemoveItemFromCustomShop( szPreviousItemName, "boss_shop" ) - end - - for i=1,8 do - local index = self:RoomRandomInt( 1, #vecFilteredItems ) - local szItemName = vecFilteredItems[ index ] - GameRules:GetGameModeEntity():AddItemToCustomShop( szItemName, "boss_shop", "2" ) - table.remove( vecFilteredItems, index ) - - table.insert( GameRules.Aghanim.BristlebackItems, szItemName ) - GameRules.Aghanim:MarkNeutralItemAsDropped( szItemName ) - end - end - - GameRules:IncreaseItemStock( DOTA_TEAM_GOODGUYS, "item_life_rune", AGHANIM_PLAYERS, -1 ) - GameRules:IncreaseItemStock( DOTA_TEAM_GOODGUYS, "item_book_of_strength", AGHANIM_PLAYERS, -1 ) - GameRules:IncreaseItemStock( DOTA_TEAM_GOODGUYS, "item_book_of_agility", AGHANIM_PLAYERS, -1 ) - GameRules:IncreaseItemStock( DOTA_TEAM_GOODGUYS, "item_book_of_intelligence", AGHANIM_PLAYERS, -1 ) - - local hBristleEnts = self:GetRoom():FindAllEntitiesInRoomByName( "boss_shop" ) - for _,hEnt in pairs ( hBristleEnts ) do - if hEnt:GetClassname() == "ent_dota_shop" then - local szWearables = - { - "models/heroes/bristleback/bristleback_back.vmdl", - "models/heroes/bristleback/bristleback_bracer.vmdl", - "models/heroes/bristleback/bristleback_head.vmdl", - "models/heroes/bristleback/bristleback_necklace.vmdl", - } - - for _,szWearable in pairs ( szWearables ) do - local hWearable = Entities:CreateByClassname( "wearable_item" ) - if hWearable ~= nil then - hWearable:SetModel( szWearable ) - hWearable:SetTeam( DOTA_TEAM_GOODGUYS ) - hWearable:SetOwner( hEnt ) - hWearable:FollowEntity( hEnt, true ) - end - end - end - end -end - -return CMapEncounter diff --git a/aghanim_singleplayer/scripts/vscripts/map_room.lua b/aghanim_singleplayer/scripts/vscripts/map_room.lua deleted file mode 100755 index 4926f13..0000000 --- a/aghanim_singleplayer/scripts/vscripts/map_room.lua +++ /dev/null @@ -1,847 +0,0 @@ -require( "spawner" ) - --------------------------------------------------------------------------------- - -if CMapRoom == nil then - CMapRoom = class({}) - _G.CMapRoom = CMapRoom -end - --------------------------------------------------------------------------------- - -function CMapRoom:constructor( szRoomName, nRoomType, nDepth, vMins, vMaxs, vOrigin ) - self.szRoomName = szRoomName - self.nRoomType = nRoomType - self.nDepth = nDepth - self.nEliteDepthBonus = 0 - self.vMins = vMins - self.vMaxs = vMaxs - self.vOrigin = vOrigin - self.nAct = tonumber( string.sub( szRoomName, 2, 2 ) ) - self.bHidden = false; - self.PlayerUnitsInRoom = {} - self.szEncounterName = nil - self.Encounter = nil - self.exits = {} - self.exitRewards = {} - self.bActivated = false - self.bSpawnGroupReady = false - self.szExitRoomSelected = nil - self.szMapName = "main" - self.szRoomChoiceReward = nil - self.bHasCrystal = false - self.nPlayerChosenExitDirection = ROOM_EXIT_INVALID - self.nPlayerEntranceDirection = ROOM_EXIT_INVALID - - self.hRandomStream = CreateUniformRandomStream( GameRules.Aghanim:GetRandomSeed() + MakeStringToken( szRoomName ) ) - self.bDisplayHiddenAsElite = ( self:RoomRandomInt( 1, 4 ) == 1 ) -end - --------------------------------------------------------------------------------- - -function CMapRoom:ShouldDisplayHiddenAsElite( ) - return self.bDisplayHiddenAsElite -end - --------------------------------------------------------------------------------- - -function CMapRoom:AddExit( exitDirection, szRoomName ) - self.exits[ exitDirection ] = szRoomName -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetExit( exitDirection ) - return self.exits[ exitDirection ] -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetExits( ) - return self.exits -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetExitDirectionForRoom( szRoomName ) - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = self:GetExit( nExitDirection ) - if szRoomName == szExitRoomName then - return nExitDirection - end - end - return nil -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetExitLocation( exitDirection ) - - local bIsSpecialTransition = ( self.nDepth == 7 ) - if self.nRoomType ~= ROOM_TYPE_BOSS and bIsSpecialTransition == false then - - if exitDirection == ROOM_EXIT_LEFT then - return Vector( self.vMins.x, self.vOrigin.y, self.vOrigin.z ) - elseif exitDirection == ROOM_EXIT_TOP then - return Vector( self.vOrigin.x, self.vMaxs.y, self.vOrigin.z ) - elseif exitDirection == ROOM_EXIT_RIGHT then - return Vector( self.vMaxs.x, self.vOrigin.y, self.vOrigin.z ) - end - - elseif self.nRoomType == ROOM_TYPE_BOSS then - - local nDivisor = 8 - if self.nDepth == 13 then - nDivisor = 16 - end - - if exitDirection == ROOM_EXIT_LEFT then - return Vector( self.vMins.x, self.vMins.y + ( self.vMaxs.y - self.vMins.y ) / nDivisor, self.vOrigin.z ) - elseif exitDirection == ROOM_EXIT_RIGHT then - return Vector( self.vMaxs.x, self.vMins.y + ( self.vMaxs.y - self.vMins.y ) / nDivisor, self.vOrigin.z ) - end - - elseif bIsSpecialTransition == true then - - if exitDirection == ROOM_EXIT_TOP then - if not GameRules.Aghanim:IsMapFlipped() then - return Vector( self.vMins.x + ( self.vMaxs.x - self.vMins.x ) * 7 / 8, self.vMaxs.y, self.vOrigin.z ) - else - return Vector( self.vMins.x + ( self.vMaxs.x - self.vMins.x ) * 1 / 8, self.vMaxs.y, self.vOrigin.z ) - end - end - - end - - return nil -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetNeighboringRoomHeightDifference( nExitDirection ) - - local szExitRoomName = self:GetExit( nExitDirection ) - if szExitRoomName == nil then - return 0 - end - - local exitRoom = GameRules.Aghanim:GetRoom( szExitRoomName ) - if exitRoom == nil then - return 0 - end - - local zeroHeights = - { - up = 0, - left = 0, - right = 0, - down = 0 - } - - local myHeights = MAP_EXIT_HEIGHTS[ self:GetMapName() ] - local theirHeights = MAP_EXIT_HEIGHTS[ exitRoom:GetMapName() ] - if myHeights == nil then - myHeights = zeroHeights - end - if theirHeights == nil then - theirHeights = zeroHeights - end - - if nExitDirection == ROOM_EXIT_LEFT then - return myHeights.left - theirHeights.right - end - if nExitDirection == ROOM_EXIT_TOP then - return myHeights.up - theirHeights.down - end - if nExitDirection == ROOM_EXIT_RIGHT then - return myHeights.right - theirHeights.left - end - return 0 -end - --------------------------------------------------------------------------------- - -function CMapRoom:SetEliteDepthBonus( nEliteDepthBonus ) - self.nEliteDepthBonus = nEliteDepthBonus - self:GetEncounter():OnEliteRankChanged( nEliteDepthBonus ) - self:SendRoomToClient() -end - --------------------------------------------------------------------------------- - -function CMapRoom:SetHidden( ) - self.bHidden = true -end - --------------------------------------------------------------------------------- - -function CMapRoom:IsHidden( ) - return self.bHidden -end - --------------------------------------------------------------------------------- - -function CMapRoom:AssignEncounter( szEncounterName ) - - -- NOTE: For debugging, it's possible to re-assign a new encounter to an existing room. - -- In that case, clean up any temporary state - self.szMapName = nil - if self.hSpawnGroupHandle ~= nil then - UnloadSpawnGroupByHandle( self.hSpawnGroupHandle ) - self.hSpawnGroupHandle = nil - end - self.bSpawnGroupReady = false - - -- At this point, we're ready to assign the encounter - self.szEncounterName = szEncounterName - - --print( "AssignEncounter: " .. self:GetName() .." -> " .. szEncounterName ) - - local hEncounterClass = require( "encounters/" .. self.szEncounterName ) - if hEncounterClass == nil then - print( "ERROR: Encounter class " .. szEncounterName .. " not found.\n" ) - return - end - - self.Encounter = hEncounterClass( self, self.szEncounterName ) - if self.Encounter == nil then - print( "ERROR: Failed to create Encounter " .. szEncounterName .. "\n" ) - return - end -end - --------------------------------------------------------------------------------- - -function CMapRoom:FindAllEntitiesInRoomByName( szEntityName, bWarnIfNotFound ) - - local hEntityList = Entities:FindAllByName( szEntityName ) - - for i=#hEntityList, 1, -1 do - if hEntityList[i]:GetSpawnGroupHandle() ~= self:GetSpawnGroupHandle() then - table.remove( hEntityList, i ) - end - end - - if #hEntityList == 0 and bWarnIfNotFound then - print( "Unable to find entity " .. szEntityName .. " for encounter " .. self.szEncounterName .. " map " .. self:GetMapName() ) - end - - return hEntityList - -end - --------------------------------------------------------------------------------- - -function CMapRoom:OnEncounterLoaded() - -- This is the level stream load finished callback. - - -- We're only calling Find to print an error if none can be found - self:FindAllEntitiesInRoomByName( "room_activate", true ) - - self.Encounter:OnEncounterLoaded() -end - --------------------------------------------------------------------------------- - -function CMapRoom:IsInRoomBounds( vOrigin ) - if vOrigin.x > self.vMins.x and vOrigin.x < self.vMaxs.x and vOrigin.y > self.vMins.y and vOrigin.y < self.vMaxs.y then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CMapRoom:IsValidSpawnPoint( vOrigin ) - - local flBorder = 384 - if vOrigin.x > ( self.vMins.x + flBorder ) and vOrigin.x < ( self.vMaxs.x - flBorder ) and - vOrigin.y > ( self.vMins.y + flBorder ) and vOrigin.y < ( self.vMaxs.y - flBorder ) then - return true - end - - return false -end - --------------------------------------------------------------------------------- - -function CMapRoom:ClampPointToRoomBounds( vOrigin, flBorder ) - - if flBorder == nil then - flBorder = 4 - end - - local vClamped = Vector( vOrigin.x, vOrigin.y, vOrigin.z ) - - if vClamped.x < ( self.vMins.x + flBorder ) then - vClamped.x = self.vMins.x + flBorder; - elseif vClamped.x > ( self.vMaxs.x - flBorder ) then - vClamped.x = self.vMaxs.x - flBorder; - end - - if vClamped.y < ( self.vMins.y + flBorder ) then - vClamped.y = ( self.vMins.y + flBorder ) - elseif vClamped.y > ( self.vMaxs.y - flBorder ) then - vClamped.y = ( self.vMaxs.y - flBorder ) - end - - return vClamped -end - --------------------------------------------------------------------------------- - -function CMapRoom:LoadExitRooms() - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = self:GetExit( nExitDirection ) - if szExitRoomName ~= nil then - local ExitRoom = GameRules.Aghanim:GetRoom( szExitRoomName ) - -- NOTE: the hSpawnGroupHandle test is if we respawn an exit room because of development-time testing - if ExitRoom ~= nil and ExitRoom.hSpawnGroupHandle == nil then - local EncounterData = ENCOUNTER_DEFINITIONS[ ExitRoom.szEncounterName ] - if EncounterData ~= nil then - - -- Must set the map name prior to getting the neighboring room height difference - local mapList = EncounterData.szMapNames - if GameRules.Aghanim:IsMapFlipped() and EncounterData.szFlippedMapNames ~= nil then - mapList = EncounterData.szFlippedMapNames - end - local szMapName = mapList[ self:RoomRandomInt( 1, #mapList ) ] - ExitRoom.szMapName = szMapName - - ExitRoom.vOrigin.z = self.vOrigin.z + self:GetNeighboringRoomHeightDifference( nExitDirection ) - print( "Spawning room " .. szExitRoomName .. " with encounter " .. ExitRoom.szEncounterName .. " on map " .. szMapName .. " at ( " .. ExitRoom.vOrigin.x .. ", " .. ExitRoom.vOrigin.y .. ", " .. ExitRoom.vOrigin.z .. " )" ) - ExitRoom.hSpawnGroupHandle = DOTA_SpawnMapAtPosition( szMapName, ExitRoom.vOrigin, - true, Dynamic_Wrap( CMapRoom, "OnRoomReadyToSpawn" ), Dynamic_Wrap( CMapRoom, "OnSpawnRoomComplete" ), ExitRoom ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapRoom:OnRoomReadyToSpawn( hSpawnGroupHandle ) - if ( hSpawnGroupHandle == self.hSpawnGroupHandle ) then - --print( "OnRoomReadyToSpawn " .. self:GetName() .. "\n" ) - self.bSpawnGroupReady = true - else - print( "Unexpected OnRoomReadyToSpawn " .. self:GetName() .. " " .. hSpawnGroupHandle .. "->" .. self.hSpawnGroupHandle .. "\n" ) - end -end - --------------------------------------------------------------------------------- - -function CMapRoom:OpenExit( szExitDir, vSmallExitLocation ) - - -- Open a gap in the force unseen blockers - -- Only W or E exits have the possibility of being small exits - if szExitDir == "W" then - - if vSmallExitLocation == nil then - GameRules.Aghanim:ClearFowBlockers( - Vector( self.vMins.x + 1, self.vMins.y + 1, self.vMins.z ), - Vector( self.vMins.x + 1, self.vMaxs.y - 1, self.vMins.z ) ) - else - GameRules.Aghanim:ClearFowBlockers( - Vector( vSmallExitLocation.x + 1, vSmallExitLocation.y - 256, self.vMins.z ), - Vector( vSmallExitLocation.x + 1, vSmallExitLocation.y + 256, self.vMins.z ) ) - end - - elseif szExitDir == "E" then - - if vSmallExitLocation == nil then - GameRules.Aghanim:ClearFowBlockers( - Vector( self.vMaxs.x - 1, self.vMins.y + 1, self.vMins.z ), - Vector( self.vMaxs.x - 1, self.vMaxs.y - 1, self.vMins.z ) ) - else - GameRules.Aghanim:ClearFowBlockers( - Vector( vSmallExitLocation.x - 1, vSmallExitLocation.y - 256, self.vMins.z ), - Vector( vSmallExitLocation.x - 1, vSmallExitLocation.y + 256, self.vMins.z ) ) - end - - elseif szExitDir == "N" then - GameRules.Aghanim:ClearFowBlockers( - Vector( self.vMins.x + 1, self.vMaxs.y - 1, self.vMins.z ), - Vector( self.vMaxs.x - 1, self.vMaxs.y - 1, self.vMins.z ) ) - elseif szExitDir == "S" then - GameRules.Aghanim:ClearFowBlockers( - Vector( self.vMins.x + 1, self.vMins.y + 1, self.vMins.z ), - Vector( self.vMaxs.x - 1, self.vMins.y + 1, self.vMins.z ) ) - end - - -- NOTE: Do not break in the loop; necessary for double N exits in the main map - local roomUnlockList = self:FindAllEntitiesInRoomByName( "room_unlock_" .. szExitDir, true ) - for i=1, #roomUnlockList do - --print( "Triggering " .. self:GetName() .. " room_unlock_" .. szExitDir .. " on ent " .. roomUnlockList[i]:entindex() .. " h " .. roomUnlockList[i]:GetSpawnGroupHandle() ) - roomUnlockList[i]:Trigger( nil, nil ) - end - -end - --------------------------------------------------------------------------------- - -function CMapRoom:CreateVisBlockers( ) - - GameRules.Aghanim:AddFowOutlineBlocker( - Vector( self.vMins.x + 1, self.vMins.y + 1, self.vMins.z ), - Vector( self.vMaxs.x - 1, self.vMaxs.y - 1, self.vMaxs.z ) ) - -end - --------------------------------------------------------------------------------- - -function CMapRoom:SpawnBridges( ) - - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = self:GetExit( nExitDirection ) - if szExitRoomName ~= nil then - - local szExitDir = "N" - if nExitDirection == ROOM_EXIT_LEFT then - szExitDir = "W" - elseif nExitDirection == ROOM_EXIT_RIGHT then - szExitDir = "E" - end - - -- NOTE: Do not break in the loop; necessary for double N exits in the main map - local hBridges = self:FindAllEntitiesInRoomByName( "spawn_bridge_" .. szExitDir, true ) - for i=1, #hBridges do - hBridges[i]:ForceSpawn( ) - end - - end - end - -end - --------------------------------------------------------------------------------- - -function CMapRoom:OnSpawnRoomComplete( hSpawnGroupHandle ) - - if ( hSpawnGroupHandle == self.hSpawnGroupHandle ) then - - --print( "OnSpawnRoomComplete " .. self:GetName() .. "\n" ) - self:OnEncounterLoaded() - - -- Set up vis blockers on the new room - self:CreateVisBlockers() - - -- Clear out the path between the two rooms - for k,room in pairs(GameRules.Aghanim:GetRoomList()) do - - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = room:GetExit( nExitDirection ) - if szExitRoomName ~= nil and room ~= self and szExitRoomName == self:GetName() and room:IsActivated() then - local vSmallExitLocation = nil - if room.nRoomType == ROOM_TYPE_BOSS then - vSmallExitLocation = room:GetExitLocation( nExitDirection ) - end - if nExitDirection == ROOM_EXIT_LEFT then - room:OpenExit( "W", vSmallExitLocation ) - self:OpenExit( "E", vSmallExitLocation ) - elseif nExitDirection == ROOM_EXIT_TOP then - room:OpenExit( "N", vSmallExitLocation ) - self:OpenExit( "S", vSmallExitLocation ) - elseif nExitDirection == ROOM_EXIT_RIGHT then - room:OpenExit( "E", vSmallExitLocation ) - self:OpenExit( "W", vSmallExitLocation ) - end - break - end - end - - end - - self:SpawnBridges() - - else - print( "Unexpected OnSpawnRoomComplete " .. self:GetName() .. " " .. hSpawnGroupHandle .. "->" .. self.hSpawnGroupHandle .. "\n" ) - end -end - --------------------------------------------------------------------------------- - -function CMapRoom:AreAllExitRoomsReady() - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = self:GetExit( nExitDirection ) - if szExitRoomName ~= nil then - local ExitRoom = GameRules.Aghanim:GetRoom( szExitRoomName ) - if ExitRoom ~= nil then - local EncounterData = ENCOUNTER_DEFINITIONS[ ExitRoom.szEncounterName ] - if EncounterData ~= nil then - if not ExitRoom:IsMapReady() then - return false - end - end - end - end - end - return true -end - --------------------------------------------------------------------------------- - -function CMapRoom:ComputeRoomStats( ) - - if self.Encounter == nil then - return nil - end - - local roomStats = - { - szEncounterName = self.Encounter:GetName(), - bIsElite = self:IsElite(), - bIsHidden = self:IsHidden(), - nRoomType = self:GetType(), - szReward = self:GetRoomChoiceReward(), - ascensionAbilities = self.Encounter:GetAscensionAbilities(), - } - - return roomStats - -end - - --------------------------------------------------------------------------------- - -function CMapRoom:OnNextRoomSelected( szSelectedRoomName ) - - if self.szExitRoomSelected ~= nil then - return - end - - self.szExitRoomSelected = szSelectedRoomName - printf( "OnNextRoomSelected %s\n", szSelectedRoomName ) - - -- Register the room selection - local roomSelectionStats = - { - depth = self:GetDepth() + 1 - } - - for nExitDirection=ROOM_EXIT_LEFT,ROOM_EXIT_RIGHT do - local szExitRoomName = self:GetExit( nExitDirection ) - if szExitRoomName ~= nil then - local ExitRoom = GameRules.Aghanim:GetRoom( szExitRoomName ) - if ExitRoom ~= nil then - if szExitRoomName == szSelectedRoomName then - ManuallyTriggerSpawnGroupCompletion( ExitRoom:GetSpawnGroupHandle() ) - - self.nPlayerChosenExitDirection = nExitDirection - ExitRoom.nPlayerEntranceDirection = GetEntranceDirectionForExitType( nExitDirection ) - - self:SendRoomToClient() - ExitRoom:SendRoomToClient() - - roomSelectionStats.selectedRoom = ExitRoom:ComputeRoomStats() - if ExitRoom.Encounter ~= nil then - ExitRoom.Encounter:Introduce() - end - else - roomSelectionStats.unselectedRoom = ExitRoom:ComputeRoomStats() - UnloadSpawnGroupByHandle( ExitRoom:GetSpawnGroupHandle() ) - end - end - end - end - - GameRules.Aghanim:RegisterEncounterStats( roomSelectionStats ) -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetExitRoomSelected( ) - return self.szExitRoomSelected -end - --------------------------------------------------------------------------------- - -function CMapRoom:Activate() - if self.bActivated == false then - self.bActivated = true - - self.nTriggerStartTouchListener = ListenToGameEvent( "trigger_start_touch", Dynamic_Wrap( getclass( self ), "OnTriggerStartTouch" ), self ) - self.nTriggerEndTouchListener = ListenToGameEvent( "trigger_end_touch", Dynamic_Wrap( getclass( self ), "OnTriggerEndTouch" ), self ) - - self:LoadExitRooms() - - self.Encounter:Start() - end -end - --------------------------------------------------------------------------------- - -function CMapRoom:OnEncounterCompleted() - StopListeningToGameEvent( self.nTriggerStartTouchListener ) - StopListeningToGameEvent( self.nTriggerEndTouchListener ) -end - --------------------------------------------------------------------------------- --- trigger_start_touch --- > trigger_name - string --- > activator_entindex - short --- > caller_entindex- short - --------------------------------------------------------------------------------- -function CMapRoom:OnTriggerStartTouch( event ) - --printf( "map_room - OnTriggerStartTouch" ) - - local sTriggerName = nil - if event.trigger_name ~= nil then - sTriggerName = event.trigger_name - end - - local hActivator = nil - if event.activator_entindex ~= nil then - hActivator = EntIndexToHScript( event.activator_entindex ) - end - - local hCaller = nil - if event.caller_entindex ~= nil then - hCaller = EntIndexToHScript( event.caller_entindex ) - end - - if sTriggerName == "room_activate" and hCaller:GetSpawnGroupHandle() == self:GetSpawnGroupHandle() and hActivator ~= nil and hActivator:GetTeamNumber() == DOTA_TEAM_GOODGUYS and hActivator:IsOwnedByAnyPlayer() and not hActivator:IsTempestDouble() then - table.insert( self.PlayerUnitsInRoom, hActivator ) - if hActivator:IsRealHero() then - local hCurrentRoomOfPlayer = GameRules.Aghanim:GetPlayerCurrentRoom( hActivator:GetPlayerOwnerID() ) - if hCurrentRoomOfPlayer ~= self then - GameRules.Aghanim:SetPlayerCurrentRoom( hActivator:GetPlayerOwnerID(), self ) - end - - end - --print( "Player unit " .. hActivator:GetUnitName() .. " just entered room " .. self:GetMapName() .. " (" .. #self.PlayerUnitsInRoom .. " new count)" ) - end -end - --------------------------------------------------------------------------------- --- trigger_end_touch --- > trigger_name - string --- > activator_entindex - short --- > caller_entindex- short - --------------------------------------------------------------------------------- - -function CMapRoom:OnTriggerEndTouch( event ) - local sTriggerName = nil - if event.trigger_name ~= nil then - sTriggerName = event.trigger_name - end - - local hActivator = nil - if event.activator_entindex ~= nil then - hActivator = EntIndexToHScript( event.activator_entindex ) - end - - local hCaller = nil - if event.caller_entindex ~= nil then - hCaller = EntIndexToHScript( event.caller_entindex ) - end - - if sTriggerName == "room_activate" and hCaller:GetSpawnGroupHandle() == self:GetSpawnGroupHandle() and hActivator ~= nil and hActivator:GetTeamNumber() == DOTA_TEAM_GOODGUYS and hActivator:IsOwnedByAnyPlayer() then - for k,hUnit in pairs ( self.PlayerUnitsInRoom ) do - if hUnit and hUnit == hActivator then - table.remove( self.PlayerUnitsInRoom, k ) - --print( "Player unit " .. hActivator:GetUnitName() .. " just left room " .. self:GetMapName() .. " (" .. #self.PlayerUnitsInRoom .. " new count)" ) - end - end - end -end - --------------------------------------------------------------------------------- - -function CMapRoom:SetRoomChoiceReward( szReward ) - self.szRoomChoiceReward = szReward -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetRoomChoiceReward() - return self.szRoomChoiceReward -end - --------------------------------------------------------------------------------- - -function CMapRoom:SendRoomToClient() - local netTable = {} - if GameRules.Aghanim:GetCurrentRoom() and self:GetAct() <= GameRules.Aghanim:GetCurrentRoom():GetAct() then - netTable[ "reward" ] = self:GetRoomChoiceReward() - netTable[ "map_name" ] = self:GetMapName() - netTable[ "room_type" ] = self:GetType() - netTable[ "depth" ] = self:GetDepth() - netTable[ "entrance_direction" ] = self:GetPlayerEntranceDirection() - netTable[ "exit_direction" ] = self:GetPlayerChosenExitDirection() - - netTable[ "completed" ] = 0 - if self:GetEncounter():IsComplete() then - netTable[ "completed" ] = 1 - end - - netTable[ "current_room" ] = 0 - if self == GameRules.Aghanim:GetCurrentRoom() then - netTable[ "current_room" ] = 1 - end - - netTable[ "elite" ] = self:GetEliteRank() - else - netTable[ "reward" ] = "REWARD_TYPE_HIDDEN" - netTable[ "map_name" ] = "none" - netTable[ "room_type" ] = ROOM_TYPE_INVALID - netTable[ "entrance_direction" ] = ROOM_EXIT_INVALID - netTable[ "exit_direction" ] = ROOM_EXIT_INVALID - netTable[ "depth" ] = self:GetDepth() - - if self:GetType() == ROOM_TYPE_BOSS or self:GetType() == ROOM_TYPE_BONUS then - netTable[ "room_type" ] = self:GetType() - end - - netTable[ "completed" ] = 0 - netTable[ "current_room" ] = 0 - netTable[ "elite" ] = 0 - end - - CustomNetTables:SetTableValue( "room_data", self:GetName(), netTable ) -end - --------------------------------------------------------------------------------- - -function CMapRoom:IsInRoom( hUnit ) - for _,hUnitInRoom in pairs ( self.PlayerUnitsInRoom ) do - if hUnitInRoom == hUnit then - return true - end - end - - return false -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetPlayerUnitsInRoom() - return self.PlayerUnitsInRoom -end - --------------------------------------------------------------------------------- - -function CMapRoom:IsActivated() - if self.PlayerUnitsInRoom == nil or #self.PlayerUnitsInRoom == 0 then - return false - end - return self.bActivated -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetName() - return self.szRoomName -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetType() - return self.nRoomType -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetAct() - return self.nAct -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetDepth() - return self.nDepth -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetEliteRank() - return self.nEliteDepthBonus -end - --------------------------------------------------------------------------------- - -function CMapRoom:IsElite() - return self.nEliteDepthBonus > 0 -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetOrigin() - return self.vOrigin -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetMins() - return self.vMins -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetMaxs() - return self.vMaxs -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetEncounter() - return self.Encounter -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetEncounterName() - return self.szEncounterName -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetSpawnGroupHandle() - return self.hSpawnGroupHandle -end - --------------------------------------------------------------------------------- - -function CMapRoom:IsMapReady() - return self.bSpawnGroupReady -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetMapName() - return self.szMapName -end - - --------------------------------------------------------------------------------- - -function CMapRoom:GetPlayerEntranceDirection() - return self.nPlayerEntranceDirection -end - --------------------------------------------------------------------------------- - -function CMapRoom:GetPlayerChosenExitDirection() - return self.nPlayerChosenExitDirection -end - --------------------------------------------------------------------------------- - -function CMapRoom:HasCrystal() - return self.bHasCrystal -end - --------------------------------------------------------------------------------- - -function CMapRoom:RoomRandomInt( nMinInt, nMaxInt ) - return self.hRandomStream:RandomInt( nMinInt, nMaxInt ) -end - --------------------------------------------------------------------------------- - -function CMapRoom:RoomRandomFloat( flMin, flMin ) - return self.hRandomStream:RandomFloat( flMin, flMin ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/base_minor_stats_upgrades.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/base_minor_stats_upgrades.lua deleted file mode 100755 index b4aebfa..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/base_minor_stats_upgrades.lua +++ /dev/null @@ -1,114 +0,0 @@ -local Stats = -{ - { - description = "aghsfort_minor_stat_upgrade_bonus_all_stats", - ability_name = "aghsfort_minor_stats_upgrade", - special_value_name = "bonus_all_stats", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 12, - }, - { - description = "aghsfort_minor_stat_upgrade_bonus_primary_stat", - ability_name = "aghsfort_minor_stats_upgrade", - special_value_name = "bonus_primary_stat", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 18, - }, - -- { - -- description = "aghsfort_minor_stat_upgrade_bonus_movespeed", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_movespeed", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 48, - -- }, - -- { - -- description = "aghsfort_minor_stat_upgrade_bonus_hp_regen", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_hp_regen", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 6, - -- }, - { - description = "aghsfort_minor_stat_upgrade_bonus_armor", - ability_name = "aghsfort_minor_stats_upgrade", - special_value_name = "bonus_armor", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 12, - }, - { - description = "aghsfort_minor_stat_upgrade_bonus_attack_damage", - ability_name = "aghsfort_minor_stats_upgrade", - special_value_name = "bonus_attack_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 45, - }, - --{ - -- description = "aghsfort_minor_stat_upgrade_bonus_cast_range", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_cast_range", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 100, - --}, - { - description = "aghsfort_minor_stat_upgrade_bonus_spell_amp", - ability_name = "aghsfort_minor_stats_upgrade", - special_value_name = "bonus_spell_amp", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 20, - }, - -- { - -- description = "aghsfort_minor_stat_upgrade_bonus_health", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_health", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 450, - -- }, - --[[ - { - description = "aghsfort_minor_stat_upgrade_bonus_mana", - ability_name = "aghsfort_minor_stats_upgrade", - special_value_name = "bonus_mana", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 150, - }, - ]] - { - description = "aghsfort_minor_stat_upgrade_bonus_attack_speed", - ability_name = "aghsfort_minor_stats_upgrade", - special_value_name = "bonus_attack_speed", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 45, - }, - -- { - -- description = "aghsfort_minor_stat_upgrade_bonus_mana_regen", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_mana_regen", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 6, - -- }, - -- { - -- description = "aghsfort_minor_stat_upgrade_bonus_evasion", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_evasion", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 15, - -- }, - -- { - -- description = "aghsfort_minor_stat_upgrade_bonus_magic_resist", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_magic_resist", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 20, - -- }, - -- { - -- description = "aghsfort_minor_stat_upgrade_bonus_lifesteal", - -- ability_name = "aghsfort_minor_stats_upgrade", - -- special_value_name = "bonus_lifesteal", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 4, - -- }, - - - -} -return Stats \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_disruptor.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_disruptor.lua deleted file mode 100755 index 06f245a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_disruptor.lua +++ /dev/null @@ -1,131 +0,0 @@ -local Disruptor = -{ - -- { - -- description = "aghsfort_disruptor_thunder_strike_pct_mana_cost", - -- ability_name = "aghsfort_disruptor_thunder_strike", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_disruptor_thunder_strike_pct_cooldown", - ability_name = "aghsfort_disruptor_thunder_strike", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_disruptor_thunder_strike_flat_radius", - -- ability_name = "aghsfort_disruptor_thunder_strike", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 120, - -- }, - - { - description = "aghsfort_disruptor_thunder_strike_flat_strikes", - ability_name = "aghsfort_disruptor_thunder_strike", - special_value_name = "strikes", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - - { - description = "aghsfort_disruptor_thunder_strike_flat_strike_damage", - ability_name = "aghsfort_disruptor_thunder_strike", - special_value_name = "strike_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - - -- { - -- description = "aghsfort_disruptor_glimpse_flat_cast_radius", - -- ability_name = "aghsfort_disruptor_glimpse", - -- special_value_name = "cast_radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 150, - -- }, - - -- { - -- description = "aghsfort_disruptor_glimpse_flat_bonus_damage", - -- ability_name = "aghsfort_disruptor_glimpse", - -- special_value_name = "bonus_damage", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 100, - -- }, - - { - description = "aghsfort_disruptor_glimpse_pct_cooldown", - ability_name = "aghsfort_disruptor_glimpse", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_disruptor_kinetic_field_pct_cooldown", - ability_name = "aghsfort_disruptor_kinetic_field", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_disruptor_kinetic_field_flat_duration", - ability_name = "aghsfort_disruptor_kinetic_field", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - -- { - -- description = "aghsfort_disruptor_kinetic_field_formation_time", - -- ability_name = "aghsfort_disruptor_kinetic_field", - -- special_value_name = "formation_time", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = -40, - -- }, - { - description = "aghsfort_disruptor_static_storm_flat_duration", - ability_name = "aghsfort_disruptor_static_storm", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.50, - }, - - -- { - -- description = "aghsfort_disruptor_static_storm_pct_mana_cost", - -- ability_name = "aghsfort_disruptor_static_storm", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 30, - -- }, - - -- { - -- description = "aghsfort_disruptor_static_storm_pct_cooldown", - -- ability_name = "aghsfort_disruptor_static_storm", - -- special_value_name = "cooldown", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 18, - -- }, - - -- { - -- description = "aghsfort_disruptor_static_storm_flat_radius", - -- ability_name = "aghsfort_disruptor_static_storm", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 250, - -- }, - - { - description = "aghsfort_disruptor_static_storm_flat_damage_max", - ability_name = "aghsfort_disruptor_static_storm", - special_value_name = "damage_max", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, -} - -return Disruptor \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_magnataur.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_magnataur.lua deleted file mode 100755 index eb18366..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_magnataur.lua +++ /dev/null @@ -1,130 +0,0 @@ -local Magnus = -{ - { - description = "aghsfort_magnataur_shockwave_flat_damage", - ability_name = "aghsfort_magnataur_shockwave", - special_value_name = "shock_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - -- { - -- description = "aghsfort_magnataur_shockwave_flat_shock_width", - -- ability_name = "aghsfort_magnataur_shockwave", - -- special_value_name = "shock_width", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 100, - -- }, - - -- { - -- description = "aghsfort_magnataur_shockwave_flat_slow_duration", - -- ability_name = "aghsfort_magnataur_shockwave", - -- special_value_name = "basic_slow_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2.5, - -- }, - - -- { - -- description = "aghsfort_magnataur_shockwave_pct_mana_cost", - -- ability_name = "aghsfort_magnataur_shockwave", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - { - description = "aghsfort_magnataur_shockwave_pct_cooldown", - ability_name = "aghsfort_magnataur_shockwave", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_magnataur_empower_flat_damage", - ability_name = "aghsfort_magnataur_empower", - special_value_name = "bonus_damage_pct", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 15, - }, - - { - description = "aghsfort_magnataur_empower_flat_cleave", - ability_name = "aghsfort_magnataur_empower", - special_value_name = "cleave_damage_pct", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 25, - }, - - -- { - -- description = "aghsfort_magnataur_skewer_flat_range", - -- ability_name = "aghsfort_magnataur_skewer", - -- special_value_name = "range", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 400, - -- }, - - { - description = "aghsfort_magnataur_skewer_flat_damage", - ability_name = "aghsfort_magnataur_skewer", - special_value_name = "skewer_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_magnataur_skewer_flat_slow_pct", - -- ability_name = "aghsfort_magnataur_skewer", - -- special_value_name = "slow_pct", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 50, - -- }, - - { - description = "aghsfort_magnataur_skewer_pct_cooldown", - ability_name = "aghsfort_magnataur_skewer", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_magnataur_reverse_polarity_pct_cooldown", - ability_name = "aghsfort_magnataur_reverse_polarity", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_magnataur_reverse_polarity_pct_mana_cost", - -- ability_name = "aghsfort_magnataur_reverse_polarity", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_magnataur_reverse_polarity_flat_damage", - ability_name = "aghsfort_magnataur_reverse_polarity", - special_value_name = "polarity_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 300, - }, - - { - description = "aghsfort_magnataur_reverse_polarity_flat_stun_duration", - ability_name = "aghsfort_magnataur_reverse_polarity", - special_value_name = "hero_stun_duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 3.0, - }, - - -- { - -- description = "aghsfort_magnataur_reverse_polarity_flat_radius", - -- ability_name = "aghsfort_magnataur_reverse_polarity", - -- special_value_name = "pull_radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 240, - -- }, -} - -return Magnus \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_mars.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_mars.lua deleted file mode 100755 index 143b64c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_mars.lua +++ /dev/null @@ -1,148 +0,0 @@ -local Mars = -{ - -- { - -- description = "aghsfort_mars_spear_percent_manacost", - -- ability_name = "aghsfort_mars_spear", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_mars_spear_percent_cooldown", - ability_name = "aghsfort_mars_spear", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_mars_spear_flat_damage", - ability_name = "aghsfort_mars_spear", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_mars_spear_flat_stun_duration", - -- ability_name = "aghsfort_mars_spear", - -- special_value_name = "stun_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 1.0, - -- }, - - - -- { - -- description = "aghsfort_mars_gods_rebuke_percent_manacost", - -- ability_name = "aghsfort_mars_gods_rebuke", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_mars_gods_rebuke_percent_cooldown", - ability_name = "aghsfort_mars_gods_rebuke", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - - { - description = "aghsfort_mars_gods_rebuke_flat_crit_mult", - ability_name = "aghsfort_mars_gods_rebuke", - special_value_name = "crit_mult", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 150, - }, - - -- { - -- description = "aghsfort_mars_gods_rebuke_flat_knockback_slow_duration", - -- ability_name = "aghsfort_mars_gods_rebuke", - -- special_value_name = "knockback_slow_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 3.0, - -- }, - - { - description = "aghsfort_mars_bulwark_damage_reduction_front", - ability_name = "aghsfort_mars_bulwark", - special_value_name = "physical_damage_reduction", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 10, - }, - - -- { - -- description = "aghsfort_mars_bulwark_damage_reduction_sides", - -- ability_name = "aghsfort_mars_bulwark", - -- special_value_name = "physical_damage_reduction_side", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 20, - -- }, - { - description = "aghsfort_mars_bulwark_percent_cooldown", - ability_name = "aghsfort_mars_bulwark", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - -- { - -- description = "aghsfort_mars_bulwark_active_bulwark_block_bonus", - -- ability_name = "aghsfort_mars_bulwark", - -- special_value_name = "active_bulwark_block_bonus", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 20, - -- }, - - -- { - -- description = "aghsfort_mars_bulwark_active_duration", - -- ability_name = "aghsfort_mars_bulwark", - -- special_value_name = "active_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2.0, - -- }, - - -- { - -- description = "aghsfort_mars_arena_of_blood_manacost", - -- ability_name = "aghsfort_mars_arena_of_blood", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_mars_arena_of_blood_cooldown", - ability_name = "aghsfort_mars_arena_of_blood", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - { - description = "aghsfort_mars_arena_of_blood_duration", - ability_name = "aghsfort_mars_arena_of_blood", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - - { - description = "aghsfort_mars_arena_of_blood_spear_damage", - ability_name = "aghsfort_mars_arena_of_blood", - special_value_name = "spear_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - --{ - -- description = "aghsfort_mars_arena_of_blood_spear_attack_interval", - -- ability_name = "aghsfort_mars_arena_of_blood", - -- special_value_name = "spear_attack_interval", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = -30, - --}, - -} - -return Mars \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_omniknight.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_omniknight.lua deleted file mode 100755 index 1746d3d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_omniknight.lua +++ /dev/null @@ -1,155 +0,0 @@ -local Omniknight = -{ - -- { - -- description = "aghsfort_omniknight_purification_manacost", - -- ability_name = "aghsfort_omniknight_purification", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - -- { - -- description = "aghsfort_omniknight_repel_manacost", - -- ability_name = "aghsfort_omniknight_repel", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - -- { - -- description = "aghsfort_omniknight_guardian_angel_manacost", - -- ability_name = "aghsfort_omniknight_guardian_angel", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_omniknight_purification_cooldown", - ability_name = "aghsfort_omniknight_purification", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_omniknight_guardian_angel_cooldown", - ability_name = "aghsfort_omniknight_guardian_angel", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_omniknight_repel_cooldown", - ability_name = "aghsfort_omniknight_repel", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_omniknight_purification_flat_heal", - ability_name = "aghsfort_omniknight_purification", - special_value_name = "heal", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - -- { - -- description = "aghsfort_omniknight_purification_flat_cast_range", - -- ability_name = "aghsfort_omniknight_purification", - -- special_value_name = "cast_range", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 200, - -- }, - - -- { - -- description = "aghsfort_omniknight_purification_flat_radius", - -- ability_name = "aghsfort_omniknight_purification", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 160, - -- }, - - { - description = "aghsfort_omniknight_repel_flat_duration", - ability_name = "aghsfort_omniknight_repel", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - - { - description = "aghsfort_omniknight_repel_flat_damage_reduction", - ability_name = "aghsfort_omniknight_repel", - special_value_name = "damage_reduction", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = -5, - }, - - { - description = "aghsfort_omniknight_repel_flat_bonus_str", - ability_name = "aghsfort_omniknight_repel", - special_value_name = "bonus_str", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 15, - }, - - { - description = "aghsfort_omniknight_repel_flat_hp_regen", - ability_name = "aghsfort_omniknight_repel", - special_value_name = "hp_regen", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 20, - }, - - -- { - -- description = "aghsfort_omniknight_degen_aura_flat_radius", - -- ability_name = "aghsfort_omniknight_degen_aura", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 150, - -- }, - - -- { - -- description = "aghsfort_omniknight_degen_aura_flat_move_speed_bonus", - -- ability_name = "aghsfort_omniknight_degen_aura", - -- special_value_name = "move_speed_bonus", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 16, - -- }, - -- { - -- description = "aghsfort_omniknight_degen_aura_flat_attack_speed_bonus", - -- ability_name = "aghsfort_omniknight_degen_aura", - -- special_value_name = "attack_speed_bonus", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 16, - -- }, - - { - description = "aghsfort_omniknight_guardian_angel_flat_duration", - ability_name = "aghsfort_omniknight_guardian_angel", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 3.0, - }, - - -- { - -- description = "aghsfort_omniknight_guardian_angel_flat_radius", - -- ability_name = "aghsfort_omniknight_guardian_angel", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 400, - -- }, - - { - description = "aghsfort_omniknight_guardian_angel_flat_hp_regen", - ability_name = "aghsfort_omniknight_guardian_angel", - special_value_name = "hp_regen", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 50, - }, - -} - -return Omniknight \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_phantom_assassin.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_phantom_assassin.lua deleted file mode 100755 index ed0332a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_phantom_assassin.lua +++ /dev/null @@ -1,140 +0,0 @@ -local PhantomAssassin = -{ - { - description = "aghsfort_phantom_assassin_stifling_dagger_flat_base_damage", - ability_name = "aghsfort_phantom_assassin_stifling_dagger", - special_value_name = "base_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_phantom_assassin_stifling_dagger_flat_attack_factor", - -- ability_name = "aghsfort_phantom_assassin_stifling_dagger", - -- special_value_name = "attack_factor", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = -30, - -- }, - - -- { - -- description = "aghsfort_phantom_assassin_stifling_dagger_flat_mana_cost", - -- ability_name = "aghsfort_phantom_assassin_stifling_dagger", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 10, - -- }, - - -- { - -- description = "aghsfort_phantom_assassin_stifling_dagger_flat_move_slow", - -- ability_name = "aghsfort_phantom_assassin_stifling_dagger", - -- special_value_name = "move_slow", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 50, - -- }, - - { - description = "aghsfort_phantom_assassin_phantom_strike_flat_bonus_attack_speed", - ability_name = "aghsfort_phantom_assassin_phantom_strike", - special_value_name = "bonus_attack_speed", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - - -- { - -- description = "aghsfort_phantom_assassin_phantom_strike_pct_bonus_attack_speed", - -- ability_name = "aghsfort_phantom_assassin_phantom_strike", - -- special_value_name = "bonus_attack_speed", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 40, - -- }, - - { - description = "aghsfort_phantom_assassin_phantom_strike_flat_duration", - ability_name = "aghsfort_phantom_assassin_phantom_strike", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - { - description = "aghsfort_phantom_assassin_phantom_strike_flat_cooldown", - ability_name = "aghsfort_phantom_assassin_phantom_strike", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - - { - description = "aghsfort_phantom_assassin_phantom_strike_flat_bonus_evasion", - ability_name = "aghsfort_phantom_assassin_phantom_strike", - special_value_name = "bonus_evasion", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 20, - }, - - { - description = "aghsfort_phantom_assassin_blur_flat_cooldown", - ability_name = "aghsfort_phantom_assassin_blur", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - - -- { - -- description = "aghsfort_phantom_assassin_blur_flat_bonus_evasion", - -- ability_name = "aghsfort_phantom_assassin_blur", - -- special_value_name = "bonus_evasion", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 20, - -- }, - - -- { - -- description = "aghsfort_phantom_assassin_blur_pct_bonus_evasion", - -- ability_name = "aghsfort_phantom_assassin_blur", - -- special_value_name = "bonus_evasion", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 0.4, - -- }, - - { - description = "aghsfort_phantom_assassin_blur_flat_duration", - ability_name = "aghsfort_phantom_assassin_blur", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - -- { - -- description = "aghsfort_phantom_assassin_blur_flat_mana_cost", - -- ability_name = "aghsfort_phantom_assassin_blur", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 25, - -- }, - - { - description = "aghsfort_phantom_assassin_coup_de_grace_flat_crit_chance", - ability_name = "aghsfort_phantom_assassin_coup_de_grace", - special_value_name = "crit_chance", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 10, - }, - - { - description = "aghsfort_phantom_assassin_coup_de_grace_flat_crit_bonus", - ability_name = "aghsfort_phantom_assassin_coup_de_grace", - special_value_name = "crit_bonus", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - - -- { - -- description = "aghsfort_phantom_assassin_coup_de_grace_pct_crit_bonus", - -- ability_name = "aghsfort_phantom_assassin_coup_de_grace", - -- special_value_name = "crit_bonus", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 100, - -- }, -} - -return PhantomAssassin \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_snapfire.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_snapfire.lua deleted file mode 100755 index 165b84a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_snapfire.lua +++ /dev/null @@ -1,164 +0,0 @@ -local Snapfire = -{ - -- { - -- description = "aghsfort_snapfire_scatterblast_pct_mana_cost", - -- ability_name = "aghsfort_snapfire_scatterblast", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_snapfire_scatterblast_pct_cooldown", - ability_name = "aghsfort_snapfire_scatterblast", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_snapfire_scatterblast_flat_damage", - ability_name = "aghsfort_snapfire_scatterblast", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_snapfire_scatterblast_flat_debuff_duration", - -- ability_name = "aghsfort_snapfire_scatterblast", - -- special_value_name = "debuff_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 3.0, - -- }, - - { - description = "aghsfort_snapfire_scatterblast_flat_point_blank_dmg_bonus_pct", - ability_name = "aghsfort_snapfire_scatterblast", - special_value_name = "point_blank_dmg_bonus_pct", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 75.0, - }, - - { - description = "aghsfort_snapfire_firesnap_cookie_pct_cooldown", - ability_name = "aghsfort_snapfire_firesnap_cookie", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_snapfire_firesnap_cookie_flat_jump_horizontal_distance", - -- ability_name = "aghsfort_snapfire_firesnap_cookie", - -- special_value_name = "jump_horizontal_distance", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 300, - -- }, - - { - description = "aghsfort_snapfire_firesnap_cookie_flat_impact_damage", - ability_name = "aghsfort_snapfire_firesnap_cookie", - special_value_name = "impact_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - { - description = "aghsfort_snapfire_firesnap_cookie_flat_stun_duration", - ability_name = "aghsfort_snapfire_firesnap_cookie", - special_value_name = "impact_stun_duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - -- { - -- description = "aghsfort_snapfire_firesnap_cookie_flat_impact_radius", - -- ability_name = "aghsfort_snapfire_firesnap_cookie", - -- special_value_name = "impact_radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 170, - -- }, - - { - description = "aghsfort_snapfire_lil_shredder_pct_cooldown", - ability_name = "aghsfort_snapfire_lil_shredder", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_snapfire_lil_shredder_flat_damage", - ability_name = "aghsfort_snapfire_lil_shredder", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - - { - description = "aghsfort_snapfire_lil_shredder_flat_attacks", - ability_name = "aghsfort_snapfire_lil_shredder", - special_value_name = "buffed_attacks", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - - -- { - -- description = "aghsfort_snapfire_lil_shredder_flat_attack_range_bonus", - -- ability_name = "aghsfort_snapfire_lil_shredder", - -- special_value_name = "attack_range_bonus", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 200, - -- }, - - -- { - -- description = "aghsfort_snapfire_lil_shredder_flat_attack_speed_bonus", - -- ability_name = "aghsfort_snapfire_lil_shredder", - -- special_value_name = "attack_speed_bonus", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 300, - -- }, - - { - description = "aghsfort_snapfire_mortimer_kisses_pct_cooldown", - ability_name = "aghsfort_snapfire_mortimer_kisses", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_snapfire_mortimer_kisses_flat_projectile_count", - ability_name = "aghsfort_snapfire_mortimer_kisses", - special_value_name = "projectile_count", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - - { - description = "aghsfort_snapfire_mortimer_kisses_flat_burn_damage", - ability_name = "aghsfort_snapfire_mortimer_kisses", - special_value_name = "burn_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - - -- { - -- description = "aghsfort_snapfire_mortimer_kisses_flat_move_slow_pct", - -- ability_name = "aghsfort_snapfire_mortimer_kisses", - -- special_value_name = "move_slow_pct", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 30, - -- }, - - { - description = "aghsfort_snapfire_mortimer_kisses_flat_damage_per_impact", - ability_name = "aghsfort_snapfire_mortimer_kisses", - special_value_name = "damage_per_impact", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, -} - -return Snapfire \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_sniper.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_sniper.lua deleted file mode 100755 index 0c310b7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_sniper.lua +++ /dev/null @@ -1,131 +0,0 @@ -local Sniper = -{ - { - description = "aghsfort_sniper_shrapnel_percent_cooldown", - ability_name = "aghsfort_sniper_shrapnel", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_sniper_shrapnel_flat_damage", - ability_name = "aghsfort_sniper_shrapnel", - special_value_name = "shrapnel_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 150, - }, - - -- { - -- description = "aghsfort_sniper_shrapnel_flat_radius", - -- ability_name = "aghsfort_sniper_shrapnel", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 150, - -- }, - - -- { - -- description = "aghsfort_sniper_shrapnel_flat_slow_movement_speed", - -- ability_name = "aghsfort_sniper_shrapnel", - -- special_value_name = "slow_movement_speed", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = -30, - -- }, - - -- { - -- description = "aghsfort_sniper_shrapnel_percent_mana_cost", - -- ability_name = "aghsfort_sniper_shrapnel", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - { - description = "aghsfort_sniper_shrapnel_duration", - ability_name = "aghsfort_sniper_shrapnel", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - { - description = "aghsfort_sniper_headshot_flat_damage", - ability_name = "aghsfort_sniper_headshot", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 150, - }, - - -- { - -- description = "aghsfort_sniper_headshot_knockback_distance", - -- ability_name = "aghsfort_sniper_headshot", - -- special_value_name = "knockback_distance", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 20, - -- }, - - { - description = "aghsfort_sniper_headshot_proc_chance", - ability_name = "aghsfort_sniper_headshot", - special_value_name = "proc_chance", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 10, - }, - - -- { - -- description = "aghsfort_sniper_headshot_debuff_duration", - -- ability_name = "aghsfort_sniper_headshot", - -- special_value_name = "slow_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2.0, - -- }, - - -- { - -- description = "aghsfort_sniper_take_aim_percent_cooldown", - -- ability_name = "aghsfort_sniper_take_aim", - -- special_value_name = "cooldown", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 12, - -- }, - - { - description = "aghsfort_sniper_take_aim_flat_bonus_attack_range", - ability_name = "aghsfort_sniper_take_aim", - special_value_name = "bonus_attack_range", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - - { - description = "aghsfort_sniper_assassinate_flat_damage", - ability_name = "aghsfort_sniper_assassinate", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 500, - }, - - -- { - -- description = "aghsfort_sniper_assassinate_percent_mana_cost", - -- ability_name = "aghsfort_sniper_assassinate", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_sniper_assassinate_percent_cooldown", - ability_name = "aghsfort_sniper_assassinate", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_sniper_assassinate_projectile_speed", - -- ability_name = "aghsfort_sniper_assassinate", - -- special_value_name = "projectile_speed", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2500, - -- }, - -} - -return Sniper diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_tusk.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_tusk.lua deleted file mode 100755 index 54b4236..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_tusk.lua +++ /dev/null @@ -1,141 +0,0 @@ -local Tusk = -{ - { - description = "aghsfort_tusk_ice_shards_flat_damage", - ability_name = "aghsfort_tusk_ice_shards", - special_value_name = "shard_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_tusk_ice_shards_pct_mana_cost", - -- ability_name = "aghsfort_tusk_ice_shards", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_tusk_ice_shards_pct_cooldown", - ability_name = "aghsfort_tusk_ice_shards", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_tusk_ice_shards_flat_shard_duration", - -- ability_name = "aghsfort_tusk_ice_shards", - -- special_value_name = "shard_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 1.0, - -- }, - - { - description = "aghsfort_tusk_snowball_pct_cooldown", - ability_name = "aghsfort_tusk_snowball", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_tusk_snowball_flat_snowball_damage", - ability_name = "aghsfort_tusk_snowball", - special_value_name = "snowball_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 180, - }, - - -- { - -- description = "aghsfort_tusk_snowball_flat_snowball_speed", - -- ability_name = "aghsfort_tusk_snowball", - -- special_value_name = "snowball_speed", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 200, - -- }, - - -- { - -- description = "aghsfort_tusk_snowball_flat_stun_duration", - -- ability_name = "aghsfort_tusk_snowball", - -- special_value_name = "stun_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 1.0, - -- }, - - { - description = "aghsfort_tusk_tag_team_pct_cooldown", - ability_name = "aghsfort_tusk_tag_team", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_tusk_tag_team_flat_damage", - ability_name = "aghsfort_tusk_tag_team", - special_value_name = "bonus_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 50, - }, - - -- { - -- description = "aghsfort_tusk_tag_team_flat_radius", - -- ability_name = "aghsfort_tusk_tag_team", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 300, - -- }, - - -- { - -- description = "aghsfort_tusk_tag_team_flat_debuff_duration", - -- ability_name = "aghsfort_tusk_tag_team", - -- special_value_name = "debuff_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2.0, - -- }, - - - { - description = "aghsfort_tusk_walrus_punch_pct_cooldown", - ability_name = "aghsfort_tusk_walrus_punch", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_tusk_walrus_punch_flat_crit_multiplier", - ability_name = "aghsfort_tusk_walrus_punch", - special_value_name = "crit_multiplier", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 125, - }, - - -- { - -- description = "aghsfort_tusk_walrus_punch_flat_slow_duration", - -- ability_name = "aghsfort_tusk_walrus_punch", - -- special_value_name = "slow_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 4.0, - -- }, - - -- { - -- description = "aghsfort_tusk_walrus_punch_flat_move_slow", - -- ability_name = "aghsfort_tusk_walrus_punch", - -- special_value_name = "move_slow", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 60, - -- }, - - --{ - -- description = "aghsfort_tusk_walrus_punch_flat_air_time", - -- ability_name = "aghsfort_tusk_walrus_punch", - -- special_value_name = "air_time", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 1.5, - --}, -} - -return Tusk diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_ursa.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_ursa.lua deleted file mode 100755 index ab79b50..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_ursa.lua +++ /dev/null @@ -1,122 +0,0 @@ -local Ursa = -{ - { - description = "aghsfort_ursa_earthshock_flat_damage", - ability_name = "aghsfort_ursa_earthshock", - special_value_name = "impact_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_ursa_earthshock_percent_mana_cost", - -- ability_name = "aghsfort_ursa_earthshock", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - -- { - -- description = "aghsfort_ursa_earthshock_flat_radius", - -- ability_name = "aghsfort_ursa_earthshock", - -- special_value_name = "shock_radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 150, - -- }, - - { - description = "aghsfort_ursa_earthshock_percent_cooldown", - ability_name = "aghsfort_ursa_earthshock", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - -- { - -- description = "aghsfort_ursa_earthshock_flat_hop_distance", - -- ability_name = "aghsfort_ursa_earthshock", - -- special_value_name = "hop_distance", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 200, - -- }, - -- { - -- description = "aghsfort_ursa_earthshock_flat_movement_slow", - -- ability_name = "aghsfort_ursa_earthshock", - -- special_value_name = "movement_slow", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 40, - -- }, - - { - description = "aghsfort_ursa_overpower_flat_max_attacks", - ability_name = "aghsfort_ursa_overpower", - special_value_name = "max_attacks", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - - -- { - -- description = "aghsfort_ursa_overpower_flat_attack_speed_bonus_pct", - -- ability_name = "aghsfort_ursa_overpower", - -- special_value_name = "attack_speed_bonus_pct", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 150, - -- }, - - { - description = "aghsfort_ursa_overpower_percent_cooldown", - ability_name = "aghsfort_ursa_overpower", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_ursa_fury_swipes_flat_damage_per_stack", - ability_name = "aghsfort_ursa_fury_swipes", - special_value_name = "damage_per_stack", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 12, - }, - - -- { - -- description = "aghsfort_ursa_fury_swipes_flat_max_swipe_stack", - -- ability_name = "aghsfort_ursa_fury_swipes", - -- special_value_name = "max_swipe_stack", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2, - -- }, - - { - description = "aghsfort_ursa_enrage_flat_damage_reduction", - ability_name = "aghsfort_ursa_enrage", - special_value_name = "damage_reduction", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 10, - }, - - { - description = "aghsfort_ursa_enrage_flat_duration", - ability_name = "aghsfort_ursa_enrage", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - -- { - -- description = "aghsfort_ursa_enrage_flat_status_resistance", - -- ability_name = "aghsfort_ursa_enrage", - -- special_value_name = "status_resistance", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 20 - -- }, - - { - description = "aghsfort_ursa_enrage_percent_cooldown", - ability_name = "aghsfort_ursa_enrage", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, -} - -return Ursa diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_viper.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_viper.lua deleted file mode 100755 index aa26718..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_viper.lua +++ /dev/null @@ -1,158 +0,0 @@ -local Viper = -{ - -- { - -- description = "aghsfort_viper_poison_attack_pct_mana_cost", - -- ability_name = "aghsfort_viper_poison_attack", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_viper_poison_attack_damage", - ability_name = "aghsfort_viper_poison_attack", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 25, - }, - - -- { - -- description = "aghsfort_viper_poison_attack_magic_resistance", - -- ability_name = "aghsfort_viper_poison_attack", - -- special_value_name = "magic_resistance", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2, - -- }, - - { - description = "aghsfort_viper_poison_attack_movement_speed", - ability_name = "aghsfort_viper_poison_attack", - special_value_name = "movement_speed", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 18, - }, - - -- { - -- description = "aghsfort_viper_poison_attack_duration", - -- ability_name = "aghsfort_viper_poison_attack", - -- special_value_name = "duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2, - -- }, - - -- { - -- description = "aghsfort_viper_poison_attack_max_stacks", - -- ability_name = "aghsfort_viper_poison_attack", - -- special_value_name = "max_stacks", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2, - -- }, - - -- { - -- description = "aghsfort_viper_nethertoxin_pct_mana_cost", - -- ability_name = "aghsfort_viper_nethertoxin", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - - { - description = "aghsfort_viper_nethertoxin_pct_cooldown", - ability_name = "aghsfort_viper_nethertoxin", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_viper_nethertoxin_max_damage", - ability_name = "aghsfort_viper_nethertoxin", - special_value_name = "max_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 150, - }, - - { - description = "aghsfort_viper_nethertoxin_radius", - ability_name = "aghsfort_viper_nethertoxin", - special_value_name = "radius", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - { - description = "aghsfort_viper_nethertoxin_duration", - ability_name = "aghsfort_viper_nethertoxin", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - - -- { - -- description = "aghsfort_viper_corrosive_skin_bonus_attack_speed", - -- ability_name = "aghsfort_viper_corrosive_skin", - -- special_value_name = "bonus_attack_speed", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 18, - -- }, - - { - description = "aghsfort_viper_corrosive_skin_bonus_magic_resistance", - ability_name = "aghsfort_viper_corrosive_skin", - special_value_name = "bonus_magic_resistance", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 10, - }, - - -- { - -- description = "aghsfort_viper_corrosive_skin_damage", - -- ability_name = "aghsfort_viper_corrosive_skin", - -- special_value_name = "damage", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 32, - -- }, - - -- { - -- description = "aghsfort_viper_corrosive_skin_duration", - -- ability_name = "aghsfort_viper_corrosive_skin", - -- special_value_name = "duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 8, - -- }, - - { - description = "aghsfort_viper_viper_strike_pct_cooldown", - ability_name = "aghsfort_viper_viper_strike", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_viper_viper_strike_pct_mana_cost", - -- ability_name = "aghsfort_viper_viper_strike", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_viper_viper_strike_duration", - ability_name = "aghsfort_viper_viper_strike", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 3.0, - }, - - { - description = "aghsfort_viper_viper_strike_damage", - ability_name = "aghsfort_viper_viper_strike", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - -} - -return Viper \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_weaver.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_weaver.lua deleted file mode 100755 index e42865c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_weaver.lua +++ /dev/null @@ -1,135 +0,0 @@ -local Weaver = -{ - - { - description = "aghsfort_weaver_the_swarm_percent_cooldown", - ability_name = "aghsfort_weaver_the_swarm", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_weaver_the_swarm_flat_damage", - -- ability_name = "aghsfort_weaver_the_swarm", - -- special_value_name = "damage", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 24, - -- }, - - { - description = "aghsfort_weaver_the_swarm_flat_attack_rate", - ability_name = "aghsfort_weaver_the_swarm", - special_value_name = "attack_rate", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = -0.15, - }, - - { - description = "aghsfort_weaver_the_swarm_flat_count", - ability_name = "aghsfort_weaver_the_swarm", - special_value_name = "count", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - { - description = "aghsfort_weaver_the_swarm_flat_armor_reduction", - ability_name = "aghsfort_weaver_the_swarm", - special_value_name = "armor_reduction", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 1.0, - }, - { - description = "aghsfort_weaver_the_swarm_flat_duration", - ability_name = "aghsfort_weaver_the_swarm", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 4, - }, - { - description = "aghsfort_weaver_the_swarm_flat_destroy_attacks", - ability_name = "aghsfort_weaver_the_swarm", - special_value_name = "destroy_attacks", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - -- { - -- description = "aghsfort_weaver_shukuchi_percent_manacost", - -- ability_name = "aghsfort_weaver_shukuchi", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_weaver_shukuchi_percent_cooldown", - ability_name = "aghsfort_weaver_shukuchi", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_weaver_shukuchi_flat_damage", - ability_name = "aghsfort_weaver_shukuchi", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_weaver_shukuchi_flat_speed", - -- ability_name = "aghsfort_weaver_shukuchi", - -- special_value_name = "speed", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 60, - -- }, - - { - description = "aghsfort_weaver_shukuchi_duration", - ability_name = "aghsfort_weaver_shukuchi", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - -- { - -- description = "aghsfort_weaver_shukuchi_radius", - -- ability_name = "aghsfort_weaver_shukuchi", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 70, - -- }, - { - description = "aghsfort_weaver_geminate_attack_cooldown", - ability_name = "aghsfort_weaver_geminate_attack", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - { - description = "aghsfort_weaver_geminate_attack_flat_bonus_damage", - ability_name = "aghsfort_weaver_geminate_attack", - special_value_name = "bonus_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_weaver_time_lapse_percent_manacost", - -- ability_name = "aghsfort_weaver_time_lapse", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - { - description = "aghsfort_weaver_time_lapse_cooldown", - ability_name = "aghsfort_weaver_time_lapse", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -} - -return Weaver \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_winter_wyvern.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_winter_wyvern.lua deleted file mode 100755 index bfd7029..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_winter_wyvern.lua +++ /dev/null @@ -1,157 +0,0 @@ -local WinterWyvern = -{ - { - description = "aghsfort_winter_wyvern_arctic_burn_flat_damage", - ability_name = "aghsfort_winter_wyvern_arctic_burn", - special_value_name = "damage_per_second", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - - { - description = "aghsfort_winter_wyvern_arctic_burn_flat_duration", - ability_name = "aghsfort_winter_wyvern_arctic_burn", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - -- { - -- description = "aghsfort_winter_wyvern_arctic_burn_flat_range", - -- ability_name = "aghsfort_winter_wyvern_arctic_burn", - -- special_value_name = "attack_range_bonus", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 100, - -- }, - - -- { - -- description = "aghsfort_winter_wyvern_arctic_burn_flat_move_slow", - -- ability_name = "aghsfort_winter_wyvern_arctic_burn", - -- special_value_name = "move_slow", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 50, - -- }, - - -- { - -- description = "aghsfort_winter_wyvern_splinter_blast_flat_slow", - -- ability_name = "aghsfort_winter_wyvern_splinter_blast", - -- special_value_name = "bonus_movespeed", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 50, - -- }, - - -- { - -- description = "aghsfort_winter_wyvern_splinter_blast_flat_radius", - -- ability_name = "aghsfort_winter_wyvern_splinter_blast", - -- special_value_name = "split_radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 250, - -- }, - - -- { - -- description = "aghsfort_winter_wyvern_splinter_blast_flat_slow_duration", - -- ability_name = "aghsfort_winter_wyvern_splinter_blast", - -- special_value_name = "duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 4.0, - -- }, - - { - description = "aghsfort_winter_wyvern_splinter_blast_flat_damage", - ability_name = "aghsfort_winter_wyvern_splinter_blast", - special_value_name = "splinter_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - - -- { - -- description = "aghsfort_winter_wyvern_splinter_blast_pct_mana_cost", - -- ability_name = "aghsfort_winter_wyvern_splinter_blast", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_winter_wyvern_splinter_blast_pct_cooldown", - ability_name = "aghsfort_winter_wyvern_splinter_blast", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_winter_wyvern_cold_embrace_pct_cooldown", - ability_name = "aghsfort_winter_wyvern_cold_embrace", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_winter_wyvern_cold_embrace_flat_heal_additive", - ability_name = "aghsfort_winter_wyvern_cold_embrace", - special_value_name = "heal_additive", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 48, - }, - - { - description = "aghsfort_winter_wyvern_cold_embrace_flat_heal_percentage", - ability_name = "aghsfort_winter_wyvern_cold_embrace", - special_value_name = "heal_percentage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - { - description = "aghsfort_winter_wyvern_cold_embrace_flat_duration", - ability_name = "aghsfort_winter_wyvern_cold_embrace", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2.0, - }, - - - { - description = "aghsfort_winter_wyvern_winters_curse_pct_cooldown", - ability_name = "aghsfort_winter_wyvern_winters_curse", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - -- { - -- description = "aghsfort_winter_wyvern_winters_curse_pct_manacost", - -- ability_name = "aghsfort_winter_wyvern_winters_curse", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - { - description = "aghsfort_winter_wyvern_winters_curse_flat_bonus_attack_speed", - ability_name = "aghsfort_winter_wyvern_winters_curse", - special_value_name = "bonus_attack_speed", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 50, - }, - - { - description = "aghsfort_winter_wyvern_winters_curse_flat_duration", - ability_name = "aghsfort_winter_wyvern_winters_curse", - special_value_name = "duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 3.0, - }, - - { - description = "aghsfort_winter_wyvern_winters_curse_flat_radius", - ability_name = "aghsfort_winter_wyvern_winters_curse", - special_value_name = "radius", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 250, - }, -} - -return WinterWyvern \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_witch_doctor.lua b/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_witch_doctor.lua deleted file mode 100755 index c4f14ee..0000000 --- a/aghanim_singleplayer/scripts/vscripts/minor_ability_upgrades/minor_ability_upgrades_witch_doctor.lua +++ /dev/null @@ -1,166 +0,0 @@ -local Witch_Doctor = -{ - -- { - -- description = "aghsfort_witch_doctor_paralyzing_cask_manacost", - -- ability_name = "aghsfort_witch_doctor_paralyzing_cask", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - -- { - -- description = "aghsfort_witch_doctor_voodoo_restoration_manacost", - -- ability_name = "aghsfort_witch_doctor_voodoo_restoration", - -- special_value_name = "mana_per_second", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - - -- { - -- description = "aghsfort_witch_doctor_maledict_manacost", - -- ability_name = "aghsfort_witch_doctor_maledict", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - -- { - -- description = "aghsfort_witch_doctor_death_ward_manacost", - -- ability_name = "aghsfort_witch_doctor_death_ward", - -- special_value_name = "mana_cost", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = 30, - -- }, - { - description = "aghsfort_witch_doctor_paralyzing_cask_cooldown", - ability_name = "aghsfort_witch_doctor_paralyzing_cask", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_witch_doctor_maledict_cooldown", - ability_name = "aghsfort_witch_doctor_maledict", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_witch_doctor_death_ward_cooldown", - ability_name = "aghsfort_witch_doctor_death_ward", - special_value_name = "cooldown", - operator = MINOR_ABILITY_UPGRADE_OP_MUL, - value = 12, - }, - - { - description = "aghsfort_witch_doctor_paralyzing_cask_flat_damage", - ability_name = "aghsfort_witch_doctor_paralyzing_cask", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - -- { - -- description = "aghsfort_witch_doctor_paralyzing_cask_flat_bounce_range", - -- ability_name = "aghsfort_witch_doctor_paralyzing_cask", - -- special_value_name = "bounce_range", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 400, - -- }, - -- { - -- description = "aghsfort_witch_doctor_paralyzing_cask_flat_bounces", - -- ability_name = "aghsfort_witch_doctor_paralyzing_cask", - -- special_value_name = "bounces", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 3, - -- }, - -- { - -- description = "aghsfort_witch_doctor_paralyzing_cask_flat_stun_duration", - -- ability_name = "aghsfort_witch_doctor_paralyzing_cask", - -- special_value_name = "stun_duration", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2.00, - -- }, - -- { - -- description = "aghsfort_witch_doctor_voodoo_restoration_flat_radius", - -- ability_name = "aghsfort_witch_doctor_voodoo_restoration", - -- special_value_name = "radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 200, - -- }, - { - description = "aghsfort_witch_doctor_voodoo_restoration_flat_heal", - ability_name = "aghsfort_witch_doctor_voodoo_restoration", - special_value_name = "heal", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - --{ - -- description = "aghsfort_witch_doctor_voodoo_restoration_mul_heal_interval", - -- ability_name = "aghsfort_witch_doctor_voodoo_restoration", - -- special_value_name = "heal_interval", - -- operator = MINOR_ABILITY_UPGRADE_OP_MUL, - -- value = -15, - --}, - - { - description = "aghsfort_witch_doctor_maledict_flat_radius", - ability_name = "aghsfort_witch_doctor_maledict", - special_value_name = "radius", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 100, - }, - { - description = "aghsfort_witch_doctor_maledict_flat_bonus_damage", - ability_name = "aghsfort_witch_doctor_maledict", - special_value_name = "bonus_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 32, - }, - { - description = "aghsfort_witch_doctor_maledict_flat_max_bonus_damage", - ability_name = "aghsfort_witch_doctor_maledict", - special_value_name = "max_bonus_damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 200, - }, - { - description = "aghsfort_witch_doctor_maledict_flat_ticks", - ability_name = "aghsfort_witch_doctor_maledict", - special_value_name = "ticks", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - { - description = "aghsfort_witch_doctor_death_ward_flat_damage", - ability_name = "aghsfort_witch_doctor_death_ward", - special_value_name = "damage", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 150, - }, - -- { - -- description = "aghsfort_witch_doctor_death_ward_flat_bounce_radius", - -- ability_name = "aghsfort_witch_doctor_death_ward", - -- special_value_name = "bounce_radius", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 300, - -- }, - -- { - -- description = "aghsfort_witch_doctor_death_ward_flat_bounces", - -- ability_name = "aghsfort_witch_doctor_death_ward", - -- special_value_name = "bounces", - -- operator = MINOR_ABILITY_UPGRADE_OP_ADD, - -- value = 2, - -- }, - { - description = "aghsfort_witch_doctor_death_ward_flat_channel_duration", - ability_name = "aghsfort_witch_doctor_death_ward", - special_value_name = "channel_duration", - operator = MINOR_ABILITY_UPGRADE_OP_ADD, - value = 2, - }, - -} - -return Witch_Doctor \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_announcer_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_announcer_passive.lua deleted file mode 100755 index aa0d7c6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_announcer_passive.lua +++ /dev/null @@ -1,39 +0,0 @@ - -modifier_aghanim_announcer_passive = class({}) - ----------------------------------------- - -function modifier_aghanim_announcer_passive:OnCreated( kv ) - print( "modifier_aghanim_announcer_passive" ) -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_announcer_passive:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_announcer_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_announcer_passive:CheckState() - local state = {} - if IsServer() then - state[ MODIFIER_STATE_INVULNERABLE ] = true - state[ MODIFIER_STATE_MAGIC_IMMUNE ] = true - state[ MODIFIER_STATE_UNSELECTABLE ] = true - state[ MODIFIER_STATE_NOT_ON_MINIMAP ] = true - state[ MODIFIER_STATE_NO_UNIT_COLLISION ] = true - state[ MODIFIER_STATE_NO_HEALTH_BAR ] = true - state[ MODIFIER_STATE_DISARMED ] = true - state[ MODIFIER_STATE_ROOTED ] = true - state[ MODIFIER_STATE_ATTACK_IMMUNE ] = true - end - - return state -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_crystal_attack_active.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_crystal_attack_active.lua deleted file mode 100755 index 348ce9c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_crystal_attack_active.lua +++ /dev/null @@ -1,63 +0,0 @@ -modifier_aghanim_crystal_attack_active = class({}) - ---------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_active:GetEffectName() - return "particles/creatures/aghanim/aghanim_pulse_ambient.vpcf"; -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_active:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_active:OnCreated( kv ) - self.pulse_radius = self:GetAbility():GetSpecialValueFor( "pulse_radius" ) - self.pulse_damage = self:GetAbility():GetSpecialValueFor( "pulse_damage" ) - self.debuff_duration = self:GetAbility():GetSpecialValueFor( "debuff_duration" ) - self.pulse_damage_pct = self:GetAbility():GetSpecialValueFor( "pulse_damage_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_active:Pulse() - if IsServer() then - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_self_dmg.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( self.pulse_radius, self.pulse_radius, self.pulse_radius ) ) - - EmitSoundOn( "Hero_Lich.IceAge.Tick", self:GetParent() ) - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetParent():GetAbsOrigin(), nil, self.pulse_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy:IsAttackImmune() == false then - - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_aghanim_crystal_attack_debuff", { duration = self.debuff_duration } ) - - local flDamage = enemy:GetMaxHealth() * self.pulse_damage_pct / 100 - - local damage = - { - victim = enemy, - attacker = self:GetCaster(), - damage = flDamage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self:GetAbility(), - } - - ApplyDamage( damage ) - - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_pulse_nova.vpcf", PATTACH_ABSORIGIN_FOLLOW, enemy ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - - EmitSoundOn( "Hero_Leshrac.Pulse_Nova_Strike", enemy ) - end - end - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_crystal_attack_debuff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_crystal_attack_debuff.lua deleted file mode 100755 index ba39562..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_crystal_attack_debuff.lua +++ /dev/null @@ -1,81 +0,0 @@ -modifier_aghanim_crystal_attack_debuff = class({}) - - -function modifier_aghanim_crystal_attack_debuff:GetAttributes() - return MODIFIER_ATTRIBUTE_MULTIPLE -end - - ---------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:IsPurgable() - return false -end - - ---------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:GetEffectName() - return "particles/units/heroes/hero_ancient_apparition/ancient_apparition_ice_blast_debuff.vpcf"; -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:GetStatusEffectName() - return "particles/status_fx/status_effect_iceblast.vpcf"; -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:OnCreated( kv ) - self.heal_suppression_pct = self:GetAbility():GetSpecialValueFor( "heal_suppression_pct" ) - self.nArmorReductionPerStack = math.max( math.floor( self:GetAbility():GetSpecialValueFor( "armor_reduction_pct" ) * self:GetParent():GetPhysicalArmorValue( false ) / 100 ), 1 ) -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_LIFESTEAL_AMPLIFY_PERCENTAGE, - MODIFIER_PROPERTY_SPELL_LIFESTEAL_AMPLIFY_PERCENTAGE, - MODIFIER_PROPERTY_HP_REGEN_AMPLIFY_PERCENTAGE, - MODIFIER_PROPERTY_HEAL_AMPLIFY_PERCENTAGE_TARGET, - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - - } - return funcs -end ------------------------------------------------------------------------------------------ - -function modifier_aghanim_crystal_attack_debuff:GetModifierPhysicalArmorBonus() - if self.nArmorReductionPerStack == nil then - return 0 - end - - return self.nArmorReductionPerStack * -1 -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:GetModifierHealAmplify_PercentageTarget( params ) - return -self.heal_suppression_pct -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:GetModifierHPRegenAmplify_Percentage( params ) - return -self.heal_suppression_pct -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:GetModifierLifestealRegenAmplify_Percentage( params ) - return -self.heal_suppression_pct -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_crystal_attack_debuff:GetModifierSpellLifestealRegenAmplify_Percentage( params ) - return -self.heal_suppression_pct -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_passive.lua deleted file mode 100755 index 509b1f7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_passive.lua +++ /dev/null @@ -1,230 +0,0 @@ - -modifier_aghanim_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_aghanim_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_aghanim_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - ------------------------------------------------------------------------------------------ - -function modifier_aghanim_passive:CheckState() - local state = - { - [MODIFIER_STATE_HEXED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_FROZEN] = false, - [MODIFIER_STATE_FEARED] = false, - [MODIFIER_STATE_CANNOT_BE_MOTION_CONTROLLED] = true, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - } - - if IsServer() then - if self:GetParent() and self:GetParent().AI and self:GetParent().AI.bDefeated == true then - state[MODIFIER_STATE_INVULNERABLE] = true - end - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_passive:OnCreated( kv ) - self.status_resist = self:GetAbility():GetSpecialValueFor( "status_resist" ) - if IsServer() then - self:GetParent().bAbsoluteNoCC = true - self:GetParent().bNoNullifier = true - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_passive:OnRefresh( kv ) - self.status_resist = self:GetAbility():GetSpecialValueFor( "status_resist" ) -end - ------------------------------------------------------------------------------------------ - -function modifier_aghanim_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MIN_HEALTH, - MODIFIER_EVENT_ON_DEATH_PREVENTED, - MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_passive:GetModifierStatusResistanceStacking( params ) - return self.status_resist -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_passive:GetMinHealth( params ) - if IsServer() then - if GameRules.Aghanim:GetAscensionLevel() < 3 then - return math.floor( self:GetParent():GetMaxHealth() * 0.1 ) - end - end - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_passive:OnDeathPrevented( params ) - if IsServer() then - if self:GetParent() == params.unit and self:GetParent().AI and self:GetParent().AI.Encounter and self:GetParent().AI.bDefeated == false then - print( "Game Over - Players win! Play Aghanim Victory Sequence" ) - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_invulnerable", { duration = -1 } ) - end - end - - local Angles = self:GetParent():GetAnglesAsVector() - CustomGameEventManager:Send_ServerToAllClients( "begin_aghanim_victory", { ent_index = self:GetParent():entindex(), yaw = Angles.y } ) - - self:GetParent().AI.bDefeated = true - self:GetParent():Interrupt() - self:GetParent():InterruptChannel() - self:GetParent():Purge( false, true, false, true, true ) - --self:GetParent():SetAbsAngles( 0, 270, 0 ) - self:GetParent().AI.Encounter:BeginVictorySequence() - - EmitSoundOn( "Aghanim.ShardAttack.Channel", self:GetCaster() ) - if GameRules.Aghanim:GetAscensionLevel() < 3 then - self:GetParent():StartGestureFadeWithSequenceSettings( ACT_DOTA_CAST_ABILITY_3 ) - else - self:GetParent():StartGestureFadeWithSequenceSettings( ACT_DOTA_SPAWN ) - end - self.nOutroPhase = 1 - self:StartIntervalThink( 2.0 ) - end - end - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_passive:OnIntervalThink() - if IsServer() then - - if self.nOutroPhase == 1 then - if GameRules.Aghanim:GetAscensionLevel() < 3 then - EmitSoundOn( "Aghanim.ShardAttack.Wave", self:GetCaster() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_self_dmg.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 2500, 2500, 2500 ) ) - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:RemoveModifierByName( "modifier_invulnerable" ) - hPlayerHero:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_aghanim_crystal_attack_debuff", { duration = -1 } ) - hPlayerHero:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_stunned", { duration = -1 } ) - hPlayerHero:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_invulnerable", { duration = -1 } ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_pulse_nova.vpcf", PATTACH_ABSORIGIN_FOLLOW, hPlayerHero ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - EmitSoundOn( "Hero_Leshrac.Pulse_Nova_Strike", hPlayerHero ) - end - end - self:GetParent():FadeGesture( ACT_DOTA_CAST_ABILITY_3 ) - else - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_boss_intro", { duration = -1 } ) - end - end - - self:GetParent():FadeGesture( ACT_DOTA_SPAWN ) - end - - local AlliedUnits = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetAbsOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,Ally in pairs( AlliedUnits ) do - if Ally:GetUnitName() == "npc_dota_boss_aghanim_crystal" or Ally:GetUnitName() == "npc_dota_boss_aghanim_minion" or Ally:GetUnitName() == "npc_dota_thinker" or Ally:GetUnitName() == "npc_dota_boss_aghanim_spear" then - Ally:ForceKill( false ) - end - end - - self.nOutroPhase = self.nOutroPhase + 1 - self:StartIntervalThink( 2.0 ) - self:GetParent():FadeGesture( ACT_DOTA_CAST_ABILITY_3 ) - self:GetParent():StartGestureFadeWithSequenceSettings( ACT_DOTA_VICTORY ) - return - end - - if self.nOutroPhase == 2 then - self.nPortalFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/portal_summon.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( self.nPortalFX, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:SetParticleControlForward( self.nPortalFX, 0, self:GetParent():GetForwardVector() ) - - self.nOutroPhase = self.nOutroPhase + 1 - self:StartIntervalThink( 0.1 ) - return - end - - if self.nOutroPhase == 3 then - if self:GetParent().Encounter and self:GetParent().Encounter.nVictoryState ~= self:GetParent().Encounter.AGH_VICTORY_BOWING then - return - end - - EmitSoundOn( "SeasonalConsumable.TI10.Portal.Open", self:GetParent() ) - EmitSoundOn( "SeasonalConsumable.TI10.Portal.Loop", self:GetParent() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_outro_linger.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 0, self:GetParent():GetForwardVector() ) - - self:GetParent():FadeGesture( ACT_DOTA_VICTORY ) - self:GetParent():StartGestureFadeWithSequenceSettings( ACT_DOTA_DIE ) - self.nOutroPhase = self.nOutroPhase + 1 - self:StartIntervalThink( 5.67 ) - return - end - - if self.nOutroPhase == 4 then - self:GetParent().bOutroComplete = true - ParticleManager:DestroyParticle( self.nPortalFX, false ) - - StopSoundOn( "SeasonalConsumable.TI10.Portal.Open", self:GetParent() ) - StopSoundOn( "SeasonalConsumable.TI10.Portal.Loop", self:GetParent() ) - - self:StartIntervalThink( -1 ) - self:GetParent():AddEffects( EF_NODRAW ) - - for nPlayerID = 0,AGHANIM_PLAYERS-1 do - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero then - hPlayerHero:RemoveModifierByName( "modifier_stunned" ) - hPlayerHero:RemoveModifierByName( "modifier_aghanim_crystal_attack_debuff" ) - hPlayerHero:StartGestureFadeWithSequenceSettings( ACT_DOTA_VICTORY ) - end - end - return - end - - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_portal_spawn_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_portal_spawn_effect.lua deleted file mode 100755 index c27fce0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_portal_spawn_effect.lua +++ /dev/null @@ -1,79 +0,0 @@ -modifier_aghanim_portal_spawn_effect = class({}) - ---------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:IsHidden() - return true -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:OnCreated( kv ) - if IsServer() then - self:StartIntervalThink( 1.0 ) - end -end - - --------------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:OnIntervalThink() - if IsServer() then - self:GetParent():RemoveEffects( EF_NODRAW ) - self:StartIntervalThink( -1 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 20000 -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:GetEffectName() - return "particles/units/heroes/hero_pugna/pugna_decrepify.vpcf" -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:GetStatusEffectName() - return "particles/status_fx/status_effect_ghost.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MODEL_SCALE, - } - return funcs -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:GetModifierModelScale( params ) - return ( self:GetElapsedTime() / self:GetDuration() - 1.0 ) * 100 -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_portal_spawn_effect:CheckState() - local state = - { - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_UNSELECTABLE] = true, - [MODIFIER_STATE_STUNNED] = true, - [MODIFIER_STATE_NO_UNIT_COLLISION] = true, - } - return state -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_spell_swap.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_spell_swap.lua deleted file mode 100755 index cac088d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_spell_swap.lua +++ /dev/null @@ -1,166 +0,0 @@ -modifier_aghanim_spell_swap = class({}) - ---------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap:IsHidden() - return false -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_aghanim_spell_swap:GetAttributes() - return MODIFIER_ATTRIBUTE_MULTIPLE -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap:OnCreated( kv ) - if IsServer() then - self:DisableSpell() - end -end - ----------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - --------------------------------------------------------------------------------- - - -function modifier_aghanim_spell_swap:OnDeath( params ) - if IsServer() then - if params.unit == self.hCrystal then - self:Destroy() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap:DisableSpell() - if IsServer() then - local NormalAbilities = {} - for i=0,DOTA_MAX_ABILITIES-1 do - local hAbility = self:GetParent():GetAbilityByIndex( i ) - if hAbility and not hAbility:IsCosmetic( nil ) and not hAbility:IsAttributeBonus() and hAbility:GetAssociatedPrimaryAbilities() == nil and not hAbility:IsHidden() and not hAbility.bAghDisabled == true and not hAbility.bAghDummy == true and hAbility:IsActivated() then - print( "considering ability for disable: " .. hAbility:GetAbilityName() ) - table.insert( NormalAbilities, hAbility ) - end - end - - local nNextAghDummy = nil - for j=1,4 do - local szName = tostring( "aghanim_empty_spell" .. j ) - local hDummyAbility = self:GetParent():FindAbilityByName( szName ) - nNextAghDummy = j - if not hDummyAbility then - break - end - end - - - local nIndexToDisable = math.random( 1, #NormalAbilities ) - local hAbilityToDisable = NormalAbilities[ nIndexToDisable ] - - if nNextAghDummy == nil or hAbilityToDisable == nil then - self:Destroy() - print( "Cannot disable spell:" ) - print( "Next agh dummy: " .. nNextAghDummy ) - if hAbilityToDisable ~= nil then - print( "hAbilityToDisable " .. hAbilityToDisable:GetAbilityName() ) - end - return - end - - local hNewDummyAbility = self:GetParent():AddAbility( tostring( "aghanim_empty_spell" .. nNextAghDummy ) ) - if hNewDummyAbility then - print( "adding dummy ability for disable: " .. hNewDummyAbility:GetAbilityName() ) - hNewDummyAbility:UpgradeAbility( true ) - hNewDummyAbility:SetActivated( true ) - hNewDummyAbility.bAghDummy = true - hNewDummyAbility.nOriginalIndex = hNewDummyAbility:GetAbilityIndex() - end - - - hAbilityToDisable.bAghDisabled = true - print( "disabling " .. hAbilityToDisable:GetAbilityName() ) - if hAbilityToDisable:GetToggleState() then - --print( "toggling ability off" ) - hAbilityToDisable:OnToggle() - end - - hAbilityToDisable:SetActivated( false ) - hAbilityToDisable.nOriginalIndex = hAbilityToDisable:GetAbilityIndex() - - self.hDisabledAbility = hAbilityToDisable - self.hDummyAbility = hNewDummyAbility - - self:GetParent():SwapAbilities( self.hDisabledAbility:GetAbilityName(), self.hDummyAbility:GetAbilityName(), false, true ) - self.hDummyAbility:SetActivated( false ) - - --self.hDisabledAbility:SetAbilityIndex( self.hDummyAbility.nOriginalIndex ) - --self.hDisabledAbility:SetHidden( true ) - --self.hDummyAbility:SetAbilityIndex( self.hDisabledAbility.nOriginalIndex ) - --self.hDummyAbility:SetHidden( false ) - - self.hCrystal = CreateUnitByName( "npc_dota_boss_aghanim_crystal", self:GetCaster():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster():GetOwner(), self:GetCaster():GetTeamNumber() ) - if self.hCrystal then - self.hCrystal:SetControllableByPlayer( self:GetCaster():GetPlayerOwnerID(), false ) - self.hCrystal:SetOwner( self:GetCaster() ) - self.hCrystal:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_aghanim_spell_swap_crystal", {} ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap:RestoreSpell() - if IsServer() then - if self.hDisabledAbility and self.hDummyAbility then - self.hDisabledAbility:SetActivated( true ) - self.hDisabledAbility.bAghDisabled = false - self.hDisabledAbility:SetHidden( false ) - self:GetParent():RemoveAbilityFromIndexByName( self.hDisabledAbility:GetAbilityName() ) - self:GetParent():SetAbilityByIndex( self.hDisabledAbility, self.hDisabledAbility.nOriginalIndex ) -- this destroys the dummy spell - - if self.hCrystal then - self.hCrystal:AddEffects( EF_NODRAW ) - if self.hCrystal:IsAlive() then - self.hCrystal:ForceKill( false ) - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_crystal_destroy.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self.hCrystal:GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Hero_Wisp.Spirits.Destroy", self.hCrystal ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_crystal_spellswap_replenish.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 0, self.hCrystal, PATTACH_POINT_FOLLOW, "attach_attack1", self.hCrystal:GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap:OnDestroy() - if IsServer() then - self:RestoreSpell() - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_spell_swap_crystal.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_spell_swap_crystal.lua deleted file mode 100755 index 7e79d74..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_spell_swap_crystal.lua +++ /dev/null @@ -1,181 +0,0 @@ -modifier_aghanim_spell_swap_crystal = class({}) - ---------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:IsHidden() - return true -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:IsPurgable() - return false -end - ---------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:GetEffectName() - return "particles/creatures/aghanim/aghanim_crystal_spellswap_ambient.vpcf" -end - ----------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_PHYSICAL, - MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_MAGICAL, - MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_PURE, - MODIFIER_EVENT_ON_ATTACKED, - } - - return funcs -end - ----------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:CheckState() - local state = - { - [MODIFIER_STATE_MAGIC_IMMUNE] = true, - [MODIFIER_STATE_FLYING] = true, - } - return state -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:OnCreated( kv ) - if IsServer() then - self.num_crystal_hits = self:GetAbility():GetSpecialValueFor( "num_crystal_hits" ) - - self:GetParent():SetBaseMaxHealth( self.num_crystal_hits * 2 ) - self:GetParent():SetMaxHealth( self.num_crystal_hits * 2 ) - self:GetParent():SetHealth( self.num_crystal_hits * 2 ) - - self.flRotationTime = 12.0 - self.flRotationDist = 300.0 - self.flHeight = RandomFloat( 120.0, 180.0 ) - self.flRotation = RandomFloat( 0, 360 ) - self.flRecoverTime = -1 - - self:StartIntervalThink( 0.25 ) - - if self:ApplyHorizontalMotionController() == false or self:ApplyVerticalMotionController() == false then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:OnIntervalThink() - if IsServer() then - if GameRules:GetGameTime() > self.flRecoverTime then - self.flRotationTime = 12.0 - end - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - self:GetParent():RemoveVerticalMotionController( self ) - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:UpdateHorizontalMotion( me, dt ) - if IsServer() then - self.flRotation = self.flRotation + ( 2.0 * dt * math.pi / self.flRotationTime ) - local flX = self.flRotationDist * math.sin( self.flRotation ) - local flY = self.flRotationDist * math.cos( self.flRotation ) - if self:GetCaster() and self:GetParent() then - local vNewLocation = self:GetCaster():GetAbsOrigin() + Vector( flX, flY, self:GetParent():GetAbsOrigin().z ) - me:SetOrigin( vNewLocation ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:UpdateVerticalMotion( me, dt ) - if IsServer() then - local flHeight = GetGroundHeight( self:GetParent():GetAbsOrigin(), self:GetParent() ) + self.flHeight - local vNewLocation = self:GetParent():GetAbsOrigin() - vNewLocation.z = flHeight - me:SetOrigin( vNewLocation ) - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:OnVerticalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:GetAbsoluteNoDamagePhysical( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:GetAbsoluteNoDamageMagical( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:GetAbsoluteNoDamagePure( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_spell_swap_crystal:OnAttacked( params ) - if IsServer() then - if self:GetParent() == params.target then - local nDamage = 0 - if params.attacker then - local bDeathWard = params.attacker:FindModifierByName( "modifier_aghsfort_witch_doctor_death_ward" ) ~= nil - local bValidAttacker = params.attacker:IsRealHero() or bDeathWard - if not bValidAttacker then - return 0 - end - - nDamage = 2 - if params.attacker:FindModifierByName( "modifier_aghsfort_snapfire_lil_shredder_buff" ) or bDeathWard then - nDamage = 1 - end - - self.flRotationTime = 36.0 - self.flRecoverTime = GameRules:GetGameTime() + 1.0 - self:GetParent():ModifyHealth( self:GetParent():GetHealth() - nDamage, nil, true, 0 ) - - EmitSoundOn( "Hero_Wisp.Spirits.Target", self:GetParent() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_crystal_impact.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), false ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - end - - return 0 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_debuff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_debuff.lua deleted file mode 100755 index c51e43f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_debuff.lua +++ /dev/null @@ -1,55 +0,0 @@ - -modifier_aghanim_staff_beams_debuff = class({}) - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_debuff:IsHidden() - return true -end - - ------------------------------------------------------------------------------ - -function modifier_aghanim_staff_beams_debuff:OnCreated( kv ) - if IsServer() then - self.beam_dps = self:GetAbility():GetSpecialValueFor( "beam_dps" ) - self.beam_dps_pct = self:GetAbility():GetSpecialValueFor( "beam_dps_pct" ) - self.damage_interval = self:GetAbility():GetSpecialValueFor( "damage_interval" ) - self:OnIntervalThink() - self:StartIntervalThink( self.damage_interval ) - - EmitSoundOn( "Hero_Huskar.Burning_Spear", self:GetParent() ) - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_staff_beams_debuff:OnDestroy() - if IsServer() then - StopSoundOn( "Hero_Huskar.Burning_Spear", self:GetParent() ) - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_staff_beams_debuff:OnIntervalThink() - if IsServer() then - local flHealthPctDamage = self.beam_dps_pct * self:GetParent():GetMaxHealth() / 100 - local flDamage = self.beam_dps + flHealthPctDamage - local damageInfo = - { - victim = self:GetParent(), - attacker = self:GetCaster(), - damage = flDamage * self.damage_interval, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_beam_burn.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end -end - ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_linger_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_linger_thinker.lua deleted file mode 100755 index 89f5479..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_linger_thinker.lua +++ /dev/null @@ -1,68 +0,0 @@ - -modifier_aghanim_staff_beams_linger_thinker = class({}) - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:IsAura() - return true -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:GetModifierAura() - return "modifier_aghanim_staff_beams_debuff" -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_ENEMY -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:GetAuraSearchType() - return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:GetAuraRadius() - return self.beam_radius -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:OnCreated( kv ) - self.beam_radius = self:GetAbility():GetSpecialValueFor( "beam_radius" ) - if IsServer() then - EmitSoundOn( "n_black_dragon.Fireball.Target", self:GetParent() ) - self.nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/staff_beam_linger.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( self.nFXIndex, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, Vector( self.beam_radius, 1, 1 ) ) - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:OnDestroy() - if IsServer() then - StopSoundOn( "n_black_dragon.Fireball.Target", self:GetParent() ) - ParticleManager:DestroyParticle( self.nFXIndex, false ) - UTIL_Remove( self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_staff_beams_linger_thinker:OnRefresh( kv ) - self.beam_radius = self:GetAbility():GetSpecialValueFor( "beam_radius" ) -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_thinker.lua deleted file mode 100755 index b8b14de..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_staff_beams_thinker.lua +++ /dev/null @@ -1,22 +0,0 @@ - -modifier_aghanim_staff_beams_thinker = class({}) - ------------------------------------------------------------------------------ - -function modifier_aghanim_staff_beams_thinker:OnCreated( kv ) - if IsServer() then - self.linger_time = self:GetAbility():GetSpecialValueFor( "linger_time" ) - self.linger_create_interval = self:GetAbility():GetSpecialValueFor( "linger_create_interval" ) - self:StartIntervalThink( self.linger_create_interval ) - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_staff_beams_thinker:OnIntervalThink() - if IsServer() then - CreateModifierThinker( self:GetCaster(), self:GetAbility(), "modifier_aghanim_staff_beams_linger_thinker", { duration = self.linger_time }, self:GetParent():GetAbsOrigin(), self:GetCaster():GetTeamNumber(), false ) - end -end - ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_summon_portals_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_summon_portals_thinker.lua deleted file mode 100755 index 686f613..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghanim_summon_portals_thinker.lua +++ /dev/null @@ -1,220 +0,0 @@ - -modifier_aghanim_summon_portals_thinker = class({}) - ------------------------------------------------------------------------------ - -function modifier_aghanim_summon_portals_thinker:OnCreated( kv ) - if IsServer() then - self.nMode = kv.mode - self.hTarget = EntIndexToHScript( kv.target_entindex ) - self.nDepth = kv.depth - - local vFwd = nil - if self.hTarget == nil then - vFwd = self:GetCaster():GetAbsOrigin() - self:GetParent():GetAbsOrigin() - vFwd = vFwd:Normalized() - else - vFwd = self.hTarget:GetAbsOrigin() - self:GetParent():GetAbsOrigin() - vFwd = vFwd:Normalized() - end - - local szEffect = nil - if self.nMode == self:GetAbility().PORTAL_MODE_ALL_SPEARS and self.hTarget then - self:CreateSpear() - szEffect = "particles/creatures/aghanim/portal_summon.vpcf" - self:StartIntervalThink( 0.1 ) - else - self:CreateEnemies() - szEffect = "particles/creatures/aghanim/portal_summon.vpcf" - end - - EmitSoundOn( "SeasonalConsumable.TI10.Portal.Open", self:GetParent() ) - EmitSoundOn( "SeasonalConsumable.TI10.Portal.Loop", self:GetParent() ) - - self.nPortalFX = ParticleManager:CreateParticle( szEffect, PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( self.nPortalFX, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:SetParticleControlForward( self.nPortalFX, 0, vFwd ) - - AddFOWViewer( DOTA_TEAM_GOODGUYS, self:GetParent():GetAbsOrigin(), 300.0, self:GetDuration(), false ) - GridNav:DestroyTreesAroundPoint( self:GetParent():GetAbsOrigin(), 300, false ) - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_summon_portals_thinker:CreateSpear() - if IsServer() then - self.hSpear = CreateUnitByName( "npc_dota_boss_aghanim_spear", self:GetParent():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster():GetOwner(), self:GetCaster():GetTeamNumber() ) - if self.hSpear then - self.hSpear:SetControllableByPlayer( self:GetCaster():GetPlayerOwnerID(), false ) - self.hSpear:SetOwner( self:GetCaster() ) - self.hSpear:AddEffects( EF_NODRAW ) - self.hSpear:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_rooted", {} ) - self.hSpear:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_hero_statue_pedestal", {} ) - - --self.hSpear:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_aghanim_portal_spawn_effect", {} ) - self.hSpear:FaceTowards( self.hTarget:GetAbsOrigin() ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_summon_portals_thinker:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_IGNORE_CAST_ANGLE, - } - return funcs -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_summon_portals_thinker:GetModifierIgnoreCastAngle( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_aghanim_summon_portals_thinker:OnIntervalThink() - if IsServer() then - if self.hSpear then - self.hSpear:RemoveEffects( EF_NODRAW ) - self.hSpear:FaceTowards( self.hTarget:GetAbsOrigin() ) - end - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_summon_portals_thinker:CreateEnemies() - if IsServer() then - self.Summons = {} - if 1 then - nCount = 2 - for n=1,nCount do - local vSpawnPos = self:GetParent():GetAbsOrigin() + RandomVector( 25 * nCount ) - local hSummon = CreateUnitByName( "npc_dota_creature_aghanim_minion", vSpawnPos, true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hSummon ~= nil then - table.insert( self.Summons, hSummon ) - hSummon.nDisableResistance = hSummon:GetDisableResistance( ) - hSummon.nUltimateDisableResistance = hSummon:GetUltimateDisableResistance( ) - hSummon:SetDisableResistance( 0 ) - hSummon:SetUltimateDisableResistance( 0 ) - hSummon:SetOwner( self:GetCaster() ) - hSummon:SetDeathXP( 0 ) - hSummon:SetMinimumGoldBounty( 0 ) - hSummon:SetMaximumGoldBounty( 0 ) - hSummon:AddEffects( EF_NODRAW ) - hSummon:SetAbsAngles( 0, RandomFloat( 0, 360 ), 0 ) - hSummon:SetMaterialGroup( "1" ) - hSummon:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_aghanim_portal_spawn_effect", { duration = self:GetRemainingTime() } ) - - end - end - else - local PossibleSummons = GameRules.Aghanim:GetSummonsForAghanim() - local Summon = nil - - while Summon == nil and self.nDepth > 1 do - for _,CurSummon in pairs( PossibleSummons ) do - if CurSummon[ "depth" ] == self.nDepth then - Summon = CurSummon - break - end - end - - if Summon == nil then - self.nDepth = self.nDepth - 1 - end - end - - if Summon then - local nCount = math.max( 1, 5 - math.floor( self.nDepth / 2 ) ) - for n=1,nCount do - local vSpawnPos = self:GetParent():GetAbsOrigin() + RandomVector( 25 * nCount ) - local hSummon = CreateUnitByName( Summon[ "unit_name" ], vSpawnPos, true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hSummon ~= nil then - table.insert( self.Summons, hSummon ) - hSummon.nDisableResistance = hSummon:GetDisableResistance( ) - hSummon.nUltimateDisableResistance = hSummon:GetUltimateDisableResistance( ) - hSummon:SetDisableResistance( 0 ) - hSummon:SetUltimateDisableResistance( 0 ) - hSummon:SetOwner( self:GetCaster() ) - hSummon:SetDeathXP( 0 ) - hSummon:SetMinimumGoldBounty( 0 ) - hSummon:SetMaximumGoldBounty( 0 ) - hSummon:AddEffects( EF_NODRAW ) - hSummon:SetAbsAngles( 0, RandomFloat( 0, 360 ), 0 ) - hSummon:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_aghanim_portal_spawn_effect", { duration = self:GetRemainingTime() } ) - - end - end - end - end - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_summon_portals_thinker:OnDestroy() - if IsServer() then - if self.nMode == self:GetAbility().PORTAL_MODE_ALL_SPEARS then - self:LaunchSpear() - else - self:ReleaseEnemies() - end - StopSoundOn( "SeasonalConsumable.TI10.Portal.Open", self:GetParent() ) - StopSoundOn( "SeasonalConsumable.TI10.Portal.Loop", self:GetParent() ) - - ParticleManager:DestroyParticle( self.nPortalFX, false ) - UTIL_Remove( self:GetParent() ) - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_summon_portals_thinker:LaunchSpear() - if IsServer() then - if self.hSpear ~= nil then - self.hSpear:AddEffects( EF_NODRAW ) - self.hSpear:ForceKill( false ) - end - - local hSpear = self:GetCaster():FindAbilityByName( "aghanim_spear" ) - if hSpear and self.hTarget then - hSpear:EndCooldown() - - EmitSoundOn( "SeasonalConsumable.TI10.Portal.Emit", self:GetParent() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_portal_emit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - hSpear:LaunchSpear( self.hTarget:GetAbsOrigin(), self:GetParent():GetAbsOrigin() ) - else - print( "No spear, or no target?" ) - end - end -end - ------------------------------------------------------------------------------ - -function modifier_aghanim_summon_portals_thinker:ReleaseEnemies() - if IsServer() then - for _, Summon in pairs ( self.Summons ) do - EmitSoundOn( "SeasonalConsumable.TI10.Portal.Emit", Summon ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_portal_emit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, Summon:GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - Summon:RemoveModifierByName( "modifier_aghanim_portal_spawn_effect" ) - Summon:SetAcquisitionRange( 5000 ) - Summon:SetDayTimeVisionRange( 5000 ) - Summon:SetNightTimeVisionRange( 5000 ) - Summon:SetDisableResistance( Summon.nDisableResistance ) - Summon:SetUltimateDisableResistance( Summon.nUltimateDisableResistance ) - Summon.bBossMinion = true - FindClearSpaceForUnit( Summon, Summon:GetAbsOrigin(), false ) - end - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghsfort_waveblaster_summon_ghost_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghsfort_waveblaster_summon_ghost_thinker.lua deleted file mode 100755 index fc2a1fe..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghsfort_waveblaster_summon_ghost_thinker.lua +++ /dev/null @@ -1,40 +0,0 @@ -modifier_aghsfort_waveblaster_summon_ghost_thinker = class({}) - - -function modifier_aghsfort_waveblaster_summon_ghost_thinker:OnCreated( kv ) - if IsServer() then - self.nFXIndex = ParticleManager:CreateParticle( "particles/econ/items/ancient_apparition/ancient_apparation_ti8/ancient_ice_vortex_ti8.vpcf", PATTACH_ABSORIGIN, self:GetParent() ) - end -end - - - ------------------------------------------------------------------- - -function modifier_aghsfort_waveblaster_summon_ghost_thinker:OnDestroy() - if IsServer() then - local hCreep = CreateUnitByName( "npc_aghsfort_creature_wave_blaster_ghost", self:GetParent():GetOrigin(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hCreep ~= nil then - hCreep:SetOwner( self:GetCaster() ) - hCreep:SetControllableByPlayer( self:GetCaster():GetPlayerOwnerID(), false ) - hCreep:SetInitialGoalEntity( self:GetCaster():GetInitialGoalEntity() ) - hCreep:SetDeathXP( 0 ) - hCreep:SetMinimumGoldBounty( 0 ) - hCreep:SetMaximumGoldBounty( 0 ) - end - - local nExplosionFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_ancient_apparition/ancient_apparition_ice_blast_explode.vpcf", PATTACH_CUSTOMORIGIN, NULL ) - ParticleManager:SetParticleControl( nExplosionFX, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nExplosionFX, 3, self:GetParent():GetOrigin() ) - ParticleManager:ReleaseParticleIndex( nExplosionFX ) - EmitSoundOn( "Aghsfort_Abilty_Specials.Tusk.Snowball_Damage_End", hCreep ) - - - ParticleManager:DestroyParticle( self.nFXIndex, true ) - UTIL_Remove( self:GetParent() ) - end -end - ------------------------------------------------------------------- - - \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghsfort_wisp_autoattack.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghsfort_wisp_autoattack.lua deleted file mode 100755 index e9a9c8b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_aghsfort_wisp_autoattack.lua +++ /dev/null @@ -1,46 +0,0 @@ - -modifier_aghsfort_wisp_autoattack = class({}) - --------------------------------------------------------------------------------- - -function modifier_aghsfort_wisp_autoattack:OnCreated( kv ) - self.attack_range = self:GetParent():Script_GetAttackRange() - self.attack_interval = self:GetAbility():GetSpecialValueFor( "attack_interval" ) - - self:StartIntervalThink( self.attack_interval ) -end - --------------------------------------------------------------------------------- - -function modifier_aghsfort_wisp_autoattack:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_aghsfort_wisp_autoattack:OnRefresh( kv ) - self.radius =self:GetParent():Script_GetAttackRange() - self.attack_interval = self:GetAbility():GetSpecialValueFor( "attack_interval" ) -end - - -function modifier_aghsfort_wisp_autoattack:OnIntervalThink() - if IsServer() then - - if not self:GetParent():IsAlive() then - return -1 - end - - if not self:GetParent():FindModifierByName("modifier_aghsfort_wisp_tether") then - local hEnemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, self.attack_range, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies > 0 then - for _, hEnemy in pairs( hEnemies ) do - if hEnemy ~= nil and hEnemy:IsAlive() == true then - self:GetParent():PerformAttack( hEnemy, true, true, true, true, true, false, true ) - break - end - end - end - end - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_baby_broodmother_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_baby_broodmother_passive.lua deleted file mode 100755 index c4a3a38..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_baby_broodmother_passive.lua +++ /dev/null @@ -1,81 +0,0 @@ - -modifier_baby_broodmother_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_passive:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_passive:OnCreated( kv ) - if IsServer() then - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.landing_damage = self:GetAbility():GetSpecialValueFor( "landing_damage" ) - self.launch_duration = self:GetAbility():GetSpecialValueFor( "launch_duration" ) - self.knockback_duration = self:GetAbility():GetSpecialValueFor( "knockback_duration" ) - self.knockback_distance = self:GetAbility():GetSpecialValueFor( "knockback_distance" ) - self.knockback_height = self:GetAbility():GetSpecialValueFor( "knockback_height" ) - - self:StartIntervalThink( self.launch_duration ) -- this is hacky: launch duration (0.75) matches the enchant totem leap duration; ideally we'd create the thinker using OnModifierAdded or similar - end -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_passive:OnIntervalThink() - if IsServer() then - self:DamageEnemiesOnLanding() - - self:StartIntervalThink( -1 ) - - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_passive:DamageEnemiesOnLanding() - if IsServer() then - local hEnemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NONE, 0, false ) - if #hEnemies > 0 then - for _, hEnemy in pairs( hEnemies ) do - if hEnemy ~= nil and ( not hEnemy:IsMagicImmune() ) and ( not hEnemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = hEnemy, - attacker = self:GetCaster(), - ability = self:GetAbility(), - damage = self.landing_damage, - damage_type = self:GetAbility():GetAbilityDamageType(), - } - ApplyDamage( DamageInfo ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_passive:CheckState() - local state = - { - [ MODIFIER_STATE_UNSELECTABLE ] = true, - [ MODIFIER_STATE_OUT_OF_GAME ] = true, - [ MODIFIER_STATE_INVULNERABLE ] = true, - [ MODIFIER_STATE_MAGIC_IMMUNE ] = true, - [ MODIFIER_STATE_DISARMED ] = true, - } - - return state -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_baby_broodmother_venom_pool.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_baby_broodmother_venom_pool.lua deleted file mode 100755 index d2efc1c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_baby_broodmother_venom_pool.lua +++ /dev/null @@ -1,104 +0,0 @@ - -modifier_baby_broodmother_venom_pool = class({}) - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:IsAura() - return true -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:GetModifierAura() - return "modifier_viper_nethertoxin" -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_ENEMY -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:GetAuraSearchType() - return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:GetAuraRadius() - return self.radius -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:OnCreated( kv ) - if IsServer() then - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - - self.nFXIndex = ParticleManager:CreateParticle( "particles/baby_brood_venom_pool.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( self.nFXIndex, 0, self:GetCaster():GetAbsOrigin() ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, Vector( self.radius, 1, 1 ) ) - - EmitSoundOn( "Hero_Viper.Nethertoxin", self:GetCaster() ) - - self:StartIntervalThink( 1 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:OnIntervalThink() - if IsServer() then - if not self:GetCaster() then - self:Destroy() - return - end - - local hEnemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #hEnemies > 0 then - for _, hEnemy in pairs( hEnemies ) do - if hEnemy and hEnemy:IsInvulnerable() == false and hEnemy:IsMagicImmune() == false then - local damage = { - victim = hEnemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = self:GetAbility():GetAbilityDamageType(), - ability = self:GetAbility() - } - - ApplyDamage( damage ) - - EmitSoundOn( "Hero_Viper.NetherToxin.Damage", hEnemy ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_baby_broodmother_venom_pool:OnDestroy() - if IsServer() then - ParticleManager:DestroyParticle( self.nFXIndex, false ) - self:GetParent():StopSound( "Hero_Viper.Nethertoxin" ) - UTIL_Remove( self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bandit_archer_arrow_debuff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bandit_archer_arrow_debuff.lua deleted file mode 100755 index 6a088a4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bandit_archer_arrow_debuff.lua +++ /dev/null @@ -1,33 +0,0 @@ - -modifier_bandit_archer_arrow_debuff = class({}) - --------------------------------------------------------------------------------- - -function modifier_bandit_archer_arrow_debuff:OnCreated( kv ) - if IsServer() then - self.nBreakFX = ParticleManager:CreateParticle( "particles/generic_gameplay/generic_break.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - -function modifier_bandit_archer_arrow_debuff:OnDestroy() - if IsServer() then - if self.nBreakFX ~= nil then - ParticleManager:DestroyParticle( self.nBreakFX, false ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_bandit_archer_arrow_debuff:CheckState() - local state = - { - [ MODIFIER_STATE_PASSIVES_DISABLED ] = true, - } - - return state -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_landmine_detonate.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_landmine_detonate.lua deleted file mode 100755 index bd387e9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_landmine_detonate.lua +++ /dev/null @@ -1,99 +0,0 @@ -modifier_bomb_squad_landmine_detonate = class({}) - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_detonate:OnCreated( kv ) - if IsServer() then - self.radius = self:GetAbility():GetSpecialValueFor( "detonate_radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "detonate_damage" ) - self.duration = self:GetRemainingTime() - self.flExplodeTime = GameRules:GetGameTime() + self.duration - 0.2 - - self:StartIntervalThink( 0 ) - end -end - - --------------------------------------------------------------- - -function modifier_bomb_squad_landmine_detonate:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end --------- - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_detonate:OnIntervalThink() - if IsServer() then - - local nFXIndex = ParticleManager:CreateParticle( "particles/econ/events/darkmoon_2017/darkmoon_calldown_marker_ring.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( self:GetRemainingTime() / 6, self:GetRemainingTime() / 6, self:GetRemainingTime() / 6 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Creature_Bomb_Squad.LandMine.Priming", self:GetParent() ) - - if GameRules:GetGameTime() > self.flExplodeTime then - self:Detonate() - end - - self:StartIntervalThink( self:GetRemainingTime() / 3 ) - - end -end - - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_detonate:OnDestroy() - if IsServer() then - self:GetParent():ForceKill( false ) - end -end - -function modifier_bomb_squad_landmine_detonate:Detonate() - if IsServer() then - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetCaster(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - for _,enemy in pairs(enemies) do - if enemy ~= nil and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - ability = self, - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - } - ApplyDamage( DamageInfo ) - end - end - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_techies/techies_land_mine_explode.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 1.0, 1.0, self.radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 1.0, 1.0, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Creature_Bomb_Squad.LandMine.Detonate", self:GetParent() ) - self:GetParent():ForceKill( false ) - end - -end - - -function modifier_bomb_squad_landmine_detonate:OnDeath( params ) - if IsServer() then - if params.unit == self:GetParent() then - params.unit:AddEffects( EF_NODRAW ) - end - end -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_landmine_intrinsic.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_landmine_intrinsic.lua deleted file mode 100755 index 74fcbec..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_landmine_intrinsic.lua +++ /dev/null @@ -1,112 +0,0 @@ -modifier_bomb_squad_landmine_intrinsic = class({}) - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:CheckState() - local state = - { - [MODIFIER_STATE_NO_UNIT_COLLISION] = true, - [MODIFIER_STATE_ROOTED] = true, - [MODIFIER_STATE_MAGIC_IMMUNE] = true, - } - - return state -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:DeclareFunctions() - local funcs = { - MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE, - MODIFIER_EVENT_ON_ATTACKED, - MODIFIER_EVENT_ON_DEATH, - } - - return funcs - -end - ----------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:IsPurgable() - return false -end - ----------------------------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:CanParentBeAutoAttacked() - return true -end - ------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:GetAbsoluteNoDamageMagical( params ) - return 1 -end - ------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:GetAbsoluteNoDamagePure( params ) - return 1 -end - ------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:GetAbsoluteNoDamagePhysical( params ) - return 1 -end - ------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:GetModifierIncomingDamage_Percentage( params ) - return -100 -end - - ------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:OnAttacked( params ) - if IsServer() then - - if params.target == self:GetParent() then - - self:GetParent():ForceKill( false ) - end - end - - return 1 -end - ------------------------------------------------------------- - -function modifier_bomb_squad_landmine_intrinsic:OnDeath( params ) - if IsServer() then - if params.unit == self:GetParent() then - local iChainReactionRadius = self:GetAbility():GetSpecialValueFor( "chain_radius" ) - local hFriendlyMines = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, iChainReactionRadius, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hFriendlyMines > 0 then - for _,entity in pairs (hFriendlyMines) do - if entity ~= nil and entity:IsNull() == false and entity ~= self:GetParent() and entity:IsAlive() and entity:GetUnitName() == self:GetParent():GetUnitName() and not entity:FindModifierByName("modifier_bomb_squad_landmine_detonate") then - local hAbility = entity:FindAbilityByName("bomb_squad_landmine_detonate") - if hAbility ~= nil then - entity:AddNewModifier( entity, hAbility, "modifier_bomb_squad_landmine_detonate", { duration = hAbility:GetSpecialValueFor( "chain_duration" ) } ) - end - end - end - end - - self:GetParent():AddEffects( EF_NODRAW ) - end - - end - - return 0 -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_mine_charge.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_mine_charge.lua deleted file mode 100755 index dc2de33..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_mine_charge.lua +++ /dev/null @@ -1,152 +0,0 @@ - -modifier_bomb_squad_mine_charge = class({}) - -------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:IsPurgable() - return false -end --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:OnCreated( kv ) - if IsServer() then - self.vTarget = Vector( kv["vLocX"], kv["vLocY"], kv["vLocZ"] ) - self.vDir = self.vTarget - self:GetParent():GetOrigin() - self.vDir = self.vDir:Normalized() - self.szMineUnit = "npc_aghsfort_creature_bomb_squad_landmine" - self.speed = self:GetAbility():GetSpecialValueFor( "speed" ) - - self.mine_spawn_interval = self:GetAbility():GetSpecialValueFor( "mine_spawn_interval" ) - self.max_launch_distance = self:GetAbility():GetSpecialValueFor( "max_launch_distance" ) - self.flLastMineTime = GameRules:GetGameTime() - self:GetParent():StartGesture( ACT_DOTA_RUN ) - - - self:OnIntervalThink() - self:StartIntervalThink( 0.33 ) - if self:ApplyHorizontalMotionController() == false then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:OnIntervalThink() - if IsServer() then - if GameRules:GetGameTime() - self.flLastMineTime > self.mine_spawn_interval then - self:SpawnMine() - end - if self:GetParent():IsStunned() == true then - self:Destroy() - end - - end -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:UpdateHorizontalMotion( me, dt ) - if IsServer() then - local vNewLocation = self:GetParent():GetOrigin() + self.vDir * self.speed * dt - me:SetOrigin( vNewLocation ) - end -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:SpawnMine() - if IsServer() then - local hUnit = self:GetParent() - if hUnit == nil then - return - end - if not hUnit:IsAlive() then - return - end - - local hMine = CreateUnitByName( self.szMineUnit, self:GetParent():GetAbsOrigin(), true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - local nMaxDistance = self.max_launch_distance - -- spawn the mine a little bit bit behind us - local vLoc = self:GetParent():GetOrigin() - self.vDir * nMaxDistance - - hMine:SetDeathXP( 0 ) - hMine:SetMinimumGoldBounty( 0 ) - hMine:SetMaximumGoldBounty( 0 ) - - local kv = - { - vLocX = vLoc.x, - vLocY = vLoc.y, - vLocZ = vLoc.z, - } - hMine:SetAbsAngles( 0 , vLoc.y, 0 ) - - hMine:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_frostivus2018_broodbaby_launch", kv ) - self.flLastMineTime = GameRules:GetGameTime() - EmitSoundOn( "Creature_Bomb_Squad.LandMine.Plant", hMine ) - end - - return -end - - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:OnDestroy() - if IsServer() then - self:GetParent():RemoveGesture( ACT_DOTA_RUN ) - self:GetParent():RemoveHorizontalMotionController( self ) - end -end - --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_DISABLE_TURNING, - } - - return funcs -end - - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:GetModifierDisableTurning(params) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_mine_charge:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA + 100 -end - ------------------------------------------------------------------------------------------ - -function modifier_bomb_squad_mine_charge:CheckState() - local state = - { - [MODIFIER_STATE_HEXED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_FROZEN] = false, - [MODIFIER_STATE_FEARED] = false, - } - return state -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_self_cast.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_self_cast.lua deleted file mode 100755 index b698591..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_self_cast.lua +++ /dev/null @@ -1,154 +0,0 @@ -modifier_bomb_squad_self_cast = class({}) - -require( "utility_functions" ) -- require utility_functions early (other required files may use its functions) -require( "aghanim_utility_functions" ) -- require utility_functions early (other required files may use its functions) --------------------------------------------------------------------------------- - -function modifier_bomb_squad_self_cast:IsPurgable() - return false; -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_self_cast:IsHidden() - return true; -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_self_cast:OnCreated( kv ) - if IsServer() then - self.hMines = { } - self.max_active_mines = self:GetAbility():GetSpecialValueFor( "max_active_mines" ) - self.mine_spawn_interval = self:GetAbility():GetSpecialValueFor( "mine_spawn_interval" ) - self.max_launch_distance = self:GetAbility():GetSpecialValueFor( "max_launch_distance" ) - self.flLastMineTime = GameRules:GetGameTime() - self.flLastOrderTime = GameRules:GetGameTime() - 5 - self.bActivated = false; - self.szMineUnit = "npc_aghsfort_creature_bomb_squad_landmine" - - self:OnIntervalThink() - end -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_self_cast:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_DEATH, - MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE, - } - - return funcs -end - -function modifier_bomb_squad_self_cast:OnIntervalThink() - if IsServer() then - - if GameRules:GetGameTime() - self.flLastOrderTime > 5 then - self:DoMove() - - end - - if GameRules:GetGameTime() - self.flLastMineTime > self.mine_spawn_interval then - self:SpawnMine() - end - - if self.bActivated == false then - self.bActivated = true - self:StartIntervalThink( 1 ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_self_cast:SpawnMine() - if IsServer() then - local hUnit = self:GetParent() - if hUnit == nil then - return - end - if not hUnit:IsAlive() then - return - end - - if #self.hMines > self.max_active_mines then - return - end - - local hMine = CreateUnitByName( self.szMineUnit, self:GetParent():GetAbsOrigin(), true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - local nMaxDistance = self.max_launch_distance - local vLoc = FindPathablePositionNearby(self:GetParent():GetAbsOrigin(), 150, nMaxDistance ) - table.insert( self.hMines, hMine ) - - local heroes = FindRealLivingEnemyHeroesInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetAbsOrigin(), FIND_UNITS_EVERYWHERE ) - local hero = heroes[RandomInt(1, #heroes)] - if hero ~= nil then - hMine:SetInitialGoalEntity( hero ) - else - hMine:SetInitialGoalEntity( self:GetParent().hInitialGoalEntity ) - end - - hMine:SetDeathXP( 0 ) - hMine:SetMinimumGoldBounty( 0 ) - hMine:SetMaximumGoldBounty( 0 ) - - local kv = - { - vLocX = vLoc.x, - vLocY = vLoc.y, - vLocZ = vLoc.z, - } - hMine:SetAbsAngles( 0 , vLoc.y, 0 ) - - hMine:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_frostivus2018_broodbaby_launch", kv ) - self.flLastMineTime = GameRules:GetGameTime() - EmitSoundOn( "Creature_Bomb_Squad.LandMine.Plant", hMine ) - end - - return -end - - - --------------------------------------------------------------------------------- - - -function modifier_bomb_squad_self_cast:DoMove() - if IsServer() then - - for i=1,4 do - local vLoc = FindPathablePositionNearby(self:GetParent():GetAbsOrigin(), 800, 2000 ) - - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vLoc, - Queue = false, - }) - self.flLastOrderTime = GameRules:GetGameTime() - - break - end - end - end - return -end - --------------------------------------------------------------------------------- - - -function modifier_bomb_squad_self_cast:OnDeath( params ) - if IsServer() then - if TableContainsValue (self.hMines, params.unit) then - local k = TableFindKey(self.hMines, params.unit) - params.unit:AddEffects( EF_NODRAW ) - table.remove(self.hMines, k) - end - end -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_stasis_trap.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_stasis_trap.lua deleted file mode 100755 index 6c558b1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomb_squad_stasis_trap.lua +++ /dev/null @@ -1,91 +0,0 @@ -modifier_bomb_squad_stasis_trap = class({}) --------------------------------------------------------------------------------- -function modifier_bomb_squad_stasis_trap:IsHidden() - return true -end --------------------------------------------------------------------------------- - -function modifier_bomb_squad_stasis_trap:OnCreated() - self.radius = self:GetAbility():GetSpecialValueFor( "detonate_radius" ) - self.activation_delay = self:GetAbility():GetSpecialValueFor( "activation_delay" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.bActivated = false - self.bTriggered = false - self:StartIntervalThink( self.activation_delay ) -end - --------------------------------------------------------------------------------- - -function modifier_bomb_squad_stasis_trap:OnIntervalThink() - if IsServer() then - if self.bActivated == false then - self.bActivated = true - - EmitSoundOn("Hero_Techies.StasisTrap.Plant", self:GetParent()) - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_techies/techies_stasis_trap_plant.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControlOrientation( nFXIndex, 1, self:GetParent():GetForwardVector(), self:GetParent():GetRightVector(), self:GetParent():GetUpVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - self:StartIntervalThink( 0.1 ) - end - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - self:Detonate() - end - end -end - -function modifier_bomb_squad_stasis_trap:Detonate() - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle("particles/units/heroes/hero_techies/techies_stasis_trap_explode.vpcf", PATTACH_WORLDORIGIN, self:GetParent()) - ParticleManager:SetParticleControl(nFXIndex, 0, self:GetParent():GetAbsOrigin()) - ParticleManager:SetParticleControl(nFXIndex, 1, Vector(self.radius , 1, 1)) - ParticleManager:SetParticleControl(nFXIndex, 3, self:GetParent():GetAbsOrigin()) - ParticleManager:ReleaseParticleIndex(nFXIndex) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - EmitSoundOn("Hero_Techies.StasisTrap.Stun", self:GetParent()) - for _,enemy in pairs(enemies) do - --apply stun modifier - if enemy ~= nil and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = enemy, - attacker = self:GetParent(), - ability = self:GetAbility(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - } - ApplyDamage( DamageInfo ) - enemy:AddNewModifier(self:GetParent(), self:GetAbility(), "modifier_techies_stasis_trap_stunned", {duration = self.stun_duration}) - end - end - end - self:Destroy() - end -end - -function modifier_bomb_squad_stasis_trap:OnDeath( params ) - if IsServer() then - if params.unit == self:GetParent() then - params.unit:AddEffects( EF_NODRAW ) - end - end -end - --------------------------------------------------------------------------------- -function modifier_bomb_squad_stasis_trap:OnDestroy() - if IsServer() then - if self:GetParent() ~= nil and self:GetParent():IsAlive() then - self:GetParent():ForceKill(false) - end - end -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_death_explosion.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_death_explosion.lua deleted file mode 100755 index 0510d63..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_death_explosion.lua +++ /dev/null @@ -1,158 +0,0 @@ - -modifier_bomber_death_explosion = class({}) - --------------------------------------------------------------- - -function modifier_bomber_death_explosion:IsHidden() - return true -end - --------------------------------------------------------------- - -function modifier_bomber_death_explosion:IsPurgable() - return false -end - --------------------------------------------------------------- - -function modifier_bomber_death_explosion:OnCreated() - local min_delay = self:GetAbility():GetSpecialValueFor( "min_delay_time" ) - local max_delay = self:GetAbility():GetSpecialValueFor( "max_delay_time" ) - --printf( 'min = %f, max = %f\n', min_delay, max_delay ) - - EmitSoundOn( "Ability.Bomber.Priming", self:GetParent() ) - - self.is_ascension_ability = self:GetAbility():GetSpecialValueFor( "is_ascension_ability" ) - - local delay = RandomFloat( min_delay, max_delay ) - self:StartIntervalThink( delay ) - - if IsServer() then - - if self.is_ascension_ability == 0 then - self:GetParent():StartGesture( ACT_DOTA_VICTORY ) - else - local nOverheadFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_gyrocopter/gyro_guided_missile_target.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - self:AddParticle( nOverheadFX, false, false, -1, false, false ) - end - - local radius = self:GetAbility():GetSpecialValueFor( "radius" ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_calldown_marker_ring.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( radius, radius, radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( delay, delay, delay ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end -end - ---------------------------------------------------------- - -function modifier_bomber_death_explosion:CheckState() - if self.is_ascension_ability == 1 then - return {} - end - - local state = - { - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_ROOTED] = true, - [MODIFIER_STATE_DISARMED] = true, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_UNSELECTABLE] = true, - } - - return state -end - --------------------------------------------------------------- - -function modifier_bomber_death_explosion:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MIN_HEALTH, - MODIFIER_PROPERTY_MODEL_SCALE - } - - return funcs -end -------------------------------------------------------------------- - -function modifier_bomber_death_explosion:OnIntervalThink() - if not IsServer() then - return - end - - if self:GetAbility() == nil then - return - end - - local damage = self:GetAbility():GetSpecialValueFor( "damage" ) - local radius = self:GetAbility():GetSpecialValueFor( "radius" ) - - EmitSoundOn( "Ability.Bomber.Detonate", self:GetParent() ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/units/heroes/hero_techies/techies_remote_mines_detonate.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex2, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex2, 1, Vector( radius, radius, radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - - local nTeam = DOTA_UNIT_TARGET_TEAM_ENEMY - if self.is_ascension_ability == 1 then - nTeam = DOTA_UNIT_TARGET_TEAM_FRIENDLY - end - - local entities = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, radius, nTeam, - DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - - if #entities > 0 then - for _,entity in pairs(entities) do - if entity ~= nil and entity:IsNull() == false and entity ~= self:GetParent() and ( not entity:IsMagicImmune() ) and ( not entity:IsInvulnerable() ) then - local DamageInfo = - { - victim = entity, - attacker = self:GetCaster(), - ability = self, - damage = damage, - damage_type = DAMAGE_TYPE_MAGICAL, - } - if self.is_ascension_ability == 1 then - DamageInfo.damage = DamageInfo.damage * entity:GetMaxHealth() / 100.0 - DamageInfo.damage_type = DAMAGE_TYPE_PURE - end - ApplyDamage( DamageInfo ) - end - end - end - - if self.is_ascension_ability == 0 then - self:GetParent():AddEffects( EF_NODRAW ) - self:GetParent():ForceKill( false ) - else - self:Destroy() - end - -end - --------------------------------------------------------------------------------- - -function modifier_bomber_death_explosion:GetMinHealth( params ) - if IsServer() and self.is_ascension_ability == 0 then - return 1 - end - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_bomber_death_explosion:GetModifierModelScale( params ) - if self:GetCaster() == nil then - return 0 - end - - if self:GetCaster():PassivesDisabled() or self.is_ascension_ability == 1 then - return 0 - end - - return 70 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_death_explosion_trigger.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_death_explosion_trigger.lua deleted file mode 100755 index 888890f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_death_explosion_trigger.lua +++ /dev/null @@ -1,45 +0,0 @@ - -modifier_bomber_death_explosion_trigger = class({}) - --------------------------------------------------------------- - -function modifier_bomber_death_explosion_trigger:IsHidden() - return true -end - --------------------------------------------------------------- - -function modifier_bomber_death_explosion_trigger:IsPurgable() - return false -end - --------------------------------------------------------------- - -function modifier_bomber_death_explosion_trigger:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE_KILLCREDIT, - } - - return funcs -end -------------------------------------------------------------------- - -function modifier_bomber_death_explosion_trigger:OnTakeDamageKillCredit( params ) - if IsServer() then - local flDamage = params.damage - - --printf( 'Take Damage Kill Credit, damage = %f', flDamage ) - - if params.target == self:GetParent() then - local health = self:GetParent():GetHealth() - --printf( 'health = %d, damage = %f\n', health, flDamage ) - if flDamage >= health then - self:GetParent():AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_bomber_death_explosion", { delay = 2 } ) - end - end - - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_suicide_on_attack.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_suicide_on_attack.lua deleted file mode 100755 index 18ca7b4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_bomber_suicide_on_attack.lua +++ /dev/null @@ -1,59 +0,0 @@ - -modifier_bomber_suicide_on_attack = class({}) - --------------------------------------------------------------- - -function modifier_bomber_suicide_on_attack:IsHidden() - return true -end - --------------------------------------------------------------- - -function modifier_bomber_suicide_on_attack:IsPurgable() - return false -end - --------------------------------------------------------------- - -function modifier_bomber_suicide_on_attack:OnCreated( kv ) - self.suicide_chance = 0 - local hAbility = self:GetAbility() - if hAbility ~= nil then - self.suicide_chance = hAbility:GetSpecialValueFor( "suicide_chance" ) - else - print( 'modifier_bomber_suicide_on_attack:OnCreated() - hAbility is nil????' ) - end -end - --------------------------------------------------------------- - -function modifier_bomber_suicide_on_attack:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ATTACK_LANDED - } - - return funcs -end - --------------------------------------------------------------- - -function modifier_bomber_suicide_on_attack:OnAttackLanded( params ) - if IsServer() then - if params.attacker == self:GetParent() and RollPercentage( self.suicide_chance ) then - local damage = self:GetParent():GetHealth() + 1 - local DamageInfo = - { - victim = self:GetParent(), - attacker = self:GetParent(), - ability = self:GetAbility(), - damage = damage, - damage_type = DAMAGE_TYPE_PURE, - } - ApplyDamage( DamageInfo ) - end - end - - return 0 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_timbersaw_chakram_dance.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_timbersaw_chakram_dance.lua deleted file mode 100755 index 8dce354..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_timbersaw_chakram_dance.lua +++ /dev/null @@ -1,272 +0,0 @@ -modifier_boss_timbersaw_chakram_dance = class({}) - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:IsHidden() - return true -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_boss_timbersaw_chakram_dance:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:CheckState() - local state = - { - [MODIFIER_STATE_HEXED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_STUNNED] = false, - } - return state -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:OnCreated( kv ) - if IsServer() then - - self.is_ascension_ability = kv[ "is_ascension_ability" ] - self.num_chakrams = self:GetAbility():GetSpecialValueFor( "num_chakrams" ) - self.interval = self:GetAbility():GetSpecialValueFor( "interval" ) - self.short_range = self:GetAbility():GetSpecialValueFor( "short_range" ) - self.long_range = self:GetAbility():GetSpecialValueFor( "long_range" ) - - local flInterval = self.interval - if self.is_ascension_ability == 1 then - flInterval = self:GetAbility():GetSpecialValueFor( "spawn_interval" ) - self.spawn_count = self:GetAbility():GetSpecialValueFor( "spawn_count" ) - end - - self.radius = kv[ "radius" ] - self.nAngleStepPerChakram = 360 / self.num_chakrams - self.nAngleStepPerInterval = self.nAngleStepPerChakram / 2 - self.bLongRange = true - self.Angle = QAngle( 0, 0, 0 ) - self.Chakrams = {} - - self:StartIntervalThink( flInterval ) - self:OnIntervalThink() - end -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:OnDestroy() - if IsServer() then - for _,Chakram in pairs ( self.Chakrams ) do - if Chakram.bReturning == false then - local vLocation = ProjectileManager:GetLinearProjectileLocation( Chakram.nProjectileHandle ) - self:ReturnChakram( Chakram, vLocation ) - end - end - end -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:OnIntervalThink() - if IsServer() then - - local Angle = QAngle( self.Angle.x, self.Angle.y, self.Angle.z ) - - for i=1,self.num_chakrams do - local flDist = self.short_range - if self.bLongRange == true then - flDist = self.long_range - end - - local flSpeed = ( flDist / self.interval ) * 2 -- need enough time to go out and back - local vVelocity = ( RotatePosition( Vector( 0, 0, 0 ), Angle, Vector( 1, 0, 0 ) ) ) * flSpeed - - self:LaunchOutgoingChakram( vVelocity, flDist ) - - self.bLongRange = not self.bLongRange - Angle.y = Angle.y + self.nAngleStepPerChakram - end - EmitSoundOn( "Boss_Timbersaw.Chakram.Cast", self:GetParent() ) - self.Angle.y = self.Angle.y + self.nAngleStepPerInterval - - if self.is_ascension_ability == 1 then - self.spawn_count = self.spawn_count - 1 - if self.spawn_count <= 0 then - self:StartIntervalThink( -1 ) - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_timbersaw_chakram_dance:ChooseRandomPointsOnEdges() - - local hRoom = self:GetCaster().Encounter:GetRoom() - local vMins = hRoom:GetMins() - local vMaxs = hRoom:GetMaxs() - local vDelta = ( vMaxs - vMins ) * 0.15 - local vClampedMins = Vector( vMins.x + vDelta.x, vMins.y + vDelta.y, vMins.z ) - local vClampedMaxs = Vector( vMaxs.x - vDelta.x, vMaxs.y - vDelta.y, vMaxs.z ) - local retVal = - { - vSpawnOrigin = Vector( vClampedMins.x, vClampedMins.y, vMins.z ), - vDestination = Vector( vClampedMaxs.x, vClampedMaxs.y, vMaxs.z ), - } - - local nSide = math.random( 1,4 ) - if nSide <= 2 then - if nSide == 1 then - retVal.vSpawnOrigin.x = vMins.x - retVal.vDestination.x = vMaxs.x - else - retVal.vSpawnOrigin.x = vMaxs.x - retVal.vDestination.x = vMins.x - end - retVal.vSpawnOrigin.y = RandomFloat( vClampedMins.y, vClampedMaxs.y ) - retVal.vDestination.y = RandomFloat( vClampedMins.y, vClampedMaxs.y ) - else - if nSide == 3 then - retVal.vSpawnOrigin.y = vMins.y - retVal.vDestination.y = vMaxs.y - else - retVal.vSpawnOrigin.y = vMaxs.y - retVal.vDestination.y = vMins.y - end - retVal.vSpawnOrigin.x = RandomFloat( vClampedMins.x, vClampedMaxs.x ) - retVal.vDestination.x = RandomFloat( vClampedMins.x, vClampedMaxs.x ) - end - - retVal.vDestination.z = retVal.vSpawnOrigin.z - - return retVal - -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:LaunchOutgoingChakram( vVel, flDist ) - if IsServer() then - - local projectileInfo = - { - Ability = self:GetAbility(), - vSpawnOrigin = self:GetCaster():GetAbsOrigin(), - fStartRadius = self.radius, - fEndRadius = self.radius, - vVelocity = vVel, - fDistance = flDist, - Source = self:GetParent(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - local Chakram = {} - - local flSpeed = vVel:Length2D() - if self.is_ascension_ability == 1 then - local pts = self:ChooseRandomPointsOnEdges() - projectileInfo.vSpawnOrigin = pts.vSpawnOrigin - projectileInfo.vVelocity = ( pts.vDestination - pts.vSpawnOrigin ):Normalized() * flSpeed - Chakram.vReturnLocation = projectileInfo.vSpawnOrigin - end - - if flDist == self.long_range then - projectileInfo[ "EffectName" ] = "particles/units/heroes/hero_shredder/shredder_chakram.vpcf" - Chakram.bBlue = false - else - projectileInfo[ "EffectName" ] = "particles/units/heroes/hero_shredder/shredder_chakram_aghs.vpcf" - Chakram.bBlue = true - end - Chakram.flDist = flDist - Chakram.flSpeed = flSpeed - Chakram.bReturning = false - Chakram.nProjectileHandle = ProjectileManager:CreateLinearProjectile( projectileInfo ) - table.insert( self.Chakrams, Chakram.nProjectileHandle, Chakram ) - end -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:LaunchIncomingChakram( vSpawnOrigin, vReturnLocation, flSpeed, flDist ) - if IsServer() then - - if vReturnLocation == nil then - vReturnLocation = self:GetParent():GetAbsOrigin() - flSpeed = flDist -- Seems like a bug in the original boss encounter, but preserving the behavior - end - - local vDir = vReturnLocation - vSpawnOrigin - vDir.z = 0.0 - vDir = vDir:Normalized() - - local projectileInfo = - { - Ability = self:GetAbility(), - vSpawnOrigin = vSpawnOrigin, - fStartRadius = self.radius, - fEndRadius = self.radius, - vVelocity = vDir * flSpeed, - fDistance = flDist, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - local Chakram = {} - if flDist == self.long_range then - projectileInfo[ "EffectName" ] = "particles/units/heroes/hero_shredder/shredder_chakram.vpcf" - Chakram.bBlue = false - else - projectileInfo[ "EffectName" ] = "particles/units/heroes/hero_shredder/shredder_chakram_aghs.vpcf" - Chakram.bBlue = true - end - - Chakram.bReturning = true - Chakram.nProjectileHandle = ProjectileManager:CreateLinearProjectile( projectileInfo ) - table.insert( self.Chakrams, Chakram.nProjectileHandle, Chakram ) - ProjectileManager:CreateLinearProjectile( projectileInfo ) - end -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:ReturnChakram( Chakram, vLocation ) - if IsServer() then - for k,v in pairs ( self.Chakrams ) do - if v == Chakram and v.bReturning == false then - Chakram.bReturning = true - EmitSoundOnLocationWithCaster( vLocation, "Boss_Timbersaw.Chakram.Return", self:GetParent() ) - self:LaunchIncomingChakram( vLocation, Chakram.vReturnLocation, Chakram.flSpeed, Chakram.flDist ) - end - end - end -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:DestroyChakram( Chakram ) - if IsServer() then - for k,v in pairs ( self.Chakrams ) do - if v == Chakram then - table.remove( self.Chakrams, k ) - end - end - end -end - ------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_chakram_dance:GetChakram( nProjectileHandle ) - return self.Chakrams[ nProjectileHandle ] -end - ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_timbersaw_reactive_armor.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_timbersaw_reactive_armor.lua deleted file mode 100755 index e5d3288..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_timbersaw_reactive_armor.lua +++ /dev/null @@ -1,265 +0,0 @@ -modifier_boss_timbersaw_reactive_armor = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:constructor() - self.max_stacks = 0 - self.armor_per_stack = 0 - self.magic_resist_per_stack = 0 - self.regen_per_stack = 0 - self.bEnraged = false -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:IsHidden() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_boss_timbersaw_reactive_armor:GetPriority() - return MODIFIER_PRIORITY_ULTRA -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:OnCreated( kv ) - self.max_stacks = self:GetAbility():GetSpecialValueFor( "max_stacks" ) - self.armor_per_stack = self:GetAbility():GetSpecialValueFor( "armor_per_stack" ) - self.magic_resist_per_stack = self:GetAbility():GetSpecialValueFor( "magic_resist_per_stack" ) - self.regen_per_stack = self:GetAbility():GetSpecialValueFor( "regen_per_stack" ) - self.status_resist =self:GetAbility():GetSpecialValueFor( "status_resist" ) - self.nPhysicalMode = 0 - self.bEnraged = false - self.nModeFX = -1 - self.ParticleIndices = {} - - if IsServer() then - CustomNetTables:SetTableValue( "boss_net_table", "boss_timbersaw", { physical = self.nPhysicalMode } ) - - - - self:SwitchMode() - else - - - for i=1,4 do - local szParticlename = string.format( "particles/creatures/boss_timbersaw/shredder_armor_lyr%d.vpcf", i ) - local nFXIndex = ParticleManager:CreateParticle( szParticlename, PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_armor", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 0, 0, 0 ) ) - ParticleManager:SetParticleControl( nFXIndex, 3, Vector( 0, 0, 0 ) ) - ParticleManager:SetParticleControlEnt( nFXIndex, 4, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_chimmney", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 5, Vector( 2.0, 0, 0 ) ) - self:AddParticle( nFXIndex, false, false, -1, false, false ) - - table.insert( self.ParticleIndices, nFXIndex ) - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:OnRefresh( kv ) - if IsServer() then - local netTable = {} - netTable[ "physical" ] = self.nPhysicalMode - if self:GetParent().AI and self:GetParent().AI.bEnraged then - netTable[ "enraged" ] = 1 - else - netTable[ "enraged" ] = 0 - end - CustomNetTables:SetTableValue( "boss_net_table", "boss_timbersaw", netTable ) - else - local netTable = CustomNetTables:GetTableValue( "boss_net_table", "boss_timbersaw" ) - self.nPhysicalMode = netTable[ "physical" ] - self.bEnraged = true - end -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:CheckState() - local state = - { - --[MODIFIER_STATE_HEXED] = false, - --[MODIFIER_STATE_ROOTED] = false, - --[MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - } - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT, - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING, - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:OnTakeDamage( params ) - if IsServer() then - local hAttacker = params.attacker - local hVictim = params.unit - if hAttacker ~= nil and hVictim ~= nil and hVictim == self:GetParent() then - if hVictim:FindModifierByName( "modifier_provide_vision" ) == nil then - --printf( "Provide Vision" ) - hVictim:AddNewModifier( hAttacker, self:GetAbility(), "modifier_provide_vision", { duration = -1 } ) - end - - if params.original_damage > 50 then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_shredder/shredder_reactive_hit.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_chimmney", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - self:IncrementStackCount() - EmitSoundOn( "Hero_Shredder.ReactiveArmor", self:GetParent() ) - if self:GetStackCount() >= self.max_stacks then - self:SwitchMode() - end - end - end - end - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:OnStackCountChanged( nOldCount ) - - - local nNewCount = self:GetStackCount() - - local nStacksPerLayer = self.max_stacks / 4 - local nNumLayers = math.floor( nNewCount / nStacksPerLayer ) + 1 - - if IsServer() then - if self.bEnraged == true then - return - end - - - if self:GetParent().AI and self:GetParent().AI.bEnraged == true and self.bEnraged == false then - self.bEnraged = true - nNumLayers = 4 - end - else - - for _,nFXIndex in pairs ( self.ParticleIndices ) do - if nNumLayers > 0 then - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 1, 0, 0 ) ) - nNumLayers = nNumLayers - 1 - else - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 0, 0, 0 ) ) - end - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:SwitchMode() - if IsServer() then - if self.nPhysicalMode == 1 then - self.nPhysicalMode = 0 - else - self.nPhysicalMode = 1 - end - - CustomNetTables:SetTableValue( "boss_net_table", "boss_timbersaw", { physical = self.nPhysicalMode } ) - self:SetStackCount( 0 ) - self:SendBuffRefreshToClients() - --todo, toggle the visibility on the shield - - local nFXIndex = nil - ParticleManager:DestroyParticle( self.nModeFX, false ) - self.nModeFX = -1 - if self.nPhysicalMode == 1 then - EmitSoundOn( "Item.CrimsonGuard.Cast", self:GetParent() ) - nFXIndex = ParticleManager:CreateParticle( "particles/items2_fx/vanguard_active_launch.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 500, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - self.nModeFX = ParticleManager:CreateParticle( "particles/items2_fx/vanguard_active.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 500, 0, 0 ) ) - else - EmitSoundOn( "DOTA_Item.Pipe.Activate", self:GetParent() ) - nFXIndex = ParticleManager:CreateParticle( "particles/items2_fx/pipe_of_insight_launch.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 500, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - self.nModeFX = ParticleManager:CreateParticle( "particles/items2_fx/pipe_of_insight.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 500, 0, 0 ) ) - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:GetModifierConstantHealthRegen( params ) - return self:GetStackCount() * self.regen_per_stack -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:GetModifierPhysicalArmorBonus( params ) - if self.nPhysicalMode == 1 then - return self:GetStackCount() * self.armor_per_stack - end - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_timbersaw_reactive_armor:GetModifierMagicalResistanceBonus( params ) - if self.nPhysicalMode == 0 then - return self:GetStackCount() * self.magic_resist_per_stack - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_boss_timbersaw_reactive_armor:GetModifierStatusResistanceStacking( params ) - if IsServer() then - if self.bEnraged then - return self.status_resist * 2 - end - end - return self.status_resist -end - ----------------------------------------- - -function modifier_boss_timbersaw_reactive_armor:GetModifierMoveSpeedBonus_Percentage( params ) - if self.bEnraged then - return 50 - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_passive.lua deleted file mode 100755 index 641156d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_passive.lua +++ /dev/null @@ -1,71 +0,0 @@ -modifier_boss_visage_familiar_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_passive:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_passive:OnCreated( kv ) - -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MIN_HEALTH, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_passive:GetMinHealth( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_passive:OnTakeDamage( params ) - if IsServer() then - if params.unit == self:GetParent() and self:GetParent():GetHealthPercent() < 2 then - self:GetAbility():OnSpellStart() - - local vLocation = self:GetParent():GetAbsOrigin() - if RollPercentage( HEALTH_POTION_DROP_PCT * 3 ) then - local newItem = CreateItem( "item_health_potion", nil, nil ) - newItem:SetPurchaseTime( 0 ) - if newItem:IsPermanent() and newItem:GetShareability() == ITEM_FULLY_SHAREABLE then - item:SetStacksWithOtherOwners( true ) - end - - local drop = CreateItemOnPositionSync( vLocation, newItem ) - newItem:LaunchLoot( true, 300, 0.75, vLocation ) - end - - if RollPercentage( MANA_POTION_DROP_PCT * 3 ) then - local newItem = CreateItem( "item_mana_potion", nil, nil ) - newItem:SetPurchaseTime( 0 ) - if newItem:IsPermanent() and newItem:GetShareability() == ITEM_FULLY_SHAREABLE then - item:SetStacksWithOtherOwners( true ) - end - - local drop = CreateItemOnPositionSync( vLocation, newItem ) - newItem:LaunchLoot( true, 300, 0.75, vLocation ) - end - - end - end - return 0 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_statue_stone_form.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_statue_stone_form.lua deleted file mode 100755 index 71a10ba..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_statue_stone_form.lua +++ /dev/null @@ -1,89 +0,0 @@ -modifier_boss_visage_familiar_statue_stone_form = class({}) - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:GetPriority( ) - return MODIFIER_PRIORITY_HIGH + 6 -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:GetStatusEffectName() - return "particles/status_fx/status_effect_earth_spirit_petrify.vpcf"; -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:AddCustomTransmitterData() -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:HandleCustomTransmitterData( entry ) -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:OnCreated( kv ) - if IsServer() then - self:SetStackCount( 0 ) - self:StartIntervalThink( 0.77 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:OnIntervalThink() - if IsServer() then - self:IncrementStackCount() - if self:GetStackCount() > 5 then - self:StartIntervalThink( -1 ) - end - end -end - --- -------------------------------------------------------------------------------- - --- function modifier_boss_visage_familiar_stone_form_buff:DeclareFunctions() --- local funcs = --- { --- MODIFIER_PROPERTY_OVERRIDE_ANIMATION, --- MODIFIER_PROPERTY_OVERRIDE_ANIMATION_WEIGHT, --- } --- return funcs --- end - --- -------------------------------------------------------------------------------- - --- function modifier_boss_visage_familiar_stone_form_buff - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_statue_stone_form:CheckState() - local bOnGround = self:GetStackCount() > 1 - local state = {} - state[MODIFIER_STATE_FROZEN] = self:GetStackCount() > 5 - state[MODIFIER_STATE_STUNNED] = false - state[MODIFIER_STATE_INVULNERABLE] = true - state[MODIFIER_STATE_FLYING] = false - state[MODIFIER_STATE_NO_UNIT_COLLISION] = true - state[MODIFIER_STATE_UNSELECTABLE] = true - state[MODIFIER_STATE_NO_HEALTH_BAR] = true - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_DISARMED] = true - state[MODIFIER_STATE_NOT_ON_MINIMAP] = true - state[MODIFIER_STATE_PROVIDES_VISION] = true - return state -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_stone_form_buff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_stone_form_buff.lua deleted file mode 100755 index 9a06460..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_familiar_stone_form_buff.lua +++ /dev/null @@ -1,119 +0,0 @@ -modifier_boss_visage_familiar_stone_form_buff = class({}) - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:GetPriority( ) - return MODIFIER_PRIORITY_HIGH + 6 -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:GetStatusEffectName() - return "particles/status_fx/status_effect_earth_spirit_petrify.vpcf"; -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:AddCustomTransmitterData() -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:HandleCustomTransmitterData( entry ) -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:OnCreated( kv ) - self.stun_delay = self:GetAbility():GetSpecialValueFor( "stun_delay" ) - self.damage_radius = self:GetAbility():GetSpecialValueFor( "damage_radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - if IsServer() then - self.bStunned = false - self:SetStackCount( 0 ) - self:StartIntervalThink( self.stun_delay ) - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:OnIntervalThink() - if IsServer() then - if not self.bStunned then - self.bStunned = true - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_visage/visage_stone_form.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.damage_radius, 1, 1 ) ) - ParticleManager:SetParticleFoWProperties( nFXIndex, 0, -1, self.damage_radius ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Visage_Familar.StoneForm.Cast", self:GetParent() ) - - - self:GetParent():Heal( 99999, self:GetAbility() ) - self:SendBuffRefreshToClients() - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetAbsOrigin(), self:GetParent(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - - EmitSoundOn( "Visage_Familar.StoneForm.Stun", enemy ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_stunned", { duration = self.stun_duration } ) - end - end - - - end - - self:IncrementStackCount() - end -end - --- -------------------------------------------------------------------------------- - --- function modifier_boss_visage_familiar_stone_form_buff:DeclareFunctions() --- local funcs = --- { --- MODIFIER_PROPERTY_OVERRIDE_ANIMATION, --- MODIFIER_PROPERTY_OVERRIDE_ANIMATION_WEIGHT, --- } --- return funcs --- end - --- -------------------------------------------------------------------------------- - --- function modifier_boss_visage_familiar_stone_form_buff - --------------------------------------------------------------------------------- - -function modifier_boss_visage_familiar_stone_form_buff:CheckState() - local bOnGround = self:GetStackCount() > 1 - local state = {} - state[MODIFIER_STATE_FROZEN] = self:GetStackCount() > 5 - state[MODIFIER_STATE_STUNNED] = true - state[MODIFIER_STATE_INVULNERABLE] = true - state[MODIFIER_STATE_FLYING] = ( not bOnGround ) - state[MODIFIER_STATE_NO_UNIT_COLLISION] = true - state[MODIFIER_STATE_NO_HEALTH_BAR] = true - state[MODIFIER_STATE_NOT_ON_MINIMAP] = true - state[MODIFIER_STATE_UNSELECTABLE] = true - state[MODIFIER_STATE_PROVIDES_VISION] = true - return state -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_passive.lua deleted file mode 100755 index aeb1fd1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_passive.lua +++ /dev/null @@ -1,226 +0,0 @@ -modifier_boss_visage_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_visage_passive:CheckState() - local state = {} - - if IsServer() then - state[MODIFIER_STATE_HEXED] = false - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_SILENCED] = false - state[MODIFIER_STATE_STUNNED] = self:GetParent().bStone - state[MODIFIER_STATE_FROZEN] = self:GetParent().bStone - state[MODIFIER_STATE_FEARED] = false - state[MODIFIER_STATE_CANNOT_BE_MOTION_CONTROLLED] = true - state[MODIFIER_STATE_INVULNERABLE] = self:GetParent().bStone - state[MODIFIER_STATE_NOT_ON_MINIMAP_FOR_ENEMIES] = self:GetParent().bStone - state[MODIFIER_STATE_NO_HEALTH_BAR] = true - state[MODIFIER_STATE_FLYING_FOR_PATHING_PURPOSES_ONLY] = true - state[MODIFIER_STATE_UNSELECTABLE] = self:GetParent().bStone - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_IGNORE_CAST_ANGLE, - MODIFIER_PROPERTY_DISABLE_TURNING, - MODIFIER_EVENT_ON_TAKEDAMAGE - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:OnCreated( kv ) - self.stone_threshold = self:GetAbility():GetSpecialValueFor( "stone_threshold" ) - self.soul_assumption_count = self:GetAbility():GetSpecialValueFor( "soul_assumption_count" ) - self.soul_assumption_damage = self:GetAbility():GetSpecialValueFor( "soul_assumption_damage" ) - self.soul_assumption_speed = self:GetAbility():GetSpecialValueFor( "soul_assumption_speed" ) - self.stone_duration = self:GetAbility():GetSpecialValueFor( "stone_duration" ) - self.familiar_wake_interval = self:GetAbility():GetSpecialValueFor( "familiar_wake_interval" ) - self.flStoneEndTime = -1 - self.flNextFamiliarTime = -1 - self.flAssumptionTime = -1 - self.nBonusSouls = 0 - self.Familiars = {} - self.nStoneFX = -1 - self.nChannelFX = -1 - - self:GetParent().bStone = false - - if IsServer() then - self:StartIntervalThink( 0.25 ) - self.flDamageRemaining = self.stone_threshold - self:GetAbility().Familiars = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetAbsOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - for k,v in pairs ( self:GetAbility().Familiars ) do - if v:GetUnitName() ~= "npc_dota_boss_visage_familiar" then - table.remove( self:GetAbility().Familiars, k ) - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:OnIntervalThink() - if IsServer() then - if self:GetParent().bStone == true and ( GameRules:GetGameTime() > self.flStoneEndTime ) then - self:EndStoneForm() - end - - if self.flNextFamiliarTime ~= -1 and ( GameRules:GetGameTime() > self.flNextFamiliarTime ) then - local StoneFamiliars = {} - for k,v in pairs ( self:GetAbility().Familiars ) do - if v:FindModifierByName( "modifier_boss_visage_familiar_stone_form_buff" ) then - table.insert( StoneFamiliars, v ) - end - end - - if #StoneFamiliars > 0 then - self:GetAbility():WakeFamiliar( StoneFamiliars[ RandomInt( 1, #StoneFamiliars ) ] ) - self.flNextFamiliarTime = GameRules:GetGameTime() + self.familiar_wake_interval - end - end - - if self.flAssumptionTime ~= -1 and ( GameRules:GetGameTime() > self.flAssumptionTime ) then - ParticleManager:DestroyParticle( self.nChannelFX, false ) - self:DoSoulAssumption() - self.flAssumptionTime = -1 - end - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:GetModifierIgnoreCastAngle( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:GetModifierDisableTurning( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:OnTakeDamage( params ) - if IsServer() then - if params.unit == self:GetParent() and self:GetParent().bStone == false then - self.flDamageRemaining = self.flDamageRemaining - params.damage - if self.flDamageRemaining <= 0 then - self:BeginStoneForm() - end - - if self.flNextFamiliarTime == -1 then - self.flNextFamiliarTime = GameRules:GetGameTime() + self.familiar_wake_interval - end - end - end - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:DoSoulAssumption() - if IsServer() then - local hAliveHeroes = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetAbsOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false ) - local nNumberAlivePlayers = #hAliveHeroes - local nSouls = self.soul_assumption_count - ( AGHANIM_PLAYERS - nNumberAlivePlayers ) - nSouls = nSouls + self.nBonusSouls - self.nBonusSouls = self.nBonusSouls + 1 - - for _,hHero in pairs ( hAliveHeroes ) do - nSouls = nSouls - 1 - self:LaunchSoulAssumption( hHero ) - end - - local PossibleFamiliars = deepcopy( self:GetAbility().Familiars ) - for i=1,nSouls do - local nIdx = math.random( 1, #PossibleFamiliars ) - local hTargetFamiliar = PossibleFamiliars[ nIdx ] - self:LaunchSoulAssumption( hTargetFamiliar ) - table.remove( PossibleFamiliars, nIdx ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:BeginStoneForm() - if IsServer() then - self:GetParent().bStone = true - self.flStoneEndTime = GameRules:GetGameTime() + self.stone_duration - self.flAssumptionTime = GameRules:GetGameTime() + 2.0 - - self:GetParent():AddNewModifier( self:GetParent(), self, "modifier_boss_visage_familiar_statue_stone_form", { duration = self.stone_duration } ) - - self.nChannelFX = ParticleManager:CreateParticle( "particles/act_2/storegga_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:EndStoneForm() - if IsServer() then - print( "Ending Stone Form!" ) - self:GetParent().bStone = false - self.flStoneEndTime = 9999999999999999999999999999 - self.flDamageRemaining = self.stone_threshold - - if self.nStoneFX ~= -1 then - ParticleManager:DestroyParticle( self.nStoneFX, false ) - self.nStoneFX = -1 - end - end -end - --------------------------------------------------------------------------------- - -function modifier_boss_visage_passive:LaunchSoulAssumption( hTarget ) - if hTarget == nil or IsServer() == false then - return - end - - local projectile = - { - Target = hTarget, - Source = self:GetCaster(), - Ability = self:GetAbility(), - EffectName = "particles/units/heroes/hero_visage/visage_soul_assumption_bolt6.vpcf", - iMoveSpeed = self:GetAbility():GetSpecialValueFor( "soul_assumption_speed" ), - vSourceLoc = self:GetCaster():GetOrigin(), - bDodgeable = false, - bProvidesVision = false, - bIgnoreObstructions = true, - iSourceAttachment = 1, - } - - ProjectileManager:CreateTrackingProjectile( projectile ) - EmitSoundOn( "Hero_Visage.SoulAssumption.Cast", self:GetParent() ) -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_thinker_dummy.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_thinker_dummy.lua deleted file mode 100755 index ce50531..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_boss_visage_thinker_dummy.lua +++ /dev/null @@ -1,2 +0,0 @@ - -modifier_boss_visage_thinker_dummy = class({}) diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_brewmaster_split.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_brewmaster_split.lua deleted file mode 100755 index b5344c7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_brewmaster_split.lua +++ /dev/null @@ -1,95 +0,0 @@ -modifier_brewmaster_split = class({}) - --------------------------------------------------------------------------------- - -function modifier_brewmaster_split:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_brewmaster_split:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_brewmaster_split:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10001 -end - --------------------------------------------------------------------------------- - -function modifier_brewmaster_split:CheckState() - local state = - { - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_STUNNED] = true, - } - - return state -end - --------------------------------------------------------------------------------- - -function modifier_brewmaster_split:GetEffectName() - return "particles/units/heroes/hero_brewmaster/brewmaster_primal_split.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_brewmaster_split:GetEffectAttachType() - return PATTACH_ABSORIGIN -end - - --------------------------------------------------------------------------------- - -function modifier_brewmaster_split:OnCreated( kv ) - if IsServer() then - - end -end - --------------------------------------------------------------------------------- - -function modifier_brewmaster_split:OnDestroy() - if IsServer() then - EmitSoundOn( "Hero_Brewmaster.PrimalSplit.Spawn", self:GetParent() ) - - local vPos = self:GetParent():GetAbsOrigin() - - local enemies = FindUnitsInRadius( DOTA_TEAM_BADGUYS, vPos, nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - local target = enemies[RandomInt(1,#enemies)] - - local earthspirit_name = "npc_dota_brewmaster_earth_unit" - local earthspirit_origin = vPos - local earthspirit = CreateUnitByName(earthspirit_name, earthspirit_origin, true, self:GetParent(), nil, DOTA_TEAM_BADGUYS) - local earthspiritfx_name = "particles/units/heroes/hero_brewmaster/brewmaster_earth_ambient.vpcf" - local earthspiritfx = ParticleManager:CreateParticle( earthspiritfx_name, PATTACH_ABSORIGIN_FOLLOW, earthspirit ) - ParticleManager:SetParticleControlEnt( earthspiritfx, 0, earthspirit, PATTACH_ABSORIGIN_FOLLOW, nil, earthspirit:GetOrigin(), true ) - earthspirit:SetInitialGoalEntity( target ) - - local stormspirit_name = "npc_dota_brewmaster_storm_unit" - local stormspirit_origin = vPos - local stormspirit = CreateUnitByName(stormspirit_name, stormspirit_origin, true, self:GetParent(), nil, DOTA_TEAM_BADGUYS) - local stormspiritfx_name = "particles/units/heroes/hero_brewmaster/brewmaster_storm_ambient.vpcf" - local stormspiritfx = ParticleManager:CreateParticle( stormspiritfx_name, PATTACH_ABSORIGIN_FOLLOW, stormspirit ) - ParticleManager:SetParticleControlEnt( stormspiritfx, 0, stormspirit, PATTACH_ABSORIGIN_FOLLOW, nil, stormspirit:GetOrigin(), true ) - stormspirit:SetInitialGoalEntity( target ) - - local firespirit_name = "npc_dota_brewmaster_fire_unit" - local firespirit_origin = vPos - local firespirit = CreateUnitByName(firespirit_name, firespirit_origin, true, self:GetParent(), nil, DOTA_TEAM_BADGUYS) - local firespiritfx_name = "particles/units/heroes/hero_brewmaster/brewmaster_fire_ambient.vpcf" - local firespiritfx = ParticleManager:CreateParticle( firespiritfx_name, PATTACH_ABSORIGIN_FOLLOW, firespirit ) - ParticleManager:SetParticleControlEnt( firespiritfx, 0, firespirit, PATTACH_ABSORIGIN_FOLLOW, nil, firespirit:GetOrigin(), true ) - firespirit:SetInitialGoalEntity( target ) - - self:GetParent():AddEffects( EF_NODRAW ) - self:GetParent():ForceKill( false ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_brewmaster_unit_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_brewmaster_unit_passive.lua deleted file mode 100755 index 8b4b0ae..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_brewmaster_unit_passive.lua +++ /dev/null @@ -1,49 +0,0 @@ -modifier_brewmaster_unit_passive = class({}) - --------------------------------------------------------------- - -function modifier_brewmaster_unit_passive:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - --------------------------------------------------------------- - -function modifier_brewmaster_unit_passive:OnDeath( params ) - if not IsServer() or params.unit ~= self:GetParent() then - return 0 - end - - print("Brewling died!") - local killedUnit = self:GetParent() - local unitName = killedUnit:GetUnitName() - print(unitName) - if killedUnit:GetUnitName() == "npc_dota_brewmaster_earth_unit" then - local vPos = killedUnit:GetAbsOrigin() - local fx_name = "particles/units/heroes/hero_brewmaster/brewmaster_earth_death_collapse.vpcf" - local fx = ParticleManager:CreateParticle( fx_name, PATTACH_ABSORIGIN, killedUnit ) - ParticleManager:SetParticleControlEnt( fx, 0, killedUnit, PATTACH_ABSORIGIN, nil, killedUnit:GetOrigin(), true ) - killedUnit:SetModelScale(0.1) - --ParticleManager:DestroyParticle( fx, false ) - elseif killedUnit:GetUnitName() == "npc_dota_brewmaster_storm_unit" then - local vPos = killedUnit:GetAbsOrigin() - local fx_name = "particles/units/heroes/hero_brewmaster/brewmaster_storm_death.vpcf" - local fx = ParticleManager:CreateParticle( fx_name, PATTACH_ABSORIGIN, killedUnit ) - ParticleManager:SetParticleControlEnt( fx, 0, killedUnit, PATTACH_ABSORIGIN, nil, killedUnit:GetOrigin(), true ) - killedUnit:SetModelScale(0.1) - --ParticleManager:DestroyParticle( fx, false ) - elseif killedUnit:GetUnitName() == "npc_dota_brewmaster_fire_unit" then - local vPos = killedUnit:GetAbsOrigin() - local fx_name = "particles/units/heroes/hero_brewmaster/brewmaster_fire_death.vpcf" - local fx = ParticleManager:CreateParticle( fx_name, PATTACH_ABSORIGIN, killedUnit ) - ParticleManager:SetParticleControlEnt( fx, 0, killedUnit, PATTACH_ABSORIGIN, nil, killedUnit:GetOrigin(), true ) - killedUnit:SetModelScale(0.1) - --ParticleManager:DestroyParticle( fx, false ) - end - -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_accrue_children.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_accrue_children.lua deleted file mode 100755 index 2c11131..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_accrue_children.lua +++ /dev/null @@ -1,50 +0,0 @@ - -modifier_broodmother_accrue_children = class({}) - --------------------------------------------------------------------------------- - -function modifier_broodmother_accrue_children:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_accrue_children:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_accrue_children:OnCreated( kv ) - if IsServer() then - self.babies_to_spawn = self:GetAbility():GetSpecialValueFor( "babies_to_spawn" ) - end -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_accrue_children:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_accrue_children:OnDeath( params ) - if IsServer() then - local hUnit = params.unit - if hUnit == self:GetParent() then - local hDummy = CreateUnitByName( "npc_dota_dummy_caster", self:GetParent():GetAbsOrigin(), true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - if hDummy ~= nil then - hDummy.nAmountToSpawn = self.babies_to_spawn - hDummy.hInitialGoalEntity = self:GetParent():GetInitialGoalEntity() - hDummy:AddAbility( "broodmother_generate_children" ) -- the dummy is a creature and creatures auto-level their abilities - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_generate_children.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_generate_children.lua deleted file mode 100755 index 1a28e9e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_generate_children.lua +++ /dev/null @@ -1,131 +0,0 @@ - --- Note: this modifier's ability gets added by hand to the dummy unit that Broodmother creates. - -modifier_broodmother_generate_children = class({}) - --------------------------------------------------------------------------------- - -function modifier_broodmother_generate_children:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_generate_children:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_generate_children:OnCreated( kv ) - if IsServer() then - self.hBabies = { } - - self.spawn_interval = self:GetAbility():GetSpecialValueFor( "spawn_interval" ) - - -- Note: nAmountToSpawn gets attached to the parent (a dummy) by broodmother, prior to modifier being added - self.nAmountToSpawn = self:GetParent().nAmountToSpawn - self.bWantsToBeRemoved = false - self.nMaxSpawnRadius = 75 + ( self.nAmountToSpawn * 15 ) - - self.szBabyUnit = "npc_dota_creature_broodmother_baby_c" - - self.nFXIndex = ParticleManager:CreateParticle( "particles/baby_brood_venom_pool.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( self.nFXIndex, 0, self:GetCaster():GetAbsOrigin() ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, Vector( self.nMaxSpawnRadius, 1, 1 ) ) - - self:StartIntervalThink( self.spawn_interval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_generate_children:OnIntervalThink() - if IsServer() then - if #self.hBabies < self.nAmountToSpawn then - self:CreateBaby() - end - - if self.bWantsToBeRemoved == false and #self.hBabies >= self.nAmountToSpawn then - self.bWantsToBeRemoved = true - end - - if self.bWantsToBeRemoved then - self:TryToRemoveMyself() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_generate_children:CreateBaby() - local hBaby = CreateUnitByName( self.szBabyUnit, self:GetParent():GetAbsOrigin(), true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - - local nMaxDistance = 75 + ( #self.hBabies * 15 ) - local vSpawnLoc = nil - - local nMaxAttempts = 7 - local nAttempts = 0 - - repeat - if nAttempts > nMaxAttempts then - vSpawnLoc = nil - printf( "WARNING - modifier_broodmother_generate_children:CreateBaby() - failed to find valid spawn loc for baby spider" ) - break - end - - local vPos = self:GetParent():GetAbsOrigin() + RandomVector( nMaxDistance ) - vSpawnLoc = FindPathablePositionNearby( vPos, 0, 100 ) - nAttempts = nAttempts + 1 - until ( GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vSpawnLoc ) ) - - if hBaby and vSpawnLoc ~= nil then - table.insert( self.hBabies, hBaby ) - - hBaby:SetInitialGoalEntity( self:GetParent().hInitialGoalEntity ) - hBaby:SetDeathXP( 0 ) - hBaby:SetMinimumGoldBounty( 0 ) - hBaby:SetMaximumGoldBounty( 0 ) - - local kv = - { - vLocX = vSpawnLoc.x, - vLocY = vSpawnLoc.y, - vLocZ = vSpawnLoc.z, - } - hBaby:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_frostivus2018_broodbaby_launch", kv ) - - EmitSoundOn( "Creature_Broodmother.CreateBabySpider", hBaby ) - end -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_generate_children:TryToRemoveMyself() - if IsServer() then - -- Are all my babies done with their movement modifier? - self.bSafeToRemove = true - for _, hBaby in pairs( self.hBabies ) do - if hBaby ~= nil and hBaby:IsNull() == false and hBaby:IsAlive() and hBaby:HasModifier( "modifier_frostivus2018_broodbaby_launch" ) then - self.bSafeToRemove = false - end - end - - if self.bSafeToRemove then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_broodmother_generate_children:OnDestroy() - if IsServer() then - ParticleManager:DestroyParticle( self.nFXIndex, false ) - self:GetParent():ForceKill( false ) - UTIL_Remove( self:GetParent() ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_web.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_web.lua deleted file mode 100755 index 6394fbb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_broodmother_web.lua +++ /dev/null @@ -1,38 +0,0 @@ - -modifier_broodmother_web = class({}) - ------------------------------------------------------------------------------ - -function modifier_broodmother_web:GetEffectName() - return "particles/items2_fx/rod_of_atos.vpcf" -end - ------------------------------------------------------------------------------ - -function modifier_broodmother_web:OnCreated( kv ) - if IsServer() then - EmitSoundOn( "Creature_Spectre.Dagger.VictimLoop", self:GetParent() ) - end -end - ------------------------------------------------------------------------------ - -function modifier_broodmother_web:OnDestroy() - if IsServer() then - StopSoundOn( "Creature_Spectre.Dagger.VictimLoop", self:GetParent() ) - EmitSoundOn( "Creature_Spectre.Dagger.VictimEnd", self:GetParent() ) - end -end - ------------------------------------------------------------------------------ - -function modifier_broodmother_web:CheckState() - local state = - { - [ MODIFIER_STATE_ROOTED ] = true, - } - - return state -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_generic_high_status_resist_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_generic_high_status_resist_passive.lua deleted file mode 100755 index e9ecded..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_generic_high_status_resist_passive.lua +++ /dev/null @@ -1,34 +0,0 @@ -modifier_creature_generic_high_status_resist_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_creature_generic_high_status_resist_passive:IsPurgable() - return false; -end - --------------------------------------------------------------------------------- - -function modifier_creature_generic_high_status_resist_passive:IsHidden() - return true; -end - --------------------------------------------------------------------------------- -function modifier_creature_generic_high_status_resist_passive:DeclareFunctions() - local funcs = { - MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_creature_generic_high_status_resist_passive:GetModifierStatusResistanceStacking( params ) - return 75 -end - --------------------------------------------------------------------------------- - -function modifier_creature_generic_high_status_resist_passive:OnCreated( kv ) - if IsServer() then - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_landmine_detonate.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_landmine_detonate.lua deleted file mode 100755 index 6add0c5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_landmine_detonate.lua +++ /dev/null @@ -1,64 +0,0 @@ -modifier_creature_landmine_detonate = class({}) - --------------------------------------------------------------------------------- - -function modifier_creature_landmine_detonate:OnCreated( kv ) - if IsServer() then - self.radius = self:GetAbility():GetSpecialValueFor( "detonate_radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "detonate_damage" ) - - self:StartIntervalThink( 0 ) - end -end - - --------------------------------------------------------------------------------- - -function modifier_creature_landmine_detonate:OnIntervalThink() - if IsServer() then - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_techies/techies_land_mine_explode.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 1.0, 1.0, self.radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 1.0, 1.0, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Hero_Techies.LandMine.Detonate", self:GetParent() ) - - self:StartIntervalThink( self:GetRemainingTime() / 3 ) - - end -end - - --------------------------------------------------------------------------------- - -function modifier_creature_landmine_detonate:OnDestroy() - if IsServer() then - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetCaster(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - for _,enemy in pairs(enemies) do - if enemy ~= nil and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - ability = self, - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - } - ApplyDamage( DamageInfo ) - end - end - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_techies/techies_land_mine_explode.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 1.0, 1.0, self.radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 1.0, 1.0, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Hero_Techies.LandMine.Detonate", self:GetParent() ) - self:GetParent():ForceKill( false ) - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_pudge_miniboss_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_pudge_miniboss_passive.lua deleted file mode 100755 index b4f411c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_pudge_miniboss_passive.lua +++ /dev/null @@ -1,71 +0,0 @@ -modifier_creature_pudge_miniboss_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_creature_pudge_miniboss_passive:IsPurgable() - return false; -end - --------------------------------------------------------------------------------- - -function modifier_creature_pudge_miniboss_passive:IsHidden() - return true; -end - --------------------------------------------------------------------------------- -function modifier_creature_pudge_miniboss_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING, - MODIFIER_PROPERTY_ATTACKSPEED_REDUCTION_PERCENTAGE, - MODIFIER_PROPERTY_MOVESPEED_REDUCTION_PERCENTAGE, - MODIFIER_EVENT_ON_ATTACK_LANDED - } - return funcs -end - - - -function modifier_creature_pudge_miniboss_passive:OnAttackLanded( params ) - if IsServer() then - if params.target ~= self:GetParent() then - return - end - self:GetParent().hAttacker = params.attacker - end -end - - --------------------------------------------------------------------------------- - -function modifier_creature_pudge_miniboss_passive:GetModifierStatusResistanceStacking( params ) - return 75 -end - -function modifier_creature_pudge_miniboss_passive:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_CANNOT_MISS] = true - state[MODIFIER_STATE_INVISIBLE] = false - end - return state -end - --------------------------------------------------------------------------------- - -function modifier_creature_pudge_miniboss_passive:OnCreated( kv ) - if IsServer() then - end -end - --------------------------------------------------------------------------------- - -function modifier_creature_pudge_miniboss_passive:GetModifierAttackSpeedReductionPercentage( params ) - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_creature_pudge_miniboss_passive:GetModifierMoveSpeedReductionPercentage( params ) - return 20 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_techies_land_mine.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_techies_land_mine.lua deleted file mode 100755 index 5dc5b76..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_creature_techies_land_mine.lua +++ /dev/null @@ -1,63 +0,0 @@ -modifier_creature_techies_land_mine = class({}) - --------------------------------------------------------------------------------- - -function modifier_creature_techies_land_mine:OnCreated( kv ) - if IsServer() then - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.activation_delay = self:GetAbility():GetSpecialValueFor( "activation_delay" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - --self.proximity_threshold = self:GetAbility():GetSpecialValueFor( "proximity_threshold" ) - - self:StartIntervalThink( self.activation_delay ) - end -end - --------------------------------------------------------------------------------- - -function modifier_creature_techies_land_mine:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_MAGIC_IMMUNE] = true - state[MODIFIER_STATE_INVULNERABLE] = true - state[MODIFIER_STATE_ATTACK_IMMUNE] = true - state[MODIFIER_STATE_NO_HEALTH_BAR] = true - state[MODIFIER_STATE_UNSELECTABLE] = true - state[MODIFIER_STATE_NO_UNIT_COLLISION] = true - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_creature_techies_land_mine:OnIntervalThink() - if IsServer() then - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetCaster(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS, 0, false ) - if #enemies > 0 then - for _, enemy in pairs( enemies ) do - if enemy ~= nil and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - local DamageInfo = - { - victim = enemy, - attacker = self:GetParent(), - ability = self:GetAbility(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - } - ApplyDamage( DamageInfo ) - end - end - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_techies/techies_land_mine_explode.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 1.0, 1.0, radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( 1.0, 1.0, radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "TreasureChest.MineTrap.Detonate", self:GetParent() ) - self:GetParent():ForceKill( false ) - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_drow_ranger_skeleton_archer.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_drow_ranger_skeleton_archer.lua deleted file mode 100755 index da73019..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_drow_ranger_skeleton_archer.lua +++ /dev/null @@ -1,25 +0,0 @@ - -modifier_drow_ranger_skeleton_archer = class({}) - --------------------------------------------------------------------------------- - -function modifier_drow_ranger_skeleton_archer:OnCreated( kv ) - if IsServer() then - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/units/heroes/hero_clinkz/clinkz_burning_army_start.vpcf", PATTACH_ABSORIGIN, self:GetParent() ) ) - - self.nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_clinkz/clinkz_burning_army.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - -function modifier_drow_ranger_skeleton_archer:OnDestroy() - if IsServer() then - if self.nFXIndex ~= nil then - --print( 'modifier_drow_ranger_skeleton_archer:OnDestroy() removing particle' ) - ParticleManager:DestroyParticle( self.nFXIndex, false ) - end - - self:GetParent():ForceKill( false ) - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_dummy_caster_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_dummy_caster_passive.lua deleted file mode 100755 index bad3d20..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_dummy_caster_passive.lua +++ /dev/null @@ -1,49 +0,0 @@ - -modifier_dummy_caster_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_dummy_caster_passive:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_dummy_caster_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_dummy_caster_passive:CheckState() - local state = {} - if IsServer() then - state[ MODIFIER_STATE_INVULNERABLE ] = true - state[ MODIFIER_STATE_MAGIC_IMMUNE ] = true - state[ MODIFIER_STATE_UNSELECTABLE ] = true - state[ MODIFIER_STATE_NOT_ON_MINIMAP ] = true - state[ MODIFIER_STATE_NO_UNIT_COLLISION ] = true - state[ MODIFIER_STATE_NO_HEALTH_BAR ] = true - state[ MODIFIER_STATE_DISARMED ] = true - state[ MODIFIER_STATE_ROOTED ] = true - state[ MODIFIER_STATE_ATTACK_IMMUNE ] = true - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_dummy_caster_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MANACOST_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_dummy_caster_passive:GetModifierPercentageManacost() - return 100 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_dummy_target_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_dummy_target_passive.lua deleted file mode 100755 index ba41cef..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_dummy_target_passive.lua +++ /dev/null @@ -1,35 +0,0 @@ - -modifier_dummy_target_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_dummy_target_passive:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_dummy_target_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_dummy_target_passive:CheckState() - local state = {} - - if IsServer() then - state[ MODIFIER_STATE_INVULNERABLE ] = true - state[ MODIFIER_STATE_MAGIC_IMMUNE ] = true - state[ MODIFIER_STATE_ATTACK_IMMUNE ] = true - state[ MODIFIER_STATE_NOT_ON_MINIMAP ] = true - state[ MODIFIER_STATE_NO_UNIT_COLLISION ] = true - state[ MODIFIER_STATE_NO_HEALTH_BAR ] = true - state[ MODIFIER_STATE_DISARMED ] = true - state[ MODIFIER_STATE_ROOTED ] = true - end - - return state -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_earth_spirit_statue_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_earth_spirit_statue_passive.lua deleted file mode 100755 index 42073e0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_earth_spirit_statue_passive.lua +++ /dev/null @@ -1,65 +0,0 @@ - -modifier_earth_spirit_statue_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_passive:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_passive:OnCreated( kv ) - if IsServer() then - local kv = { duration = -1 } - self:GetParent():AddNewModifier( self:GetParent(), self, "modifier_earth_spirit_statue_stoneform", kv ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PROVIDES_FOW_POSITION, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_passive:GetModifierProvidesFOWVision( params ) - return 1 -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_passive:CheckState() - local state = - { - [ MODIFIER_STATE_ATTACK_IMMUNE ] = true, - [ MODIFIER_STATE_OUT_OF_GAME ] = true, - [ MODIFIER_STATE_INVULNERABLE ] = true, - [ MODIFIER_STATE_MAGIC_IMMUNE ] = true, - [ MODIFIER_STATE_DISARMED ] = true, - [ MODIFIER_STATE_NO_HEALTH_BAR ] = true, - [ MODIFIER_STATE_NOT_ON_MINIMAP ] = true, - } - - return state -end - -------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_earth_spirit_statue_stoneform.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_earth_spirit_statue_stoneform.lua deleted file mode 100755 index 79b2efa..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_earth_spirit_statue_stoneform.lua +++ /dev/null @@ -1,252 +0,0 @@ - -modifier_earth_spirit_statue_stoneform = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_stoneform:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_stoneform:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_stoneform:GetPriority() - return MODIFIER_PRIORITY_ULTRA -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_stoneform:GetStatusEffectName() - return "particles/status_fx/status_effect_earth_spirit_petrify.vpcf" -end - -------------------------------------------------------------------------------- - -function modifier_earth_spirit_statue_stoneform:StatusEffectPriority() - return 60 -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_stoneform:OnCreated( kv ) - if IsServer() then - --printf( "modifier_earth_spirit_statue_stoneform - OnCreated" ) - - self.nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_earth_spirit/earthspirit_petrify_debuff_stoned.vpcf", PATTACH_CUSTOMORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - self:AddParticle( self.nFXIndex, false, false, -1, false, false ) - - --[[ - self.nFXIndexB = ParticleManager:CreateParticle( "particles/units/heroes/hero_earth_spirit/espirit_stoneremnant_base.vpcf", PATTACH_CUSTOMORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nFXIndexB, 0, self:GetCaster(), PATTACH_ABSORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nFXIndexB, 1, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - --ParticleManager:SetParticleControlEnt( self.nFXIndexB, 2, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) - ]] - - --[[ C++ - ParticleIndex_t nFXIndex = CreateBuffParticleEffect( "particles/units/heroes/hero_earth_spirit/earthspirit_petrify_debuff_stoned.vpcf", PATTACH_CUSTOMORIGIN_FOLLOW, GetParent() ); - GetParticleManager()->SetParticleControlEnt( nFXIndex, 0, GetParent(), PATTACH_ABSORIGIN_FOLLOW, NULL ); - GetParticleManager()->SetParticleControlEnt( nFXIndex, 1, GetParent(), PATTACH_ABSORIGIN_FOLLOW, NULL ); - AddParticle( nFXIndex, false ); - - m_nFXIndex = CreateBuffParticleEffect( "particles/units/heroes/hero_earth_spirit/espirit_stoneremnant_base.vpcf", PATTACH_ABSORIGIN_FOLLOW, GetParent() ); - GetParticleManager()->SetParticleControlEnt( m_nFXIndex, 0, GetParent(), PATTACH_ABSORIGIN, NULL ); - GetParticleManager()->SetParticleControlEnt( m_nFXIndex, 1, GetParent(), PATTACH_ABSORIGIN_FOLLOW, NULL ); - GetParticleManager()->SetParticleControl( m_nFXIndex, 2, Vector( GetCaster()->GetSequence().GetRaw(), GetCaster()->GetModelScale(), 0 ) ); - ]] - end -end - ------------------------------------------------------------------------------------------ - -function modifier_earth_spirit_statue_stoneform:OnDestroy() - if IsServer() then - --printf( "modifier_earth_spirit_statue_stoneform - OnDestroy" ) - - --local kv = { duration = -1 } - --self:GetParent():AddNewModifier( self:GetParent(), self, "modifier_earth_spirit_statue_active", kv ) - - EmitSoundOn( "Hero_EarthSpirit.StoneRemnant.Destroy", self:GetCaster() ) - end -end - -------------------------------------------------------------------------------- - -function modifier_earth_spirit_statue_stoneform:DeclareFunctions() - local funcs = { - MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - MODIFIER_PROPERTY_OVERRIDE_ANIMATION_RATE, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_earth_spirit_statue_stoneform:GetOverrideAnimation( params ) - return ACT_DOTA_IDLE - --return ACT_DOTA_IDLE_STATUE -end - -------------------------------------------------------------------------------- - -function modifier_earth_spirit_statue_stoneform:GetOverrideAnimationRate( params ) - return 0.0 -end - -------------------------------------------------------------------------------- - -function modifier_earth_spirit_statue_stoneform:CheckState() - local state = - { - [ MODIFIER_STATE_STUNNED ] = true, - --[ MODIFIER_STATE_FROZEN ] = true, - --[ MODIFIER_STATE_PROVIDES_VISION ] = true, - - [ MODIFIER_STATE_INVISIBLE ] = false, - } - - return state -end - -------------------------------------------------------------------------------- - - ---[[ - -//----------------------------------------------------------------------------- -// Modifier: Petrify -//----------------------------------------------------------------------------- -class CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify : public CDOTA_Buff -{ -public: - DECLARE_CLASS( CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify, CDOTA_Buff ); - - virtual bool IsDebuff( void ) { return true; } - virtual bool IsStunDebuff( void ) { return true; } - virtual bool IsPurgable( void ) { return false; } - - virtual void OnCreated( KeyValues *pKV ); - void OnDestroy( void ); - void DeclareFunctions( void ); - - virtual void CheckState( CDOTABuffState &buffState ) OVERRIDE; - - bool HasBeenMagnetized( void ) { return m_bHasBeenMagnetized; } - void SetMagnetized( bool bState ) { m_bHasBeenMagnetized = bState; } - - virtual const char *GetStatusEffectName( void ) { return "particles/status_fx/status_effect_earth_spirit_petrify.vpcf"; } - virtual int StatusEffectPriority( void ) { return 420; } - - bool ProvidesTruesightForTeam( int nTeamNumber ) OVERRIDE { return nTeamNumber == GetTeam(); } - ModifierVariant_t GetOverrideAnimationRate( const CModifierParams ¶ms ); -private: - ParticleIndex_t m_nFXIndex; - bool m_bHasBeenMagnetized; -}; - -LINK_MODIFIER_TO_CLASS( modifier_aghsfort_earth_spirit_boss_petrify, CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify ); - -//-------------------------------------------------------------------------------- - -void CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify::OnCreated( KeyValues *pKV ) -{ -#ifdef SERVER_DLL - m_bHasBeenMagnetized = false; - - ParticleIndex_t nFXIndex = CreateBuffParticleEffect( "particles/units/heroes/hero_earth_spirit/earthspirit_petrify_debuff_stoned.vpcf", PATTACH_CUSTOMORIGIN_FOLLOW, GetParent() ); - GetParticleManager()->SetParticleControlEnt( nFXIndex, 0, GetParent(), PATTACH_ABSORIGIN_FOLLOW, NULL ); - GetParticleManager()->SetParticleControlEnt( nFXIndex, 1, GetParent(), PATTACH_ABSORIGIN_FOLLOW, NULL ); - AddParticle( nFXIndex, false ); - - - m_nFXIndex = CreateBuffParticleEffect( "particles/units/heroes/hero_earth_spirit/espirit_stoneremnant_base.vpcf", PATTACH_ABSORIGIN_FOLLOW, GetParent() ); - GetParticleManager()->SetParticleControlEnt( m_nFXIndex, 0, GetParent(), PATTACH_ABSORIGIN, NULL ); - GetParticleManager()->SetParticleControlEnt( m_nFXIndex, 1, GetParent(), PATTACH_ABSORIGIN_FOLLOW, NULL ); - GetParticleManager()->SetParticleControl( m_nFXIndex, 2, Vector( GetCaster()->GetSequence().GetRaw(), GetCaster()->GetModelScale(), 0 ) ); - - if ( FStrEq( GetParent()->GetUnitName(), "npc_dota_hero_wisp" ) ) - { - ParticleIndex_t nFXIndexWisp = CreateBuffParticleEffect( "particles/units/heroes/hero_earth_spirit/earthspirit_petrify_wisp.vpcf", PATTACH_CUSTOMORIGIN_FOLLOW, GetParent() ); - GetParticleManager()->SetParticleControlEnt( nFXIndexWisp, 0, GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc" ); - AddParticle( nFXIndexWisp, false ); - } -#endif -} - -//-------------------------------------------------------------------------------- - -void CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify::OnDestroy( void ) -{ - float damage; - float aoe; - - DOTA_RETRIEVE_VALUE( damage ); - DOTA_RETRIEVE_VALUE( aoe ); - -#ifdef SERVER_DLL - CUtlVector hEntities; - FindUnitsInRadius( GetCaster()->GetGridNav(), GetCaster()->GetTeamNumber(), GetParent()->GetAbsOrigin(), GetCaster(), aoe, &hEntities, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_CREEP | DOTA_UNIT_TARGET_HERO ); - GetParticleManager()->DestroyParticleEffect( m_nFXIndex, false ); - - GetParent()->UnitEmitSound( "Hero_EarthSpirit.StoneRemnant.Destroy" ); - - for ( int i = 0; i < hEntities.Count(); i++ ) - { - CDOTA_BaseNPC *pNPC = ToDOTABaseNPC( hEntities[i] ); - if ( pNPC ) - { - ApplyDamage( GetCaster(), pNPC, GetAbility(), damage, DAMAGE_TYPE_MAGICAL ); - } - } - - if ( GetParent()->GetLocomotionInterface() && !GetParent()->GetLocomotionInterface()->IsCurrentlyMotionControlled() ) - { - FindClearSpaceForUnit( GetParent(), GetParent()->GetAbsOrigin(), false ); - } -#endif - - ParticleIndex_t nFXIndexShockC = CreateBuffParticleEffect( "particles/units/heroes/hero_earth_spirit/earthspirit_petrify_shockwave.vpcf", PATTACH_ABSORIGIN_FOLLOW, GetParent() ); - GetParticleManager()->SetParticleControlEnt( nFXIndexShockC, 0, GetParent(), PATTACH_ABSORIGIN, NULL, GetParent()->GetAbsOrigin() ); - GetParticleManager()->SetParticleControl( nFXIndexShockC, 3, Vector( aoe, aoe, aoe ) ); - GetParticleManager()->ReleaseParticleIndex( nFXIndexShockC ); - -} - -//----------------------------------------------------------------------------------- - -void CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify::DeclareFunctions( void ) -{ - DOTA_LINK_FUNCTION( MODIFIER_PROPERTY_OVERRIDE_ANIMATION_RATE, &CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify::GetOverrideAnimationRate ); -} -//----------------------------------------------------------------------------- - -ModifierVariant_t CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify::GetOverrideAnimationRate( const CModifierParams ¶ms ) -{ - return 0; -} - -//----------------------------------------------------------------------------- - -void CDOTA_Modifier_AghsFort_EarthSpiritBoss_Petrify::CheckState( CDOTABuffState &buffState ) -{ - BaseClass::CheckState( buffState ); - - buffState.Enable( MODIFIER_STATE_STUNNED ); - buffState.Enable( MODIFIER_STATE_FROZEN ); - buffState.Enable( MODIFIER_STATE_ATTACK_IMMUNE ); - buffState.Enable( MODIFIER_STATE_INVULNERABLE ); - buffState.Enable( MODIFIER_STATE_OUT_OF_GAME ); - buffState.Enable( MODIFIER_STATE_NO_HEALTH_BAR ); - buffState.Disable( MODIFIER_STATE_INVISIBLE ); -} - -//----------------------------------------------------------------------------- - -]] diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_elemental_tiny_create_io_dummy.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_elemental_tiny_create_io_dummy.lua deleted file mode 100755 index e1139e3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_elemental_tiny_create_io_dummy.lua +++ /dev/null @@ -1,8 +0,0 @@ - -modifier_elemental_tiny_create_io_dummy = class({}) - --------------------------------------------------------------- - -function modifier_elemental_tiny_create_io_dummy:IsHidden() - return true -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_elemental_tiny_grab.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_elemental_tiny_grab.lua deleted file mode 100755 index a71e8cc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_elemental_tiny_grab.lua +++ /dev/null @@ -1,97 +0,0 @@ - -modifier_elemental_tiny_grab = class({}) - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:OnCreated( kv ) - if IsServer() then - if self:ApplyHorizontalMotionController() == false then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - MODIFIER_EVENT_ON_DEATH, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:CheckState() - local state = - { - [MODIFIER_STATE_STUNNED] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_OUT_OF_GAME] = true, - } - return state -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - end -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:UpdateHorizontalMotion( me, dt ) - if IsServer() then - local vLocation = nil - if self:GetParent() ~= nil and self:GetParent():IsAlive() then - local attach = self:GetCaster():ScriptLookupAttachment( "attach_attack" ) - vLocation = self:GetCaster():GetAttachmentOrigin( attach ) - me:SetOrigin( vLocation ) - end - - end -end - - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:GetOverrideAnimation( params ) - return ACT_DOTA_FLAIL -end - --------------------------------------------------------------------------------- - -function modifier_elemental_tiny_grab:OnDeath( params ) - if IsServer() then - if params.unit == self:GetCaster() then - self:Destroy() - end - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_enraged_wildkin_tornado_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_enraged_wildkin_tornado_passive.lua deleted file mode 100755 index 4df119f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_enraged_wildkin_tornado_passive.lua +++ /dev/null @@ -1,224 +0,0 @@ - -modifier_enraged_wildkin_tornado_passive = class({}) - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:OnCreated( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "tornado_radius" ) - self.harpy_spawn_interval = self:GetAbility():GetSpecialValueFor( "harpy_spawn_interval" ) - self.harpy_spawn_amount = self:GetAbility():GetSpecialValueFor( "harpy_spawn_amount" ) - self.max_total_harpies = self:GetAbility():GetSpecialValueFor( "max_total_harpies" ) - - self.szHarpyUnit = "npc_aghsfort_creature_tornado_harpy" - self.flLastHarpyTime = GameRules:GetGameTime() - - self:StartIntervalThink( 0.5 ) -end - - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:IsAura() - return true -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:GetModifierAura() - return "modifier_enraged_wildkin_tornado_passive_debuff" -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_ENEMY -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:GetAuraSearchType() - return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:GetAuraSearchFlags() - return DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:GetAuraRadius() - return self.radius -end - - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:OnRefresh( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "tornado_radius" ) -end - --------------------------------------------------------------------------------- -function modifier_enraged_wildkin_tornado_passive:DeclareFunctions() - local funcs = { - MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE, - } - - return funcs -end - -function modifier_enraged_wildkin_tornado_passive:OnIntervalThink() - if IsServer() then - - --if self:GetCaster() == nil or self:GetCaster():IsAlive() ~= true then - -- self:GetParent():ForceKill(false) - -- return - --end - - --local vDirection = self:GetParent():GetAbsOrigin() - self:GetCaster():GetAbsOrigin() - --self:GetCaster():SetForwardVector(vDirection) - - - if self.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - end - - - if self:GetParent():IsMoving() == false then - self:DoMove() - end - if GameRules:GetGameTime() - self.flLastHarpyTime > self.harpy_spawn_interval then - -- for some reason can't find the harpies by names, so finding them by model - local hHarpies = Entities:FindAllByModel( "models/creeps/neutral_creeps/n_creep_harpy_b/n_creep_harpy_b.vmdl" ) - if #hHarpies < self.max_total_harpies then - --print ("we're at", #hHarpies, "now, max is", self.max_total_harpies) - self:SpawnHarpy() - end - end - - - end -end - -function modifier_enraged_wildkin_tornado_passive:DoMove() - if IsServer() then - - local heroes = FindRealLivingEnemyHeroesInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetAbsOrigin(), FIND_UNITS_EVERYWHERE ) - if #heroes > 0 then - local hero = heroes[RandomInt(1, #heroes)] - - for i=1,4 do - - local vLoc = FindPathablePositionNearby(hero:GetAbsOrigin(), 200, 200 ) - if GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vLoc ) then - - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vLoc, - Queue = false, - }) - - break - end - end - end - end - return -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:GetModifierMoveSpeed_Absolute( params ) - return 320 -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:SpawnHarpy() - if IsServer() then - local hUnit = self:GetParent() - if hUnit == nil then - return - end - if not hUnit:IsAlive() then - return - end - - for i = 1, self.harpy_spawn_amount do - local hHarpy = CreateUnitByName( self.szHarpyUnit, self:GetParent():GetAbsOrigin(), true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - local nMaxDistance = 200 - local vLoc = FindPathablePositionNearby(self:GetParent():GetAbsOrigin(), 150, nMaxDistance ) - - hHarpy:SetInitialGoalEntity( self:GetParent().hInitialGoalEntity ) - hHarpy:SetDeathXP( 0 ) - hHarpy:SetMinimumGoldBounty( 0 ) - hHarpy:SetMaximumGoldBounty( 0 ) - - local kv = - { - vLocX = vLoc.x, - vLocY = vLoc.y, - vLocZ = vLoc.z, - } - hHarpy:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_frostivus2018_broodbaby_launch", kv ) - - end - - self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 100, 100, 100 ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 29, 55, 184 ) ) - - - self.flLastHarpyTime = GameRules:GetGameTime() - EmitSoundOn( "Creature_Bomb_Squad.LandMine.Plant", hHarpy ) - - end - - return -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:CheckState() - local state = {} - if IsServer() then - state = - { - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_MAGIC_IMMUNE] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_FLYING] = true, - [MODIFIER_STATE_NO_UNIT_COLLISION] = true, - [MODIFIER_STATE_UNSELECTABLE] = true, - } - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:GetEffectName( ) - return "particles/creatures/enraged_wildkin/enraged_wildkin_tornado.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_enraged_wildkin_tornado_passive:OnDestroy( ) - if IsServer() then - if self:GetCaster() and self:GetCaster():IsAlive() then - self:GetCaster():Interrupt() - end - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_enraged_wildkin_tornado_passive_debuff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_enraged_wildkin_tornado_passive_debuff.lua deleted file mode 100755 index e0d4c4d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_enraged_wildkin_tornado_passive_debuff.lua +++ /dev/null @@ -1,49 +0,0 @@ -modifier_enraged_wildkin_tornado_passive_debuff = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_enraged_wildkin_tornado_passive_debuff:OnCreated( kv ) - self.movespeed_pct = self:GetAbility():GetSpecialValueFor( "movespeed_pct" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - if IsServer() then - self:StartIntervalThink( 0.5 ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_enraged_wildkin_tornado_passive_debuff:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - } - return funcs -end - - ------------------------------------------------------------------------------------------ - -function modifier_enraged_wildkin_tornado_passive_debuff:GetModifierMoveSpeedBonus_Percentage( params ) - return -self.movespeed_pct -end - ------------------------------------------------------------------------------------------ - -function modifier_enraged_wildkin_tornado_passive_debuff:OnIntervalThink() - if IsServer() then - if self:GetParent() and self:GetParent():IsInvulnerable() == false then - - local damageInfo = - { - victim = self:GetParent(), - attacker = self:GetCaster(), - damage = self.damage / 2, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self:GetAbility() - } - - ApplyDamage( damageInfo ) - end - end -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_evil_greevil_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_evil_greevil_passive.lua deleted file mode 100755 index c18120a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_evil_greevil_passive.lua +++ /dev/null @@ -1,16 +0,0 @@ -modifier_evil_greevil_passive = class({}) - --------------------------------------------------------------- - -function modifier_evil_greevil_passive:CheckState() - local state = {} - - if IsServer() then - state[MODIFIER_STATE_MAGIC_IMMUNE] = true - end - - return state -end - --------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_brood_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_brood_passive.lua deleted file mode 100755 index b84a79f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_brood_passive.lua +++ /dev/null @@ -1,59 +0,0 @@ - -modifier_huge_brood_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_huge_brood_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_huge_brood_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_huge_brood_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - --------------------------------------------------------------------------------- - -function modifier_huge_brood_passive:OnCreated( kv ) - self.status_resistance = self:GetAbility():GetSpecialValueFor( "status_resistance" ) -end - - ------------------------------------------------------------------------------------------ - -function modifier_huge_brood_passive:CheckState() - local state = - { - [MODIFIER_STATE_FEARED] = false, - --[MODIFIER_STATE_CANNOT_BE_MOTION_CONTROLLED] = true, - --[MODIFIER_STATE_UNSLOWABLE] = true, - } - - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_huge_brood_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_huge_brood_passive:GetModifierStatusResistanceStacking( params ) - return self.status_resistance -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_broodmother_accrue_children.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_broodmother_accrue_children.lua deleted file mode 100755 index 7641a62..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_broodmother_accrue_children.lua +++ /dev/null @@ -1,50 +0,0 @@ - -modifier_huge_broodmother_accrue_children = class({}) - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_accrue_children:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_accrue_children:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_accrue_children:OnCreated( kv ) - if IsServer() then - self.babies_to_spawn = self:GetAbility():GetSpecialValueFor( "babies_to_spawn" ) - end -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_accrue_children:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_accrue_children:OnDeath( params ) - if IsServer() then - local hUnit = params.unit - if hUnit == self:GetParent() then - local hDummy = CreateUnitByName( "npc_dota_dummy_caster", self:GetParent():GetAbsOrigin(), true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - if hDummy ~= nil then - hDummy.nAmountToSpawn = self.babies_to_spawn - hDummy.hInitialGoalEntity = self:GetParent():GetInitialGoalEntity() - hDummy:AddAbility( "huge_broodmother_generate_children" ) -- the dummy is a creature and creatures auto-level their abilities - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_broodmother_generate_children_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_broodmother_generate_children_thinker.lua deleted file mode 100755 index 835b062..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_huge_broodmother_generate_children_thinker.lua +++ /dev/null @@ -1,131 +0,0 @@ - --- Note: this modifier's ability gets added by hand to the dummy unit that Broodmother creates. - -modifier_huge_broodmother_generate_children_thinker = class({}) - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_generate_children_thinker:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_generate_children_thinker:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_generate_children_thinker:OnCreated( kv ) - if IsServer() then - self.hBabies = { } - - self.spawn_interval = self:GetAbility():GetSpecialValueFor( "spawn_interval" ) - - -- Note: nAmountToSpawn gets attached to the parent (a dummy) by broodmother, prior to modifier being added - self.nAmountToSpawn = self:GetParent().nAmountToSpawn - self.bWantsToBeRemoved = false - self.nMaxSpawnRadius = 75 + ( self.nAmountToSpawn * 15 ) - - self.szBabyUnit = "npc_dota_creature_broodmother_baby_d" - - self.nFXIndex = ParticleManager:CreateParticle( "particles/baby_brood_venom_pool.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( self.nFXIndex, 0, self:GetCaster():GetAbsOrigin() ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, Vector( self.nMaxSpawnRadius, 1, 1 ) ) - - self:StartIntervalThink( self.spawn_interval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_generate_children_thinker:OnIntervalThink() - if IsServer() then - if #self.hBabies < self.nAmountToSpawn then - self:CreateBaby() - end - - if self.bWantsToBeRemoved == false and #self.hBabies >= self.nAmountToSpawn then - self.bWantsToBeRemoved = true - end - - if self.bWantsToBeRemoved then - self:TryToRemoveMyself() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_generate_children_thinker:CreateBaby() - local hBaby = CreateUnitByName( self.szBabyUnit, self:GetParent():GetAbsOrigin(), true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - - local nMaxDistance = 75 + ( #self.hBabies * 15 ) - local vSpawnLoc = nil - - local nMaxAttempts = 7 - local nAttempts = 0 - - repeat - if nAttempts > nMaxAttempts then - vSpawnLoc = nil - printf( "WARNING - modifier_broodmother_generate_children:CreateBaby() - failed to find valid spawn loc for baby spider" ) - break - end - - local vPos = self:GetParent():GetAbsOrigin() + RandomVector( nMaxDistance ) - vSpawnLoc = FindPathablePositionNearby( vPos, 0, 100 ) - nAttempts = nAttempts + 1 - until ( GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vSpawnLoc ) ) - - if hBaby and vSpawnLoc ~= nil then - table.insert( self.hBabies, hBaby ) - - hBaby:SetInitialGoalEntity( self:GetParent().hInitialGoalEntity ) - hBaby:SetDeathXP( 0 ) - hBaby:SetMinimumGoldBounty( 0 ) - hBaby:SetMaximumGoldBounty( 0 ) - - local kv = - { - vLocX = vSpawnLoc.x, - vLocY = vSpawnLoc.y, - vLocZ = vSpawnLoc.z, - } - hBaby:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_frostivus2018_broodbaby_launch", kv ) - - EmitSoundOn( "Creature_Broodmother.CreateBabySpider", hBaby ) - end -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_generate_children_thinker:TryToRemoveMyself() - if IsServer() then - -- Are all my babies done with their movement modifier? - self.bSafeToRemove = true - for _, hBaby in pairs( self.hBabies ) do - if hBaby ~= nil and hBaby:IsNull() == false and hBaby:IsAlive() and hBaby:HasModifier( "modifier_frostivus2018_broodbaby_launch" ) then - self.bSafeToRemove = false - end - end - - if self.bSafeToRemove then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_huge_broodmother_generate_children_thinker:OnDestroy() - if IsServer() then - ParticleManager:DestroyParticle( self.nFXIndex, false ) - self:GetParent():ForceKill( false ) - UTIL_Remove( self:GetParent() ) - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_damage_counter.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_damage_counter.lua deleted file mode 100755 index f029af4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_damage_counter.lua +++ /dev/null @@ -1,140 +0,0 @@ - -modifier_lifestealer_damage_counter = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_damage_counter:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_damage_counter:OnCreated( kv ) - if IsServer() then - self.damage_threshold = self:GetAbility():GetSpecialValueFor( "damage_threshold" ) - self.enrage_duration = self:GetAbility():GetSpecialValueFor( "enrage_duration" ) - self.damage_counter_tiers = self:GetAbility():GetSpecialValueFor( "damage_counter_tiers" ) - self.time_before_reduction = self:GetAbility():GetSpecialValueFor( "time_before_reduction" ) - - self.nRecentDamageTaken = kv.damage or 0 - self.nOverheadParticleTier = 0 - self.nDamagePerTier = self.damage_threshold / self.damage_counter_tiers - self.fLastDamageTakenTime = GameRules:GetGameTime() - self.fLastReductionTime = GameRules:GetGameTime() - - --printf( "self.nDamagePerTier: %d", self.nDamagePerTier ) - - -- Created overhead particle - local vPos = Vector( 0, 0, 0 ) - self.nFXIndex = ParticleManager:CreateParticle( "particles/creatures/lifestealer/lifestealer_damage_counter_overhead.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControl( self.nFXIndex, 0, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 2, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 3, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 4, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 5, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 6, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 7, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 8, Vector( 1, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 9, Vector( 2, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 10, Vector( 3, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 11, Vector( 4, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 12, Vector( 5, 0, 0 ) ) - self:AddParticle( self.nFXIndex, false, false, -1, false, true ) - - local nInitialTier = 1 - self:IncrementOverheadParticle( nInitialTier ) - - self:StartIntervalThink( 0.1 ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_damage_counter:OnIntervalThink() - if IsServer() then - -- If some time has passed since I took damage, then reduce my ragebar tier by 1 - if GameRules:GetGameTime() >= self.fLastDamageTakenTime + self.time_before_reduction then - if GameRules:GetGameTime() >= self.fLastReductionTime + self.time_before_reduction then - --printf( "It's been at least %.2f secs since the last time I took damage", self.time_before_reduction ) - self.nRecentDamageTaken = self.nRecentDamageTaken - self.nDamagePerTier - local nTier = math.floor( self.nRecentDamageTaken / self.nDamagePerTier ) - --printf( " self.nRecentDamageTaken: %d, self.nDamagePerTier: %d, nTier: %d", self.nRecentDamageTaken, self.nDamagePerTier, nTier ) - - if nTier < self.nOverheadParticleTier then - --printf( " Reduce ragebar -- DecrementOverheadParticle" ) - self:DecrementOverheadParticle( nTier ) - end - - self.fLastReductionTime = GameRules:GetGameTime() - end - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_damage_counter:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_damage_counter:OnTakeDamage( params ) - if IsServer() then - local hAttacker = params.attacker - local hVictim = params.unit - if hAttacker ~= nil and hVictim ~= nil and hVictim == self:GetParent() then - local hToothy = hVictim - self.fLastDamageTakenTime = GameRules:GetGameTime() - --printf( "OnTakeDamage - hVictim is: %s", hVictim:GetUnitName() ) - self.nRecentDamageTaken = self.nRecentDamageTaken + params.damage - - local nTier = math.floor( self.nRecentDamageTaken / self.nDamagePerTier ) - - if nTier > self.nOverheadParticleTier then - self:IncrementOverheadParticle( nTier ) - end - - if self.nRecentDamageTaken >= self.damage_threshold then - if not ( hToothy:IsSilenced() or hToothy:IsStunned() or hToothy:IsHexed() or hToothy:IsFrozen() ) then - hToothy:AddNewModifier( hToothy, self:GetAbility(), "modifier_lifestealer_enraged", { duration = self.enrage_duration } ) - self:Destroy() - end - else - self:ForceRefresh() - end - end - end - - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_damage_counter:IncrementOverheadParticle( nTier ) - local nTiersSinceLastUpdate = nTier - self.nOverheadParticleTier - - for i = 1, nTiersSinceLastUpdate do - ParticleManager:SetParticleControl( self.nFXIndex, self.nOverheadParticleTier + i, Vector( 1, 0, 0 ) ) - end - - self.nOverheadParticleTier = nTier -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_damage_counter:DecrementOverheadParticle( nTier ) - if self.nOverheadParticleTier - 1 > 0 then - ParticleManager:SetParticleControl( self.nFXIndex, self.nOverheadParticleTier, Vector( 0, 0, 0 ) ) - --printf( "DecrementOverheadParticle - self.nOverheadParticleTier: %d", self.nOverheadParticleTier ) - self.nOverheadParticleTier = nTier - else - self:Destroy() - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_enraged.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_enraged.lua deleted file mode 100755 index 8f56283..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_enraged.lua +++ /dev/null @@ -1,94 +0,0 @@ - -modifier_lifestealer_enraged = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:GetStatusEffectName() - return "particles/status_fx/status_effect_life_stealer_rage.vpcf" -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:StatusEffectPriority() - return 60 -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:OnCreated( kv ) - self.enrage_movespeed_bonus = self:GetAbility():GetSpecialValueFor( "enrage_movespeed_bonus" ) - self.enrage_attack_speed_bonus = self:GetAbility():GetSpecialValueFor( "enrage_attack_speed_bonus" ) - self.enrage_model_scale_bonus = self:GetAbility():GetSpecialValueFor( "enrage_model_scale_bonus" ) - - if IsServer() then - self.nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_life_stealer/life_stealer_rage.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 1, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 2, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 3, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetAbsOrigin(), false ) - self:AddParticle( self.nFXIndex, false, false, -1, false, false ) - - EmitSoundOn( "Lifestealer.Enraged.Activate", self:GetParent() ) - - local hEnragedPulseAbility = self:GetParent():FindAbilityByName( "aghsfort_lifestealer_enraged_pulse" ) - - if hEnragedPulseAbility then - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hEnragedPulseAbility:entindex() - }) - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_MODEL_SCALE, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:GetModifierMoveSpeedBonus_Constant( params ) - return self.enrage_movespeed_bonus -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:GetModifierAttackSpeedBonus_Constant( params ) - return self.enrage_attack_speed_bonus -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:GetModifierModelScale( params ) - return self.enrage_model_scale_bonus -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_enraged:CheckState() - local state = {} - - if IsServer() then - state[ MODIFIER_STATE_MAGIC_IMMUNE ] = true - end - - return state -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_passive.lua deleted file mode 100755 index 81ced39..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_lifestealer_passive.lua +++ /dev/null @@ -1,58 +0,0 @@ - -modifier_lifestealer_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_passive:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_passive:OnCreated( kv ) - if IsServer() then - self.damage_counter_duration = self:GetAbility():GetSpecialValueFor( "damage_counter_duration" ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_passive:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_lifestealer_passive:OnTakeDamage( params ) - if IsServer() then - local hAttacker = params.attacker - local hVictim = params.unit - if hAttacker ~= nil and hVictim ~= nil and hVictim == self:GetParent() then - if self:GetParent():FindModifierByName( "modifier_lifestealer_damage_counter" ) == nil then - if self:GetParent():FindModifierByName( "modifier_lifestealer_enraged" ) == nil then - local kv = { duration = -1 } -- self.damage_counter_duration - self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_lifestealer_damage_counter", kv ) - end - end - end - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_mini_spider_slow_attack.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_mini_spider_slow_attack.lua deleted file mode 100755 index a3e2409..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_mini_spider_slow_attack.lua +++ /dev/null @@ -1,82 +0,0 @@ - -modifier_mini_spider_slow_attack = class({}) - ------------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack:IsHidden() - return true -end - ------------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack:OnCreated( kv ) - self.duration = self:GetAbility():GetSpecialValueFor( "duration" ) - - if IsServer() then - -- Give the spider a chance to get aggro on its own; if it doesn't have it after some delay, we'll assign it - local fDelay = 1.5 - self:StartIntervalThink( fDelay ) - end -end - ------------------------------------------------------------------------------------- - - -function modifier_mini_spider_slow_attack:OnIntervalThink() - if IsServer() then - if self:GetParent():GetInitialGoalEntity() ~= nil then - return -1 - end - - local hHeroes = FindRealLivingEnemyHeroesInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), FIND_UNITS_EVERYWHERE ) - local hNearestHero = hHeroes[ 1 ] - if hNearestHero ~= nil then - self:GetParent():SetInitialGoalEntity( hNearestHero ) - end - - return -1 - end -end - --------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack:CheckState() - local state = - { - [MODIFIER_STATE_FLYING_FOR_PATHING_PURPOSES_ONLY] = false, - } - - return state -end - ------------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ATTACKED, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack:OnAttacked( params ) - if IsServer() then - if params.attacker == self:GetParent() then - local hTarget = params.target - if hTarget ~= nil then - local hDebuff = hTarget:FindModifierByName( "modifier_mini_spider_slow_attack_debuff" ) - if hDebuff ~= nil then - hDebuff:SetDuration( self.duration, true ) - hDebuff:IncrementStackCount() - else - hTarget:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_mini_spider_slow_attack_debuff", { duration = self.duration } ) - end - end - end - end -end - ------------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_mini_spider_slow_attack_debuff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_mini_spider_slow_attack_debuff.lua deleted file mode 100755 index 7dc480f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_mini_spider_slow_attack_debuff.lua +++ /dev/null @@ -1,32 +0,0 @@ - -modifier_mini_spider_slow_attack_debuff = class({}) - ------------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack_debuff:GetEffectName() - return "particles/units/heroes/hero_venomancer/venomancer_poison_debuff.vpcf" -end - ------------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack_debuff:OnCreated( kv ) - self.movement_speed_slow = self:GetAbility():GetSpecialValueFor( "movement_speed_slow" ) -end - ------------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack_debuff:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - } - return funcs -end - ------------------------------------------------------------------------------------- - -function modifier_mini_spider_slow_attack_debuff:GetModifierMoveSpeedBonus_Percentage( params ) - return self.movement_speed_slow * self:GetStackCount() -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_morty_start_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_morty_start_passive.lua deleted file mode 100755 index 962442f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_morty_start_passive.lua +++ /dev/null @@ -1,101 +0,0 @@ -modifier_morty_start_passive = class({}) ----------------------------------------------------------------------------------- - -function modifier_morty_start_passive:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_morty_start_passive:IsPurgable() - return false -end - ----------------------------------------------------------------------------------- - -function modifier_morty_start_passive:OnCreated( kv ) - if IsServer() then - self.hPlayerEnt = nil - self.bRideComplete = false - self.bRideStarted = false - end -end - ----------------------------------------------------------------------------------- - -function modifier_morty_start_passive:CheckState() - local state = - { - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_COMMAND_RESTRICTED] = true, - } - return state -end - - ------------------------------------------------------------------------ - -function modifier_morty_start_passive:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ORDER, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_morty_start_passive:OnOrder( params ) - if IsServer() then - local hOrderedUnit = params.unit - local hTargetUnit = params.target - local nOrderType = params.order_type - if nOrderType ~= DOTA_UNIT_ORDER_MOVE_TO_TARGET and nOrderType ~= DOTA_UNIT_ORDER_ATTACK_TARGET then - return - end - - if hTargetUnit == nil or hTargetUnit ~= self:GetParent() then - return - end - - if hOrderedUnit ~= nil and hOrderedUnit:IsRealHero() and hOrderedUnit:GetTeamNumber() == DOTA_TEAM_GOODGUYS and hTargetUnit:GetOwnerEntity() == hOrderedUnit then - self.hPlayerEnt = hOrderedUnit - self:StartIntervalThink( 0.25 ) - return - end - - self:StartIntervalThink( -1 ) - end - - return 0 -end - - ------------------------------------------------------------------------ - -function modifier_morty_start_passive:OnIntervalThink() - if IsServer() then - if self.hPlayerEnt ~= nil then - local flTalkDistance = 250.0 - if flTalkDistance >= ( self.hPlayerEnt:GetOrigin() - self:GetParent():GetOrigin() ):Length2D() then - if GameRules.Aghanim ~= nil and self.bRideStarted == false then - self.hPlayerEnt:Interrupt() - - self:StartIntervalThink( -1 ) - self.bRideStarted = true - - local hRideMorty = self.hPlayerEnt:AddNewModifier( self:GetParent(), nil, "modifier_ride_morty", {} ) - if hRideMorty ~= nil then - self.hPlayerEnt:RemoveModifierByName( "modifier_bonus_room_start" ) - end - - if self.Encounter ~= nil then - self.Encounter:OnPlayerRideMorty( self.hPlayerEnt:GetPlayerOwnerID(), self:GetParent() ) - end - - end - end - end - end -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_nyx_suicide_heal.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_nyx_suicide_heal.lua deleted file mode 100755 index bb9a318..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_nyx_suicide_heal.lua +++ /dev/null @@ -1,56 +0,0 @@ - -modifier_nyx_suicide_heal = class({}) - --------------------------------------------------------------- - -function modifier_nyx_suicide_heal:IsHidden() - return true -end - --------------------------------------------------------------- - -function modifier_nyx_suicide_heal:IsPurgable() - return true -end - --------------------------------------------------------------- - -function modifier_nyx_suicide_heal:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end -------------------------------------------------------------------- - -function modifier_nyx_suicide_heal:OnDeath( params ) - if IsServer() then - if params.unit == self:GetParent() then - local heal = self:GetAbility():GetSpecialValueFor( "heal" ) - local radius = self:GetAbility():GetSpecialValueFor( "radius" ) - - if self:GetParent().nFXIndex ~= nil then - ParticleManager:DestroyParticle( self:GetParent().nFXIndex, true ) - end - - EmitSoundOn( "Burrower.HealExplosion", self:GetParent() ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/nyx_swarm_explosion/nyx_swarm_explosion.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex2, 2, Vector( radius, radius, radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - - local entities = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, radius, DOTA_UNIT_TARGET_TEAM_BOTH, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for _,entity in pairs( entities ) do - if entity ~= nil and entity:IsAlive() then - entity:Heal( heal, self:GetAbility() ) - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/items3_fx/fish_bones_active.vpcf", PATTACH_ABSORIGIN_FOLLOW, entity ) ) - end - end - end - end -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_magi_area_ignite_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_magi_area_ignite_thinker.lua deleted file mode 100755 index bd692d5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_magi_area_ignite_thinker.lua +++ /dev/null @@ -1,52 +0,0 @@ - -modifier_ogre_magi_area_ignite_thinker = class({}) - ----------------------------------------------------------------------------------------- - -function modifier_ogre_magi_area_ignite_thinker:OnCreated( kv ) - if IsServer() then - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.area_duration = self:GetAbility():GetSpecialValueFor( "area_duration" ) - self.linger_duration = self:GetAbility():GetSpecialValueFor( "linger_duration" ) - self.bImpact = false - end -end - ----------------------------------------------------------------------------------------- - -function modifier_ogre_magi_area_ignite_thinker:OnImpact() - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle( "particles/neutral_fx/black_dragon_fireball.vpcf", PATTACH_WORLDORIGIN, nil ); - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ); - ParticleManager:SetParticleControl( nFXIndex, 1, self:GetParent():GetOrigin() ); - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( self.area_duration, 0, 0 ) ); - ParticleManager:ReleaseParticleIndex( nFXIndex ); - - EmitSoundOn( "OgreMagi.Ignite.Target", self:GetParent() ) - - self:SetDuration( self.area_duration, true ) - self.bImpact = true - - self:StartIntervalThink( 0.5 ) - end -end - ----------------------------------------------------------------------------------------- - -function modifier_ogre_magi_area_ignite_thinker:OnIntervalThink() - if IsServer() then - if self.bImpact == false then - self:OnImpact() - return - end - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil then - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_ogre_magi_ignite", { duration = self.linger_duration } ) - end - end - end -end - ----------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_magi_channelled_bloodlust.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_magi_channelled_bloodlust.lua deleted file mode 100755 index 310ccf2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_magi_channelled_bloodlust.lua +++ /dev/null @@ -1,64 +0,0 @@ - -modifier_ogre_magi_channelled_bloodlust = class({}) - ------------------------------------------------------------------------------ - -function modifier_ogre_magi_channelled_bloodlust:GetAttributes() - return MODIFIER_ATTRIBUTE_MULTIPLE -end - ------------------------------------------------------------------------------ - -function modifier_ogre_magi_channelled_bloodlust:GetEffectName() - return "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_buff.vpcf" -end - ------------------------------------------------------------------------------ - -function modifier_ogre_magi_channelled_bloodlust:OnCreated( kv ) - if not self:GetAbility() then - return - end - - self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) - self.bonus_movement_speed = self:GetAbility():GetSpecialValueFor( "bonus_movement_speed" ) - self.modelscale = self:GetAbility():GetSpecialValueFor( "modelscale" ) - - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_pugna/pugna_life_drain.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetOrigin(), true ) - self:AddParticle( nFXIndex , true, false, 0, false, false ) - end -end - ------------------------------------------------------------------------------ - -function modifier_ogre_magi_channelled_bloodlust:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - MODIFIER_PROPERTY_MODEL_SCALE, - } - return funcs -end - - ------------------------------------------------------------------------------ - -function modifier_ogre_magi_channelled_bloodlust:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end - ------------------------------------------------------------------------------ - -function modifier_ogre_magi_channelled_bloodlust:GetModifierMoveSpeedBonus_Percentage( params ) - return self.bonus_movement_speed -end - ------------------------------------------------------------------------------ - -function modifier_ogre_magi_channelled_bloodlust:GetModifierModelScale( params ) - return self.modelscale -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_seer_area_ignite_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_seer_area_ignite_thinker.lua deleted file mode 100755 index 42c4114..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_seer_area_ignite_thinker.lua +++ /dev/null @@ -1,52 +0,0 @@ - -modifier_ogre_seer_area_ignite_thinker = class({}) - ----------------------------------------------------------------------------------------- - -function modifier_ogre_seer_area_ignite_thinker:OnCreated( kv ) - if IsServer() then - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.area_duration = self:GetAbility():GetSpecialValueFor( "area_duration" ) - self.linger_duration = self:GetAbility():GetSpecialValueFor( "linger_duration" ) - self.bImpact = false - end -end - ----------------------------------------------------------------------------------------- - -function modifier_ogre_seer_area_ignite_thinker:OnImpact() - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle( "particles/neutral_fx/black_dragon_fireball.vpcf", PATTACH_WORLDORIGIN, nil ); - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ); - ParticleManager:SetParticleControl( nFXIndex, 1, self:GetParent():GetOrigin() ); - ParticleManager:SetParticleControl( nFXIndex, 2, Vector( self.area_duration, 0, 0 ) ); - ParticleManager:ReleaseParticleIndex( nFXIndex ); - - EmitSoundOn( "OgreMagi.Ignite.Target", self:GetParent() ) - - self:SetDuration( self.area_duration, true ) - self.bImpact = true - - self:StartIntervalThink( 0.5 ) - end -end - ----------------------------------------------------------------------------------------- - -function modifier_ogre_seer_area_ignite_thinker:OnIntervalThink() - if IsServer() then - if self.bImpact == false then - self:OnImpact() - return - end - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil then - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_ogre_magi_ignite", { duration = self.linger_duration } ) - end - end - end -end - ----------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_tank_melee_smash_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_tank_melee_smash_thinker.lua deleted file mode 100755 index 365e2af..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogre_tank_melee_smash_thinker.lua +++ /dev/null @@ -1,80 +0,0 @@ - -modifier_ogre_tank_melee_smash_thinker = class({}) - ------------------------------------------------------------------------------ - -function modifier_ogre_tank_melee_smash_thinker:OnCreated( kv ) - if IsServer() then - self.impact_radius = self:GetAbility():GetSpecialValueFor( "impact_radius" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - - self:StartIntervalThink( 0.01 ) - end -end - ------------------------------------------------------------------------------ - -function modifier_ogre_tank_melee_smash_thinker:OnIntervalThink() - if IsServer() then - if self:GetCaster() == nil or self:GetCaster():IsNull() or self:GetCaster():IsAlive() == false or self:GetCaster():IsStunned() then - --print( string.format( "Caster is nil, dead, or stunned, removing smash thinker" ) ) - UTIL_Remove( self:GetParent() ) - return -1 - end - end -end - ------------------------------------------------------------------------------ - -function modifier_ogre_tank_melee_smash_thinker:OnDestroy() - if IsServer() then - if self:GetCaster() ~= nil and self:GetCaster():IsAlive() then - EmitSoundOnLocationWithCaster( self:GetParent():GetOrigin(), "OgreTank.GroundSmash", self:GetCaster() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.impact_radius, self.impact_radius, self.impact_radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local nTeamFlags = DOTA_UNIT_TARGET_TEAM_ENEMY - if self:GetCaster():FindModifierByName( "modifier_aghsfort_winter_wyvern_winters_curse" ) then - nTeamFlags = DOTA_UNIT_TARGET_TEAM_BOTH - end - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.impact_radius, nTeamFlags, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if not ( enemy:IsNull() ) and enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - if not ( enemy:IsNull() ) and enemy ~= nil and enemy:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", enemy ) - elseif not ( enemy:IsNull() ) and enemy ~= nil then - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_stunned", { duration = self.stun_duration } ) - end - end - end - end - - ScreenShake( self:GetParent():GetOrigin(), 10.0, 100.0, 0.5, 1300.0, 0, true ) - - UTIL_Remove( self:GetParent() ) - end -end - ------------------------------------------------------------------------------ - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogreseal_flop.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogreseal_flop.lua deleted file mode 100755 index 19142eb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_ogreseal_flop.lua +++ /dev/null @@ -1,237 +0,0 @@ - -modifier_ogreseal_flop = class({}) - --------------------------------------------------------------------------------- - -local OGRE_MINIMUM_HEIGHT_ABOVE_LOWEST = 150 -local OGRE_MINIMUM_HEIGHT_ABOVE_HIGHEST = 33 -local OGRE_ACCELERATION_Z = 1250 -local OGRE_MAX_HORIZONTAL_ACCELERATION = 800 - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:IsStunDebuff() - return true -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:RemoveOnDeath() - return false -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:OnCreated( kv ) - if IsServer() then - if self.nHopCount == nil then - self.nHopCount = 1 - self.flop_distances = { 200, 400, 400 } - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre_seal/ogre_seal_warcry.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetOrigin(), true ) - if self:GetCaster():IsRealHero() == false then - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetParent(), PATTACH_POINT_FOLLOW, "mouth", self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 6, self:GetParent(), PATTACH_POINT_FOLLOW, "eye_L", self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 7, self:GetParent(), PATTACH_POINT_FOLLOW, "eye_R", self:GetParent():GetOrigin(), true ) - end - - self:AddParticle( nFXIndex, false, false, -1, false, false ) - end - - if self:GetCaster():IsRealHero() then - self:GetCaster():StartGesture( ACT_DOTA_FLAIL ) - end - - self.bHorizontalMotionInterrupted = false - self.bDamageApplied = false - self.bTargetTeleported = false - - if self:ApplyHorizontalMotionController() == false or self:ApplyVerticalMotionController() == false then - self:Destroy() - return - end - - self.flTimer = 0.0 - self.vStartPosition = GetGroundPosition( self:GetParent():GetOrigin(), self:GetParent() ) - self.flCurrentTimeHoriz = 0.0 - self.flCurrentTimeVert = 0.0 - - self.vLoc = Vector( kv.vLocX, kv.vLocY, kv.vLocZ ) - self.vLastKnownTargetPos = self.vLoc - - local duration = self:GetAbility():GetSpecialValueFor( "duration" ) - local flDesiredHeight = OGRE_MINIMUM_HEIGHT_ABOVE_LOWEST * self.nHopCount * duration * duration - local flLowZ = math.min( self.vLastKnownTargetPos.z, self.vStartPosition.z ) - local flHighZ = math.max( self.vLastKnownTargetPos.z, self.vStartPosition.z ) - local flArcTopZ = math.max( flLowZ + flDesiredHeight, flHighZ + OGRE_MINIMUM_HEIGHT_ABOVE_HIGHEST * self.nHopCount ) - - local flArcDeltaZ = flArcTopZ - self.vStartPosition.z - self.flInitialVelocityZ = math.sqrt( 2.0 * flArcDeltaZ * OGRE_ACCELERATION_Z * self.nHopCount ) - - local flDeltaZ = self.vLastKnownTargetPos.z - self.vStartPosition.z - local flSqrtDet = math.sqrt( math.max( 0, ( self.flInitialVelocityZ * self.flInitialVelocityZ ) - 2.0 * OGRE_ACCELERATION_Z * self.nHopCount * flDeltaZ ) ) - self.flPredictedTotalTime = math.max( ( self.flInitialVelocityZ + flSqrtDet) / ( OGRE_ACCELERATION_Z * self.nHopCount ), ( self.flInitialVelocityZ - flSqrtDet) / ( OGRE_ACCELERATION_Z * self.nHopCount ) ) - - self.vHorizontalVelocity = ( self.vLastKnownTargetPos - self.vStartPosition ) / self.flPredictedTotalTime - self.vHorizontalVelocity.z = 0.0 - end -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - self:GetParent():RemoveVerticalMotionController( self ) - - if self:GetCaster():IsRealHero() then - self:GetCaster():RemoveGesture( ACT_DOTA_FLAIL ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:DeclareFunctions() - local funcs = - { - -- MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:CheckState() - local state = - { - [MODIFIER_STATE_STUNNED] = true, - } - - return state -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:UpdateHorizontalMotion( me, dt ) - if IsServer() then - self.flTimer = self.flTimer + dt - self.flCurrentTimeHoriz = math.min( self.flCurrentTimeHoriz + dt, self.flPredictedTotalTime ) - local t = self.flCurrentTimeHoriz / self.flPredictedTotalTime - local vStartToTarget = self.vLastKnownTargetPos - self.vStartPosition - local vDesiredPos = self.vStartPosition + t * vStartToTarget - - GridNav:DestroyTreesAroundPoint( me:GetAbsOrigin(), 75, false ) - - --[[ - -- Prevent players from hopping through obstructions (players can cast ogre seal flop with the Ogre Seal Totem item) - if me:IsRealHero() then - if ( not GridNav:CanFindPath( me:GetOrigin(), vDesiredPos ) ) then - self:Destroy() - return - end - end - ]] - - local vOldPos = me:GetOrigin() - local vToDesired = vDesiredPos - vOldPos - vToDesired.z = 0.0 - local vDesiredVel = vToDesired / dt - local vVelDif = vDesiredVel - self.vHorizontalVelocity - local flVelDif = vVelDif:Length2D() - vVelDif = vVelDif:Normalized() - local flVelDelta = math.min( flVelDif, OGRE_MAX_HORIZONTAL_ACCELERATION * self.nHopCount ) - - self.vHorizontalVelocity = self.vHorizontalVelocity + vVelDif * flVelDelta * dt - local vNewPos = vOldPos + self.vHorizontalVelocity * dt - me:SetOrigin( vNewPos ) - end -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:UpdateVerticalMotion( me, dt ) - if IsServer() then - self.flCurrentTimeVert = self.flCurrentTimeVert + dt - local bGoingDown = ( -OGRE_ACCELERATION_Z * self.nHopCount * self.flCurrentTimeVert + self.flInitialVelocityZ ) < 0 - - local vNewPos = me:GetOrigin() - vNewPos.z = self.vStartPosition.z + ( -0.5 * OGRE_ACCELERATION_Z * self.nHopCount * ( self.flCurrentTimeVert * self.flCurrentTimeVert ) + self.flInitialVelocityZ * self.flCurrentTimeVert ) - - local flGroundHeight = GetGroundHeight( vNewPos, self:GetParent() ) - local bLanded = false - if ( vNewPos.z < flGroundHeight and bGoingDown == true ) then - vNewPos.z = flGroundHeight - bLanded = true - end - - me:SetOrigin( vNewPos ) - if bLanded == true then - - local bDoneHopping = self.nHopCount == 3 - - if self.bHorizontalMotionInterrupted == false then - if self.nHopCount > 1 then - - self:GetAbility():TryToDamage() - self.flTimer = 0.0 - end - else - bDoneHopping = true - end - - if bDoneHopping then - self:Destroy() - - else - self.nHopCount = self.nHopCount + 1 - self.vLoc = self.vLoc + self:GetCaster():GetForwardVector() * self.flop_distances[ self.nHopCount ] - local kv = - { - vLocX = self.vLoc.x, - vLocY = self.vLoc.y, - vLocZ = self.vLoc.z, - } - self:OnCreated( kv ) - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:OnHorizontalMotionInterrupted() - if IsServer() then - self.bHorizontalMotionInterrupted = true - end -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:OnVerticalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_ogreseal_flop:GetOverrideAnimation( params ) - return ACT_DOTA_OVERRIDE_ABILITY_2 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_phoenix_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_phoenix_passive.lua deleted file mode 100755 index 1720cb8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_phoenix_passive.lua +++ /dev/null @@ -1,47 +0,0 @@ - -modifier_phoenix_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_phoenix_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_phoenix_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_phoenix_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - --------------------------------------------------------------------------------- - -function modifier_phoenix_passive:OnCreated( kv ) - if IsServer() then - self:GetParent().bAbsoluteNoCC = true -- keep this for the modifier blacklist - end -end - ------------------------------------------------------------------------------------------ - -function modifier_phoenix_passive:CheckState() - local state = - { - [MODIFIER_STATE_HEXED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_FROZEN] = false, - [MODIFIER_STATE_FEARED] = false, - - -- absolute_no_cc was preventing Phoenix from being motion controlled by his own Dive - --[MODIFIER_STATE_CANNOT_BE_MOTION_CONTROLLED] = true, - } - - return state -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_puck_flying_bomb.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_puck_flying_bomb.lua deleted file mode 100755 index c9237e4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_puck_flying_bomb.lua +++ /dev/null @@ -1,129 +0,0 @@ - -modifier_puck_flying_bomb = class({}) - -------------------------------------------------------------------- - -function modifier_puck_flying_bomb:IsHidden() - return true -end - -------------------------------------------------------------------- - -function modifier_puck_flying_bomb:IsPurgable() - return false -end - -------------------------------------------------------------------- - -function modifier_puck_flying_bomb:RemoveOnDeath() - return false -end - -------------------------------------------------------------------- - -function modifier_puck_flying_bomb:OnCreated( kv ) - if IsServer() then - self.explosion_damage = self:GetAbility():GetSpecialValueFor( "explosion_damage" ) - self.flight_duration = self:GetAbility():GetSpecialValueFor( "flight_duration" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.explosion_radius = self:GetAbility():GetSpecialValueFor( "explosion_radius" ) - self.flight_speed = self:GetAbility():GetSpecialValueFor( "flight_speed" ) - - self.hBomb = CreateUnitByName( "npc_dota_beastmaster_axe", self:GetParent():GetOrigin(), false, nil, nil, self:GetParent():GetTeamNumber() ) - if self.hBomb == nil then - self:Destroy() - return - end - - self.hBomb:SetBaseMoveSpeed( self.flight_speed ) - - self.hBomb:AddEffects( EF_NODRAW ) - self.hBomb:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_beastmaster_axe_invulnerable", kv ) - - self.vSourceLoc = self:GetCaster():GetOrigin() - --self.vSourceLoc.z = self.vSourceLoc.z + 50 - self.vTargetLoc = Vector( kv["x"], kv["y"], self.vSourceLoc.z ) - local flGroundHeight = GetGroundHeight( self.vTargetLoc, nil ) - self.vTargetLoc.z = flGroundHeight + 50 - - local nDestinationRadius = self.explosion_radius / 2 - self.nPreviewFX = ParticleManager:CreateParticle( "particles/creatures/puck/flying_bomb_destination.vpcf", PATTACH_ABSORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self, PATTACH_ABSORIGIN, nil, self.vTargetLoc, true ) - ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( nDestinationRadius, nDestinationRadius, nDestinationRadius ) ) - ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 190, 6, 215 ) ) - - local vForward = self:GetCaster():GetForwardVector() - self.hBomb:SetForwardVector( vForward ) - - self.nBombFXIndex = ParticleManager:CreateParticle( "particles/creatures/puck/puck_flying_bomb.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( self.nBombFXIndex, 0, self.hBomb, PATTACH_ABSORIGIN_FOLLOW, nil, self.hBomb:GetOrigin(), true ) - - EmitSoundOn( "Puck.FlyingBomb.Flight", self.hBomb ) - - self:StartIntervalThink( 0.05 ) - end -end - -------------------------------------------------------------------- - -function modifier_puck_flying_bomb:OnIntervalThink() - if IsServer() then - if not self.bIssuedMoveCommand then - ExecuteOrderFromTable({ - UnitIndex = self.hBomb:entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.vTargetLoc, - }) - - self.bIssuedMoveCommand = true - end - end -end - --------------------------------------------------------------------------------- - -function modifier_puck_flying_bomb:OnDestroy() - if IsServer() then - if self.nPreviewFX ~= nil then - ParticleManager:DestroyParticle( self.nPreviewFX, false ) - self.nPreviewFX = nil - end - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self.hBomb:GetOrigin(), self.hBomb, self.explosion_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.explosion_damage, - damage_type = self:GetAbility():GetAbilityDamageType(), - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_stunned", { duration = self.stun_duration } ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_beastmaster/beastmaster_wildaxes_hit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - - if self.nBombFXIndex then - ParticleManager:DestroyParticle( self.nBombFXIndex, true ) - end - - local vDetonationPos = self.hBomb:GetAbsOrigin() + Vector( 0, 0, 100 ) - local nDetonationFX = ParticleManager:CreateParticle( "particles/creatures/puck/puck_bomb_detonation.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nDetonationFX, 0, vDetonationPos ) - ParticleManager:SetParticleControl( nDetonationFX, 1, Vector( self.explosion_radius, self.explosion_radius, self.explosion_radius ) ) - ParticleManager:ReleaseParticleIndex( nDetonationFX ) - - StopSoundOn( "Puck.FlyingBomb.Flight", self.hBomb ) - EmitSoundOn( "Puck.FlyingBomb.Detonate", self.hBomb ) - - UTIL_Remove( self.hBomb ) - end -end - -------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_rock_golem_split.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_rock_golem_split.lua deleted file mode 100755 index 24b1dec..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_rock_golem_split.lua +++ /dev/null @@ -1,98 +0,0 @@ - -modifier_rock_golem_split = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_rock_golem_split:GetTexture() - return "sandking_caustic_finale" -end - ------------------------------------------------------------------------------------------ - -function modifier_rock_golem_split:OnCreated( kv ) - - if not IsServer() then - return - end - - self.unit_count = self:GetAbility():GetSpecialValueFor( "unit_count" ) - self.spawn_radius = self:GetAbility():GetSpecialValueFor( "spawn_radius" ) - self.knockback_duration_min = self:GetAbility():GetSpecialValueFor( "knockback_duration_min" ) - self.knockback_duration_max = self:GetAbility():GetSpecialValueFor( "knockback_duration_max" ) - self.knockback_distance_min = self:GetAbility():GetSpecialValueFor( "knockback_distance_min" ) - self.knockback_distance_max = self:GetAbility():GetSpecialValueFor( "knockback_distance_max" ) - self.knockback_height_min = self:GetAbility():GetSpecialValueFor( "knockback_height_min" ) - self.knockback_height_max = self:GetAbility():GetSpecialValueFor( "knockback_height_max" ) - - self.split_fx = self:GetAbility().strSplitFx - self.summoned_unit = self:GetAbility().strSummonedUnit - -end - ------------------------------------------------------------------------------------------ - -function modifier_rock_golem_split:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_rock_golem_split:OnDeath( params ) - if not IsServer() or params.unit ~= self:GetParent() then - return 0 - end - - EmitSoundOn( "Ability.SplitA", self:GetParent() ) - - local nDeathFX = ParticleManager:CreateParticle( self.split_fx, PATTACH_ABSORIGIN, self:GetParent() ) - - ParticleManager:SetParticleControl( nDeathFX, 1, Vector( 100, 1, 1 ) ); - ParticleManager:SetParticleControl( nDeathFX, 2, Vector( 1, 1, 1 ) ); - ParticleManager:SetParticleControl( nDeathFX, 3, Vector( 100, 100, 100 ) ); - ParticleManager:SetParticleControl( nDeathFX, 4, Vector( 200, 200, 200 ) ); - ParticleManager:SetParticleControl( nDeathFX, 14, Vector( 1, 1, 1 ) ); - ParticleManager:SetParticleControl( nDeathFX, 15, Vector( 100, 100, 100 ) ); - - ParticleManager:ReleaseParticleIndex( nDeathFX ) - - for i = 1,self.unit_count do - local knockback_duration = RandomFloat( self.knockback_duration_min, self.knockback_duration_max ) - local knockback_distance = RandomFloat( self.knockback_distance_min, self.knockback_distance_max ) - local knockback_height = RandomFloat( self.knockback_height_min, self.knockback_height_max ) - print( 'duration: ' .. knockback_duration .. '. distance ' .. knockback_distance .. '. height ' .. knockback_height ) - - local kv = - { - center_x = self:GetParent():GetAbsOrigin().x, - center_y = self:GetParent():GetAbsOrigin().y, - center_z = self:GetParent():GetAbsOrigin().z, - should_stun = true, - duration = knockback_duration, - knockback_duration = knockback_duration, - knockback_distance = knockback_distance, - knockback_height = knockback_height, - } - - vSpawnPosition = self:GetParent():GetAbsOrigin() + RandomVector( self.spawn_radius ) - vSpawnPosition = FindPathablePositionNearby( vSpawnPosition, 250, 250 ) - - vSpawnDirection = vSpawnPosition - self:GetParent():GetAbsOrigin() - vSpawnDirection = vSpawnDirection:Normalized() - local angles = VectorAngles( vSpawnDirection ) - - local hSplitUnit = CreateUnitByName( self.summoned_unit , vSpawnPosition, true, - self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - - hSplitUnit:SetAbsAngles( angles.x, angles.y, angles.z ) - - hSplitUnit:AddNewModifier( hSplitUnit, self:GetAbility(), "modifier_knockback", kv ) - - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrow.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrow.lua deleted file mode 100755 index 93f86ae..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrow.lua +++ /dev/null @@ -1,110 +0,0 @@ -modifier_sand_king_boss_burrow = class({}) - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:OnCreated( kv ) - if IsServer() then - local flInterval = 0.65 - if self:GetParent():GetHealthPercent() < 50 then - flInterval = 0.5 - end - if self:GetParent():GetHealthPercent() < 25 then - flInterval = 0.3 - end - self:StartIntervalThink( flInterval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:CheckState() - local state = - { - [MODIFIER_STATE_ROOTED] = true, - [MODIFIER_STATE_DISARMED] = true, - [MODIFIER_STATE_STUNNED] = false, - } - return state -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS, - MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:GetActivityTranslationModifiers( params ) - return "burrowed" -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrow:GetModifierTurnRate_Percentage( params ) - return -50 -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_burrow:OnIntervalThink() - if IsServer() then - local nBurrowerType = RandomInt( 0, 1 ) - local szBurrowerName = nil - if nBurrowerType == 0 then - szBurrowerName = "npc_dota_creature_healing_burrower" - end - if nBurrowerType == 1 then - szBurrowerName = "npc_dota_creature_big_exploding_burrower" - end - - local hMinion = CreateUnitByName( szBurrowerName, self:GetCaster():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hMinion ~= nil then - if self:GetCaster().zone ~= nil then - self:GetCaster().zone:AddEnemyToZone( hMinion ) - end - hMinion.hParent = self:GetCaster() - - local vCasterPos = self:GetCaster():GetAbsOrigin() - local vSpawnPoint = vCasterPos + RandomVector( 1 ) * 2500 - if nBurrowerType ~= 0 then - vSpawnPoint = vCasterPos + RandomVector( RandomFloat( 200, 500 ) ) - end - - FindClearSpaceForUnit( hMinion, vSpawnPoint, true ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, vSpawnPoint ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - if nBurrowerType == 0 then - local nFxIndex2 = ParticleManager:CreateParticle( "particles/units/heroes/hero_huskar/huskar_inner_vitality.vpcf", PATTACH_ABSORIGIN_FOLLOW, hMinion ) - ParticleManager:SetParticleControlEnt( nFxIndex2, 0, hMinion, PATTACH_ABSORIGIN_FOLLOW, nil, hMinion:GetOrigin(), false ) - hMinion.nFXIndex = nFxIndex2 - end - end - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrowstrike.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrowstrike.lua deleted file mode 100755 index 1fe9a39..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrowstrike.lua +++ /dev/null @@ -1,123 +0,0 @@ -modifier_sand_king_boss_burrowstrike = class ({}) - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:OnCreated( kv ) - if IsServer() then - self.vTarget = Vector( kv["x"], kv["y"], kv["z"] ) - self.vDir = self.vTarget - self:GetParent():GetOrigin() - self.vDir = self.vDir:Normalized() - - local flHealthPct = self:GetParent():GetHealthPercent() / 100 - self.speed = self:GetAbility():GetSpecialValueFor( "speed" ) + ( self:GetAbility():GetSpecialValueFor( "scaling_speed" ) * ( 1 - flHealthPct ) ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - - self:GetParent():AddEffects( EF_NODRAW ) - self.nFXIndex = -1 - self.nFXIndex2 = -1 - self.nFXIndex3 = -1 - self:OnIntervalThink() - self:StartIntervalThink( 0.33 ) - if self:ApplyHorizontalMotionController() == false then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - self:GetParent():RemoveEffects( EF_NODRAW ) - local kv = - { - x = self.vDir.x, - y = self.vDir.y, - z = self.vDir.z, - } - self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sand_king_boss_burrowstrike_end", kv ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:OnIntervalThink() - if IsServer() then - if self.nFXIndex ~= -1 then - ParticleManager:DestroyParticle( self.nFXIndex, false ) - end - if self.nFXIndex2 ~= -1 then - ParticleManager:DestroyParticle( self.nFXIndex2, false ) - end - if self.nFXIndex3 ~= -1 then - ParticleManager:DestroyParticle( self.nFXIndex3, false ) - end - - self.nFXIndex = ParticleManager:CreateParticle("particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( self.nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControlForward( self.nFXIndex, 0, self:GetParent():GetForwardVector() ) - self.nFXIndex2 = ParticleManager:CreateParticle("particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( self.nFXIndex2, 0, self:GetParent():GetOrigin() + RandomVector( 1 ) * RandomInt( 50, 150 ) ) - ParticleManager:SetParticleControlForward( self.nFXIndex2, 0, self:GetParent():GetRightVector() ) - self.nFXIndex3 = ParticleManager:CreateParticle("particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( self.nFXIndex3, 0, self:GetParent():GetOrigin() + RandomVector( 1 ) * RandomInt( 50, 150 ) ) - ParticleManager:SetParticleControlForward( self.nFXIndex3, 0, -self:GetParent():GetRightVector() ) - - EmitSoundOn( "Hero_NyxAssassin.Burrow.In", self:GetParent() ) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius / 2, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies > 0 then - self:Destroy() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:UpdateHorizontalMotion( me, dt ) - if IsServer() then - local vNewLocation = self:GetParent():GetOrigin() + self.vDir * self.speed * dt - me:SetOrigin( vNewLocation ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike:CheckState() - local state = - { - [MODIFIER_STATE_STUNNED] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - } - return state -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrowstrike_end.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrowstrike_end.lua deleted file mode 100755 index fedc307..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_burrowstrike_end.lua +++ /dev/null @@ -1,215 +0,0 @@ -modifier_sand_king_boss_burrowstrike_end = class ({}) - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:OnCreated( kv ) - if IsServer() then - self.vDir = Vector( kv["x"], kv["y"], kv["z"] ) - - local flHealthPct = self:GetParent():GetHealthPercent() / 100 - self.speed = self:GetAbility():GetSpecialValueFor( "speed" ) + ( self:GetAbility():GetSpecialValueFor( "scaling_speed" ) * ( 1 - flHealthPct ) ) - - self.delay = self:GetAbility():GetSpecialValueFor( "delay" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.knockback_distance = self:GetAbility():GetSpecialValueFor( "knockback_distance" ) - self.knockback_height = self:GetAbility():GetSpecialValueFor( "knockback_height" ) - - self.bExitGround = false - - self:StartIntervalThink( 0.1 ) - - - if self:ApplyHorizontalMotionController() == false then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:OnIntervalThink() - if IsServer() then - if self.bExitGround == false then - EmitSoundOn( "SandKingBoss.BurrowStrike", self:GetParent() ) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - local kv = - { - center_x = self:GetParent():GetOrigin().x, - center_y = self:GetParent():GetOrigin().y, - center_z = self:GetParent():GetOrigin().z, - should_stun = true, - duration = self.stun_duration, - knockback_duration = self.stun_duration, - knockback_distance = self.knockback_distance, - knockback_height = self.knockback_height, - } - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_knockback", kv ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_impact_physical.vpcf", PATTACH_ABSORIGIN_FOLLOW, enemy ) - local vDirection = enemy:GetOrigin() - self:GetParent():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, vDirection ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - self.bExitGround = true - self:StartIntervalThink( self.delay - 0.1 ) - else - local nFXCastIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_physical.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControl( nFXCastIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXCastIndex ) - EmitSoundOn( "Burrower.Explosion", self:GetCaster() ) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - local kv = - { - center_x = self:GetParent():GetOrigin().x, - center_y = self:GetParent():GetOrigin().y, - center_z = self:GetParent():GetOrigin().z, - should_stun = true, - duration = self.stun_duration, - knockback_duration = self.stun_duration, - knockback_distance = self.knockback_distance, - knockback_height = self.knockback_height, - } - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_knockback", kv ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_elder_titan/elder_titan_echo_stomp_impact_physical.vpcf", PATTACH_ABSORIGIN_FOLLOW, enemy ) - local vDirection = enemy:GetOrigin() - self:GetParent():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, vDirection ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - self:Destroy() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:UpdateHorizontalMotion( me, dt ) - if IsServer() then - local vNewLocation = self:GetParent():GetOrigin() + self.vDir * ( self.speed / 2 ) * dt - me:SetOrigin( vNewLocation ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - end -end - - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:CheckState() - if IsServer() then - local state = - { - [MODIFIER_STATE_INVISIBLE] = self.bExitGround ~= true, - [MODIFIER_STATE_STUNNED] = true, - } - end - return state -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - MODIFIER_PROPERTY_OVERRIDE_ANIMATION_RATE, - MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS, - MODIFIER_PROPERTY_DISABLE_TURNING, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:GetModifierDisableTurning( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:GetOverrideAnimation( params ) - return ACT_DOTA_SAND_KING_BURROW_OUT -end - -------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:GetOverrideAnimationRate( params ) - return 0.5 -end - -------------------------------------------------------------------------------- - -function modifier_sand_king_boss_burrowstrike_end:GetActivityTranslationModifiers( params ) - return "sandking_rubyspire_burrowstrike" -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_caustic_finale.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_caustic_finale.lua deleted file mode 100755 index 8a4d3a5..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_caustic_finale.lua +++ /dev/null @@ -1,70 +0,0 @@ - -modifier_sand_king_boss_caustic_finale = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_caustic_finale:GetTexture() - return "sandking_caustic_finale" -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_caustic_finale:OnCreated( kv ) - self.caustic_radius = self:GetAbility():GetSpecialValueFor( "caustic_radius" ) - self.caustic_damage = self:GetAbility():GetSpecialValueFor( "caustic_damage" ) - self.nArmorReductionPerStack = math.max( math.floor( self:GetAbility():GetSpecialValueFor( "caustic_armor_reduction_pct" ) * self:GetParent():GetPhysicalArmorValue( false ) / 100 ), 1 ) - if IsServer() then - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/units/heroes/hero_sandking/sandking_caustic_finale_debuff.vpcf", PATTACH_ABSORIGIN, self:GetParent() ) ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_caustic_finale:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_caustic_finale:GetModifierPhysicalArmorBonus() - if self.nArmorReductionPerStack == nil then - return 0 - end - - return self.nArmorReductionPerStack * self:GetStackCount() * -1 -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_caustic_finale:OnDeath( params ) - if IsServer() then - if params.unit == self:GetParent() then - EmitSoundOn( "Ability.SandKing_CausticFinale", self:GetParent() ) - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/units/heroes/hero_sandking/sandking_caustic_finale_explode.vpcf", PATTACH_ABSORIGIN, self:GetParent() ) ) - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetParent():GetOrigin(), nil, self.caustic_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for _,hEnemy in pairs( enemies ) do - if hEnemy ~= nil and hEnemy:IsAlive() and hEnemy:IsInvulnerable() == false then - local damageInfo = - { - victim = hEnemy, - attacker = self:GetCaster(), - damage = self.caustic_damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self, - } - ApplyDamage( damageInfo ) - - - end - end - end - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_directional_move.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_directional_move.lua deleted file mode 100755 index 6072177..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_directional_move.lua +++ /dev/null @@ -1,99 +0,0 @@ -modifier_sand_king_boss_directional_move = class({}) - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:OnCreated( kv ) - if IsServer() then - - self.speed = self:GetAbility():GetSpecialValueFor( "speed" ) - if self:ApplyHorizontalMotionController() == false then - self:Destroy() - return - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - self:GetParent():Interrupt() - end -end - - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:UpdateHorizontalMotion( me, dt ) - if IsServer() then - self.vMoveDir = nil - if self:GetAbility():GetAbilityName() == "sand_king_boss_move_left" then - self.vMoveDir = -self:GetParent():GetRightVector() - end - if self:GetAbility():GetAbilityName() == "sand_king_boss_move_right" then - self.vMoveDir = self:GetParent():GetRightVector() - end - if self:GetAbility():GetAbilityName() == "sand_king_boss_move_back" then - self.vMoveDir = -self:GetParent():GetForwardVector() - end - local vNewPos = self:GetParent():GetOrigin() + ( self.vMoveDir * self.speed * dt ) - if not GridNav:CanFindPath( self:GetParent():GetOrigin(), vNewPos ) then - self:Destroy() - return - end - me:SetOrigin( vNewPos ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS, - MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:GetActivityTranslationModifiers( params ) - if self:GetAbility():GetAbilityName() == "sand_king_boss_move_left" then -- @fixme: GetAbility can be nil here - return "left" - end - if self:GetAbility():GetAbilityName() == "sand_king_boss_move_right" then - return "right" - end - if self:GetAbility():GetAbilityName() == "sand_king_boss_move_back" then - return "backward" - end - return "" -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_directional_move:GetModifierTurnRate_Percentage( params ) - return -90 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_epicenter.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_epicenter.lua deleted file mode 100755 index 33810e4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_epicenter.lua +++ /dev/null @@ -1,111 +0,0 @@ -modifier_sand_king_boss_epicenter = class({}) - ------------------------------------------------------------------------------ - -function modifier_sand_king_boss_epicenter:IsHidden() - return true -end - ------------------------------------------------------------------------------ - -function modifier_sand_king_boss_epicenter:IsPurgable() - return false -end - ------------------------------------------------------------------------------ - -function modifier_sand_king_boss_epicenter:OnCreated( kv ) - if IsServer() then - if self:GetAbility().nCastCount == nil then - self:GetAbility().nCastCount = 1 - else - self:GetAbility().nCastCount = self:GetAbility().nCastCount + 1 - end - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.interval = self:GetAbility():GetSpecialValueFor( "interval" ) - self.pulse_width = self:GetAbility():GetSpecialValueFor( "pulse_width" ) - self.pulse_end_width = self:GetAbility():GetSpecialValueFor( "pulse_end_width" ) - self.pulse_speed = math.min( self:GetAbility():GetSpecialValueFor( "min_pulse_speed" ) + self:GetAbility():GetSpecialValueFor( "speed_step" ) * self:GetAbility().nCastCount, self:GetAbility():GetSpecialValueFor( "max_pulse_speed" ) ) - self.pulse_distance = self:GetAbility():GetSpecialValueFor( "pulse_distance" ) - self.random_pulses_step = self:GetAbility():GetSpecialValueFor( "random_pulses_step" ) - self.random_pulses = math.min( self:GetAbility():GetSpecialValueFor( "min_random_pulses" ) + ( self:GetAbility().nCastCount * self.random_pulses_step ), self:GetAbility():GetSpecialValueFor( "max_random_pulses" ) ) - self:StartIntervalThink( self.interval ) - end -end - ------------------------------------------------------------------------------ - -function modifier_sand_king_boss_epicenter:OnDestroy() - if IsServer() then - end -end - ------------------------------------------------------------------------------ - -function modifier_sand_king_boss_epicenter:OnIntervalThink() - if IsServer() then - EmitSoundOn( "SandKing.Epicenter.PulsesBegin", self:GetCaster() ) - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetCaster(), FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil then - local vDirection = ( enemy:GetOrigin() + RandomVector( 1 ) * self.pulse_width ) - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - local info = - { - Ability = self:GetAbility(), - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.pulse_width, - fEndRadius = self.pulse_end_width, - vVelocity = vDirection * self.pulse_speed, - fDistance = self.pulse_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - local proj = {} - proj.handle = ProjectileManager:CreateLinearProjectile( info ) - proj.nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/sand_king_projectile.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( proj.nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( proj.nFXIndex, 1, vDirection * self.pulse_speed ) - ParticleManager:SetParticleControl( proj.nFXIndex, 2, Vector( self.pulse_width, self.pulse_width, 0 ) ) - ParticleManager:SetParticleControl( proj.nFXIndex, 4, Vector( self.pulse_distance / self.pulse_speed + 1, 0, 0 ) ) - - table.insert( self:GetAbility().Projectiles, proj ) - EmitSoundOn( "SandKing.Epicenter.Pulse", self:GetParent() ) - end - end - - for i=1,self.random_pulses do - local vDirection = ( self:GetCaster():GetOrigin() + ( RandomVector( 1 ) * self.pulse_distance ) ) - self:GetCaster():GetOrigin() - vDirection.z = 0.0 - vDirection = vDirection:Normalized() - - local info = - { - Ability = self:GetAbility(), - vSpawnOrigin = self:GetCaster():GetOrigin(), - fStartRadius = self.pulse_width, - fEndRadius = self.pulse_end_width, - vVelocity = vDirection * self.pulse_speed, - fDistance = self.pulse_distance, - Source = self:GetCaster(), - iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, - iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, - } - - local proj = {} - proj.handle = ProjectileManager:CreateLinearProjectile( info ) - proj.nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/sand_king_projectile.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( proj.nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( proj.nFXIndex, 1, vDirection * self.pulse_speed ) - ParticleManager:SetParticleControl( proj.nFXIndex, 2, Vector( self.pulse_width, self.pulse_width, 0 ) ) - ParticleManager:SetParticleControl( proj.nFXIndex, 4, Vector( self.pulse_distance / self.pulse_speed + 1, 0, 0 ) ) - - table.insert( self:GetAbility().Projectiles, proj ) - EmitSoundOn( "SandKing.Epicenter.Pulse", self:GetParent() ) - end - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_passive.lua deleted file mode 100755 index 85fd2a7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_passive.lua +++ /dev/null @@ -1,154 +0,0 @@ -modifier_sand_king_boss_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:OnCreated( kv ) - if IsServer() then - self:GetCaster().bInSandStorm = false - end -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:CheckState() - local state = - { - [MODIFIER_STATE_HEXED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_FLYING_FOR_PATHING_PURPOSES_ONLY] = true, - } - - if IsServer() then - state[MODIFIER_STATE_CANNOT_MISS] = self.bCannotMiss - state[MODIFIER_STATE_INVISIBLE] = false - state[MODIFIER_STATE_UNSELECTABLE] = self:GetCaster().bInSandStorm - end - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ATTACKSPEED_REDUCTION_PERCENTAGE, - MODIFIER_PROPERTY_MOVESPEED_REDUCTION_PERCENTAGE, - MODIFIER_PROPERTY_ATTACK_RANGE_BONUS, - MODIFIER_EVENT_ON_ATTACK_START, - MODIFIER_EVENT_ON_ATTACK_LANDED, - MODIFIER_PROPERTY_EVASION_CONSTANT, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_passive:GetModifierAttackSpeedReductionPercentage( params ) - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_passive:GetModifierMoveSpeedReductionPercentage( params ) - return 20 -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:GetModifierAttackRangeBonus( params ) - if IsServer() then - if self.bInAttack == true then - return 200 - else - return 0 - end - end - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:OnAttackStart( params ) - if IsServer() then - if self:GetParent() == params.attacker then - self.bInAttack = true - if RollPercentage( self:GetAbility():GetSpecialValueFor( "accuracy_pct" ) ) then - self.bCannotMiss = true - else - self.bCannotMiss = false - end - end - end - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:OnAttackLanded( params ) - if IsServer() then - if self:GetParent() == params.attacker then - self.bInAttack = false - - local Target = params.target - if Target ~= nil then - local caustic_duration = self:GetAbility():GetSpecialValueFor( "caustic_duration" ) - local hCausticBuff = Target:FindModifierByName( "modifier_sand_king_boss_caustic_finale" ) - if hCausticBuff == nil then - hCausticBuff = Target:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sand_king_boss_caustic_finale", { duration = caustic_duration } ) - if hCausticBuff ~= nil then - hCausticBuff:SetStackCount( 0 ) - end - end - if hCausticBuff ~= nil then - hCausticBuff:SetStackCount( hCausticBuff:GetStackCount() + 1 ) - hCausticBuff:SetDuration( caustic_duration, true ) - end - end - end - end - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:GetModifierEvasion_Constant( params ) - return 33 -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_passive:OnTakeDamage( params ) - if IsServer() then - local hAttacker = params.attacker - local hVictim = params.unit - if hAttacker ~= nil and hVictim ~= nil and hVictim == self:GetParent() then - if hVictim:FindModifierByName( "modifier_provide_vision" ) == nil then - --printf( "Provide Vision" ) - hVictim:AddNewModifier( hAttacker, self:GetAbility(), "modifier_provide_vision", { duration = -1 } ) - end - end - end - return 0 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm.lua deleted file mode 100755 index 564b92a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm.lua +++ /dev/null @@ -1,130 +0,0 @@ -modifier_sand_king_boss_sandstorm = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:IsAura() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:GetModifierAura() - return "modifier_sand_king_boss_sandstorm_effect" -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:GetAuraRadius() - return self.sand_storm_radius -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_ENEMY -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:GetAuraSearchType() - return DOTA_UNIT_TARGET_HERO -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:OnCreated( kv ) - if IsServer() then - if self:ApplyHorizontalMotionController() == false then - self:Destroy() - return - end - - self.nProjHandle = self:GetParent().nProjHandle - self.sand_storm_radius = self:GetAbility():GetSpecialValueFor( "sand_storm_radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.storm_move_speed = self:GetAbility():GetSpecialValueFor( "storm_move_speed" ) - self.storm_decreased_turn_rate = self:GetAbility():GetSpecialValueFor( "storm_decreased_turn_rate" ) - - EmitSoundOn( "SandKingBoss.SandStorm.loop", self:GetParent() ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - StopSoundOn( "SandKingBoss.SandStorm.loop", self:GetParent() ) - if self.nProjHandle ~= nil then - ProjectileManager:DestroyLinearProjectile( self.nProjHandle ) - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:CheckState() - local state = - { - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_FLYING_FOR_PATHING_PURPOSES_ONLY] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - } - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm:DeclareFunctions() - local funcs = - { - --MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE, - MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_sandstorm:GetModifierTurnRate_Percentage( params ) - return -self.storm_decreased_turn_rate -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_sandstorm:UpdateHorizontalMotion( me, dt ) - if IsServer() then - if self.nProjHandle == nil then - local vForward = self:GetParent():GetForwardVector() - local vNewPos = self:GetParent():GetOrigin() + vForward * dt * self:GetParent().storm_speed - me:SetOrigin( vNewPos ) - else - local vNewPos = ProjectileManager:GetLinearProjectileLocation( self.nProjHandle ) - me:SetOrigin( vNewPos ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_boss_sandstorm:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - - - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm_blind.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm_blind.lua deleted file mode 100755 index eb4e5af..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm_blind.lua +++ /dev/null @@ -1,12 +0,0 @@ -modifier_sand_king_boss_sandstorm_blind = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm_blind:CheckState() - local state = - { - [MODIFIER_STATE_BLIND] = true, - } - return state -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm_effect.lua deleted file mode 100755 index 207abb9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_boss_sandstorm_effect.lua +++ /dev/null @@ -1,65 +0,0 @@ -modifier_sand_king_boss_sandstorm_effect = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm_effect:OnCreated( kv ) - self.movespeed_pct = self:GetAbility():GetSpecialValueFor( "movespeed_pct" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.blind_duration = self:GetAbility():GetSpecialValueFor( "blind_duration" ) - if IsServer() then - self:StartIntervalThink( 0.5 ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm_effect:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm_effect:CheckState() - local state = - { - } - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm_effect:GetModifierMoveSpeedBonus_Percentage( params ) - return -self.movespeed_pct -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm_effect:OnIntervalThink() - if IsServer() then - if self:GetParent() and self:GetParent():IsInvulnerable() == false then - - local damageInfo = - { - victim = self:GetParent(), - attacker = self:GetCaster(), - damage = self.damage / 2, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self:GetAbility() - } - - ApplyDamage( damageInfo ) - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_sand_king_boss_sandstorm_effect:OnDestroy() - if IsServer() then - --self:GetParent():AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_sand_king_boss_sandstorm_blind", { duration = self.blind_duration } ) - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_claw_attack.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_claw_attack.lua deleted file mode 100755 index 591bafd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_claw_attack.lua +++ /dev/null @@ -1,158 +0,0 @@ -modifier_sand_king_claw_attack = class ({}) - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:OnCreated( kv ) - if IsServer() then - self.damage_radius = self:GetAbility():GetSpecialValueFor( "damage_radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.forward_movement = self:GetAbility():GetSpecialValueFor( "forward_movement" ) - self.hHitTargets = {} - - self:StartIntervalThink( kv["initial_delay"] ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:OnIntervalThink() - if IsServer() then - self:StartIntervalThink( 0.01 ) - local vForward = self:GetParent():GetForwardVector() - self:GetParent():SetOrigin( self:GetParent():GetOrigin() + vForward * self.forward_movement ) - - local szSequenceName = self:GetParent():GetSequence() - local attachAttack1 = nil - local attachAttack2 = nil - local vLocation1 = nil - local vLocation2 = nil - if szSequenceName == "sand_king_attack3_anim" or szSequenceName == "sand_king_attack_anim" then - attachAttack1 = self:GetParent():ScriptLookupAttachment( "attach_attack1" ) - vLocation1 = self:GetParent():GetAttachmentOrigin( attachAttack1 ) - - end - if szSequenceName == "sand_king_attack3_anim" or szSequenceName == "sand_king_attack2_anim" then - attachAttack2 = self:GetParent():ScriptLookupAttachment( "attach_attack2" ) - vLocation2 = self:GetParent():GetAttachmentOrigin( attachAttack2 ) - end - - if attachAttack1 ~= nil then - --DebugDrawCircle( vLocation1, Vector( 0, 255, 0 ), 255, self.damage_radius, false, 1.0 ) - local enemies1 = FindUnitsInRadius( self:GetParent():GetTeamNumber(), vLocation1, self:GetCaster(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies1 > 0 then - for _,enemy in pairs( enemies1 ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and self:HasHitTarget( enemy ) == false then - self:AddHitTarget( enemy ) - local damageInfo = - { - victim = enemy, - attacker = self:GetParent(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - --enemy:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_bloodseeker_rupture", { duration = self:GetAbility():GetSpecialValueFor( "duration" ) } ) - EmitSoundOn( "DOTA_Item.Maim", enemy ) - end - end - end - end - - if attachAttack2 ~= nil then - --DebugDrawCircle( vLocation2, Vector( 0, 0, 255 ), 255, self.damage_radius, false, 1.0 ) - local enemies2 = FindUnitsInRadius( self:GetParent():GetTeamNumber(), vLocation2, self:GetCaster(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies2 > 0 then - for _,enemy in pairs( enemies2 ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and self:HasHitTarget( enemy ) == false then - self:AddHitTarget( enemy ) - local damageInfo = - { - victim = enemy, - attacker = self:GetParent(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - --enemy:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_bloodseeker_rupture", { duration = self:GetAbility():GetSpecialValueFor( "duration" ) } ) - EmitSoundOn( "DOTA_Item.Maim", enemy ) - end - end - end - end - - --DebugDrawCircle( self:GetParent():GetOrigin(), Vector( 0, 0, 255 ), 255, self.damage_radius, false, 1.0 ) - local enemies3 = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetCaster(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies3 > 0 then - for _,enemy in pairs( enemies3 ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and self:HasHitTarget( enemy ) == false then - self:AddHitTarget( enemy ) - local damageInfo = - { - victim = enemy, - attacker = self:GetParent(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - --enemy:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_bloodseeker_rupture", { duration = self:GetAbility():GetSpecialValueFor( "duration" ) } ) - EmitSoundOn( "DOTA_Item.Maim", enemy ) - end - end - end - - FindClearSpaceForUnit( self:GetParent(), self:GetParent():GetOrigin(), false ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_DISABLE_TURNING, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:GetModifierDisableTurning( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:HasHitTarget( hTarget ) - for _, target in pairs( self.hHitTargets ) do - if target == hTarget then - return true - end - end - - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_claw_attack:AddHitTarget( hTarget ) - table.insert( self.hHitTargets, hTarget ) -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_tail_swipe.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_tail_swipe.lua deleted file mode 100755 index db9dbcd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_sand_king_tail_swipe.lua +++ /dev/null @@ -1,178 +0,0 @@ -modifier_sand_king_tail_swipe = class ({}) - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:OnCreated( kv ) - if IsServer() then - self.nPreviewFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_sandking/sandking_epicenter_tell.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_tail", self:GetCaster():GetOrigin(), true ) - - self.damage_radius = self:GetAbility():GetSpecialValueFor( "damage_radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.knockback_distance = self:GetAbility():GetSpecialValueFor( "knockback_distance" ) - self.knockback_height = self:GetAbility():GetSpecialValueFor( "knockback_height" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.slow_duration = self:GetAbility():GetSpecialValueFor( "slow_duration" ) - - - self.hHitTargets = {} - - self:StartIntervalThink( kv["initial_delay"] ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:OnIntervalThink() - if IsServer() then - local tail1 = self:GetParent():ScriptLookupAttachment( "attach_tail" ) - local tail2 = self:GetParent():ScriptLookupAttachment( "attach_tail2" ) - local tail3 = self:GetParent():ScriptLookupAttachment( "attach_tail3" ) - local tail4 = self:GetParent():ScriptLookupAttachment( "attach_tail4" ) - local vLocation1 = self:GetParent():GetAttachmentOrigin( tail1 ) - local vLocation2 = self:GetParent():GetAttachmentOrigin( tail2 ) - local vLocation3 = self:GetParent():GetAttachmentOrigin( tail3 ) - local vLocation4 = self:GetParent():GetAttachmentOrigin( tail4 ) - local Locations = {} - table.insert( Locations, vLocation1 ) - table.insert( Locations, vLocation2 ) - table.insert( Locations, vLocation3 ) - table.insert( Locations, vLocation4 ) - - if self:GetParent():FindModifierByName( "modifier_sand_king_boss_burrow" ) ~= nil then - for _,vPos in pairs ( Locations ) do - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, vPos ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.damage_radius, self.damage_radius, self.damage_radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), vPos, self:GetParent(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and self:HasHitTarget( enemy ) == false then - self:AddHitTarget( enemy ) - - local passive = self:GetCaster():FindAbilityByName( "sand_king_boss_passive" ) - local caustic_duration = passive:GetSpecialValueFor( "caustic_duration" ) - local hCausticBuff = enemy:FindModifierByName( "modifier_sand_king_boss_caustic_finale" ) - if hCausticBuff == nil then - hCausticBuff = enemy:AddNewModifier( self:GetCaster(), passive, "modifier_sand_king_boss_caustic_finale", { duration = caustic_duration } ) - hCausticBuff:SetStackCount( 0 ) - end - hCausticBuff:SetStackCount( hCausticBuff:GetStackCount() + 1 ) - hCausticBuff:SetDuration( caustic_duration, true ) - - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_stunned", { duration = self.stun_duration } ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_polar_furbolg_ursa_warrior_thunder_clap", { duration = self.slow_duration } ) - end - end - end - - EmitSoundOnLocationWithCaster( vLocation4, "OgreTank.GroundSmash", self:GetCaster() ) - self:StartIntervalThink( -1 ) - else - self:StartIntervalThink( 0.01 ) - for _,vPos in pairs( Locations ) do - --DebugDrawCircle( vPos, Vector( 0, 255, 0 ), 255, self.damage_radius, false, 1.0 ) - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), vPos, self:GetParent(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and self:HasHitTarget( enemy ) == false then - self:AddHitTarget( enemy ) - - local passive = self:GetCaster():FindAbilityByName( "sand_king_boss_passive" ) - local caustic_duration = passive:GetSpecialValueFor( "caustic_duration" ) - local hCausticBuff = enemy:FindModifierByName( "modifier_sand_king_boss_caustic_finale" ) - if hCausticBuff == nil then - hCausticBuff = enemy:AddNewModifier( self:GetCaster(), passive, "modifier_sand_king_boss_caustic_finale", { duration = caustic_duration } ) - hCausticBuff:SetStackCount( 0 ) - end - hCausticBuff:SetStackCount( hCausticBuff:GetStackCount() + 1 ) - hCausticBuff:SetDuration( caustic_duration, true ) - - local damageInfo = - { - victim = enemy, - attacker = self:GetParent(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - local kv = - { - center_x = self:GetParent():GetOrigin().x, - center_y = self:GetParent():GetOrigin().y, - center_z = self:GetParent():GetOrigin().z, - should_stun = true, - duration = self.stun_duration, - knockback_duration = self.stun_duration, - knockback_distance = self.knockback_distance, - knockback_height = self.knockback_height, - } - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_knockback", kv ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_polar_furbolg_ursa_warrior_thunder_clap", { duration = self.slow_duration } ) - EmitSoundOn( "DOTA_Item.Maim", enemy ) - end - end - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_DISABLE_TURNING, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:GetModifierDisableTurning( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:HasHitTarget( hTarget ) - for _, target in pairs( self.hHitTargets ) do - if target == hTarget then - return true - end - end - - return false -end - --------------------------------------------------------------------------------- - -function modifier_sand_king_tail_swipe:AddHitTarget( hTarget ) - table.insert( self.hHitTargets, hTarget ) -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_scarab_priest_summon_mound.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_scarab_priest_summon_mound.lua deleted file mode 100755 index 37c12f0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_scarab_priest_summon_mound.lua +++ /dev/null @@ -1,97 +0,0 @@ - -modifier_scarab_priest_summon_mound = class({}) - --------------------------------------------------------------- - -function modifier_scarab_priest_summon_mound:IsHidden() - return true -end - --------------------------------------------------------------- - -function modifier_scarab_priest_summon_mound:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_scarab_priest_summon_mound:OnCreated( kv ) - if IsServer() then - self.szSummonedUnitName = kv.summoned_unit - - local nSmokeFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_exit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nSmokeFX, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nSmokeFX ) - - self:StartIntervalThink( self:GetDuration() - 0.5 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_scarab_priest_summon_mound:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_scarab_priest_summon_mound:OnIntervalThink() - - local nUnburrowFX = ParticleManager:CreateParticle( "particles/units/heroes/hero_nyx_assassin/nyx_assassin_burrow_exit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nUnburrowFX, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nUnburrowFX ) - - EmitSoundOn( "Creature.Burrow.Out", self:GetParent() ) - self:StartIntervalThink( -1 ) - -end - -------------------------------------------------------------------- - -function modifier_scarab_priest_summon_mound:OnDestroy() - if not IsServer() then - return - end - - if self:GetParent():IsAlive() then - - self.bSpawned = true - local hMinion = CreateUnitByName( self.szSummonedUnitName, self:GetParent():GetAbsOrigin(), true, self:GetCaster(), self:GetCaster(), self:GetCaster():GetTeamNumber() ) - if hMinion ~= nil then - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetAbsOrigin() ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - end - - self:GetParent():ForceKill( false ) - - end - - UTIL_Remove( self:GetParent() ) - -end - -------------------------------------------------------------------- - -function modifier_scarab_priest_summon_mound:OnDeath( params ) - if not IsServer() or params.unit ~= self:GetParent() or self.bSpawned == true then - return - end - - EmitSoundOn( "Burrower.HealExplosion", self:GetParent() ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/nyx_swarm_explosion/nyx_swarm_explosion.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 0, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex2, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex2, 2, Vector( 300, 300, 300 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex2 ) - -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_enrage.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_enrage.lua deleted file mode 100755 index 0367f5f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_enrage.lua +++ /dev/null @@ -1,81 +0,0 @@ - -modifier_shroomling_enrage = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_enrage:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_enrage:OnCreated( kv ) - self.enrage_movespeed_bonus = 400 - self.enrage_attack_speed_bonus = 50 - self.enrage_model_scale_bonus = 40 - self.enrage_lifesteal_bonus_pct = 50 - - if IsServer() then - EmitSoundOn( "DOTA_Item.MaskOfMadness.Activate", self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_enrage:GetEffectName() - return "particles/items2_fx/mask_of_madness.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_enrage:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_MODEL_SCALE, - MODIFIER_EVENT_ON_ATTACKED, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_enrage:GetModifierMoveSpeedBonus_Constant( params ) - return self.enrage_movespeed_bonus -end - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_enrage:GetModifierAttackSpeedBonus_Constant( params ) - return self.enrage_attack_speed_bonus -end - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_enrage:GetModifierModelScale( params ) - return self.enrage_model_scale_bonus -end - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_enrage:OnAttacked( params ) - if IsServer() then - - --print( 'modifier_shroomling_enrage:OnAttacked' ) - - if self:GetParent():PassivesDisabled() then - return 1 - end - - if params.attacker ~= nil and params.attacker == self:GetParent() and params.target ~= nil then - local heal = ( params.damage * self.enrage_lifesteal_bonus_pct / 100 ) - --print( 'modifier_shroomling_enrage healing for ' .. heal ) - self:GetParent():Heal( heal, nil ) - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/generic_gameplay/generic_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) ) - end - end - - return 1 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_sleep.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_sleep.lua deleted file mode 100755 index 845d2e6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_sleep.lua +++ /dev/null @@ -1,141 +0,0 @@ - -modifier_shroomling_sleep = class({}) - --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:IsHidden() - return false -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:CanParentBeAutoAttacked() - return false -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:OnCreated( kv ) - if IsServer() then - --print( 'modifier_shroomling_sleep:OnCreated()' ) - self.nWakeRange = 200 - self:StartIntervalThink( 1 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_BLIND] = true - state[MODIFIER_STATE_STUNNED] = true - state[MODIFIER_STATE_SILENCED] = true - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_ATTACKED, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_shroomling_sleep:GetEffectName() - return "particles/generic_gameplay/generic_sleep.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:GetEffectAttachType() - return PATTACH_OVERHEAD_FOLLOW -end - ------------------------------------------------------------------------------ - -function modifier_shroomling_sleep:OnDurationExpired( params ) - --print( 'modifier_shroomling_sleep:OnDurationExpired' ) - if IsServer() then - self:GetParent():AddNewModifier( self:GetParent(), nil, "modifier_shroomling_weakened", { duration = -1.0 } ) - end - - return 0 -end - --------------------------------------------------------------------------------- ---[[ -function modifier_shroomling_sleep:OnDestroy() - if IsServer() then - end -end ---]] --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:OnAttacked( params ) - if IsServer() then - if params.target == self:GetParent() then - self:Destroy() - self:GetParent():AddNewModifier( self:GetParent(), nil, "modifier_shroomling_enrage", { duration = -1.0 } ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_sleep:OnTakeDamage( params ) - if IsServer() then - if params.unit == self:GetParent() then - self:Destroy() - self:GetParent():AddNewModifier( self:GetParent(), nil, "modifier_shroomling_enrage", { duration = -1.0 } ) - end - end - - return 0 -end - ------------------------------------------------------------------------------ - -function modifier_shroomling_sleep:OnIntervalThink() - if IsServer() then - -- don't wake up while we are still invulnerable - local hInvulnBuff = self:GetParent():FindModifierByName( "modifier_invulnerable" ) - if hInvulnBuff ~= nil then - --print( 'modifier_shroomling_sleep:OnIntervalThink() - shroom is currently invulnerable - skipping wakeup check!' ) - return - end - - local hEnemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, self.nWakeRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - --print( 'modifier_shroomling_sleep:OnIntervalThink() found enemies = ' .. #hEnemies ) - if #hEnemies > 0 then - self:Destroy() - self:GetParent():AddNewModifier( self:GetParent(), nil, "modifier_shroomling_enrage", { duration = -1.0 } ) - end - end -end - --------------------------------------------------------------------------------- - ---[[ -function modifier_shroomling_sleep:OnDestroy() - if not IsServer() then - return - end - - local hAllies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _, hAlly in pairs( hAllies ) do - if hAlly:HasModifier( "modifier_shroomling_sleep" ) then - hAlly:RemoveModifierByName( "modifier_shroomling_sleep" ) - end - end -end ---]] --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_weakened.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_weakened.lua deleted file mode 100755 index 2ad6824..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_shroomling_weakened.lua +++ /dev/null @@ -1,44 +0,0 @@ - -modifier_shroomling_weakened = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_weakened:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_weakened:OnCreated( kv ) - self.enrage_model_scale_bonus = -20 -end - --------------------------------------------------------------------------------- - -function modifier_shroomling_weakened:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MODEL_SCALE, - MODIFIER_PROPERTY_EXTRA_HEALTH_PERCENTAGE, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_weakened:GetModifierModelScale( params ) - return self.enrage_model_scale_bonus -end - ------------------------------------------------------------------------------------------ - -function modifier_shroomling_weakened:GetModifierExtraHealthPercentage( params ) - if self:GetCaster() == nil or self:GetCaster():PassivesDisabled() then - return 0 - end - - -- How is this number intended to work? It seems to have regressed. - return -200 --8.0 --self.bonus_hp_multiplier -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_skeleton_king_boss_run.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_skeleton_king_boss_run.lua deleted file mode 100755 index 76e5641..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_skeleton_king_boss_run.lua +++ /dev/null @@ -1,29 +0,0 @@ -modifier_skeleton_king_boss_run = class({}) - --------------------------------------------------------------------------------- - -function modifier_skeleton_king_boss_run:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_skeleton_king_boss_run:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_skeleton_king_boss_run:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_skeleton_king_boss_run:GetActivityTranslationModifiers( params ) - return "run" -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_slark_sleep.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_slark_sleep.lua deleted file mode 100755 index 5ecde50..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_slark_sleep.lua +++ /dev/null @@ -1,42 +0,0 @@ - -modifier_slark_sleep = class({}) - --------------------------------------------------------------------------------- - -function modifier_slark_sleep:IsHidden() - return false -end - --------------------------------------------------------------------------------- - -function modifier_slark_sleep:CanParentBeAutoAttacked() - return false -end - --------------------------------------------------------------------------------- - -function modifier_slark_sleep:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_BLIND] = true - state[MODIFIER_STATE_STUNNED] = true - state[MODIFIER_STATE_SILENCED] = true - end - - return state -end - ------------------------------------------------------------------------ - -function modifier_slark_sleep:GetEffectName() - return "particles/generic_gameplay/generic_sleep.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_slark_sleep:GetEffectAttachType() - return PATTACH_OVERHEAD_FOLLOW -end - ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_spider_egg_sack.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_spider_egg_sack.lua deleted file mode 100755 index 12f2cc1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_spider_egg_sack.lua +++ /dev/null @@ -1,141 +0,0 @@ - -modifier_spider_egg_sack = class({}) - -------------------------------------------------------------------- - -function modifier_spider_egg_sack:IsHidden() - return true -end - -------------------------------------------------------------------- - -function modifier_spider_egg_sack:CheckState() - local state = - { - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_NO_UNIT_COLLISION] = false, - [MODIFIER_STATE_INVULNERABLE] = true, - } - return state -end - -------------------------------------------------------------------- - -function modifier_spider_egg_sack:OnCreated( kv ) - if IsServer() then - self.spider_min = self:GetAbility():GetSpecialValueFor( "spider_min" ) - self.spider_max = self:GetAbility():GetSpecialValueFor( "spider_max" ) - self.trigger_radius = self:GetAbility():GetSpecialValueFor( "trigger_radius" ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.duration = self:GetAbility():GetSpecialValueFor( "duration" ) - - self.bBurst = false - self.bTriggered = false - self:StartIntervalThink( 0.25 ) - - end -end - -------------------------------------------------------------------- - -function modifier_spider_egg_sack:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - } - - return funcs -end - -------------------------------------------------------------------- - -function modifier_spider_egg_sack:OnDeath( params ) - if IsServer() then - if params.unit == self:GetParent() then - self:Burst( nil ) - end - end -end - -------------------------------------------------------------------- - -function modifier_spider_egg_sack:OnIntervalThink() - if IsServer() then - if self.bTriggered == false then - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.trigger_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - if #enemies > 0 then - self.bTriggered = true - return - end - else - self:Burst( nil ) - self:StartIntervalThink( -1 ) - end - end -end - -------------------------------------------------------------------- - -function modifier_spider_egg_sack:Burst( hHero ) - if IsServer() then - if self.bBurst == true then - return - end - - local hTarget = hHero - if hHero == nil then - hTarget = self:GetParent() - end - - for i=0,RandomInt( self.spider_min, self.spider_max ) do - local nMaxDistance = 25 - local vSpawnLoc = nil - - local nMaxAttempts = 3 - local nAttempts = 0 - - repeat - if nAttempts > nMaxAttempts then - vSpawnLoc = nil - printf( "WARNING - modifier_spider_egg_sack - failed to find valid spawn loc for newborn spider" ) - break - end - - local vPos = self:GetParent():GetAbsOrigin() + RandomVector( nMaxDistance ) - vSpawnLoc = FindPathablePositionNearby( vPos, 0, 50 ) - nAttempts = nAttempts + 1 - until ( GameRules.Aghanim:GetCurrentRoom():IsInRoomBounds( vSpawnLoc ) ) - - if vSpawnLoc == nil then - vSpawnLoc = self:GetParent():GetOrigin() - end - - if vSpawnLoc ~= nil then - CreateUnitByName( "npc_dota_creature_newborn_spider", vSpawnLoc, true, nil, nil, DOTA_TEAM_BADGUYS ) - else - printf( "WARNING - modifier_spider_egg_sack: failed to spawn newborn spider" ) - end - end - - self.bBurst = true - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_venomancer/venomancer_poison_nova.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius / 2, 0.4, self.radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs ( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy:IsMagicImmune() == false then - --print( "Add modifier for " .. self.duration ) - enemy:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_venomancer_poison_nova", { duration = self.duration } ) - end - end - - EmitSoundOn( "Broodmother.LarvalParasite.Burst", self:GetParent() ) - EmitSoundOn( "EggSac.Burst", self:GetParent() ) - self:GetParent():AddEffects( EF_NODRAW ) - self:GetParent():ForceKill( false ) - end -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_arm_slam.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_arm_slam.lua deleted file mode 100755 index 822d901..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_arm_slam.lua +++ /dev/null @@ -1,146 +0,0 @@ - -modifier_storegga_arm_slam = class ({}) - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:OnCreated( kv ) - if IsServer() then - self.damage_radius = self:GetAbility():GetSpecialValueFor( "damage_radius" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.bAttackBegin = false - self.hHitTargets = {} - self:StartIntervalThink( kv["initial_delay"] / 2 ) - end - -end - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:OnIntervalThink() - if IsServer() then - if self.bAttackBegin == false then - self.bAttackBegin = true - return - end - local attach1 = self:GetParent():ScriptLookupAttachment( "attach_attack1" ) - local attach2 = self:GetParent():ScriptLookupAttachment( "attach_attack1_2" ) - - local vLocation1 = self:GetParent():GetAttachmentOrigin( attach1 ) - vLocation1 = GetGroundPosition( vLocation1, self:GetParent() ) - local vLocation2 = self:GetParent():GetAttachmentOrigin( attach2 ) - vLocation2 = GetGroundPosition( vLocation2, self:GetParent() ) - local Locations = {} - table.insert( Locations, vLocation1 ) - table.insert( Locations, vLocation2 ) - - for _,vPos in pairs ( Locations ) do - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, vPos ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.damage_radius, self.damage_radius, self.damage_radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), vPos, self:GetParent(), self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and self:HasHitTarget( enemy ) == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self, - } - - ApplyDamage( damageInfo ) - self:AddHitTarget( enemy ) - if enemy:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact", enemy ) - else - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_stunned", { duration = self.stun_duration } ) - end - end - end - - local hTiny = CreateUnitByName( "npc_dota_creature_small_storegga", vPos, true, self:GetParent(), self:GetParent():GetOwner(), self:GetParent():GetTeamNumber() ) - if hTiny ~= nil then - hTiny:SetControllableByPlayer( self:GetParent():GetPlayerOwnerID(), false ) - hTiny:SetOwner( self:GetParent() ) - hTiny.bBossMinion = true - if self:GetParent().Encounter then - self:GetParent().Encounter:SuppressRewardsOnDeath( hTiny ) - end - end - end - - EmitSoundOnLocationWithCaster( vLocation1, "OgreTank.GroundSmash", self:GetCaster() ) - self:StartIntervalThink( -1 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_DISABLE_TURNING, - MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:GetModifierDisableTurning( params ) - if IsServer() then - if self.bAttackBegin == true then - return 1 - end - end - - return 0 -end - -------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:GetModifierTurnRate_Percentage( params ) - return -99 -end - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:HasHitTarget( hTarget ) - for _, target in pairs( self.hHitTargets ) do - if target == hTarget then - return true - end - end - - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_arm_slam:AddHitTarget( hTarget ) - table.insert( self.hHitTargets, hTarget ) -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_avalanche_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_avalanche_thinker.lua deleted file mode 100755 index 85bf792..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_avalanche_thinker.lua +++ /dev/null @@ -1,127 +0,0 @@ - -modifier_storegga_avalanche_thinker = class({}) - --------------------------------------------------------------------------------- - -function modifier_storegga_avalanche_thinker:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_storegga_avalanche_thinker:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_avalanche_thinker:OnCreated( kv ) - if IsServer() then - self.interval = self:GetAbility():GetSpecialValueFor( "interval" ) - self.slow_duration = self:GetAbility():GetSpecialValueFor( "slow_duration" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.movement = self:GetAbility():GetSpecialValueFor( "movement" ) - - self.Avalanches = {} - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetParent():GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - self.hAvalancheTarget = enemies[RandomInt(1, #enemies)] - - self:OnIntervalThink() - self:StartIntervalThink( self.interval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_avalanche_thinker:OnIntervalThink() - if IsServer() then - if self:GetCaster():IsNull() then - self:Destroy() - return - end - - local vNewAvalancheDir1 = RandomVector( 1 ) - local vNewAvalancheDir2 = RandomVector( 1 ) - if self.hAvalancheTarget ~= nil and self.hAvalancheTarget:IsAlive() then - vNewAvalancheDir2 = self.hAvalancheTarget:GetOrigin() - self:GetCaster():GetOrigin() - else - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetParent():GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - self.hAvalancheTarget = enemies[RandomInt(1, #enemies)] - if self.hAvalancheTarget ~= nil then - vNewAvalancheDir2 = self.hAvalancheTarget:GetOrigin() - self:GetCaster():GetOrigin() - end - end - - EmitSoundOnLocationWithCaster( self:GetParent():GetOrigin(), "Storegga.Avalanche", self:GetCaster() ) - - local hTiny = CreateUnitByName( "npc_dota_creature_small_storegga", self:GetParent():GetOrigin(), true, self:GetParent(), self:GetParent():GetOwner(), self:GetParent():GetTeamNumber() ) - if hTiny ~= nil then - hTiny:SetControllableByPlayer( self:GetParent():GetPlayerOwnerID(), false ) - hTiny:SetOwner( self:GetParent() ) - hTiny.bBossMinion = true - if self:GetParent().Encounter then - self:GetParent().Encounter:SuppressRewardsOnDeath( hTiny ) - end - end - - vNewAvalancheDir1 = vNewAvalancheDir1:Normalized() - vNewAvalancheDir2 = vNewAvalancheDir2:Normalized() - - local vRadius = Vector( self.radius * .72, self.radius * .72, self.radius * .72 ) - local nFXIndex1 = ParticleManager:CreateParticle( "particles/creatures/storegga/storegga_avalanche.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex1, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex1, 1, vRadius ) - ParticleManager:SetParticleControlForward( nFXIndex1, 0, vNewAvalancheDir1 ) - self:AddParticle( nFXIndex1, false, false, -1, false, false ) - - local nFXIndex2 = ParticleManager:CreateParticle( "particles/creatures/storegga/storegga_avalanche.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex2, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex2, 1, vRadius ) - ParticleManager:SetParticleControlForward( nFXIndex2, 0, vNewAvalancheDir2 ) - self:AddParticle( nFXIndex2, false, false, -1, false, false ) - - local Avalanche1 = - { - vCurPos = self:GetCaster():GetOrigin(), - vDir = vNewAvalancheDir1, - nFX = nFXIndex1, - } - local Avalanche2 = - { - vCurPos = self:GetCaster():GetOrigin(), - vDir = vNewAvalancheDir2, - nFX = nFXIndex2, - } - - table.insert( self.Avalanches, Avalanche1 ) - table.insert( self.Avalanches, Avalanche2 ) - - for _,ava in pairs ( self.Avalanches ) do - local vNewPos = ava.vCurPos + ava.vDir * self.movement - vNewPos.z = GetGroundHeight( vNewPos, self:GetCaster() ) - ava.vCurPos = vNewPos - - - ParticleManager:SetParticleControl( ava.nFX, 0, vNewPos ) - - - local enemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), vNewPos, nil, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and enemy:IsMagicImmune() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_polar_furbolg_ursa_warrior_thunder_clap", { duration = self.slow_duration } ) - end - end - end - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grab.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grab.lua deleted file mode 100755 index 1e3c7a7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grab.lua +++ /dev/null @@ -1,54 +0,0 @@ - -modifier_storegga_grab = class({}) - --------------------------------------------------------------------------------- - -function modifier_storegga_grab:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grab:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grab:OnCreated( kv ) - if IsServer() then - self.grab_radius = self:GetAbility():GetSpecialValueFor( "grab_radius" ) - self.min_hold_time = self:GetAbility():GetSpecialValueFor( "min_hold_time" ) - self.max_hold_time = self:GetAbility():GetSpecialValueFor( "max_hold_time" ) - - self:StartIntervalThink( kv["initial_delay"] ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/generic_attack_crit_blur.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetParent():GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grab:OnIntervalThink() - if IsServer() then - if self.hTarget == nil then - return - end - - local flDist = ( self.hTarget:GetOrigin() - self:GetParent():GetOrigin() ):Length2D() - if flDist > 700 then - return - end - - local hBuff = self:GetCaster():AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_storegga_grabbed_buff", {} ) - if hBuff ~= nil then - self:GetCaster().flThrowTimer = GameRules:GetGameTime() + RandomFloat( self.min_hold_time, self.max_hold_time ) - hBuff.hThrowObject = self.hTarget - self.hTarget:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_storegga_grabbed_debuff", {} ) - end - self:Destroy() - return - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grabbed_buff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grabbed_buff.lua deleted file mode 100755 index b7000f7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grabbed_buff.lua +++ /dev/null @@ -1,37 +0,0 @@ - -modifier_storegga_grabbed_buff = class({}) - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_buff:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_buff:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_buff:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS, - MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_buff:GetActivityTranslationModifiers( params ) - return "tree" -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_buff:GetModifierTurnRate_Percentage( params ) - return -90 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grabbed_debuff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grabbed_debuff.lua deleted file mode 100755 index 152caba..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_grabbed_debuff.lua +++ /dev/null @@ -1,135 +0,0 @@ - -modifier_storegga_grabbed_debuff = class({}) - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:GetAttributes() - return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:OnCreated( kv ) - if IsServer() then - if self:ApplyHorizontalMotionController() == false or self:ApplyVerticalMotionController() == false then - self:Destroy() - return - end - - self.nProjHandle = -1 - self.flTime = 0.0 - self.flHeight = 0.0 - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - MODIFIER_EVENT_ON_DEATH, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:CheckState() - local state = - { - [MODIFIER_STATE_STUNNED] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_OUT_OF_GAME] = true, - } - return state -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - self:GetParent():RemoveVerticalMotionController( self ) - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:UpdateHorizontalMotion( me, dt ) - if IsServer() then - local vLocation = nil - if self.nProjHandle == -1 then - local attach = self:GetCaster():ScriptLookupAttachment( "attach_attack2" ) - vLocation = self:GetCaster():GetAttachmentOrigin( attach ) - else - vLocation = ProjectileManager:GetLinearProjectileLocation( self.nProjHandle ) - end - vLocation.z = 0.0 - me:SetOrigin( vLocation ) - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:UpdateVerticalMotion( me, dt ) - if IsServer() then - local vMyPos = me:GetOrigin() - if self.nProjHandle == -1 then - local attach = self:GetCaster():ScriptLookupAttachment( "attach_attack2" ) - local vLocation = self:GetCaster():GetAttachmentOrigin( attach ) - vMyPos.z = vLocation.z - else - local flGroundHeight = GetGroundHeight( vMyPos, me ) - local flHeightChange = dt * self.flTime * self.flHeight * 1.3 - vMyPos.z = math.max( vMyPos.z - flHeightChange, flGroundHeight ) - end - me:SetOrigin( vMyPos ) - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:OnVerticalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:GetOverrideAnimation( params ) - return ACT_DOTA_FLAIL -end - --------------------------------------------------------------------------------- - -function modifier_storegga_grabbed_debuff:OnDeath( params ) - if IsServer() then - if params.unit == self:GetCaster() then - self:Destroy() - end - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_ground_pound_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_ground_pound_thinker.lua deleted file mode 100755 index 715590d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_ground_pound_thinker.lua +++ /dev/null @@ -1,101 +0,0 @@ - -modifier_storegga_ground_pound_thinker = class({}) - --------------------------------------------------------------------------------- - -function modifier_storegga_ground_pound_thinker:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_storegga_ground_pound_thinker:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_ground_pound_thinker:OnCreated( kv ) - if IsServer() then - self.pound_interval = self:GetAbility():GetSpecialValueFor( "pound_interval" ) - self.slow_duration = self:GetAbility():GetSpecialValueFor( "slow_duration" ) - self.damage = self:GetAbility():GetSpecialValueFor( "damage" ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.movespeed_slow = self:GetAbility():GetSpecialValueFor( "movespeed_slow" ) - - self.fTimeStarted = GameRules:GetGameTime() - - self:OnIntervalThink() - self:StartIntervalThink( self.pound_interval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_storegga_ground_pound_thinker:OnIntervalThink() - if IsServer() then - if self:GetCaster() == nil or self:GetCaster():IsNull() then - self:Destroy() - return - end - - --print( string.format( "OnIntervalThink - time is: %.2f", GameRules:GetGameTime() ) ) - - local vThinkerPos = self:GetParent():GetAbsOrigin() - local hEnemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), vThinkerPos, nil, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _, hEnemy in pairs( hEnemies ) do - if hEnemy ~= nil and hEnemy:IsInvulnerable() == false and hEnemy:IsMagicImmune() == false then - local damageInfo = - { - victim = hEnemy, - attacker = self:GetCaster(), - damage = self.damage, - damage_type = self:GetAbility():GetAbilityDamageType(), - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - - if hEnemy:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hEnemy, PATTACH_POINT_FOLLOW, "attach_hitloc", hEnemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, hEnemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -self:GetCaster():GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, hEnemy, PATTACH_ABSORIGIN_FOLLOW, nil, hEnemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "BloodSplatterImpact", hEnemy ) - else - local kv = { - movespeed_slow = self.movespeed_slow, - duration = self.slow_duration, - } - hEnemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_polar_furbolg_ursa_warrior_thunder_clap", kv ) - end - end - end - - EmitSoundOnLocationWithCaster( self:GetParent():GetOrigin(), "OgreTank.GroundSmash", self:GetCaster() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, self:GetCaster() ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.radius, self.radius ) ) - ParticleManager:SetParticleFoWProperties( nFXIndex, 0, -1, self.radius ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - ScreenShake( self:GetParent():GetOrigin(), 10.0, 100.0, 0.5, 1300.0, 0, true ) - - for i=1,2 do - local hTiny = CreateUnitByName( "npc_dota_creature_small_storegga", vThinkerPos, true, self:GetParent(), self:GetParent():GetOwner(), self:GetParent():GetTeamNumber() ) - if hTiny ~= nil then - hTiny:SetControllableByPlayer( self:GetParent():GetPlayerOwnerID(), false ) - hTiny:SetOwner( self:GetParent() ) - hTiny.bBossMinion = true - if self:GetParent().Encounter then - self:GetParent().Encounter:SuppressRewardsOnDeath( hTiny ) - end - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_passive.lua deleted file mode 100755 index 609f8ba..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_storegga_passive.lua +++ /dev/null @@ -1,61 +0,0 @@ - -modifier_storegga_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_storegga_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_storegga_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_storegga_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - ------------------------------------------------------------------------------------------ - -function modifier_storegga_passive:CheckState() - local state = - { - [MODIFIER_STATE_HEXED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_FROZEN] = false, - [MODIFIER_STATE_FEARED] = false, - [MODIFIER_STATE_CANNOT_BE_MOTION_CONTROLLED] = true, - } - return state -end - --------------------------------------------------------------------------------- - -function modifier_storegga_passive:OnCreated( kv ) - if IsServer() then - self:GetParent().bAbsoluteNoCC = true - end -end - ------------------------------------------------------------------------------------------ - -function modifier_storegga_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_REDUCTION_PERCENTAGE, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_storegga_passive:GetModifierMoveSpeedReductionPercentage( params ) - return 0 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_story_crystal.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_story_crystal.lua deleted file mode 100755 index 3556a3e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_story_crystal.lua +++ /dev/null @@ -1,175 +0,0 @@ - -modifier_story_crystal = class({}) - ----------------------------------------- - -function modifier_story_crystal:OnCreated( kv ) - self.hPlayerEnt = nil - - if IsServer() then - self.Players = {} - self.bInMotion = false - self.flMinHeight = 100 - self.flMaxHeight = 150 - self.bAscending = true - self.flOssiclateTime = 5.0 - self:StartIntervalThink( 0.1 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_story_crystal:IsHidden() - return true -end - - ---------------------------------------------------------------------------- - -function modifier_story_crystal:GetEffectName() - return "particles/creatures/aghanim/aghanim_crystal_spellswap_ambient.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_story_crystal:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_story_crystal:CheckState() - local state = {} - if IsServer() then - state[ MODIFIER_STATE_INVULNERABLE ] = true - state[ MODIFIER_STATE_MAGIC_IMMUNE ] = true - state[ MODIFIER_STATE_NO_HEALTH_BAR ] = true - state[ MODIFIER_STATE_DISARMED ] = true - state[ MODIFIER_STATE_ROOTED ] = false - state[ MODIFIER_STATE_ATTACK_IMMUNE ] = true - end - - return state -end - ------------------------------------------------------------------------ - -function modifier_story_crystal:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ORDER, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_story_crystal:OnOrder( params ) - if IsServer() then - local hOrderedUnit = params.unit - local hTargetUnit = params.target - local nOrderType = params.order_type - if nOrderType ~= DOTA_UNIT_ORDER_MOVE_TO_TARGET and nOrderType ~= DOTA_UNIT_ORDER_ATTACK_TARGET then - return - end - - if hTargetUnit == nil or hTargetUnit ~= self:GetParent() then - return - end - - if hOrderedUnit ~= nil and hOrderedUnit:IsRealHero() and hOrderedUnit:GetTeamNumber() == DOTA_TEAM_GOODGUYS then - self.hPlayerEnt = hOrderedUnit - self:StartIntervalThink( 0.1 ) - return - end - - self:StartIntervalThink( -1 ) - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_story_crystal:OnIntervalThink() - if IsServer() then - if self.bInMotion == false then - if self:ApplyVerticalMotionController() == false then - self:Destroy() - end - self.bInMotion = true - self:StartIntervalThink( -1 ) - return - end - - if self.hPlayerEnt ~= nil then - local flTalkDistance = 250.0 - if flTalkDistance >= ( self.hPlayerEnt:GetOrigin() - self:GetParent():GetOrigin() ):Length2D() then - local nPlayerID = self.hPlayerEnt:GetPlayerOwnerID() - for _,nID in pairs ( self.Players ) do - if nPlayerID == nID then - return - end - end - - if GameRules.Aghanim ~= nil then - self.hPlayerEnt:Interrupt() - local nCrystalID = 1 + #GameRules.Aghanim.PlayerCrystals[ nPlayerID ] - local szLine = tostring( "announcer_aghanim_agh_story_time_" .. tostring( nCrystalID ) .. "_01" ) - print( "crystal .. " .. nCrystalID .. "spoken to by " .. self.hPlayerEnt:GetUnitName() .. ", speaking line " .. szLine ) - -- EmitSoundOn( "wisp_thanks", self:GetParent() ) - EmitSoundOnLocationForPlayer( szLine, self:GetParent():GetAbsOrigin(), nPlayerID ) - table.insert( self.Players, nPlayerID ) - table.insert( GameRules.Aghanim.PlayerCrystals[ nPlayerID ], nCrystalID ) - self:StartIntervalThink( -1 ) - end - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_story_crystal:OnDestroy() - if IsServer() then - self:GetParent():RemoveVerticalMotionController( self ) - end -end - - --------------------------------------------------------------------------------- - -function modifier_story_crystal:UpdateVerticalMotion( me, dt ) - if IsServer() then - local flGroundHeight = GetGroundHeight( self:GetParent():GetAbsOrigin(), self:GetParent() ) - local flCurHeight = self:GetParent():GetAbsOrigin().z - flGroundHeight - local flChange = ( self.flMaxHeight - self.flMinHeight ) / self.flOssiclateTime * dt - if self.bAscending == false then - flChange = flChange * -1 - end - - local vNewLocation = self:GetParent():GetAbsOrigin() - vNewLocation.z = flGroundHeight + flCurHeight + flChange - me:SetOrigin( vNewLocation ) - - if ( vNewLocation.z - flGroundHeight ) > self.flMaxHeight then - self.bAscending = false - end - if ( vNewLocation.z - flGroundHeight ) < self.flMinHeight then - self.bAscending = true - end - end -end - --------------------------------------------------------------------------------- - -function modifier_story_crystal:OnVerticalMotionInterrupted() - if IsServer() then - print( "motion interrupted" ) - self:Destroy() - end -end - - - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_hammer_throw.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_hammer_throw.lua deleted file mode 100755 index f32cc83..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_hammer_throw.lua +++ /dev/null @@ -1,142 +0,0 @@ - -modifier_temple_guardian_hammer_throw = class({}) - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:IsHidden() - return true -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:IsPurgable() - return false -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:RemoveOnDeath() - return false -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:OnCreated( kv ) - if IsServer() then - self.hammer_damage = self:GetAbility():GetSpecialValueFor( "hammer_damage" ) - self.throw_duration = self:GetAbility():GetSpecialValueFor( "throw_duration" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - - self.hHitEntities = {} - - self.hHammer = CreateUnitByName( "npc_dota_beastmaster_axe", self:GetParent():GetOrigin(), false, nil, nil, self:GetParent():GetTeamNumber() ) - if self.hHammer == nil then - self:Destroy() - return - end - - self.hHammer:AddEffects( EF_NODRAW ) - self.hHammer:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_beastmaster_axe_invulnerable", kv ) - - self.vSourceLoc = self:GetCaster():GetOrigin() - self.vSourceLoc.z = self.vSourceLoc.z + 180 - self.vTargetLoc = Vector( kv["x"], kv["y"], self.vSourceLoc.z ) - self.vToTarget = self.vTargetLoc - self.vSourceLoc - self.vDir = self.vToTarget:Normalized() - self.flDist = self.vToTarget:Length2D() - - self.flDieTime = GameRules:GetGameTime() + self.throw_duration - self.bReturning = false - - self.nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/omniknight_wildaxe.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 0, self.hHammer, PATTACH_ABSORIGIN_FOLLOW, nil, self.hHammer:GetOrigin(), true ) - - EmitSoundOn( "TempleGuardian.HammerThrow", self:GetCaster() ) - - self:StartIntervalThink( 0.05 ) - end -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:OnIntervalThink() - if IsServer() then - local flPct = ( self.flDieTime - GameRules:GetGameTime() ) / self.throw_duration - local t = 1.0 - flPct - - local vPos = self.vSourceLoc + ( self.vDir * self.flDist * t * 2 ) - if self.bReturning == true then - vPos = self.vTargetLoc - ( self.vDir * self.flDist * ( t - 0.5 ) * 2 ) - end - - if FrameTime() > 0.0 then - local vVel = vPos - self.hHammer:GetOrigin() / FrameTime() - self.hHammer:SetVelocity( vVel ) - end - - self.hHammer:SetOrigin( vPos ) - - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self.hHammer:GetOrigin(), self.hHammer, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false and self:HasHitTarget( enemy ) == false then - self:AddHitTarget( enemy ) - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.hammer_damage, - damage_type = DAMAGE_TYPE_MAGICAL, - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_stunned", { duration = self.stun_duration } ) - EmitSoundOn( "TempleGuardian.HammerThrow.Damage", enemy ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_beastmaster/beastmaster_wildaxes_hit.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - - if t >= 0.5 then - self.bReturning = true - end - - if t >= 0.95 then - self:Destroy() - end - end -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:OnDestroy() - if IsServer() then - UTIL_Remove( self.hHammer ) - ParticleManager:DestroyParticle( self.nFXIndex, true ) - end -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:HasHitTarget( enemy ) - if IsServer() then - for _,hitEnemy in pairs( self.hHitEntities ) do - if hitEnemy == enemy then - return true - end - end - return false - end -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_hammer_throw:AddHitTarget( enemy ) - if IsServer() then - table.insert( self.hHitEntities, enemy ) - end -end - -------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_immunity.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_immunity.lua deleted file mode 100755 index 4c17902..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_immunity.lua +++ /dev/null @@ -1,35 +0,0 @@ - -modifier_temple_guardian_immunity = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_immunity:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_immunity:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_immunity:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_MAGIC_IMMUNE] = true - state[MODIFIER_STATE_INVULNERABLE] = true - state[MODIFIER_STATE_OUT_OF_GAME] = true - end - - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_immunity:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_passive.lua deleted file mode 100755 index a8b96d6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_passive.lua +++ /dev/null @@ -1,109 +0,0 @@ - -modifier_temple_guardian_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_passive:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_temple_guardian_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - --------------------------------------------------------------------------------- - -function modifier_temple_guardian_passive:OnCreated( kv ) - if IsServer() then - self.nonrage_status_resistance = self:GetAbility():GetSpecialValueFor( "nonrage_status_resistance" ) - self.rage_move_speed_bonus = self:GetAbility():GetSpecialValueFor( "rage_move_speed_bonus" ) - self.rage_model_scale_bonus = self:GetAbility():GetSpecialValueFor( "rage_model_scale_bonus" ) - self.rage_turn_rate_bonus_pct = self:GetAbility():GetSpecialValueFor( "rage_turn_rate_bonus_pct" ) - end -end - - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_passive:CheckState() - local state = - { - [ MODIFIER_STATE_FEARED ] = false, - [ MODIFIER_STATE_CANNOT_BE_MOTION_CONTROLLED ] = true, - [ MODIFIER_STATE_UNSLOWABLE ] = true, - } - - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING, - MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_MODEL_SCALE, - MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_temple_guardian_passive:GetModifierStatusResistanceStacking( params ) - if IsServer() then - if self:GetParent().bIsEnraged == true then - return 100 - end - end - - return self.nonrage_status_resistance -end - --------------------------------------------------------------------------------- - -function modifier_temple_guardian_passive:GetModifierMoveSpeedBonus_Constant( params ) - if IsServer() then - if self:GetParent().bIsEnraged == true then - return self.rage_move_speed_bonus - end - end - - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_temple_guardian_passive:GetModifierModelScale( params ) - if IsServer() then - if self:GetParent().bIsEnraged == true then - return self.rage_model_scale_bonus - end - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_temple_guardian_passive:GetModifierTurnRate_Percentage( params ) - if IsServer() then - if self:GetParent().bIsEnraged == true then - return self.rage_turn_rate_bonus_pct - end - end - - return 0 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_statue.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_statue.lua deleted file mode 100755 index 51e4505..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_statue.lua +++ /dev/null @@ -1,42 +0,0 @@ - -modifier_temple_guardian_statue = class({}) - ------------------------------------------------------------------------------ - -function modifier_temple_guardian_statue:IsHidden() - return true -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_statue:CheckState() - local state = - { - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_STUNNED] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_UNSELECTABLE] = true, - [MODIFIER_STATE_NOT_ON_MINIMAP] = true, - } - - return state -end - -------------------------------------------------------------------- - -function modifier_temple_guardian_statue:OnCreated( kv ) - if IsServer() then - local vAngles = self:GetParent():GetAnglesAsVector() - self:GetParent():SetAngles( vAngles.x, vAngles.y - 90.0, vAngles.z ) - self:GetParent():StartGesture( ACT_DOTA_CAST_ABILITY_7 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_temple_guardian_statue:OnDestroy() - if IsServer() then - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_wrath_thinker.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_wrath_thinker.lua deleted file mode 100755 index 7832b8b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_temple_guardian_wrath_thinker.lua +++ /dev/null @@ -1,69 +0,0 @@ - -modifier_temple_guardian_wrath_thinker = class({}) - ------------------------------------------------------------------------------ - -function modifier_temple_guardian_wrath_thinker:OnCreated( kv ) - if IsServer() then - self.delay = self:GetAbility():GetSpecialValueFor( "delay" ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.radius = self.radius + kv[ "extra_radius" ] - self.blast_damage = self:GetAbility():GetSpecialValueFor( "blast_damage" ) - - self:StartIntervalThink( self.delay ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/dungeon_generic_blast_pre.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, self.delay, 1.0 ) ) - ParticleManager:SetParticleControl( nFXIndex, 15, Vector( 175, 238, 238 ) ) - ParticleManager:SetParticleControl( nFXIndex, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end -end - ------------------------------------------------------------------------------ - -function modifier_temple_guardian_wrath_thinker:OnIntervalThink() - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle( "particles/test_particle/dungeon_generic_blast.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector ( self.radius, self.radius, self.radius ) ) - ParticleManager:SetParticleControl( nFXIndex, 15, Vector( 175, 238, 238 ) ) - ParticleManager:SetParticleControl( nFXIndex, 16, Vector( 1, 0, 0 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "TempleGuardian.Wrath.Explosion", self:GetParent() ) - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - local damageInfo = - { - victim = enemy, - attacker = self:GetCaster(), - damage = self.blast_damage, - damage_type = self:GetAbility():GetAbilityDamageType(), - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - end - end - - if RollPercentage( 3 ) then - local vLocation = self:GetParent():GetAbsOrigin() - if GridNav:CanFindPath( self:GetCaster():GetAbsOrigin(), vLocation ) then - local newItem = CreateItem( "item_mana_potion", nil, nil ) - newItem:SetPurchaseTime( 0 ) - if newItem:IsPermanent() and newItem:GetShareability() == ITEM_FULLY_SHAREABLE then - item:SetStacksWithOtherOwners( true ) - end - - local drop = CreateItemOnPositionSync( vLocation, newItem ) - newItem:LaunchLoot( true, 300, 0.75, vLocation ) - end - end - - UTIL_Remove( self:GetParent() ) - end -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tidehunter_damage_counter.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tidehunter_damage_counter.lua deleted file mode 100755 index 793e0f9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tidehunter_damage_counter.lua +++ /dev/null @@ -1,154 +0,0 @@ - -modifier_tidehunter_damage_counter = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_damage_counter:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_damage_counter:OnCreated( kv ) - if IsServer() then - - self.damage_threshold = self:GetAbility():GetSpecialValueFor( "damage_threshold" ) - self.damage_counter_tiers = self:GetAbility():GetSpecialValueFor( "damage_counter_tiers" ) - self.time_before_reduction = self:GetAbility():GetSpecialValueFor( "time_before_reduction" ) - - self.nRecentDamageTaken = kv.damage or 0 - self.nOverheadParticleTier = 0 - self.nDamagePerTier = self.damage_threshold / self.damage_counter_tiers - self.fLastDamageTakenTime = GameRules:GetGameTime() - self.fLastReductionTime = GameRules:GetGameTime() - - -- Created overhead particle - local vPos = Vector( 0, 0, 0 ) - self.nFXIndex = ParticleManager:CreateParticle( "particles/creatures/lifestealer/lifestealer_damage_counter_overhead.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControl( self.nFXIndex, 0, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 2, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 3, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 4, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 5, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 6, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 7, vPos ) - ParticleManager:SetParticleControl( self.nFXIndex, 8, Vector( 1, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 9, Vector( 2, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 10, Vector( 3, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 11, Vector( 4, 0, 0 ) ) - ParticleManager:SetParticleControl( self.nFXIndex, 12, Vector( 5, 0, 0 ) ) - self:AddParticle( self.nFXIndex, false, false, -1, false, true ) - - local nTier = math.floor( self.nRecentDamageTaken / self.nDamagePerTier ) - if nTier > self.nOverheadParticleTier then - self:IncrementOverheadParticle( nTier ) - end - - self:StartIntervalThink( 0.1 ) - - end -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_damage_counter:OnIntervalThink() - if IsServer() then - -- if it's been at least 2s since the last time I took damage, then reduce my ragebar tier by 1 - if GameRules:GetGameTime() >= self.fLastDamageTakenTime + self.time_before_reduction then - if GameRules:GetGameTime() >= self.fLastReductionTime + self.time_before_reduction then - --printf( "It's been at least %.2f secs since the last time I took damage", self.time_before_reduction ) - self.nRecentDamageTaken = self.nRecentDamageTaken - self.nDamagePerTier - local nTier = math.floor( self.nRecentDamageTaken / self.nDamagePerTier ) - --printf( " self.nRecentDamageTaken: %d, self.nDamagePerTier: %d, nTier: %d", self.nRecentDamageTaken, self.nDamagePerTier, nTier ) - - if nTier < self.nOverheadParticleTier then - --printf( " Reduce ragebar -- DecrementOverheadParticle" ) - self:DecrementOverheadParticle( nTier ) - end - - self.fLastReductionTime = GameRules:GetGameTime() - end - end - end -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_damage_counter:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_damage_counter:OnTakeDamage( params ) - if IsServer() then - local hAttacker = params.attacker - local hVictim = params.unit - local hEntity = self:GetParent() - local hRavage = hEntity:FindAbilityByName( "tidehunter_ravage" ) - if hAttacker ~= nil and hVictim ~= nil and hVictim == self:GetParent() then - self.fLastDamageTakenTime = GameRules:GetGameTime() - --printf( "OnTakeDamage - hVictim is: %s", hVictim:GetUnitName() ) - self.nRecentDamageTaken = self.nRecentDamageTaken + params.damage - - local nTier = math.floor( self.nRecentDamageTaken / self.nDamagePerTier ) - - if nTier > self.nOverheadParticleTier then - self:IncrementOverheadParticle( nTier ) - end - - if self.nRecentDamageTaken >= self.damage_threshold then - - self:GetParent():Purge( false, true, false, true, false ) - ParticleManager:CreateParticle( "particles/units/heroes/hero_tidehunter/tidehunter_krakenshell_purge.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - EmitSoundOn( "Hero_Tidehunter.KrakenShell", self:GetParent() ) - - self:GetParent():Interrupt() - - if not ( hVictim:IsSilenced() or hVictim:IsStunned() or hVictim:IsHexed() or hVictim:IsFrozen() ) then - ExecuteOrderFromTable({ - UnitIndex = hVictim:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = hRavage:entindex(), - Queue = false, - }) - self:Destroy() - end - else - self:ForceRefresh() - end - end - end - - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_damage_counter:IncrementOverheadParticle( nTier ) - local nTiersSinceLastUpdate = nTier - self.nOverheadParticleTier - - for i = 1, nTiersSinceLastUpdate do - ParticleManager:SetParticleControl( self.nFXIndex, self.nOverheadParticleTier + i, Vector( 1, 0, 0 ) ) - end - - self.nOverheadParticleTier = nTier -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_damage_counter:DecrementOverheadParticle( nTier ) - if self.nOverheadParticleTier - 1 > 0 then - ParticleManager:SetParticleControl( self.nFXIndex, self.nOverheadParticleTier, Vector( 0, 0, 0 ) ) - --printf( "DecrementOverheadParticle - self.nOverheadParticleTier: %d", self.nOverheadParticleTier ) - self.nOverheadParticleTier = nTier - else - self:Destroy() - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tidehunter_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tidehunter_passive.lua deleted file mode 100755 index 623ec1d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tidehunter_passive.lua +++ /dev/null @@ -1,57 +0,0 @@ - -modifier_tidehunter_passive = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_passive:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_passive:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_passive:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_passive:OnCreated( kv ) - if IsServer() then - self.damage_counter_duration = self:GetAbility():GetSpecialValueFor( "damage_counter_duration" ) - end -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_passive:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_tidehunter_passive:OnTakeDamage( params ) - if IsServer() then - local hAttacker = params.attacker - local hVictim = params.unit - if hAttacker ~= nil and hVictim ~= nil and hVictim == self:GetParent() then - if self:GetParent():FindModifierByName( "modifier_tidehunter_damage_counter" ) == nil then - local kv = { duration = -1 } -- self.damage_counter_duration - kv.damage = params.damage - self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_tidehunter_damage_counter", kv ) - end - end - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tornado_harpy_intrinsic.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tornado_harpy_intrinsic.lua deleted file mode 100755 index e92f316..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tornado_harpy_intrinsic.lua +++ /dev/null @@ -1,31 +0,0 @@ -modifier_tornado_harpy_intrinsic = class({}) - - -function modifier_tornado_harpy_intrinsic:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_ABILITY_EXECUTED, - } - return funcs -end - - -function modifier_tornado_harpy_intrinsic:OnAbilityExecuted(keys) - if IsServer() then - local unit = keys.unit - local parent = self:GetParent() - if unit ~= parent then - return - end - - local justCast = keys.ability:GetAbilityName() == "harpy_storm_chain_lightning" - if not justCast then - return - end - - local duration = self:GetAbility():GetSpecialValueFor("duration") - parent:AddNewModifier(parent, self:GetAbility(), "modifier_tornado_harpy_surge", {duration = duration}) - - end - - return 0 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tornado_harpy_surge.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tornado_harpy_surge.lua deleted file mode 100755 index 07e52d0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tornado_harpy_surge.lua +++ /dev/null @@ -1,17 +0,0 @@ -modifier_tornado_harpy_surge = class({}) - - -function modifier_tornado_harpy_surge:DeclareFunctions() - local funcs = { - MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, - } - return funcs -end - - -function modifier_tornado_harpy_surge:GetModifierMoveSpeedBonus_Constant(params) - - return self:GetAbility():GetSpecialValueFor("speed_boost") - -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tusk_mage_freezing_blast.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tusk_mage_freezing_blast.lua deleted file mode 100755 index d587ab7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_tusk_mage_freezing_blast.lua +++ /dev/null @@ -1,56 +0,0 @@ - -modifier_tusk_mage_freezing_blast = class({}) - ------------------------------------------------------------------------------ - -function modifier_tusk_mage_freezing_blast:IsHidden() - return false -end - ------------------------------------------------------------------------------ - -function modifier_tusk_mage_freezing_blast:GetEffectName() - return "particles/units/heroes/hero_winter_wyvern/wyvern_arctic_burn_slow.vpcf" -end - ------------------------------------------------------------------------------ - -function modifier_tusk_mage_freezing_blast:GetStatusEffectName() - return "particles/status_fx/status_effect_wyvern_arctic_burn.vpcf" -end - ------------------------------------------------------------------------------ - -function modifier_tusk_mage_freezing_blast:OnCreated( kv ) - if not IsServer() then - return - end - - self.movespeed_slow = self:GetAbility():GetSpecialValueFor( "movespeed_slow" ) - self.attackspeed_slow = self:GetAbility():GetSpecialValueFor( "attackspeed_slow" ) -end - ------------------------------------------------------------------------------ - -function modifier_tusk_mage_freezing_blast:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end ----------------------------------------- - -function modifier_tusk_mage_freezing_blast:GetModifierMoveSpeedBonus_Percentage( params ) - return self.movespeed_slow -end - ----------------------------------------- - -function modifier_tusk_mage_freezing_blast:GetModifierAttackSpeedBonus_Constant( params ) - return self.attackspeed_slow -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_undead_tusk_mage_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_undead_tusk_mage_passive.lua deleted file mode 100755 index 0425b78..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_undead_tusk_mage_passive.lua +++ /dev/null @@ -1,45 +0,0 @@ -modifier_undead_tusk_mage_passive = class({}) - ---------------------------------------------------------------------------- - -function modifier_undead_tusk_mage_passive:IsHidden() - return true -end - ---------------------------------------------------------------------------- - -function modifier_undead_tusk_mage_passive:IsPurgable() - return false -end - ---------------------------------------------------------------------------- - -function modifier_undead_tusk_mage_passive:GetStatusEffectName() - return "particles/status_fx/status_effect_ghost.vpcf" -end - ---------------------------------------------------------------------------- - -function modifier_undead_tusk_mage_passive:CheckState() - local state = - { - [MODIFIER_STATE_ATTACK_IMMUNE] = true, - } - return state -end - ---------------------------------------------------------------------------- - -function modifier_undead_tusk_mage_passive:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_PHYSICAL, - } - return funcs -end - ---------------------------------------------------------------------------- - -function modifier_undead_tusk_mage_passive:GetAbsoluteNoDamagePhysical( params ) - return 1 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_undead_tusk_mage_tombstone.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_undead_tusk_mage_tombstone.lua deleted file mode 100755 index 3e627a7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_undead_tusk_mage_tombstone.lua +++ /dev/null @@ -1,107 +0,0 @@ - -modifier_undead_tusk_mage_tombstone = class({}) - ---------------------------------------------------------- - -function modifier_undead_tusk_mage_tombstone:IsHidden() - return true -end - ---------------------------------------------------------- - -function modifier_undead_tusk_mage_tombstone:IsPurgable() - return false -end - ---------------------------------------------------------- - -function modifier_undead_tusk_mage_tombstone:CheckState() - local state = - { - [MODIFIER_STATE_MAGIC_IMMUNE] = true, - [MODIFIER_STATE_ROOTED] = true, - [MODIFIER_STATE_DISARMED] = true, - } - - return state -end - ---------------------------------------------------------- - -function modifier_undead_tusk_mage_tombstone:OnCreated() - if IsServer() then - self.hSkeletons = {} - - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.skeleton_interval = self:GetAbility():GetSpecialValueFor( "skeleton_interval" ) - self.skeletons_per_tick = self:GetAbility():GetSpecialValueFor( "skeletons_per_tick" ) - self.max_skeletons = self:GetAbility():GetSpecialValueFor( "max_skeletons" ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/act_2/undead_tusk_mage_sigil.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.radius, 1, -self.radius ) ) - self:AddParticle( nFXIndex, false, false, -1, false, false ) - - self:StartIntervalThink( self.skeleton_interval ) - end -end - ---------------------------------------------------------- - -function modifier_undead_tusk_mage_tombstone:OnDestroy() - if IsServer() then - --self:GetParent():AddEffects( EF_NODRAW ) - --UTIL_Remove( self:GetParent() ) - end -end - ---------------------------------------------------------- - -function modifier_undead_tusk_mage_tombstone:OnIntervalThink() - if IsServer() then - for k, hSkeleton in pairs( self.hSkeletons ) do - if hSkeleton == nil or hSkeleton:IsNull() or hSkeleton:IsAlive() == false then - table.remove( self.hSkeletons, k ) - end - end - - local hGoalEnt = nil - - -- Find a player hero that this tick of spawns will path to - local hAllHeroes = HeroList:GetAllHeroes() - for _, hHero in pairs( hAllHeroes ) do - if hHero ~= nil and hHero:IsAlive() then - hGoalEnt = hHero - break - end - end - - for i = 1, self.skeletons_per_tick do - if #self.hSkeletons < self.max_skeletons then - --print( string.format( "modifier_undead_tusk_mage_tombstone - This tombstone owns less than %d skels, so making another one now", self.max_skeletons ) ) - - local vSpawnPos = self:GetParent():GetAbsOrigin() + RandomVector( 150 ) - local hSkeleton = CreateUnitByName( "npc_dota_creature_tusk_skeleton", vSpawnPos, true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - if hSkeleton ~= nil then - table.insert( self.hSkeletons, hSkeleton ) - - if hGoalEnt then - hSkeleton:SetInitialGoalEntity( hGoalEnt ) - else - print( string.format( "ERROR - modifier_undead_tusk_mage_tombstone: Could not set initial goal entity for %s", hSkeleton:GetUnitName() ) ) - end - - hSkeleton:SetOwner( self:GetParent() ) - hSkeleton:SetDeathXP( 0 ) - hSkeleton:SetMinimumGoldBounty( 0 ) - hSkeleton:SetMaximumGoldBounty( 0 ) - - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/neutral_fx/skeleton_spawn.vpcf", PATTACH_ABSORIGIN, hSkeleton ) ) - - EmitSoundOn( "Tombstone.RaiseDead", hSkeleton ) - end - end - end - end -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_underlord_channelled_buff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_underlord_channelled_buff.lua deleted file mode 100755 index 950ed57..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_underlord_channelled_buff.lua +++ /dev/null @@ -1,67 +0,0 @@ - -modifier_underlord_channelled_buff = class({}) - ------------------------------------------------------------------------------ - -function modifier_underlord_channelled_buff:GetAttributes() - return MODIFIER_ATTRIBUTE_MULTIPLE -end - ------------------------------------------------------------------------------ - -function modifier_underlord_channelled_buff:GetEffectName() - return "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_buff.vpcf" -end - ------------------------------------------------------------------------------ - -function modifier_underlord_channelled_buff:OnCreated( kv ) - if not self:GetAbility() then - return - end - - self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) - self.bonus_movement_speed = self:GetAbility():GetSpecialValueFor( "bonus_movement_speed" ) - self.modelscale = self:GetAbility():GetSpecialValueFor( "modelscale" ) - - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_pugna/pugna_life_drain.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetCaster():GetOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetOrigin(), true ) - self:AddParticle( nFXIndex , true, false, 0, false, false ) - end -end - ------------------------------------------------------------------------------ - -function modifier_underlord_channelled_buff:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - MODIFIER_PROPERTY_MODEL_SCALE, - } - - return funcs -end - - ------------------------------------------------------------------------------ - -function modifier_underlord_channelled_buff:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end - ------------------------------------------------------------------------------ - -function modifier_underlord_channelled_buff:GetModifierMoveSpeedBonus_Percentage( params ) - return self.bonus_movement_speed -end - ------------------------------------------------------------------------------ - -function modifier_underlord_channelled_buff:GetModifierModelScale( params ) - return self.modelscale -end - ------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_upheaval_urn_incoming_damage_rules.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_upheaval_urn_incoming_damage_rules.lua deleted file mode 100755 index 48ea198..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_upheaval_urn_incoming_damage_rules.lua +++ /dev/null @@ -1,87 +0,0 @@ -modifier_upheaval_urn_incoming_damage_rules = class({}) - --------------------------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:CheckState() - local state = - { - [MODIFIER_STATE_MAGIC_IMMUNE] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - [MODIFIER_STATE_UNSELECTABLE] = true, - } - - return state -end - --------------------------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:DeclareFunctions() - local funcs = { --- MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE, --- MODIFIER_EVENT_ON_ATTACKED, - } - - return funcs - -end - ----------------------------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:IsPurgable() - return false -end - ----------------------------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:CanParentBeAutoAttacked() - return false -end - ------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:GetAbsoluteNoDamageMagical( params ) - return 1 -end - ------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:GetAbsoluteNoDamagePure( params ) - return 1 -end - ------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:GetAbsoluteNoDamagePhysical( params ) - return 1 -end - ------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:GetModifierIncomingDamage_Percentage( params ) - return -100 -end - - ------------------------------------------------------------- - -function modifier_upheaval_urn_incoming_damage_rules:OnAttacked( params ) - if IsServer() then - - if params.target == self:GetParent() then - local nHealth = self:GetParent():GetHealth() - if nHealth - 1 <= 0 then - self:GetParent():ForceKill( false ) - else - self:GetParent():ModifyHealth( self:GetParent():GetHealth() - 1, nil, true, 0 ) - end - end - end - - return 1 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_void_spirit_boss_immunity.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_void_spirit_boss_immunity.lua deleted file mode 100755 index 6313ce2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_void_spirit_boss_immunity.lua +++ /dev/null @@ -1,35 +0,0 @@ - -modifier_void_spirit_boss_immunity = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_void_spirit_boss_immunity:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_void_spirit_boss_immunity:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_void_spirit_boss_immunity:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_MAGIC_IMMUNE] = true - state[MODIFIER_STATE_INVULNERABLE] = true - state[MODIFIER_STATE_OUT_OF_GAME] = true - end - - return state -end - ------------------------------------------------------------------------------------------ - -function modifier_void_spirit_boss_immunity:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end - ------------------------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_wandering_ogre_seal.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_wandering_ogre_seal.lua deleted file mode 100755 index 091fe0e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_wandering_ogre_seal.lua +++ /dev/null @@ -1,109 +0,0 @@ - -require( "utility_functions" ) - -modifier_wandering_ogre_seal = class({}) - --------------------------------------------------------------------------------- - -function modifier_wandering_ogre_seal:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_wandering_ogre_seal:IsHidden() - return true -end - --------------------------------------------------------------------------------- - ---[[ -function modifier_wandering_ogre_seal:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end -]] - --------------------------------------------------------------------------------- - -function modifier_wandering_ogre_seal:OnCreated( kv ) - if IsServer() then - self.max_wander_range = self:GetAbility():GetSpecialValueFor( "max_wander_range" ) - self.min_wander_range = self:GetAbility():GetSpecialValueFor( "min_wander_range" ) - self.move_interval = self:GetAbility():GetSpecialValueFor( "move_interval" ) - - local flNow = GameRules:GetGameTime() - - self:StartIntervalThink( 1 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_wandering_ogre_seal:OnIntervalThink() - if IsServer() then - local hUnit = self:GetParent() - - local flNow = GameRules:GetGameTime() - - if self.flNextMoveTime == nil or ( flNow > self.flNextMoveTime ) then - local vGoalPosition = GetRandomPathablePositionWithin( hUnit:GetAbsOrigin(), self.max_wander_range, self.min_wander_range ) - - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = vGoalPosition - }) - self.flNextMoveTime = flNow + self.move_interval - end - end -end - --------------------------------------------------------------------------------- - ---[[ -function modifier_wandering_ogre_seal:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_wandering_ogre_seal:OnTakeDamage( params ) - if IsServer() then - -- make Penguins do 1 damage to me? - - local hUnit = params.unit - if hUnit == self:GetParent() then - local flDamage = params.damage - if flDamage <= 0 then - return - end - - EmitSoundOn( "GingerRoshan.LowPitchGrunt", hUnit ) - end - end - - return 0 -end -]] - --------------------------------------------------------------------------------- - -function modifier_wandering_ogre_seal:CheckState() - local state = {} - if IsServer() then - state = - { - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - [MODIFIER_STATE_OUT_OF_GAME] = true, - [MODIFIER_STATE_DISARMED] = true, - } - end - - return state -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_warlock_hp_aura.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_warlock_hp_aura.lua deleted file mode 100755 index f47853c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_warlock_hp_aura.lua +++ /dev/null @@ -1,58 +0,0 @@ - -modifier_warlock_hp_aura = class({}) - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:IsAura() - return true -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:GetModifierAura() - return "modifier_warlock_hp_aura_effect" -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_FRIENDLY -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:GetAuraSearchType() - return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:GetAuraSearchFlags() - return DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:GetAuraRadius() - return self.radius -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:OnCreated( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura:OnRefresh( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_warlock_hp_aura_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_warlock_hp_aura_effect.lua deleted file mode 100755 index bd1ac69..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/creatures/modifier_warlock_hp_aura_effect.lua +++ /dev/null @@ -1,55 +0,0 @@ - -modifier_warlock_hp_aura_effect = class({}) - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura_effect:OnCreated( kv ) - if IsServer() then - --print( "test" ) - end -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura_effect:DeclareFunctions() - local funcs = { - MODIFIER_PROPERTY_EXTRA_HEALTH_PERCENTAGE, - MODIFIER_PROPERTY_MODEL_SCALE, - MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura_effect:GetModifierExtraHealthPercentage( params ) - if self:GetCaster() == nil or self:GetCaster():PassivesDisabled() then - return 0 - end - - -- How is this number intended to work? It seems to have regressed. - return 600 --8.0 --self.bonus_hp_multiplier -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura_effect:GetModifierModelScale( params ) - if self:GetCaster() == nil or self:GetCaster():PassivesDisabled() then - return 0 - end - - return 130 -end - --------------------------------------------------------------------------------- - -function modifier_warlock_hp_aura_effect:GetModifierDamageOutgoing_Percentage( params ) - if self:GetCaster() == nil or self:GetCaster():PassivesDisabled() then - return 0 - end - - return 100 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ability_cast_warning.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ability_cast_warning.lua deleted file mode 100755 index fefe6a8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ability_cast_warning.lua +++ /dev/null @@ -1,128 +0,0 @@ - -modifier_ability_cast_warning = class({}) - --------------------------------------------------------------------------------- - -function modifier_ability_cast_warning:IsHidden() - return true -end - - --------------------------------------------------------------------------------- - -function modifier_ability_cast_warning:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_ABILITY_START, - MODIFIER_EVENT_ON_ABILITY_EXECUTED, - MODIFIER_EVENT_ON_STATE_CHANGED, - MODIFIER_EVENT_ON_ORDER, - - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ability_cast_warning:OnAbilityStart( params ) - if IsServer() then - if params.unit ~= self:GetParent() then - return - end - - -- Don't show exclamation mark on bosses - if self:GetParent().bIsBoss then - self:Destroy() - end - - --printf("function modifier_ability_cast_warning:OnAbilityStart( params )") - self.m_nWarningFX = ParticleManager:CreateParticle( "particles/generic_gameplay/generic_has_quest.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - self:AddParticle( self.m_nWarningFX, false, false, -1, false, true ) - - self:StartIntervalThink( 0.75 ) - end - return - -end - ------------------------------------------------------------------------ - -function modifier_ability_cast_warning:OnIntervalThink() - if IsServer() then - if self.m_nWarningFX ~= nil then - ParticleManager:DestroyParticle( self.m_nWarningFX, true ) - end - return -1 - end - return -end --------------------------------------------------------------------------------- - ------------------------------------------------------------------------ - -function modifier_ability_cast_warning:OnAbilityExecuted( params ) - if IsServer() then - if params.unit ~= self:GetParent() then - return - end - if self.m_nWarningFX == nil then - return - end - ParticleManager:DestroyParticle( self.m_nWarningFX, true ) - - end - return -end --------------------------------------------------------------------------------- - -function modifier_ability_cast_warning:OnStateChanged( params ) - if IsServer() then - local hParent = self:GetParent() - if params.unit ~= hParent then - return - end - - if self.m_nWarningFX == nil then - return - end - - if hParent ~= nil and hParent:IsAlive() then - if hParent:IsSilenced() or hParent:IsStunned() or hParent:IsHexed() or hParent:IsFrozen() then - ParticleManager:DestroyParticle( self.m_nWarningFX, true ) - end - return - else - ParticleManager:DestroyParticle( self.m_nWarningFX, true ) - end - end - return -end - ------------------------------------------------------------------------ - -function modifier_ability_cast_warning:OnDeath( params ) - if IsServer() then - if params.unit ~= self:GetParent() then - return - end - if self.m_nWarningFX ~= nil then - ParticleManager:DestroyParticle( self.m_nWarningFX, true ) - return - end - end - return -end - ------------------------------------------------------------------------ - -function modifier_ability_cast_warning:OnOrder( params ) - if IsServer() then - if params.unit ~= self:GetParent() then - return - end - if self.m_nWarningFX ~= nil then - ParticleManager:DestroyParticle( self.m_nWarningFX, true ) - return - end - end - return -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_absolute_no_cc.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_absolute_no_cc.lua deleted file mode 100755 index 4fc60e3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_absolute_no_cc.lua +++ /dev/null @@ -1,44 +0,0 @@ - -modifier_absolute_no_cc = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_absolute_no_cc:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_absolute_no_cc:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_absolute_no_cc:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10000 -end - --------------------------------------------------------------------------------- - -function modifier_absolute_no_cc:OnCreated( kv ) - if IsServer() then - self:GetParent().bAbsoluteNoCC = true - end -end - ------------------------------------------------------------------------------------------ - -function modifier_absolute_no_cc:CheckState() - local state = - { - [MODIFIER_STATE_HEXED] = false, - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_SILENCED] = false, - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_FROZEN] = false, - [MODIFIER_STATE_FEARED] = false, - [MODIFIER_STATE_CANNOT_BE_MOTION_CONTROLLED] = true, - } - return state -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_aggro_on_damage.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_aggro_on_damage.lua deleted file mode 100755 index ced14a2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_aggro_on_damage.lua +++ /dev/null @@ -1,61 +0,0 @@ -LinkLuaModifier( "modifier_detect_invisible", "modifiers/modifier_detect_invisible", LUA_MODIFIER_MOTION_NONE ) - -modifier_aggro_on_damage = class({}) - --------------------------------------------------------------------------------- - -function modifier_aggro_on_damage:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_aggro_on_damage:IsPermanent() - return true -end - --------------------------------------------------------------------------------- - -function modifier_aggro_on_damage:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_aggro_on_damage:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_aggro_on_damage:OnTakeDamage( params ) - if IsServer() then - -- Are we being attacked? - local hUnit = params.unit - if hUnit ~= self:GetParent() then - return 0 - end - - -- if we already have an aggro target just ignore - if hUnit:GetAggroTarget() then - return 0 - end - - -- Is the attacker is not something we can attack ignore it - local hAttacker = params.attacker - if hAttacker == nil then - return 0 - end - - --print( 'modifier_aggro_on_damage:OnTakeDamage() - setting SetInitialGoalEntity() to ' .. hAttacker:GetUnitName() ) - self:GetParent():SetInitialGoalEntity( hAttacker ) - - return 0 - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension.lua deleted file mode 100755 index 157acd3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension.lua +++ /dev/null @@ -1,179 +0,0 @@ - -modifier_ascension = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension:OnCreated( kv ) - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_ascension:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.bonus_magic_resist = self:GetAbility():GetSpecialValueFor( "bonus_magic_resist" ) - self.min_bonus_armor = self:GetAbility():GetSpecialValueFor( "min_bonus_armor" ) - self.max_bonus_armor = self:GetAbility():GetSpecialValueFor( "max_bonus_armor" ) - self.crit_chance = self:GetAbility():GetSpecialValueFor( "crit_chance" ) - self.crit_multiplier = self:GetAbility():GetSpecialValueFor( "crit_multiplier" ) - self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) - self.bonus_hp = self:GetAbility():GetSpecialValueFor( "bonus_hp" ) - self.bonus_cooldown = self:GetAbility():GetSpecialValueFor( "bonus_cooldown" ) - self.bonus_outgoing_damage = self:GetAbility():GetSpecialValueFor( "bonus_outgoing_damage" ) - self.attack_speed_reduction_pct = self:GetAbility():GetSpecialValueFor( "attack_speed_reduction_pct" ) - self.move_speed_reduction_pct = self:GetAbility():GetSpecialValueFor( "move_speed_reduction_pct" ) - self.act_1_modifier = self:GetAbility():GetSpecialValueFor( "act_1_modifier" ) - self.act_2_modifier = self:GetAbility():GetSpecialValueFor( "act_2_modifier" ) - - self.flActModifier = self:CalculateActModifier() -end - --------------------------------------------------------------------------------- - -function modifier_ascension:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_EXTRA_HEALTH_PERCENTAGE, - MODIFIER_PROPERTY_COOLDOWN_PERCENTAGE, - MODIFIER_PROPERTY_TOTALDAMAGEOUTGOING_PERCENTAGE, - MODIFIER_PROPERTY_ATTACKSPEED_REDUCTION_PERCENTAGE, - MODIFIER_PROPERTY_MOVESPEED_REDUCTION_PERCENTAGE, - } - return funcs -end - -function modifier_ascension:CalculateActModifier() - if IsServer() == false then - return 0 - end - - if self:GetParent().Encounter == nil or self:GetParent().Encounter:GetRoom() == nil then - return 0 - end - - local nAct = self:GetParent().Encounter:GetRoom():GetAct() - if nAct == 1 then - return self.act_1_modifier - end - if nAct == 2 then - return self.act_2_modifier - end - - return 0 -end - ----------------------------------------- - -function modifier_ascension:GetDepth() - if IsServer() == false then - return 0 - end - if self:GetParent().Encounter == nil then - return 0 - end - return self:GetParent().Encounter:GetRoom():GetDepth() -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierMagicalResistanceBonus( params ) - return self.bonus_magic_resist -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierPhysicalArmorBonus( params ) - if self:GetDepth() == 0 then - return 0 - end - - local flArmor = Lerp( ( self:GetDepth() - 2.0 ) / ( GameRules.Aghanim:GetMaxDepth() - 2.0 ), self.min_bonus_armor, self.max_bonus_armor ) - return flArmor -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierTotalDamageOutgoing_Percentage( params ) - if IsServer() then - return self.bonus_outgoing_damage + self.flActModifier - end - - return self.bonus_outgoing_damage -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierPreAttack_CriticalStrike( params ) - if IsServer() then - local hTarget = params.target - local hAttacker = params.attacker - - if hTarget and ( hTarget:IsBuilding() == false ) and ( hTarget:IsOther() == false ) and hAttacker and ( hAttacker:GetTeamNumber() ~= hTarget:GetTeamNumber() ) then - if RandomFloat( 1, 100 ) <= self.crit_chance then -- expose RollPseudoRandomPercentage? - self.bIsCrit = true - return self.crit_multiplier - end - end - end - - return 0.0 -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierExtraHealthPercentage( params ) - if IsServer() then - return self.bonus_hp + self.flActModifier - end - - return self.bonus_hp -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierPercentageCooldown( params ) - return self.bonus_cooldown -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierAttackSpeedReductionPercentage( params ) - if self:GetParent():IsConsideredHero() then - return self.attack_speed_reduction_pct - end - return 100 -end - --------------------------------------------------------------------------------- - -function modifier_ascension:GetModifierMoveSpeedReductionPercentage( params ) - if self:GetParent():IsConsideredHero() then - return self.move_speed_reduction_pct - end - return 100 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor.lua deleted file mode 100755 index 6e90b9e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor.lua +++ /dev/null @@ -1,59 +0,0 @@ - -modifier_ascension_armor = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_armor:constructor() - self.flArmor = 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_armor:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_armor:OnCreated( kv ) - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_ascension_armor:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - local nDepth = 0 - local depth = CustomNetTables:GetTableValue( "encounter_state", "depth" ) - if depth ~= nil then - nDepth = depth["1"] - end - - local min_bonus_armor = self:GetAbility():GetSpecialValueFor( "min_bonus_armor" ) - local max_bonus_armor = self:GetAbility():GetSpecialValueFor( "max_bonus_armor" ) - - -- 2 is the min depth for encounters, 17 is the max - -- Hardcoded since we don't have access to GameRules.Aghanim on the client - self.flArmor = LerpClamp( ( nDepth - 2.0 ) / ( 17.0 - 2.0 ), min_bonus_armor, max_bonus_armor ) - -end - --------------------------------------------------------------------------------- - -function modifier_ascension_armor:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - } - return funcs -end - - --------------------------------------------------------------------------------- - -function modifier_ascension_armor:GetModifierPhysicalArmorBonus( params ) - return self.flArmor -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping.lua deleted file mode 100755 index 6498e04..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping.lua +++ /dev/null @@ -1,47 +0,0 @@ - -modifier_ascension_armor_sapping = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_armor_sapping:GetTexture() - return "ascension_armor_sapping" -end - ----------------------------------------- - -function modifier_ascension_armor_sapping:OnCreated( kv ) - self.model_scale_per_stack = self:GetAbility():GetSpecialValueFor( "model_scale_per_stack" ) - self.armor_reduction_per_stack = self:GetAbility():GetSpecialValueFor( "armor_reduction_per_stack" ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/items2_fx/medallion_of_courage.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ); - self:AddParticle( nFXIndex, false, false, -1, false, true ); -end - --------------------------------------------------------------------------------- - -function modifier_ascension_armor_sapping:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MODEL_SCALE, - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_armor_sapping:GetModifierModelScale( params ) - local flScale = self.model_scale_per_stack * self:GetStackCount() - if flScale < 50 then - return -flScale - else - return -50 - end -end - --------------------------------------------------------------------------------- - -function modifier_ascension_armor_sapping:GetModifierPhysicalArmorBonus( params ) - return -self.armor_reduction_per_stack * self:GetStackCount() -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping_display.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping_display.lua deleted file mode 100755 index 8d7e888..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping_display.lua +++ /dev/null @@ -1,9 +0,0 @@ - -modifier_ascension_armor_sapping_display = class({}) - ------------------------------------------------------------------------------------------ --- All this does is display a visible icon, useful for abilities that trigger on death for example - -function modifier_ascension_armor_sapping_display:IsPurgable() - return false -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping_instance.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping_instance.lua deleted file mode 100755 index b487809..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_armor_sapping_instance.lua +++ /dev/null @@ -1,42 +0,0 @@ - -modifier_ascension_armor_sapping_instance = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_armor_sapping_instance:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_armor_sapping_instance:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_armor_sapping_instance:GetAttributes() - return MODIFIER_ATTRIBUTE_MULTIPLE -end - ----------------------------------------- - -function modifier_ascension_armor_sapping_instance:OnRemoved( ) - - if IsServer() == false then - return - end - - local hBuff = self:GetParent():FindModifierByName( "modifier_ascension_armor_sapping" ) - if hBuff == nil then - return - end - - local nNewStackCount = hBuff:GetStackCount() - 1 - if nNewStackCount > 0 then - hBuff:SetStackCount( nNewStackCount ) - else - hBuff:Destroy() - end - -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_attack_speed.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_attack_speed.lua deleted file mode 100755 index 4fe9ec1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_attack_speed.lua +++ /dev/null @@ -1,48 +0,0 @@ - -modifier_ascension_attack_speed = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_attack_speed:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_attack_speed:OnCreated( kv ) - self:OnRefresh( kv ) - - EmitSoundOn( "DOTA_Item.MaskOfMadness.Activate", self:GetParent() ) -end - ----------------------------------------- - -function modifier_ascension_attack_speed:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_attack_speed:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_attack_speed:GetEffectName() - return "particles/items2_fx/mask_of_madness.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_ascension_attack_speed:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_chilling_touch.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_chilling_touch.lua deleted file mode 100755 index c603ca1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_chilling_touch.lua +++ /dev/null @@ -1,74 +0,0 @@ - -modifier_ascension_chilling_touch = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_chilling_touch:IsHidden() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_chilling_touch:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_chilling_touch:OnCreated( kv ) - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_ascension_chilling_touch:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.slow = self:GetAbility():GetSpecialValueFor( "slow" ) - self.duration = self:GetAbility():GetSpecialValueFor( "duration" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_chilling_touch:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_TOOLTIP, - MODIFIER_PROPERTY_TOOLTIP2, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_chilling_touch:OnTakeDamage( params ) - - if IsServer() then - if self:GetParent() == params.attacker then - local hTarget = params.unit - if hTarget ~= nil and hTarget:IsMagicImmune() == false then - hTarget:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_chilling_touch_slow", { duration = self.duration } ) - end - end - end - - return 0.0 - -end - ------------------------------------------------------------------------ - -function modifier_ascension_chilling_touch:OnTooltip( params ) - return self.slow -end - ------------------------------------------------------------------------ - -function modifier_ascension_chilling_touch:OnTooltip2( params ) - return self.duration -end - ------------------------------------------------------------------------ \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_crit.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_crit.lua deleted file mode 100755 index 341737e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_crit.lua +++ /dev/null @@ -1,101 +0,0 @@ - -modifier_ascension_crit = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_crit:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_crit:OnCreated( kv ) - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_ascension_crit:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.crit_chance = self:GetAbility():GetSpecialValueFor( "crit_chance" ) - self.crit_multiplier = self:GetAbility():GetSpecialValueFor( "crit_multiplier" ) - self.bIsCrit = false -end - --------------------------------------------------------------------------------- - -function modifier_ascension_crit:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE, - MODIFIER_EVENT_ON_ATTACK_LANDED, - MODIFIER_PROPERTY_TOOLTIP, - MODIFIER_PROPERTY_TOOLTIP2, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_crit:OnTooltip( params ) - return self.crit_chance -end - - --------------------------------------------------------------------------------- - -function modifier_ascension_crit:OnTooltip2( params ) - return self.crit_multiplier -end - --------------------------------------------------------------------------------- - -function modifier_ascension_crit:GetModifierPreAttack_CriticalStrike( params ) - if IsServer() then - local hTarget = params.target - local hAttacker = params.attacker - - if hTarget and ( hTarget:IsBuilding() == false ) and ( hTarget:IsOther() == false ) - and hAttacker and ( hAttacker == self:GetParent() ) - and ( hAttacker:GetTeamNumber() ~= hTarget:GetTeamNumber() ) then - if RollPseudoRandomPercentage( self.crit_chance, DOTA_PSEUDO_RANDOM_CUSTOM_GAME_1, hAttacker ) == true then - self.bIsCrit = true - return self.crit_multiplier - end - end - end - - return 0.0 -end - --------------------------------------------------------------------------------- - -function modifier_ascension_crit:OnAttackLanded( params ) - - if IsServer() then - -- play sounds and stuff - if self:GetParent() == params.attacker then - local hTarget = params.target - if hTarget ~= nil and self.bIsCrit then - - local vDir = ( self:GetParent():GetAbsOrigin() - hTarget:GetAbsOrigin() ):Normalized() - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, hTarget, PATTACH_POINT_FOLLOW, "attach_hitloc", hTarget:GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, hTarget:GetAbsOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, vDir ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Ability.CoupDeGrace", self:GetParent() ) - self.bIsCrit = false - end - end - end - - return 0.0 - -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_damage.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_damage.lua deleted file mode 100755 index 3cf7319..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_damage.lua +++ /dev/null @@ -1,40 +0,0 @@ - -modifier_ascension_damage = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_damage:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_damage:OnCreated( kv ) - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_ascension_damage:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.bonus_outgoing_damage = self:GetAbility():GetSpecialValueFor( "bonus_outgoing_damage" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_damage:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_TOTALDAMAGEOUTGOING_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_damage:GetModifierTotalDamageOutgoing_Percentage( params ) - return self.bonus_outgoing_damage -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_drunken_display.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_drunken_display.lua deleted file mode 100755 index b5a654e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_drunken_display.lua +++ /dev/null @@ -1,9 +0,0 @@ - -modifier_ascension_drunken_display = class({}) - ------------------------------------------------------------------------------------------ --- All this does is display a visible icon, useful for abilities that trigger on death for example - -function modifier_ascension_drunken_display:IsPurgable() - return false -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_extra_fast.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_extra_fast.lua deleted file mode 100755 index a641302..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_extra_fast.lua +++ /dev/null @@ -1,64 +0,0 @@ - -modifier_ascension_extra_fast = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_extra_fast:IsHidden() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_extra_fast:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_extra_fast:OnCreated( kv ) - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_ascension_extra_fast:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.bonus_move_speed = self:GetAbility():GetSpecialValueFor( "bonus_move_speed" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_extra_fast:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_extra_fast:CheckState() - local state = - { - [MODIFIER_STATE_UNSLOWABLE] = true, - } - return state -end - - --------------------------------------------------------------------------------- - -function modifier_ascension_extra_fast:GetEffectName() - return "particles/units/heroes/hero_dark_seer/dark_seer_surge.vpcf" -end - ------------------------------------------------------------------------------ - -function modifier_ascension_extra_fast:GetModifierMoveSpeedBonus_Percentage( params ) - return self.bonus_move_speed -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_flicker_display.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_flicker_display.lua deleted file mode 100755 index d3ca082..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_flicker_display.lua +++ /dev/null @@ -1,9 +0,0 @@ - -modifier_ascension_flicker_display = class({}) - ------------------------------------------------------------------------------------------ --- All this does is display a visible icon, useful for abilities that trigger on death for example - -function modifier_ascension_flicker_display:IsPurgable() - return false -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_heal_suppression.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_heal_suppression.lua deleted file mode 100755 index a41d4ec..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_heal_suppression.lua +++ /dev/null @@ -1,64 +0,0 @@ - -modifier_ascension_heal_suppression = class({}) - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:GetEffectName() - return "particles/items4_fx/spirit_vessel_damage.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:OnCreated( kv ) - self.heal_suppression_pct = self:GetAbility():GetSpecialValueFor( "heal_suppression_pct" ) -end - - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:OnRefresh( kv ) - self.heal_suppression_pct = self:GetAbility():GetSpecialValueFor( "heal_suppression_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_HEAL_AMPLIFY_PERCENTAGE_TARGET, - MODIFIER_PROPERTY_HP_REGEN_AMPLIFY_PERCENTAGE, - MODIFIER_PROPERTY_LIFESTEAL_AMPLIFY_PERCENTAGE, - MODIFIER_PROPERTY_SPELL_LIFESTEAL_AMPLIFY_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:GetModifierHealAmplify_PercentageTarget( params ) - return -self.heal_suppression_pct -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:GetModifierHPRegenAmplify_Percentage( params ) - return -self.heal_suppression_pct -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:GetModifierLifestealRegenAmplify_Percentage( params ) - return -self.heal_suppression_pct -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression:GetModifierSpellLifestealRegenAmplify_Percentage( params ) - return -self.heal_suppression_pct -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_heal_suppression_aura.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_heal_suppression_aura.lua deleted file mode 100755 index 7d8b208..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_heal_suppression_aura.lua +++ /dev/null @@ -1,83 +0,0 @@ - -LinkLuaModifier( "modifier_ascension_heal_suppression", "modifiers/modifier_ascension_heal_suppression", LUA_MODIFIER_MOTION_NONE ) - -modifier_ascension_heal_suppression_aura = class({}) - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:GetEffectName() - return "particles/units/heroes/hero_necrolyte/necrolyte_spirit.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:GetStatusEffectName() - return "particles/status_fx/status_effect_necrolyte_spirit.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:OnCreated( kv ) - self.aura_radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.heal_suppression_pct = self:GetAbility():GetSpecialValueFor( "heal_suppression_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:OnRefresh( kv ) - self.aura_radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.heal_suppression_pct = self:GetAbility():GetSpecialValueFor( "heal_suppression_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:IsAura() - return true -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:GetModifierAura() - return "modifier_ascension_heal_suppression" -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_ENEMY -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:GetAuraSearchType() - return DOTA_UNIT_TARGET_ALL -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:GetAuraRadius() - return self.aura_radius -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_heal_suppression_aura:OnTooltip( params ) - return -self.heal_suppression_pct -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_magic_immunity.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_magic_immunity.lua deleted file mode 100755 index 008c533..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_magic_immunity.lua +++ /dev/null @@ -1,53 +0,0 @@ - -modifier_ascension_magic_immunity = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_magic_immunity:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_magic_immunity:OnCreated( kv ) - self.model_scale = self:GetAbility():GetSpecialValueFor( "model_scale" ) - EmitSoundOn( "DOTA_Item.BlackKingBar.Activate", self:GetParent() ) -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_magic_immunity:CheckState() - local state = - { - [MODIFIER_STATE_MAGIC_IMMUNE] = true, - } - return state -end - --------------------------------------------------------------------------------- - -function modifier_ascension_magic_immunity:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MODEL_SCALE, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_magic_immunity:GetModifierModelScale( params ) - return self.model_scale -end - --------------------------------------------------------------------------------- - -function modifier_ascension_magic_immunity:GetEffectName() - return "particles/items_fx/black_king_bar_avatar.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_ascension_magic_immunity:GetStatusEffectName() - return "particles/status_fx/status_effect_avatar.vpcf" -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_magic_resist.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_magic_resist.lua deleted file mode 100755 index 87cc9d4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_magic_resist.lua +++ /dev/null @@ -1,40 +0,0 @@ - -modifier_ascension_magic_resist = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_magic_resist:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_ascension_magic_resist:OnCreated( kv ) - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_ascension_magic_resist:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.bonus_magic_resist = self:GetAbility():GetSpecialValueFor( "bonus_magic_resist" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_magic_resist:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_magic_resist:GetModifierMagicalResistanceBonus( params ) - return self.bonus_magic_resist -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_plasma_field_display.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_plasma_field_display.lua deleted file mode 100755 index c1452e1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_plasma_field_display.lua +++ /dev/null @@ -1,9 +0,0 @@ - -modifier_ascension_plasma_field_display = class({}) - ------------------------------------------------------------------------------------------ --- All this does is display a visible icon, useful for abilities that trigger on death for example - -function modifier_ascension_plasma_field_display:IsPurgable() - return false -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_vampiric.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_vampiric.lua deleted file mode 100755 index ffeb9fd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ascension_vampiric.lua +++ /dev/null @@ -1,105 +0,0 @@ - -modifier_ascension_vampiric = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_ascension_vampiric:IsHidden() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_vampiric:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_vampiric:GetEffectName() - return "particles/items2_fx/satanic_buff.vpcf" -end - ------------------------------------------------------------------------------------------ - -function modifier_ascension_vampiric:GetStatusEffectName() - return "particles/status_fx/status_effect_life_stealer_rage.vpcf" -end - ----------------------------------------- - -function modifier_ascension_vampiric:OnCreated( kv ) - self:OnRefresh( kv ) - - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_life_stealer/life_stealer_rage.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt(nFXIndex, 3, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetAbsOrigin(), true ) - self:AddParticle( nFXIndex, false, false, -1, false, false ) - end -end - ----------------------------------------- - -function modifier_ascension_vampiric:OnRefresh( kv ) - if self:GetAbility() == nil then - return - end - - self.lifesteal_pct = self:GetAbility():GetSpecialValueFor( "lifesteal_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_ascension_vampiric:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ascension_vampiric:OnTakeDamage( params ) - - if IsServer() then - local Attacker = params.attacker - local Target = params.unit - local Ability = params.inflictor - local flDamage = params.damage - - if Attacker ~= self:GetParent() or Target == nil then - return 0 - end - - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION ) == DOTA_DAMAGE_FLAG_REFLECTION then - return 0 - end - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL ) == DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL then - return 0 - end - - if Ability then - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/octarine_core_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - else - local nFXIndex = ParticleManager:CreateParticle( "particles/generic_gameplay/generic_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - - local flLifesteal = flDamage * self.lifesteal_pct / 100 - Attacker:Heal( flLifesteal, self:GetAbility() ) - end - - return 0.0 - -end - ------------------------------------------------------------------------ - -function modifier_ascension_vampiric:OnTooltip( params ) - return self.lifesteal_pct -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_attack_speed_unslowable.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_attack_speed_unslowable.lua deleted file mode 100755 index 2ecbfa9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_attack_speed_unslowable.lua +++ /dev/null @@ -1,71 +0,0 @@ - -modifier_attack_speed_unslowable = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_attack_speed_unslowable:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_attack_speed_unslowable:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_attack_speed_unslowable:OnCreated( kv ) - - -- Allow units to directly use this modifier, in which case the kv has the amount of reduction - if self:GetAbility() == nil and IsServer() == true then - self.attack_speed_reduction_pct = 0 - if kv.attack_speed_reduction_pct ~= nil then - self.attack_speed_reduction_pct = kv.attack_speed_reduction_pct - if self.attack_speed_reduction_pct ~= 0 then - self:SetHasCustomTransmitterData( true ) - end - end - end - - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_attack_speed_unslowable:OnRefresh( kv ) - if self:GetAbility() ~= nil then - self.attack_speed_reduction_pct = self:GetAbility():GetSpecialValueFor( "attack_speed_reduction_pct" ) - end -end - --------------------------------------------------------------------------------- - -function modifier_attack_speed_unslowable:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ATTACKSPEED_REDUCTION_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_attack_speed_unslowable:GetModifierAttackSpeedReductionPercentage( params ) - return self.attack_speed_reduction_pct -end - --------------------------------------------------------------------------------- - -function modifier_attack_speed_unslowable:AddCustomTransmitterData( ) - return - { - armor = self.attack_speed_reduction_pct - } -end - --------------------------------------------------------------------------------- - -function modifier_attack_speed_unslowable:HandleCustomTransmitterData( data ) - self.attack_speed_reduction_pct = data.armor -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_battle_royale.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_battle_royale.lua deleted file mode 100755 index 127bba4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_battle_royale.lua +++ /dev/null @@ -1,156 +0,0 @@ --- This is the modifier that punishes players for not being in the active room -LinkLuaModifier( "modifier_battle_royale_damage", "modifiers/modifier_battle_royale_damage", LUA_MODIFIER_MOTION_NONE ) - -modifier_battle_royale = class({}) - --------------------------------------------------------------------------------- - -function modifier_battle_royale:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_battle_royale:IsPermanent() - return true -end - --------------------------------------------------------------------------------- - -function modifier_battle_royale:RemoveOnDeath() - return false -end - --------------------------------------------------------------------------------- - -function modifier_battle_royale:OnCreated( kv ) - if IsServer() then - self.nDeepestDepth = 0 - self.hDeepestRoom = nil - self.vLastValidPos = self:GetParent():GetAbsOrigin() - self.flLastTimeInCurrentRoom = GameRules:GetGameTime() - self:StartIntervalThink( 0.01 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_battle_royale:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - - return funcs -end - ------------------------------------------------------------------------ - -function modifier_battle_royale:OnIntervalThink() - - local bIsRidingMorty = self:GetParent():FindModifierByName( "modifier_snapfire_gobble_up_creep" ) ~= nil - if bIsRidingMorty == true then - return - end - - -- Determine whether we have a valid position and valid room - - local bValidRoom = false - local bValidFlyingPos = false - local bValidPosition = IsUnitInValidPosition( self:GetParent() ) - - local nDepth = 0 - local vCurrentPos = self:GetParent():GetAbsOrigin() - local vClampedValidFlyingPos = self.vLastValidPos - local hRoom = GameRules.Aghanim:FindRoomForPoint( vCurrentPos ) - if hRoom ~= nil then - - nDepth = hRoom:GetDepth() - - -- Update the deepest we've ever been in the dungeon - -- But don't allow people to skip ahead to unselected rooms - local hCurrentRoom = GameRules.Aghanim:GetCurrentRoom() - if nDepth > self.nDeepestDepth then - if ( hCurrentRoom == hRoom ) or - ( hCurrentRoom:GetExitRoomSelected() == hRoom:GetName() ) or - ( GameRules.Aghanim:GetTestEncounterDebugRoom() == hRoom ) then - self.nDeepestDepth = nDepth - self.hDeepestRoom = hRoom - - -- Ok, they advanced rooms. We can stop punishment. - if self:GetParent():FindModifierByName( "modifier_battle_royale_damage" ) ~= nil then - self:GetParent():RemoveModifierByName( "modifier_battle_royale_damage" ) - end - end - end - - if hCurrentRoom == hRoom then - self.flLastTimeInCurrentRoom = GameRules:GetGameTime() - end - - bValidRoom = ( nDepth == self.nDeepestDepth ) - - vClampedValidFlyingPos = vCurrentPos - if bValidPosition == false or bValidRoom == false then - local flBoundary = 192.0 - if bValidPosition == true then - flBoundary = 4.0 - end - vClampedValidFlyingPos = self.hDeepestRoom:ClampPointToRoomBounds( vCurrentPos, flBoundary ) - end - end - - if ( GameRules:GetGameTime() - self.flLastTimeInCurrentRoom ) > 8.0 and self:GetParent():IsSummoned() == false then - GameRules.Aghanim:GetAnnouncer():OnLaggingHero( self:GetParent():GetUnitName(), GameRules.Aghanim:GetCurrentRoom():GetDepth() ) - end - - if bValidRoom == true and bValidPosition == true then - self.vLastValidPos = vCurrentPos - end - - local bIsMotionControlled = self:GetParent():IsCurrentlyHorizontalMotionControlled() == true or self:GetParent():IsCurrentlyVerticalMotionControlled() == true - if self:GetParent():HasFlyMovementCapability() == false and bIsMotionControlled == false then - if bValidRoom == false or bValidPosition == false then - --print( "Teleporting to " .. tostring( self.vLastValidPos ) ) - FindClearSpaceForUnit( self:GetParent(), self.vLastValidPos, true ) - end - else - if bValidRoom == false or vCurrentPos ~= vClampedValidFlyingPos then - --print( "Flying Teleporting to " .. tostring( vClampedValidFlyingPos ) ) - FindClearSpaceForUnit( self:GetParent(), vClampedValidFlyingPos, true ) - end - end - -end - ------------------------------------------------------------------------ - -function modifier_battle_royale:OnTakeDamage( params ) - - if IsServer() == false then - return - end - - if params.attacker ~= self:GetParent() then - return - end - - local hUnit = params.unit - if hUnit == nil or hUnit.Encounter == nil then - return - end - - local nUnitDepth = hUnit.Encounter:GetRoom():GetDepth() - if nUnitDepth <= self.nDeepestDepth then - return - end - - -- They are attacking a unit at the wrong depth. PUNISH THEM - if self:GetParent():FindModifierByName( "modifier_battle_royale_damage" ) == nil then - self:GetParent():AddNewModifier( self:GetParent(), nil, "modifier_battle_royale_damage", {} ) - if self:GetParent():GetPlayerOwner() ~= nil then - CustomGameEventManager:Send_ServerToPlayer( self:GetParent():GetPlayerOwner(), "battle_royale_damage_starting", {} ) - GameRules.Aghanim:GetAnnouncer():OnCowardlyHero( self:GetParent():GetUnitName(), self:GetCaster():GetUnitName() ) - end - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_battle_royale_damage.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_battle_royale_damage.lua deleted file mode 100755 index 55154c1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_battle_royale_damage.lua +++ /dev/null @@ -1,59 +0,0 @@ --- This is the modifier that punishes players for not being in the active room - -modifier_battle_royale_damage = class({}) - --------------------------------------------------------------------------------- - -function modifier_battle_royale_damage:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_battle_royale_damage:OnCreated( kv ) - if IsServer() then - self.flStartTime = GameRules:GetGameTime() - self:OnIntervalThink() - self:StartIntervalThink( 1.0 ) - end -end - ------------------------------------------------------------------------ - -function modifier_battle_royale_damage:OnIntervalThink() - - -- If the player is disconnected, should we give them a break? Not sure... - local nPlayerID = self:GetParent():GetPlayerOwnerID() - if PlayerResource:GetConnectionState( nPlayerID ) == 3 then - return - end - - local vecStartPos = self:GetParent():GetAbsOrigin() - vecStartPos.z = vecStartPos.z + 4000 - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_zuus/zuus_lightning_bolt.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, vecStartPos ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local flTimeSinceStart = GameRules:GetGameTime() - self.flStartTime - local flDamagePercent = flTimeSinceStart / 10 - if flDamagePercent > 1 then - flDamagePercent = 1 - end - flDamagePercent = SimpleSpline( flDamagePercent ) - flDamagePercent = ( 1 - flDamagePercent ) * 0.03 + flDamagePercent * 0.15 -- Linear Interpolation - - local damageInfo = - { - victim = self:GetParent(), - attacker = self:GetParent(), - damage = flDamagePercent * self:GetParent():GetMaxHealth(), - damage_type = DAMAGE_TYPE_PURE, - ability = nil, - } - ApplyDamage( damageInfo ) - - EmitSoundOn( "BattleRoyaleDamage", self:GetParent() ) - -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_agility.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_agility.lua deleted file mode 100755 index b62b60c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_agility.lua +++ /dev/null @@ -1,26 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_agility = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_agility:OnBlessingCreated( kv ) - self.bonus_agility = kv.agi_bonus - --print ( "Agility Bonus = " .. self.bonus_agility ) -end - --------------------------------------------------------------------------------- - -function modifier_blessing_agility:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_agility:GetModifierBonusStats_Agility( params ) - return self.bonus_agility -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_armor.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_armor.lua deleted file mode 100755 index 603e44d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_armor.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_armor = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_armor:OnBlessingCreated( kv ) - self.flArmor = kv.bonus_armor -end - --------------------------------------------------------------------------------- - -function modifier_blessing_armor:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_armor:GetModifierPhysicalArmorBonus( params ) - return self.flArmor -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_attack_speed.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_attack_speed.lua deleted file mode 100755 index 33d84a1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_attack_speed.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_attack_speed = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_attack_speed:OnBlessingCreated( kv ) - self.bonus_attack_speed = kv.bonus_attack_speed -end - --------------------------------------------------------------------------------- - -function modifier_blessing_attack_speed:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_attack_speed:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_base.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_base.lua deleted file mode 100755 index 093b111..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_base.lua +++ /dev/null @@ -1,81 +0,0 @@ - -require( "blessings" ) - -modifier_blessing_base = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_blessing_base:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_blessing_base:IsPermanent() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_blessing_base:IsBlessing() - return true -end - --------------------------------------------------------------------------------- - -function modifier_blessing_base:GetTexture() - return self:GetName() -end - ----------------------------------------- - -function modifier_blessing_base:OnCreated( kv ) - self:SetHasCustomTransmitterData( true ) - if IsServer() == true then - self.nBlessingLevel = kv.blessing_level - self:InvokeBlessingOnCreated() - end -end - ----------------------------------------- - -function modifier_blessing_base:InvokeBlessingOnCreated( ) - - local kv = BLESSING_MODIFIERS[ self:GetName() ].keys - - -- Allow you to specify different keys for each claim level - if #kv > 0 then - local nIndex = self.nBlessingLevel - if nIndex > #kv then - nIndex = #kv - end - kv = kv[ nIndex ] - end - - self:OnBlessingCreated( kv ) - -end - ----------------------------------------- - -function modifier_blessing_base:OnBlessingCreated( kv ) - -- Derived classes should modify this -end - --------------------------------------------------------------------------------- - -function modifier_blessing_base:AddCustomTransmitterData( ) - return - { - armor = self.nBlessingLevel - } -end - --------------------------------------------------------------------------------- - -function modifier_blessing_base:HandleCustomTransmitterData( data ) - if data.armor ~= nil and self.nBlessingLevel ~= data.armor then - self.nBlessingLevel = data.armor - self:InvokeBlessingOnCreated() - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_agility.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_agility.lua deleted file mode 100755 index e4509c1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_agility.lua +++ /dev/null @@ -1,78 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_book_agility = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_book_agility:GetTexture() - return "../items/necronomicon" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_book_agility:OnBlessingCreated( kv ) - self.bonus_stat = kv.bonus_stat -end - --------------------------------------------------------------------------------- - -function modifier_blessing_book_agility:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_agility:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName == nil or szSpecialValueName == nil then - return 0 - end - - --print( "modifier_blessing_book_agility: " .. szAbilityName .. " is asking for " .. szSpecialValueName ) - - if szAbilityName == "item_book_of_agility" or szAbilityName == "item_book_of_greater_agility" then - if szSpecialValueName == "bonus_stat" then - --print( szAbilityName .. " is asking for " .. szSpecialValueName ) - return 1 - end - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_agility:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName == "item_book_of_agility" or szAbilityName == "item_book_of_greater_agility" then - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "bonus_stat" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - - --print( szAbilityName .. " base value for " .. szSpecialValueName .. " is " .. flBaseValue .. ". Adding " .. self.bonus_stat ) - - return flBaseValue + self.bonus_stat - end - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_agility:OnTooltip( params ) - return self.bonus_stat -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_intelligence.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_intelligence.lua deleted file mode 100755 index e4b096f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_intelligence.lua +++ /dev/null @@ -1,72 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_book_intelligence = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_book_intelligence:GetTexture() - return "../items/necronomicon" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_book_intelligence:OnBlessingCreated( kv ) - self.bonus_stat = kv.bonus_stat -end - --------------------------------------------------------------------------------- - -function modifier_blessing_book_intelligence:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_intelligence:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName == "item_book_of_intelligence" or szAbilityName == "item_book_of_greater_intelligence" then - if szSpecialValueName == "bonus_stat" then - --print( szAbilityName .. " is asking for " .. szSpecialValueName ) - return 1 - end - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_intelligence:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName == "item_book_of_intelligence" or szAbilityName == "item_book_of_greater_intelligence" then - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "bonus_stat" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - - --print( szAbilityName .. " base value for " .. szSpecialValueName .. " is " .. flBaseValue .. ". Adding " .. self.bonus_stat ) - - return flBaseValue + self.bonus_stat - end - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_intelligence:OnTooltip( params ) - return self.bonus_stat -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_strength.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_strength.lua deleted file mode 100755 index 485a536..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_book_strength.lua +++ /dev/null @@ -1,78 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_book_strength = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_book_strength:GetTexture() - return "../items/necronomicon" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_book_strength:OnBlessingCreated( kv ) - self.bonus_stat = kv.bonus_stat -end - --------------------------------------------------------------------------------- - -function modifier_blessing_book_strength:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_strength:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName == nil or szSpecialValueName == nil then - return 0 - end - - --print( "modifier_blessing_book_strength: " .. szAbilityName .. " is asking for " .. szSpecialValueName ) - - if szAbilityName == "item_book_of_strength" or szAbilityName == "item_book_of_greater_strength" then - if szSpecialValueName == "bonus_stat" then - --print( szAbilityName .. " is asking for " .. szSpecialValueName ) - return 1 - end - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_strength:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName == "item_book_of_strength" or szAbilityName == "item_book_of_greater_strength" then - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "bonus_stat" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - - --print( szAbilityName .. " base value for " .. szSpecialValueName .. " is " .. flBaseValue .. ". Adding " .. self.bonus_stat ) - - return flBaseValue + self.bonus_stat - end - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_book_strength:OnTooltip( params ) - return self.bonus_stat -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_bottle_upgrade.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_bottle_upgrade.lua deleted file mode 100755 index dee67be..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_bottle_upgrade.lua +++ /dev/null @@ -1,68 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_bottle_upgrade = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_bottle_upgrade:GetTexture() - return "../items/bottle" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_bottle_upgrade:OnBlessingCreated( kv ) - self.max_charges = kv.max_charges -end - --------------------------------------------------------------------------------- - -function modifier_blessing_bottle_upgrade:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_bottle_upgrade:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_bottle" then - return 0 - end - - if szSpecialValueName == "max_charges" then - --print( 'modifier_blessing_bottle_upgrade:GetModifierOverrideAbilitySpecial - looking for max_charges!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_bottle_upgrade:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_bottle" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "max_charges" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - --print( 'modifier_blessing_bottle_upgrade:GetModifierOverrideAbilitySpecialValue - max_charges is ' .. flBaseValue .. '. Adding on an additional ' .. self.max_charges ) - - return flBaseValue + self.max_charges - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_damage_bonus.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_damage_bonus.lua deleted file mode 100755 index 4f13bfc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_damage_bonus.lua +++ /dev/null @@ -1,37 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_damage_bonus = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_damage_bonus:OnBlessingCreated( kv ) - self.bonus_damage = kv.bonus_damage -end - --------------------------------------------------------------------------------- - -function modifier_blessing_damage_bonus:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_damage_bonus:GetModifierPreAttack_BonusDamage( params ) - if self:GetParent() ~= nil and self:GetParent():IsNull() == false then - return self.bonus_damage * self:GetParent():GetLevel() - end - - print( 'WARNING: modifier_blessing_damage_bonus:GetModifierPreAttack_BonusDamage - parent not found - returning 0' ) - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_blessing_damage_bonus:OnTooltip( params ) - return self.bonus_damage -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_damage_reflect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_damage_reflect.lua deleted file mode 100755 index 9d9683d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_damage_reflect.lua +++ /dev/null @@ -1,76 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_damage_reflect = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_damage_reflect:OnBlessingCreated( kv ) - self.flDamageReflectPercentage = kv.damage_reflect - --print ( "Reflecting Damage = " .. self.flDamageReflectPercentage ) -end - --------------------------------------------------------------------------------- - -function modifier_blessing_damage_reflect:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_damage_reflect:OnTakeDamage( params ) - if IsServer() then - -- Are we being attacked? - local hUnit = params.unit - if hUnit ~= self:GetParent() then - return 0 - end - - -- Is the attacker something to reflect damage upon - local hAttacker = params.attacker - if hAttacker == nil or hAttacker:IsBuilding() then - return 0 - end - - if hAttacker == self:GetParent() or hAttacker:GetTeamNumber() == self:GetParent():GetTeamNumber() then - return 0 - end - - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION ) == DOTA_DAMAGE_FLAG_REFLECTION then - return 0 - end - - -- Get damage amount and calculate the relfected amount - local flDamage = params.damage - local flDamageReflect = flDamage * self.flDamageReflectPercentage - - -- Create reflect sound (BladeMail) - --EmitSoundOn( "DOTA_Item.BladeMail.Damage", self:GetParent() ) - - -- Send damage back - local damageInfo = - { - victim = hAttacker, - attacker = self:GetParent(), - damage = flDamageReflect, - damage_type = params.damage_type, - damage_flags = DOTA_DAMAGE_FLAG_REFLECTION, - ability = nil, - } - ApplyDamage( damageInfo ) - --print( "Damage = " .. flDamage .. ", Reflecting Damage = " .. flDamageReflect ) - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_blessing_damage_reflect:OnTooltip( params ) - local nDamageReflectPercentage = ( self.flDamageReflectPercentage * 100.0 ) - return nDamageReflectPercentage -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_death_detonation.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_death_detonation.lua deleted file mode 100755 index 4d271fa..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_death_detonation.lua +++ /dev/null @@ -1,63 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_death_detonation = class( modifier_blessing_base ) - -------------------------------------------------------------------------------- - -function modifier_blessing_death_detonation:OnBlessingCreated( kv ) - self.detonation_damage_per_level = kv.detonation_damage_per_level - self.detonation_radius = kv.detonation_radius -end - --------------------------------------------------------------------------------- - -function modifier_blessing_death_detonation:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_death_detonation:OnDeath( params ) - if IsServer() then - if self:GetParent():PassivesDisabled() then - return 1 - end - - if params.unit ~= nil and params.unit == self:GetParent() then - - local damage = self.detonation_damage_per_level * self:GetParent():GetLevel() - --print( 'modifier_blessing_death_detonation damage = ' .. damage ) - - local nTeam = DOTA_UNIT_TARGET_TEAM_ENEMY - local entities = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, self.detonation_radius, nTeam, - DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - - if #entities > 0 then - for _,entity in pairs(entities) do - if entity ~= nil and entity:IsNull() == false and entity ~= self:GetParent() and ( not entity:IsMagicImmune() ) and ( not entity:IsInvulnerable() ) then - local DamageInfo = - { - victim = entity, - attacker = self:GetCaster(), - ability = self, - damage = damage, - damage_type = DAMAGE_TYPE_MAGICAL, - } - ApplyDamage( DamageInfo ) - end - end - end - - --EmitSoundOn( "Ability.Bomber.Detonate", self:GetParent() ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/blessings/death_detonation/death_detonation_remote_mines_detonate.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.detonation_radius, self.detonation_radius, self.detonation_radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_evasion.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_evasion.lua deleted file mode 100755 index dad6203..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_evasion.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_evasion = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_evasion:OnBlessingCreated( kv ) - self.bonus_evasion = kv.bonus_evasion -end - --------------------------------------------------------------------------------- - -function modifier_blessing_evasion:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_EVASION_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_evasion:GetModifierEvasion_Constant( params ) - return self.bonus_evasion -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_health_boost.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_health_boost.lua deleted file mode 100755 index e343b45..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_health_boost.lua +++ /dev/null @@ -1,32 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_health_boost = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_health_boost:OnBlessingCreated( kv ) - self.bonus_health_per_level = kv.bonus_health_per_level -end - --------------------------------------------------------------------------------- - -function modifier_blessing_health_boost:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_HEALTH_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_health_boost:GetModifierHealthBonus( params ) - if self:GetParent() ~= nil and self:GetParent():IsNull() == false then - local nHealthBoost = self.bonus_health_per_level * self:GetParent():GetLevel() - --print( 'modifier_blessing_health_boost:GetModifierHealthBonus - bonus is ' .. nHealthBoost ) - return nHealthBoost - end - - print( 'WARNING: modifier_blessing_health_boost:GetModifierHealthBonus - parent not found - returning 0' ) - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_intelligence.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_intelligence.lua deleted file mode 100755 index 8b869b3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_intelligence.lua +++ /dev/null @@ -1,26 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_intelligence = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_intelligence:OnBlessingCreated( kv ) - self.bonus_intelligence = kv.int_bonus - --print ( "Intelligence Bonus = " .. self.bonus_intelligence ) -end - --------------------------------------------------------------------------------- - -function modifier_blessing_intelligence:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_intelligence:GetModifierBonusStats_Intellect( params ) - return self.bonus_intelligence -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_life_steal.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_life_steal.lua deleted file mode 100755 index 1e8df06..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_life_steal.lua +++ /dev/null @@ -1,59 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_life_steal = class( modifier_blessing_base ) - -------------------------------------------------------------------------------- - -function modifier_blessing_life_steal:GetTexture() - return "../items/lifesteal" -end - -------------------------------------------------------------------------------- - -function modifier_blessing_life_steal:OnBlessingCreated( kv ) - self.life_steal_pct = kv.life_steal_pct -end - --------------------------------------------------------------------------------- - -function modifier_blessing_life_steal:GetStatusEffectName() - return "particles/generic_gameplay/generic_lifesteal.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_life_steal:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ATTACKED, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_life_steal:OnAttacked( params ) - if IsServer() then - --print( 'modifier_blessing_life_steal:OnAttacked' ) - - if self:GetParent():PassivesDisabled() then - return 1 - end - - if params.attacker ~= nil and params.attacker == self:GetParent() and params.target ~= nil then - local heal = ( params.damage * self.life_steal_pct / 100 ) - --print( 'modifier_blessing_life_steal healing for ' .. heal ) - self:GetParent():Heal( heal, nil ) - ParticleManager:ReleaseParticleIndex( ParticleManager:CreateParticle( "particles/generic_gameplay/generic_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) ) - end - end - - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_blessing_life_steal:OnTooltip( params ) - return self.life_steal_pct -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_magic_damage_bonus.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_magic_damage_bonus.lua deleted file mode 100755 index d0324f8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_magic_damage_bonus.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_magic_damage_bonus = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_magic_damage_bonus:OnBlessingCreated( kv ) - self.bonus_magic_damage = kv.bonus_magic_damage -end - --------------------------------------------------------------------------------- - -function modifier_blessing_magic_damage_bonus:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_magic_damage_bonus:GetModifierSpellAmplify_Percentage( params ) - return self.bonus_magic_damage -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_magic_resist.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_magic_resist.lua deleted file mode 100755 index 63f726e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_magic_resist.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_magic_resist = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_magic_resist:OnBlessingCreated( kv ) - self.bonus_magic_resist = kv.bonus_magic_resist -end - --------------------------------------------------------------------------------- - -function modifier_blessing_magic_resist:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_magic_resist:GetModifierMagicalResistanceBonus( params ) - return self.bonus_magic_resist -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_mana_boost.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_mana_boost.lua deleted file mode 100755 index 7fe4ca3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_mana_boost.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_mana_boost = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_mana_boost:OnBlessingCreated( kv ) - self.bonus_mana = kv.bonus_mana -end - --------------------------------------------------------------------------------- - -function modifier_blessing_mana_boost:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_EXTRA_MANA_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_mana_boost:GetModifierExtraManaPercentage( params ) - return self.bonus_mana -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_movement_speed.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_movement_speed.lua deleted file mode 100755 index 21955dc..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_movement_speed.lua +++ /dev/null @@ -1,25 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_movement_speed = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_movement_speed:OnBlessingCreated( kv ) - self.bonus_movement_speed = kv.bonus_movement_speed -end - --------------------------------------------------------------------------------- - -function modifier_blessing_movement_speed:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_movement_speed:GetModifierMoveSpeedBonus_Percentage( params ) - return self.bonus_movement_speed -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_arcanist.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_arcanist.lua deleted file mode 100755 index a39e995..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_arcanist.lua +++ /dev/null @@ -1,69 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_arcanist = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_arcanist:OnBlessingCreated( kv ) - self.cooldown_reduction_percent = kv.cooldown_reduction_percent - self.manacost_reduction_percent = kv.manacost_reduction_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_arcanist:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_arcanist:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_arcanist_potion" then - return 0 - end - - if szSpecialValueName == "cooldown_reduction_pct" or szSpecialValueName == "manacost_reduction_pct" then - print( 'modifier_blessing_potion_arcanist:GetModifierOverrideAbilitySpecial - looking for cooldown_reduction_pct or manacost_reduction_pct!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_arcanist:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_arcanist_potion" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "cooldown_reduction_pct" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - print( 'modifier_blessing_potion_arcanist:GetModifierOverrideAbilitySpecialValue - cooldown_reduction_pct is ' .. flBaseValue .. '. Adding on an additional ' .. self.cooldown_reduction_percent ) - - return flBaseValue * ( ( 100 + self.cooldown_reduction_percent ) / 100 ) - elseif szSpecialValueName == "manacost_reduction_pct" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - print( 'modifier_blessing_potion_arcanist:GetModifierOverrideAbilitySpecialValue - manacost_reduction_pct is ' .. flBaseValue .. '. Adding on an additional ' .. self.manacost_reduction_percent ) - - return flBaseValue * ( ( 100 + self.manacost_reduction_percent ) / 100 ) - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_dragon.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_dragon.lua deleted file mode 100755 index 42c0c6b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_dragon.lua +++ /dev/null @@ -1,62 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_dragon = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_dragon:OnBlessingCreated( kv ) - self.bonus_attack_damage_percent = kv.bonus_attack_damage_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_dragon:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_dragon:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_dragon_potion" then - return 0 - end - - if szSpecialValueName == "bonus_attack_damage" then - --print( 'modifier_blessing_potion_dragon:GetModifierOverrideAbilitySpecial - looking for ' .. szSpecialValueName ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_dragon:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_dragon_potion" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "bonus_attack_damage" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - --print( 'modifier_blessing_potion_dragon:GetModifierOverrideAbilitySpecialValue - bonus_attack_damage is ' .. flBaseValue .. '. Adding on an additional ' .. self.bonus_attack_damage_percent ) - - return flBaseValue * ( ( 100 + self.bonus_attack_damage_percent ) / 100 ) - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_echo_slam.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_echo_slam.lua deleted file mode 100755 index d7d48cd..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_echo_slam.lua +++ /dev/null @@ -1,62 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_echo_slam = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_echo_slam:OnBlessingCreated( kv ) - self.echo_slam_echo_damage_percent = kv.echo_slam_echo_damage_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_echo_slam:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_echo_slam:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_echo_slam_potion" then - return 0 - end - - if szSpecialValueName == "echo_slam_echo_damage" then - --print( 'modifier_blessing_potion_echo_slam:GetModifierOverrideAbilitySpecial - looking for echo_slam_echo_damage!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_echo_slam:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_echo_slam_potion" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "echo_slam_echo_damage" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - --print( 'modifier_blessing_potion_echo_slam:GetModifierOverrideAbilitySpecialValue - echo_slam_echo_damage is ' .. flBaseValue .. '. Adding on an additional ' .. self.echo_slam_echo_damage_percent ) - - return flBaseValue * ( ( 100 + self.echo_slam_echo_damage_percent ) / 100 ) - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_health.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_health.lua deleted file mode 100755 index 38b8e0d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_health.lua +++ /dev/null @@ -1,15 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_health = class( modifier_blessing_base ) - -------------------------------------------------------------------------------- - -function modifier_blessing_potion_health:OnBlessingCreated( kv ) - self.hp_restore_pct_bonus = kv.hp_restore_pct_bonus -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_health:GetHealthRestorePercentBonus() - return self.hp_restore_pct_bonus -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_mana.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_mana.lua deleted file mode 100755 index 97b1800..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_mana.lua +++ /dev/null @@ -1,15 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_mana = class( modifier_blessing_base ) - -------------------------------------------------------------------------------- - -function modifier_blessing_potion_mana:OnBlessingCreated( kv ) - self.mana_restore_pct_bonus = kv.mana_restore_pct_bonus -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_mana:GetManaRestorePercentBonus() - return self.mana_restore_pct_bonus -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_purification.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_purification.lua deleted file mode 100755 index d9270e8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_purification.lua +++ /dev/null @@ -1,68 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_purification = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_purification:GetTexture() - return "../items/river_painter4" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_purification:OnBlessingCreated( kv ) - self.radius_percent = kv.radius_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_purification:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_purification:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_purification_potion" then - return 0 - end - - if szSpecialValueName == "radius" then - --print( 'modifier_blessing_potion_purification:GetModifierOverrideAbilitySpecial - looking for radius!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_purification:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_purification_potion" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "radius" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - --print( 'modifier_blessing_potion_purification:GetModifierOverrideAbilitySpecialValue - radius is ' .. flBaseValue .. '. Adding on an additional ' .. self.radius_percent ) - - return flBaseValue * ( ( 100 + self.radius_percent ) / 100 ) - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_ravage.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_ravage.lua deleted file mode 100755 index 8b1703a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_ravage.lua +++ /dev/null @@ -1,68 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_ravage = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_ravage:GetTexture() - return "../items/river_painter4" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_ravage:OnBlessingCreated( kv ) - self.duration_percent = kv.duration_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_ravage:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_ravage:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_ravage_potion" then - return 0 - end - - if szSpecialValueName == "duration" then - --print( 'modifier_blessing_potion_ravage:GetModifierOverrideAbilitySpecial - looking for duration!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_ravage:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_ravage_potion" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "duration" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - --print( 'modifier_blessing_potion_ravage:GetModifierOverrideAbilitySpecialValue - duration_percent is ' .. flBaseValue .. '. Adding on an additional ' .. self.duration_percent ) - - return flBaseValue * ( ( 100 + self.duration_percent ) / 100 ) - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_shadow_wave.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_shadow_wave.lua deleted file mode 100755 index 355bf68..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_shadow_wave.lua +++ /dev/null @@ -1,62 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_shadow_wave = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_shadow_wave:OnBlessingCreated( kv ) - self.damage_percent = kv.damage_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_shadow_wave:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_shadow_wave:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_shadow_wave_effect_potion" then - return 0 - end - - if szSpecialValueName == "damage" then - --print( 'modifier_blessing_potion_shadow_wave:GetModifierOverrideAbilitySpecial - looking for damage!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_shadow_wave:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_shadow_wave_effect_potion" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "damage" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - --print( 'modifier_blessing_potion_shadow_wave:GetModifierOverrideAbilitySpecialValue - damage is ' .. flBaseValue .. '. Adding on an additional ' .. self.damage_percent ) - - return flBaseValue * ( ( 100 + self.damage_percent ) / 100 ) - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_torrent.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_torrent.lua deleted file mode 100755 index 4fbb5d2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_potion_torrent.lua +++ /dev/null @@ -1,62 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_potion_torrent = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_torrent:OnBlessingCreated( kv ) - self.torrent_damage_percent = kv.torrent_damage_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_potion_torrent:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_torrent:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_torrent_effect_potion" then - return 0 - end - - if szSpecialValueName == "torrent_damage" then - --print( 'modifier_blessing_potion_torrent:GetModifierOverrideAbilitySpecial - looking for torrent_damage!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_potion_torrent:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_torrent_effect_potion" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "torrent_damage" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - --print( 'modifier_blessing_potion_torrent:GetModifierOverrideAbilitySpecialValue - torrent_damage is ' .. flBaseValue .. '. Adding on an additional ' .. self.torrent_damage_percent ) - - return flBaseValue * ( ( 100 + self.torrent_damage_percent ) / 100 ) - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_refresher_shard.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_refresher_shard.lua deleted file mode 100755 index 319ed35..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_refresher_shard.lua +++ /dev/null @@ -1,68 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_refresher_shard = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_refresher_shard:GetTexture() - return "../items/river_painter4" -end - --------------------------------------------------------------------------------- - -function modifier_blessing_refresher_shard:OnBlessingCreated( kv ) - self.health_restore_percent = kv.health_restore_percent -end - --------------------------------------------------------------------------------- - -function modifier_blessing_refresher_shard:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_blessing_refresher_shard:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - - if szAbilityName ~= "item_aghsfort_refresher_shard" then - return 0 - end - - if szSpecialValueName == "health_restore_percent" then - print( 'modifier_blessing_refresher_shard:GetModifierOverrideAbilitySpecial - looking for health_restore_percent!' ) - return 1 - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_blessing_refresher_shard:GetModifierOverrideAbilitySpecialValue( params ) - local szAbilityName = params.ability:GetAbilityName() - if szAbilityName ~= "item_aghsfort_refresher_shard" then - return 0 - end - - local szSpecialValueName = params.ability_special_value - if szSpecialValueName == "health_restore_percent" then - local nSpecialLevel = params.ability_special_level - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - print( 'modifier_blessing_refresher_shard:GetModifierOverrideAbilitySpecialValue - health_restore_percent is ' .. flBaseValue .. '. Adding on an additional ' .. self.health_restore_percent ) - - return flBaseValue + self.health_restore_percent - end - - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_respawn_invulnerability.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_respawn_invulnerability.lua deleted file mode 100755 index 4cb93b0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_respawn_invulnerability.lua +++ /dev/null @@ -1,11 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_respawn_invulnerability = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_respawn_invulnerability:OnBlessingCreated( kv ) - self.respawn_invulnerability_time_bonus = kv.respawn_invulnerability_time_bonus - self.min_move_speed = kv.min_move_speed - self.bonus_attack_speed = kv.bonus_attack_speed -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_respawn_time_reduction.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_respawn_time_reduction.lua deleted file mode 100755 index 6cdb8ff..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_respawn_time_reduction.lua +++ /dev/null @@ -1,39 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_respawn_time_reduction = class( modifier_blessing_base ) - --------------------------------------------------------------------------------- - -function modifier_blessing_respawn_time_reduction:OnBlessingCreated( kv ) - self.respawn_time_reduction = kv.respawn_time_reduction -end - --------------------------------------------------------------------------------- - -function modifier_blessing_respawn_time_reduction:GetRespawnTimeReduction() - return self.respawn_time_reduction -end - --------------------------------------------------------------------------------- - -function modifier_blessing_respawn_time_reduction:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_RESPAWNTIME_PERCENTAGE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_respawn_time_reduction:GetModifierPercentageRespawnTime( params ) - return self.respawn_time_reduction -end - --------------------------------------------------------------------------------- - -function modifier_blessing_respawn_time_reduction:OnTooltip( params ) - local nRespawnReduction = ( self.respawn_time_reduction * 100.0 ) - return nRespawnReduction -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_restore_mana.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_restore_mana.lua deleted file mode 100755 index a0ca2ee..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_restore_mana.lua +++ /dev/null @@ -1,49 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_restore_mana = class( modifier_blessing_base ) - -------------------------------------------------------------------------------- - -function modifier_blessing_restore_mana:GetTexture() - return "../items/lifesteal" -end - -------------------------------------------------------------------------------- - -function modifier_blessing_restore_mana:OnBlessingCreated( kv ) - self.mana_on_kill = kv.mana_on_kill -end - --------------------------------------------------------------------------------- - -function modifier_blessing_restore_mana:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_restore_mana:OnDeath( params ) - if IsServer() then - if self:GetParent():PassivesDisabled() then - return 1 - end - - if params.unit ~= nil and params.attacker ~= nil and params.attacker == self:GetParent() then - self:GetParent():GiveMana( self.mana_on_kill ) - - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/mango_active.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_blessing_restore_mana:OnTooltip( params ) - return self.mana_on_kill -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_spell_life_steal.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_spell_life_steal.lua deleted file mode 100755 index 9cbd1d1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_spell_life_steal.lua +++ /dev/null @@ -1,63 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_spell_life_steal = class( modifier_blessing_base ) - -------------------------------------------------------------------------------- - -function modifier_blessing_spell_life_steal:GetTexture() - return "../items/satanic" -end - -------------------------------------------------------------------------------- - -function modifier_blessing_spell_life_steal:OnBlessingCreated( kv ) - self.spell_lifesteal_pct = kv.spell_life_steal -end - --------------------------------------------------------------------------------- - -function modifier_blessing_spell_life_steal:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_TOOLTIP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_spell_life_steal:OnTakeDamage( params ) - if IsServer() then - local Attacker = params.attacker - local Target = params.unit - local Ability = params.inflictor - local flDamage = params.damage - - if Attacker ~= self:GetParent() or Ability == nil or Target == nil then - return 0 - end - - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION ) == DOTA_DAMAGE_FLAG_REFLECTION then - return 0 - end - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL ) == DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL then - return 0 - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/octarine_core_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local flLifesteal = flDamage * self.spell_lifesteal_pct / 100 - --print( 'modifier_blessing_spell_life_steal healing for ' .. flLifesteal ) - Attacker:Heal( flLifesteal, self:GetAbility() ) - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_blessing_spell_life_steal:OnTooltip( params ) - return self.spell_lifesteal_pct -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_strength.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_strength.lua deleted file mode 100755 index 73bbfda..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_blessing_strength.lua +++ /dev/null @@ -1,26 +0,0 @@ -require( "modifiers/modifier_blessing_base" ) - -modifier_blessing_strength = class( modifier_blessing_base ) - ----------------------------------------- - -function modifier_blessing_strength:OnBlessingCreated( kv ) - self.bonus_strength = kv.str_bonus - --print ( "Strength Bonus = " .. self.bonus_strength ) -end - --------------------------------------------------------------------------------- - -function modifier_blessing_strength:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_blessing_strength:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_bonus_room_start.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_bonus_room_start.lua deleted file mode 100755 index 2adddfb..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_bonus_room_start.lua +++ /dev/null @@ -1,58 +0,0 @@ -modifier_bonus_room_start = class({}) - --------------------------------------------------------------------------------- - -function modifier_bonus_room_start:IsHidden() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_bonus_room_start:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_bonus_room_start:GetTexture() - return "buyback" -end - --- ----------------------------------------------------------------------------------------- - --- function modifier_bonus_room_start:ShouldUseOverheadOffset() --- return true --- end - --- ----------------------------------------------------------------------------------------- - --- function modifier_bonus_room_start:GetEffectAttachType() --- return PATTACH_OVERHEAD_FOLLOW --- end - --- ----------------------------------------------------------------------------------------- - --- function modifier_bonus_room_start:GetEffectName() --- return "particles/generic_gameplay/generic_silenced.vpcf" --- end - --------------------------------------------------------------------------------- - -function modifier_bonus_room_start:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10001 -end - --------------------------------------------------------------------------------- - -function modifier_bonus_room_start:CheckState() - local state = {} - - if IsServer() then - state[MODIFIER_STATE_SILENCED] = true - state[MODIFIER_STATE_MUTED] = true - end - - return state -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_boss_intro.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_boss_intro.lua deleted file mode 100755 index df9460d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_boss_intro.lua +++ /dev/null @@ -1,33 +0,0 @@ -modifier_boss_intro = class({}) - --------------------------------------------------------------------------------- - -function modifier_boss_intro:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_boss_intro:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_boss_intro:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10001 -end - --------------------------------------------------------------------------------- - -function modifier_boss_intro:CheckState() - local state = - { - [MODIFIER_STATE_STUNNED] = true, - [MODIFIER_STATE_INVULNERABLE] = true, - } - - return state -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_breakable_container.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_breakable_container.lua deleted file mode 100755 index c7c8b4b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_breakable_container.lua +++ /dev/null @@ -1,81 +0,0 @@ - -modifier_breakable_container = class({}) - --------------------------------------------------------------------------------- - -function modifier_breakable_container:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_breakable_container:CanParentBeAutoAttacked() - return false -end - --------------------------------------------------------------------------------- - -function modifier_breakable_container:OnCreated( kv ) - if IsServer() then - if self:GetParent():GetUnitName() == "npc_dota_crate" then - self:GetParent():SetModelScale( RandomFloat( 0.6, 0.9 ) ) - elseif self:GetParent():GetUnitName() == "npc_dota_vase" then - self:GetParent():SetModelScale( RandomFloat( 0.4, 0.6 ) ) - end - --self:GetParent():AddNewModifier( nil, nil, "modifier_aghsfort_disable_aggro", { duration = -1 } ) - end -end - --------------------------------------------------------------------------------- - -function modifier_breakable_container:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_NO_HEALTH_BAR] = true - state[MODIFIER_STATE_BLIND] = true - state[MODIFIER_STATE_NOT_ON_MINIMAP] = true - state[MODIFIER_STATE_LOW_ATTACK_PRIORITY] = true - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_breakable_container:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_DEATH, - MODIFIER_PROPERTY_PROVIDES_FOW_POSITION, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_breakable_container:GetModifierProvidesFOWVision( params ) - return 1 -end - ------------------------------------------------------------------------ - -function modifier_breakable_container:OnDeath( params ) - if IsServer() then - if ( params.unit == self:GetParent() ) then - --print( string.format( "Breakable container \"%s\" destroyed by \"%s\"", self:GetParent():GetUnitName() or "Unknown Attacker", self.hAttacker:GetUnitName() ) ) - if self:GetParent():GetUnitName() == "npc_dota_crate" then - if RandomInt( 0, 1 ) >= 1 then - EmitSoundOn( "Dungeon.SmashCrateShort", self:GetParent() ) - else - EmitSoundOn( "Dungeon.SmashCrateLong", self:GetParent() ) - end - elseif self:GetParent():GetUnitName() == "npc_dota_vase" then - EmitSoundOn( "Dungeon.VaseBreak", self:GetParent() ) - end - GameRules.Aghanim:ChooseBreakableSurprise( params.attacker, self:GetParent() ) - end - end -end - ------------------------------------------------------------------------ - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_creature_bonus_chicken.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_creature_bonus_chicken.lua deleted file mode 100755 index b418a91..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_creature_bonus_chicken.lua +++ /dev/null @@ -1,192 +0,0 @@ -modifier_creature_bonus_chicken = class({}) - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:IsPurgable() - return false; -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:IsHidden() - return true; -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:OnCreated( kv ) - self.total_gold = self:GetAbility():GetSpecialValueFor( "total_gold" ) - self.time_limit = self:GetAbility():GetSpecialValueFor( "time_limit" ) - self.gold_bag_duration = self:GetAbility():GetSpecialValueFor( "gold_bag_duration" ) - if IsServer() then - self.flAccumDamage = 0 - self.nBagsDropped = 0 - self.bTeleporting = false - self.vCenter = GameRules.Aghanim:GetCurrentRoom():GetOrigin() + RandomVector( RandomFloat( 0, 500 ) ) - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.vCenter - }) - - self.flExpireTime = GameRules:GetGameTime() + self.time_limit - self:StartIntervalThink( 3.0 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE, - MODIFIER_PROPERTY_MIN_HEALTH, - MODIFIER_EVENT_ON_TELEPORTED, - } - - return funcs -end - -function modifier_creature_bonus_chicken:OnIntervalThink() - if not IsServer() then - return - end - - if self.bTeleporting == true then - return - end - - if GameRules:GetGameTime() > self.flExpireTime then - self:TeleportOut() - return - end - - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = FindPathablePositionNearby( self.vCenter, 500, 2500 ) - }) - -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:OnTakeDamage( params ) - if IsServer() then - local hUnit = params.unit - local hAttacker = params.attacker - if hAttacker == nil or hAttacker:IsBuilding() then - return 0 - end - if hUnit == self:GetParent() then - local flDamage = params.damage - if flDamage <= 0 then - return - end - self.flAccumDamage = self.flAccumDamage + flDamage - if self.flAccumDamage >= 100 then - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - local nGoldAmount = 20 - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( nGoldAmount ) - - local drop = CreateItemOnPositionSync( hUnit:GetAbsOrigin(), newItem ) - local dropTarget = FindPathablePositionNearby( hUnit:GetAbsOrigin(), 50, 250 ) - newItem:LaunchLoot( true, 300, 0.75, dropTarget ) - newItem:SetLifeTime( self.gold_bag_duration ) - - self.flAccumDamage = self.flAccumDamage - 100 - self.nBagsDropped = self.nBagsDropped + 1 - self.total_gold = self.total_gold - 20 - if self.total_gold <= 0 then - self:TeleportOut() - end - end - end - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:TeleportOut() - local tower = Entities:FindByName( nil, "bonus_chicken_tp_target" ) - if tower == nil then - self:GetParent():ForceKill( false ) - return - end - - for i = 0, DOTA_ITEM_MAX - 1 do - local item = self:GetParent():GetItemInSlot( i ) - if item then - if item:GetAbilityName() == "item_travel_boots" then - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = item:entindex(), - TargetIndex = tower:entindex() - }) - self.bTeleporting = true - return - end - end - end - - FindClearSpaceForUnit( self:GetParent(), tower:GetOrigin(), true ) - self:GetParent():ForceKill( false ) - -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:OnTeleported( params ) - if IsServer() then - if params.unit == self:GetParent() then - self:GetParent():ForceKill( false ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:GetModifierMoveSpeed_Absolute( params ) - if IsServer() then - return 500 + ( self.nBagsDropped * 10 ) - end - return 500 -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:GetMinHealth( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:CheckState() - local state = {} - if IsServer() then - state = - { - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_ROOTED] = false, - } - if GameRules:GetGameTime() > self.flExpireTime or self.total_gold <= 0 then - state[MODIFIER_STATE_MAGIC_IMMUNE] = true - state[MODIFIER_STATE_INVULNERABLE] = true - state[MODIFIER_STATE_OUT_OF_GAME] = true - end - end - - return state -end - - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_chicken:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_creature_bonus_greevil.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_creature_bonus_greevil.lua deleted file mode 100755 index ebead2d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_creature_bonus_greevil.lua +++ /dev/null @@ -1,192 +0,0 @@ -modifier_creature_bonus_greevil = class({}) - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:IsPurgable() - return false; -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:IsHidden() - return true; -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:OnCreated( kv ) - self.total_gold = self:GetAbility():GetSpecialValueFor( "total_gold" ) - self.time_limit = self:GetAbility():GetSpecialValueFor( "time_limit" ) - self.gold_bag_duration = self:GetAbility():GetSpecialValueFor( "gold_bag_duration" ) - if IsServer() then - self.flAccumDamage = 0 - self.nBagsDropped = 0 - self.bTeleporting = false - self.vCenter = GameRules.Aghanim:GetCurrentRoom():GetOrigin() + RandomVector( RandomFloat( 0, 500 ) ) - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = self.vCenter - }) - - self.flExpireTime = GameRules:GetGameTime() + self.time_limit - self:StartIntervalThink( 3.0 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE, - MODIFIER_PROPERTY_MIN_HEALTH, - MODIFIER_EVENT_ON_TELEPORTED, - } - - return funcs -end - -function modifier_creature_bonus_greevil:OnIntervalThink() - if not IsServer() then - return - end - - if self.bTeleporting == true then - return - end - - if GameRules:GetGameTime() > self.flExpireTime then - self:TeleportOut() - return - end - - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, - Position = FindPathablePositionNearby( self.vCenter, 500, 2500 ) - }) - -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:OnTakeDamage( params ) - if IsServer() then - local hUnit = params.unit - local hAttacker = params.attacker - if hAttacker == nil or hAttacker:IsBuilding() then - return 0 - end - if hUnit == self:GetParent() then - local flDamage = params.damage - if flDamage <= 0 then - return - end - self.flAccumDamage = self.flAccumDamage + flDamage - if self.flAccumDamage >= 100 then - local newItem = CreateItem( "item_bag_of_gold", nil, nil ) - local nGoldAmount = 50 - newItem:SetPurchaseTime( 0 ) - newItem:SetCurrentCharges( nGoldAmount ) - - local drop = CreateItemOnPositionSync( hUnit:GetAbsOrigin(), newItem ) - local dropTarget = FindPathablePositionNearby( hUnit:GetAbsOrigin(), 50, 250 ) - newItem:LaunchLoot( true, 300, 0.75, dropTarget ) - newItem:SetLifeTime( self.gold_bag_duration ) - - self.flAccumDamage = self.flAccumDamage - 100 - self.nBagsDropped = self.nBagsDropped + 1 - self.total_gold = self.total_gold - 20 - if self.total_gold <= 0 then - self:TeleportOut() - end - end - end - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:TeleportOut() - local tower = Entities:FindByName( nil, "bonus_chicken_tp_target" ) - if tower == nil then - self:GetParent():ForceKill( false ) - return - end - - for i = 0, DOTA_ITEM_MAX - 1 do - local item = self:GetParent():GetItemInSlot( i ) - if item then - if item:GetAbilityName() == "item_travel_boots" then - ExecuteOrderFromTable({ - UnitIndex = self:GetParent():entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_TARGET, - AbilityIndex = item:entindex(), - TargetIndex = tower:entindex() - }) - self.bTeleporting = true - return - end - end - end - - FindClearSpaceForUnit( self:GetParent(), tower:GetOrigin(), true ) - self:GetParent():ForceKill( false ) - -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:OnTeleported( params ) - if IsServer() then - if params.unit == self:GetParent() then - self:GetParent():ForceKill( false ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:GetModifierMoveSpeed_Absolute( params ) - if IsServer() then - return 500 + ( self.nBagsDropped * 10 ) - end - return 500 -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:GetMinHealth( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:CheckState() - local state = {} - if IsServer() then - state = - { - [MODIFIER_STATE_STUNNED] = false, - [MODIFIER_STATE_ROOTED] = false, - } - if GameRules:GetGameTime() > self.flExpireTime or self.total_gold <= 0 then - state[MODIFIER_STATE_MAGIC_IMMUNE] = true - state[MODIFIER_STATE_INVULNERABLE] = true - state[MODIFIER_STATE_OUT_OF_GAME] = true - end - end - - return state -end - - --------------------------------------------------------------------------------- - -function modifier_creature_bonus_greevil:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_detect_invisible.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_detect_invisible.lua deleted file mode 100755 index cd63ae3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_detect_invisible.lua +++ /dev/null @@ -1,70 +0,0 @@ -modifier_detect_invisible = class({}) - --------------------------------------------------------------------------------- - -function modifier_detect_invisible:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_detect_invisible:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_detect_invisible:OnCreated( kv ) - self.flRadius = 900 - if IsServer() then - EmitSoundOn( "Item.DropGemWorld", self:GetParent() ) - end -end - ------------------------------------------------------------------------ - -function modifier_detect_invisible:GetEffectName() - return "particles/creature_true_sight.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_detect_invisible:GetEffectAttachType() - return PATTACH_OVERHEAD_FOLLOW -end - ----------------------------------------- - -function modifier_detect_invisible:IsAura() - return true -end - ----------------------------------------- - -function modifier_detect_invisible:GetModifierAura() - return "modifier_truesight" -end - ----------------------------------------- - -function modifier_detect_invisible:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_ENEMY -end - ----------------------------------------- - -function modifier_detect_invisible:GetAuraSearchType() - return DOTA_UNIT_TARGET_ALL -end - --------------------------------------------------------------------------------- - -function modifier_detect_invisible:GetAuraSearchFlags() - return DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE -end - ----------------------------------------- - -function modifier_detect_invisible:GetAuraRadius() - return self.flRadius -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_fake_treasure_chest.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_fake_treasure_chest.lua deleted file mode 100755 index 3c8ceff..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_fake_treasure_chest.lua +++ /dev/null @@ -1,119 +0,0 @@ - -modifier_fake_treasure_chest = class({}) - --------------------------------------------------------------------------------- - -function modifier_fake_treasure_chest:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_fake_treasure_chest:OnCreated( kv ) - if IsServer() then - self:StartIntervalThink( 0.5 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_fake_treasure_chest:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_ORDER, - MODIFIER_PROPERTY_FIXED_DAY_VISION, - MODIFIER_PROPERTY_FIXED_NIGHT_VISION, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_fake_treasure_chest:OnOrder( params ) - if IsServer() then - local hOrderedUnit = params.unit - local hTargetUnit = params.target - local nOrderType = params.order_type - if nOrderType ~= DOTA_UNIT_ORDER_MOVE_TO_TARGET then - return - end - - if hTargetUnit == nil or hTargetUnit ~= self:GetParent() then - return - end - - if hOrderedUnit ~= nil and hOrderedUnit:IsRealHero() and hOrderedUnit:GetTeamNumber() == DOTA_TEAM_GOODGUYS then - self.hPlayerEnt = hOrderedUnit - self:StartIntervalThink( 0.25 ) - return - end - - self:StartIntervalThink( -1 ) - end - - return 0 -end - - ------------------------------------------------------------------------ - -function modifier_fake_treasure_chest:OnIntervalThink() - if IsServer() then - if self.hPlayerEnt ~= nil then - local flOpenDistance = 250.0 - if flOpenDistance >= ( self.hPlayerEnt:GetOrigin() - self:GetParent():GetOrigin() ):Length2D() then - if GameRules.Dungeon ~= nil then - self.hPlayerEnt:Interrupt() - --GameRules.Dungeon:OnTreasureOpen( self.hPlayerEnt, self:GetParent() ) - self.hPlayerEnt = nil - - -- Gain Living Treasure modifier - --self:GetParent():AddNewModifier( nil, self:GetAbility(), "modifier_living_treasure", { duration = -1 } ) - - -- Lose Fake Treasure modifier - self:Destroy() - - return -1 - end - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_fake_treasure_chest:GetFixedDayVision( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_fake_treasure_chest:GetFixedNightVision( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_fake_treasure_chest:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_ATTACK_IMMUNE] = true - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_NO_HEALTH_BAR] = true - state[MODIFIER_STATE_BLIND] = true - state[MODIFIER_STATE_NOT_ON_MINIMAP] = true - state[MODIFIER_STATE_INVULNERABLE] = true - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_fake_treasure_chest:OnDestroy() - if IsServer() then - self:GetParent():AddAbility( "living_treasure" ) - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ambient_sorcery.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ambient_sorcery.lua deleted file mode 100755 index ed14e27..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ambient_sorcery.lua +++ /dev/null @@ -1,70 +0,0 @@ - -modifier_item_ambient_sorcery = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_ambient_sorcery:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_ambient_sorcery:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:IsAura() - return true -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:GetModifierAura() - return "modifier_item_ambient_sorcery_effect" -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_ENEMY -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:GetAuraSearchType() - return DOTA_UNIT_TARGET_ALL -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:GetAuraRadius() - return self.radius -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:OnCreated( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.bonus_intelligence = self:GetAbility():GetSpecialValueFor( "bonus_intelligence" ) -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - } - - return funcs -end - ----------------------------------------- - -function modifier_item_ambient_sorcery:GetModifierBonusStats_Intellect( params ) - return self.bonus_intelligence -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ambient_sorcery_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ambient_sorcery_effect.lua deleted file mode 100755 index e1c9bb6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ambient_sorcery_effect.lua +++ /dev/null @@ -1,34 +0,0 @@ - -modifier_item_ambient_sorcery_effect = class({}) - ----------------------------------------- - -function modifier_item_ambient_sorcery_effect:GetTexture() - return "item_ambient_sorcery" -end - ----------------------------------------- - -function modifier_item_ambient_sorcery_effect:OnCreated( kv ) - self.aura_magic_reduction = self:GetAbility():GetSpecialValueFor( "aura_magic_reduction" ) -end - ----------------------------------------- - -function modifier_item_ambient_sorcery_effect:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - } - - return funcs -end - ----------------------------------------- - -function modifier_item_ambient_sorcery_effect:GetModifierMagicalResistanceBonus( params ) - return self.aura_magic_reduction -end - ----------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_amorphotic_shell.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_amorphotic_shell.lua deleted file mode 100755 index 8b3c390..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_amorphotic_shell.lua +++ /dev/null @@ -1,83 +0,0 @@ -modifier_item_amorphotic_shell = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_amorphotic_shell:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_amorphotic_shell:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_amorphotic_shell:OnCreated( kv ) - self.amoeba_duration = self:GetAbility():GetSpecialValueFor( "amoeba_duration" ) - self.amoeba_chance = self:GetAbility():GetSpecialValueFor( "amoeba_chance" ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) - self.bonus_intelligence = self:GetAbility():GetSpecialValueFor( "bonus_intelligence" ) - self.bonus_agility = self:GetAbility():GetSpecialValueFor( "bonus_agility" ) -end - ----------------------------------------- - -function modifier_item_amorphotic_shell:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - } - return funcs -end - ----------------------------------------- - -function modifier_item_amorphotic_shell:OnTakeDamage( params ) - if IsServer() then - if params.unit == self:GetParent() then - if params.damage > 25 and RollPercentage( self.amoeba_chance ) then - local vSpawnPos = self:GetParent():GetOrigin() + RandomVector( 75 ) - local nFXCastIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_alchemist/alchemist_acid_spray_cast.vpcf", PATTACH_CUSTOMORIGIN, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXCastIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( nFXCastIndex, 1, vSpawnPos ) - ParticleManager:ReleaseParticleIndex( nFXCastIndex ) - - local hAmoeba = CreateUnitByName( "npc_dota_creature_pet_amoeba", vSpawnPos, true, self:GetParent(), self:GetParent(), self:GetParent():GetTeamNumber() ) - if hAmoeba ~= nil then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_batrider/batrider_stickynapalm_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, vSpawnPos ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 150, 150, 150 ) ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, hAmoeba, PATTACH_POINT_FOLLOW, "attach_hitloc", hAmoeba:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - hAmoeba:AddNewModifier( self:GetParent(), self, "modifier_kill", { duration = self.amoeba_duration } ) - end - end - end - return 0 -end - - ----------------------------------------- - -function modifier_item_amorphotic_shell:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - ----------------------------------------- - -function modifier_item_amorphotic_shell:GetModifierBonusStats_Agility( params ) - return self.bonus_agility -end - ----------------------------------------- - -function modifier_item_amorphotic_shell:GetModifierBonusStats_Intellect( params ) - return self.bonus_intelligence -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bear_cloak.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bear_cloak.lua deleted file mode 100755 index bbb557f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bear_cloak.lua +++ /dev/null @@ -1,72 +0,0 @@ - -modifier_item_bear_cloak = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:OnCreated( kv ) - self.bonus_magic_resist = self:GetAbility():GetSpecialValueFor( "bonus_magic_resist" ) - self.aura_radius = self:GetAbility():GetSpecialValueFor( "aura_radius" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:IsAura() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:GetModifierAura() - return "modifier_item_bear_cloak_effect" -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_FRIENDLY -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:GetAuraSearchType() - return DOTA_UNIT_TARGET_ALL -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:GetAuraRadius() - return self.aura_radius -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak:GetModifierMagicalResistanceBonus( params ) - return self.bonus_magic_resist -end - --------------------------------------------------------------------------------- - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bear_cloak_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bear_cloak_effect.lua deleted file mode 100755 index 180afe1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bear_cloak_effect.lua +++ /dev/null @@ -1,41 +0,0 @@ - -modifier_item_bear_cloak_effect = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_bear_cloak_effect:GetTexture() - return "item_bear_cloak" -end - ------------------------------------------------------------------------------- - -function modifier_item_bear_cloak_effect:IsPurgable() - return false -end - ------------------------------------------------------------------------------- - -function modifier_item_bear_cloak_effect:OnCreated( kv ) - self.aura_bonus_magic_resist = self:GetAbility():GetSpecialValueFor( "aura_bonus_magic_resist" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak_effect:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_bear_cloak_effect:GetModifierMagicalResistanceBonus( params ) - return self.aura_bonus_magic_resist -end - --------------------------------------------------------------------------------- - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_baldric.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_baldric.lua deleted file mode 100755 index f19013b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_baldric.lua +++ /dev/null @@ -1,64 +0,0 @@ -modifier_item_bogduggs_baldric = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_baldric:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_baldric:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_baldric:OnCreated( kv ) - self.bonus_armor = self:GetAbility():GetSpecialValueFor( "bonus_armor" ) - self.disable_resist_pct = self:GetAbility():GetSpecialValueFor( "disable_resist_pct" ) - self.move_speed_penalty = self:GetAbility():GetSpecialValueFor( "move_speed_penalty" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_baldric:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_STATE_CHANGED, - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_baldric:GetModifierPhysicalArmorBonus( params ) - return self.bonus_armor -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_baldric:GetModifierMoveSpeedBonus_Constant( params ) - return -self.move_speed_penalty -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_baldric:OnStateChanged( params ) - if IsServer() then - if params.unit == self:GetParent() then - local buffs = self:GetParent():FindAllModifiers() - for _,buff in pairs( buffs ) do - if buff ~= nil and buff:IsStunDebuff() and buff.bBaldricApplied == nil and buff:GetCaster() ~= self:GetParent() then - --print( "Applying Baldric" ) - buff.bBaldricApplied = true - --print( "Old Duration: " .. buff:GetDuration() ) - buff:SetDuration( buff:GetDuration() * self.disable_resist_pct / 100, true ) - --print( "New Duration: " .. buff:GetDuration() ) - end - end - end - end -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_cudgel.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_cudgel.lua deleted file mode 100755 index 40a9f48..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_cudgel.lua +++ /dev/null @@ -1,135 +0,0 @@ -modifier_item_bogduggs_cudgel = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:GetPriority() - return MODIFIER_PRIORITY_SUPER_ULTRA -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:OnCreated( kv ) - self.base_attack_time_penalty_pct = self:GetAbility():GetSpecialValueFor( "base_attack_time_penalty_pct" ) - self.attack_speed_penalty_pct = self:GetAbility():GetSpecialValueFor( "attack_speed_penalty_pct" ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) - self.bonus_damage = self:GetAbility():GetSpecialValueFor( "bonus_damage" ) - self.damage_radius = self:GetAbility():GetSpecialValueFor( "damage_radius" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - - if self:GetParent():IsRangedAttacker() then - self.flAttackSpeedReduction = 0 - else - if self.flAttackSpeedReduction == nil then - self.flAttackSpeedReduction = 0 - end - - self.flAttackSpeedReduction = ( ( self:GetParent():GetAttackSpeed() + self.flAttackSpeedReduction ) * self.attack_speed_penalty_pct ) / 100 - end -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_EVENT_ON_ATTACK_LANDED, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:GetModifierPreAttack_BonusDamage( params ) - return self.bonus_damage -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:GetModifierAttackSpeedBonus_Constant( params ) - if self.flAttackSpeedReduction == nil then - return 0 - end - - return -self.flAttackSpeedReduction * 100 -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_cudgel:OnAttackLanded( params ) - if IsServer() then - local Attacker = params.attacker - local Target = params.target - - if Attacker ~= nil and Attacker == self:GetParent() and Attacker:IsRangedAttacker() == false and Target ~= nil then - EmitSoundOn( "OgreTank.GroundSmash.Lesser", Target ) - local nFXIndex = ParticleManager:CreateParticle( "particles/creatures/ogre/ogre_melee_smash.vpcf", PATTACH_WORLDORIGIN, Attacker ) - ParticleManager:SetParticleControl( nFXIndex, 0, Target:GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.damage_radius, self.damage_radius, self.damage_radius ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local enemies = FindUnitsInRadius( Attacker:GetTeamNumber(), Target:GetOrigin(), Attacker, self.damage_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,enemy in pairs( enemies ) do - if enemy ~= nil and enemy:IsInvulnerable() == false then - if enemy ~= Target then - local damageInfo = - { - victim = enemy, - attacker = Attacker, - damage = params.original_damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - end - if enemy:IsAlive() == false then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( nFXIndex, 0, enemy, PATTACH_POINT_FOLLOW, "attach_hitloc", enemy:GetOrigin(), true ) - ParticleManager:SetParticleControl( nFXIndex, 1, enemy:GetOrigin() ) - ParticleManager:SetParticleControlForward( nFXIndex, 1, -Attacker:GetForwardVector() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 10, enemy, PATTACH_ABSORIGIN_FOLLOW, nil, enemy:GetOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "Dungeon.BloodSplatterImpact.Lesser", enemy ) - else - enemy:AddNewModifier( Attacker, self:GetAbility(), "modifier_stunned", { duration = self.stun_duration } ) - end - end - end - end - end - - if self:GetParent():IsRangedAttacker() then - self.flAttackSpeedReduction = 0 - else - if self.flAttackSpeedReduction == nil then - self.flAttackSpeedReduction = 0 - end - - self.flAttackSpeedReduction = ( ( self:GetParent():GetAttackSpeed() + self.flAttackSpeedReduction ) * self.attack_speed_penalty_pct ) / 100 - end - - return 0 -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_lucky_femur.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_lucky_femur.lua deleted file mode 100755 index 840cc32..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_bogduggs_lucky_femur.lua +++ /dev/null @@ -1,82 +0,0 @@ -modifier_item_bogduggs_lucky_femur = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:OnCreated( kv ) - self.max_mana_penalty = self:GetAbility():GetSpecialValueFor( "max_mana_penalty" ) - self.intelligence_penalty = self:GetAbility():GetSpecialValueFor( "intelligence_penalty" ) - self.mana_regen_sec = self:GetAbility():GetSpecialValueFor( "mana_regen_sec" ) - self.refresh_pct = self:GetAbility():GetSpecialValueFor( "refresh_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - MODIFIER_EVENT_ON_ABILITY_FULLY_CAST, - MODIFIER_PROPERTY_MANA_BONUS, - MODIFIER_PROPERTY_MANA_REGEN_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:GetModifierBonusStats_Intellect( params ) - return -self.intelligence_penalty -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:OnAbilityFullyCast( params ) - if IsServer() then - if params.unit ~= self:GetParent() then - return 0 - end - local Ability = params.ability - if Ability == nil then - return 0 - end - - if self:GetAbility() == nil or self:GetAbility():IsCooldownReady() == false then - return 0 - end - - if Ability:IsRefreshable() and Ability:IsItem() == false and RollPercentage( self.refresh_pct ) then - self:GetAbility():StartCooldown( Ability:GetCooldown( -1 ) ) - - Ability:EndCooldown() - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_ogre_magi/ogre_magi_multicast.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( 1, 2, 1 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - EmitSoundOn( "Bogduggs.LuckyFemur", self:GetParent() ) - end - end - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:GetModifierManaBonus( params ) - return -self.max_mana_penalty -end - --------------------------------------------------------------------------------- - -function modifier_item_bogduggs_lucky_femur:GetModifierConstantManaRegen( params ) - return self.mana_regen_sec -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_carapace_of_qaldin.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_carapace_of_qaldin.lua deleted file mode 100755 index 19fa25a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_carapace_of_qaldin.lua +++ /dev/null @@ -1,78 +0,0 @@ -modifier_item_carapace_of_qaldin = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:OnCreated( kv ) - self.bonus_hp = self:GetAbility():GetSpecialValueFor( "bonus_hp" ) - self.bonus_mana = self:GetAbility():GetSpecialValueFor( "bonus_mana" ) - self.bonus_restore_pct = self:GetAbility():GetSpecialValueFor( "bonus_restore_pct" ) - self.damage_return_pct = self:GetAbility():GetSpecialValueFor( "damage_return_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_HEALTH_BONUS, - MODIFIER_PROPERTY_MANA_BONUS, - MODIFIER_PROPERTY_HEAL_AMPLIFY_PERCENTAGE, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:GetModifierHealthBonus( params ) - return self.bonus_hp -end - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:GetModifierManaBonus( params ) - return self.bonus_mana -end - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:GetModifierHealAmplify_Percentage( params ) - return self.bonus_restore_pct -end - --------------------------------------------------------------------------------- - -function modifier_item_carapace_of_qaldin:OnTakeDamage( params ) - if IsServer() then - if params.unit ~= self:GetParent() then - return - end - - local Attacker = params.attacker - if Attacker ~= nil and Attacker ~= self:GetParent() and Attacker:GetTeamNumber() ~= self:GetParent():GetTeamNumber() then - local damageInfo = - { - victim = Attacker, - attacker = self:GetParent(), - damage = params.damage * self.damage_return_pct / 100, - damage_type = params.damage_type, - damage_flags = DOTA_DAMAGE_FLAG_REFLECTION + DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL, - ability = self:GetAbility(), - } - ApplyDamage( damageInfo ) - end - end - return 0 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_corrupting_blade.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_corrupting_blade.lua deleted file mode 100755 index 1976bad..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_corrupting_blade.lua +++ /dev/null @@ -1,116 +0,0 @@ - -modifier_item_corrupting_blade = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade:OnCreated( kv ) - self.bonus_damage = self:GetAbility():GetSpecialValueFor( "bonus_damage" ) - self.corruption_duration = self:GetAbility():GetSpecialValueFor( "corruption_duration" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, - MODIFIER_EVENT_ON_ATTACK, - MODIFIER_EVENT_ON_ATTACK_LANDED, - --MODIFIER_EVENT_ON_ATTACK_FAIL, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade:GetModifierPreAttack_BonusDamage( params ) - return self.bonus_damage -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade:OnAttack( params ) - if IsServer() then - if self:GetParent() ~= params.attacker then - return 0 - end - - local hTarget = params.target - local hAttacker = params.attacker - - if hTarget == nil or hAttacker == nil then - return 0 - end - - if hAttacker:IsIllusion() then - return 0 - end - - --[[ - CDOTA_AttackRecord *pAttackRecord = GetAttackRecordsManager( )->GetRecordByIndex( params.iRecord ); - pAttackRecord->m_iszAutoAttackRangedParticle = MAKE_STRING( "particles/items_fx/desolator_projectile.vpcf" ); - m_InFlightAttackRecords.AddToTail( pAttackRecord->m_iRecord ); - ]] - end -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade:OnAttackLanded( params ) - if IsServer() then - if self:GetParent() ~= params.attacker then - return 0 - end - - local hTarget = params.target - local hAttacker = params.attacker - - if hTarget == nil then - print( "OnAttackLanded - target is nil" ) - end - - if hAttacker == nil then - print( "OnAttackLanded - attacker is nil" ) - end - - if self:GetAbility() == nil then - print( "OnAttackLanded - ability is nil" ) - end - - if hTarget == nil or hAttacker == nil or self:GetAbility() == nil then - return 0 - end - - if hAttacker:IsIllusion() then - return 0 - end - - hTarget:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_item_corrupting_blade_buff", { duration = self.corruption_duration } ) - - EmitSoundOn( "Item_Desolator.Target", hTarget ) - end -end - --------------------------------------------------------------------------------- - ---[[ -function modifier_item_corrupting_blade:OnAttackFail( params ) - -end -]] - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_corrupting_blade_buff.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_corrupting_blade_buff.lua deleted file mode 100755 index 94b63b9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_corrupting_blade_buff.lua +++ /dev/null @@ -1,41 +0,0 @@ - -modifier_item_corrupting_blade_buff = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade_buff:GetTexture() - return "item_corrupting_blade" -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade_buff:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade_buff:OnCreated( kv ) - self.corruption_armor = self:GetAbility():GetSpecialValueFor( "corruption_armor" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_corrupting_blade_buff:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - } - - return funcs -end - --------------------------------------------------------------------------------- - - -function modifier_item_corrupting_blade_buff:GetModifierPhysicalArmorBonus( params ) - return self.corruption_armor -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_creed_of_omniscience.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_creed_of_omniscience.lua deleted file mode 100755 index 095d0a9..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_creed_of_omniscience.lua +++ /dev/null @@ -1,35 +0,0 @@ -modifier_item_creed_of_omniscience = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_creed_of_omniscience:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_creed_of_omniscience:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_creed_of_omniscience:OnCreated( kv ) - self.bonus_xp = self:GetAbility():GetSpecialValueFor( "bonus_xp" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_creed_of_omniscience:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_EXP_RATE_BOOST, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_creed_of_omniscience:GetModifierPercentageExpRateBoost( params ) - return self.bonus_xp -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_double_damage_potion.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_double_damage_potion.lua deleted file mode 100755 index d2925f1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_double_damage_potion.lua +++ /dev/null @@ -1,43 +0,0 @@ - -modifier_item_double_damage_potion = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_double_damage_potion:GetEffectName() - return "particles/generic_gameplay/rune_doubledamage_owner.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_item_double_damage_potion:GetTexture() - return "rune_doubledamage" -end - --------------------------------------------------------------------------------- - -function modifier_item_double_damage_potion:OnCreated( kv ) - self.damage_bonus_pct = self:GetAbility():GetSpecialValueFor( "damage_bonus_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_double_damage_potion:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_BASEDAMAGEOUTGOING_PERCENTAGE - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_double_damage_potion:GetModifierBaseDamageOutgoing_Percentage( params ) - if self:GetParent():IsIllusion() then - return 0 - end - - return self.damage_bonus_pct -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_dredged_trident.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_dredged_trident.lua deleted file mode 100755 index 05bd89a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_dredged_trident.lua +++ /dev/null @@ -1,80 +0,0 @@ - -modifier_item_dredged_trident = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_dredged_trident:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_dredged_trident:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_dredged_trident:OnCreated( kv ) - self.bonus_damage = self:GetAbility():GetSpecialValueFor( "bonus_damage" ) - self.crit_chance = self:GetAbility():GetSpecialValueFor( "crit_chance" ) - self.crit_multiplier = self:GetAbility():GetSpecialValueFor( "crit_multiplier" ) - - self.bIsCrit = false -end - --------------------------------------------------------------------------------- - -function modifier_item_dredged_trident:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, - MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE, - MODIFIER_EVENT_ON_ATTACK_LANDED, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_item_dredged_trident:GetModifierPreAttack_BonusDamage( params ) - return self.bonus_damage -end - --------------------------------------------------------------------------------- - -function modifier_item_dredged_trident:GetModifierPreAttack_CriticalStrike( params ) - if IsServer() then - local hTarget = params.target - local hAttacker = params.attacker - - if hTarget and ( hTarget:IsBuilding() == false ) and ( hTarget:IsOther() == false ) and hAttacker and ( hAttacker:GetTeamNumber() ~= hTarget:GetTeamNumber() ) then - if RandomFloat( 1, 100 ) <= self.crit_chance then -- expose RollPseudoRandomPercentage? - self.bIsCrit = true - return self.crit_multiplier - end - end - end - - return 0.0 -end - --------------------------------------------------------------------------------- - -function modifier_item_dredged_trident:OnAttackLanded( params ) - if IsServer() then - -- play sounds and stuff - if self:GetParent() == params.attacker then - local hTarget = params.target - if hTarget ~= nil and self.bIsCrit then - EmitSoundOn( "DOTA_Item.Daedelus.Crit", self:GetParent() ) - self.bIsCrit = false - end - end - end - - return 0.0 -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_evasion_potion.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_evasion_potion.lua deleted file mode 100755 index 5321a54..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_evasion_potion.lua +++ /dev/null @@ -1,43 +0,0 @@ - -modifier_item_evasion_potion = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_evasion_potion:GetEffectName() - return "particles/generic_gameplay/evasion_potion_owner.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_item_evasion_potion:GetTexture() - return "evasion_potion" -end - --------------------------------------------------------------------------------- - -function modifier_item_evasion_potion:OnCreated( kv ) - self.evasion_bonus_pct = self:GetAbility():GetSpecialValueFor( "evasion_bonus_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_evasion_potion:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_EVASION_CONSTANT - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_evasion_potion:GetModifierEvasion_Constant( params ) - if self:GetParent():IsIllusion() then - return 0 - end - - return self.evasion_bonus_pct -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_glimmerdark_shield.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_glimmerdark_shield.lua deleted file mode 100755 index b2361f3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_glimmerdark_shield.lua +++ /dev/null @@ -1,72 +0,0 @@ - -modifier_item_glimmerdark_shield = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:OnCreated( kv ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) - self.bonus_agility = self:GetAbility():GetSpecialValueFor( "bonus_agility" ) - self.bonus_intellect = self:GetAbility():GetSpecialValueFor( "bonus_intellect" ) - self.bonus_health_regen = self:GetAbility():GetSpecialValueFor( "bonus_health_regen" ) - self.bonus_armor = self:GetAbility():GetSpecialValueFor( "bonus_armor" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT, - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - - -function modifier_item_glimmerdark_shield:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:GetModifierBonusStats_Agility( params ) - return self.bonus_agility -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:GetModifierBonusStats_Intellect( params ) - return self.bonus_intellect -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:GetModifierConstantHealthRegen( params ) - return self.bonus_health_regen -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield:GetModifierPhysicalArmorBonus( params ) - return self.bonus_armor -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_glimmerdark_shield_prism.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_glimmerdark_shield_prism.lua deleted file mode 100755 index 18c8dd7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_glimmerdark_shield_prism.lua +++ /dev/null @@ -1,75 +0,0 @@ - -modifier_item_glimmerdark_shield_prism = class({}) - --------------------------------------------------------------------------------- - ---[[ -function modifier_item_glimmerdark_shield_prism:GetEffectName() - return "particles/act_2/gleam.vpcf" -end -]] - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:GetStatusEffectName() - return "particles/status_fx/status_effect_ghost.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:GetTexture() - return "item_glimmerdark_shield" -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:OnCreated( kv ) - self.prism_bonus_magic_dmg = self:GetAbility():GetSpecialValueFor( "prism_bonus_magic_dmg" ) - - if IsServer() then - self.nFXIndex = ParticleManager:CreateParticle( "particles/act_2/gleam.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetOrigin(), true ) - --ParticleManager:SetParticleControlEnt( self.nFXIndex, 0, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nFXIndex, 3, Vector( 100, 100, 100 ) ) - end -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:OnDestroy() - if IsServer() then - ParticleManager:DestroyParticle( self.nFXIndex, false ) - end -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_PHYSICAL, - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_DECREPIFY_UNIQUE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:GetAbsoluteNoDamagePhysical( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_item_glimmerdark_shield_prism:GetModifierMagicalResistanceDecrepifyUnique( params ) - return self.prism_bonus_magic_dmg -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_gravel_foot.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_gravel_foot.lua deleted file mode 100755 index 9313aef..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_gravel_foot.lua +++ /dev/null @@ -1,75 +0,0 @@ -modifier_item_gravel_foot = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_gravel_foot:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_gravel_foot:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_gravel_foot:OnCreated( kv ) - self.bonus_movement_speed = self:GetAbility():GetSpecialValueFor( "bonus_movement_speed" ) - self.damage_block = self:GetAbility():GetSpecialValueFor( "damage_block" ) - self.bonus_all_stats = self:GetAbility():GetSpecialValueFor( "bonus_all_stats" ) - self.bonus_hp_regen = self:GetAbility():GetSpecialValueFor( "bonus_hp_regen" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_gravel_foot:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_UNIQUE, - MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT, - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - MODIFIER_PROPERTY_TOTAL_CONSTANT_BLOCK, - } - return funcs -end - ----------------------------------------- - -function modifier_item_gravel_foot:GetModifierMoveSpeedBonus_Special_Boots( params ) - return self.bonus_movement_speed -end - ----------------------------------------- - -function modifier_item_gravel_foot:GetModifierBonusStats_Strength( params ) - return self.bonus_all_stats -end - ----------------------------------------- - -function modifier_item_gravel_foot:GetModifierBonusStats_Agility( params ) - return self.bonus_all_stats -end - ----------------------------------------- - -function modifier_item_gravel_foot:GetModifierBonusStats_Intellect( params ) - return self.bonus_all_stats -end - --------------------------------------------------------------------------------- - -function modifier_item_gravel_foot:GetModifierConstantHealthRegen( params ) - return self.bonus_hp_regen -end - --------------------------------------------------------------------------------- - -function modifier_item_gravel_foot:GetModifierTotal_ConstantBlock( params ) - return self.damage_block -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_guardian_shell.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_guardian_shell.lua deleted file mode 100755 index 31c6174..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_guardian_shell.lua +++ /dev/null @@ -1,62 +0,0 @@ -modifier_item_guardian_shell = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_guardian_shell:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_guardian_shell:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_guardian_shell:CheckState() - local state = - { - [MODIFIER_STATE_ROOTED] = false, - [MODIFIER_STATE_UNSLOWABLE] = true, - } - return state -end - --------------------------------------------------------------------------------- - -function modifier_item_guardian_shell:GetPriority() - return MODIFIER_PRIORITY_HIGH -end - ----------------------------------------- - -function modifier_item_guardian_shell:OnCreated( kv ) - self.bonus_armor = self:GetAbility():GetSpecialValueFor( "bonus_armor" ) - self.magic_resistance = self:GetAbility():GetSpecialValueFor( "magic_resistance" ) -end - - ----------------------------------------- - -function modifier_item_guardian_shell:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, - } - return funcs -end - ----------------------------------------- - -function modifier_item_guardian_shell:GetModifierPhysicalArmorBonus( params ) - return self.bonus_armor -end - ----------------------------------------- - -function modifier_item_guardian_shell:GetModifierMagicalResistanceBonus( params ) - return self.magic_resistance -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ice_dragon_maw.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ice_dragon_maw.lua deleted file mode 100755 index c37c2ef..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ice_dragon_maw.lua +++ /dev/null @@ -1,82 +0,0 @@ - -modifier_item_ice_dragon_maw = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_ice_dragon_maw:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_ice_dragon_maw:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_ice_dragon_maw:OnCreated( kv ) - self.bonus_damage = self:GetAbility():GetSpecialValueFor( "bonus_damage" ) - self.bonus_attack_range = self:GetAbility():GetSpecialValueFor( "bonus_attack_range" ) - self.chance_to_freeze = self:GetAbility():GetSpecialValueFor( "chance_to_freeze" ) - self.freeze_duration = self:GetAbility():GetSpecialValueFor( "freeze_duration" ) - self.freeze_cooldown = self:GetAbility():GetSpecialValueFor( "freeze_cooldown" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_ice_dragon_maw:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, - MODIFIER_PROPERTY_ATTACK_RANGE_BONUS, - MODIFIER_EVENT_ON_ATTACK_LANDED, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_ice_dragon_maw:GetModifierAttackRangeBonus( params ) - if self:GetParent():IsRangedAttacker() then - return self.bonus_attack_range - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_item_ice_dragon_maw:GetModifierPreAttack_BonusDamage( params ) - return self.bonus_damage -end - --------------------------------------------------------------------------------- - -function modifier_item_ice_dragon_maw:OnAttackLanded( params ) - if IsServer() then - local hAttacker = params.attacker - local hTarget = params.target - if hAttacker == nil or hAttacker ~= self:GetParent() or hTarget == nil then - return 0 - end - - if hTarget:IsMagicImmune() == false and hTarget:IsInvulnerable() == false and RollPercentage( self.chance_to_freeze ) then - if self.fLastFreezeTime == nil or ( GameRules:GetGameTime() >= ( self.fLastFreezeTime + self.freeze_cooldown ) ) then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_crystalmaiden/maiden_frostbite.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, hTarget, PATTACH_ABSORIGIN_FOLLOW, nil, hTarget:GetAbsOrigin(), false ) - ParticleManager:ReleaseParticleIndex( nFXIndex ); - - hTarget:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_large_frostbitten_icicle", { duration = self.freeze_duration } ) - EmitSoundOn( "IceDragonMaw.Trigger", hTarget ) - - self.fLastFreezeTime = GameRules:GetGameTime() - end - end - end - - return 0 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_lifestone.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_lifestone.lua deleted file mode 100755 index a94906e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_lifestone.lua +++ /dev/null @@ -1,40 +0,0 @@ - -modifier_item_lifestone = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_lifestone:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_lifestone:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_lifestone:OnCreated( kv ) - self.hp_regen = self:GetAbility():GetSpecialValueFor( "hp_regen" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_lifestone:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_lifestone:GetModifierConstantHealthRegen( params ) - return self.hp_regen -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_lifestone_pact.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_lifestone_pact.lua deleted file mode 100755 index 530ee97..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_lifestone_pact.lua +++ /dev/null @@ -1,53 +0,0 @@ - -modifier_item_lifestone_pact = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_lifestone_pact:GetTexture() - return "item_lifestone" -end - --------------------------------------------------------------------------------- - -function modifier_item_lifestone_pact:OnCreated( kv ) - self.pact_interval = self:GetAbility():GetSpecialValueFor( "pact_interval" ) - self.pact_hp_cost = self:GetAbility():GetSpecialValueFor( "pact_hp_cost" ) - self.pact_mana_gained = self:GetAbility():GetSpecialValueFor( "pact_mana_gained" ) - - if IsServer() then - EmitSoundOn( "Lifestone.Activate", self:GetParent() ) - - self:StartIntervalThink( self.pact_interval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_item_lifestone_pact:OnIntervalThink() - if IsServer() then - local damage = - { - victim = self:GetParent(), - attacker = self:GetCaster(), - damage = self.pact_hp_cost, - damage_type = self:GetAbility():GetAbilityDamageType(), - ability = self - } - ApplyDamage( damage ) - - self:GetParent():GiveMana( self.pact_mana_gained ) - SendOverheadEventMessage( self:GetCaster():GetPlayerOwner(), OVERHEAD_ALERT_MANA_ADD, self:GetParent(), self.pact_mana_gained, nil ) - end -end - --------------------------------------------------------------------------------- - -function modifier_item_lifestone_pact:OnDestroy() - if IsServer() then - StopSoundOn( "Lifestone.Activate", self:GetParent() ) - EmitSoundOn( "Lifestone.Deactivate", self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_longclaws_amulet.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_longclaws_amulet.lua deleted file mode 100755 index ef93e87..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_longclaws_amulet.lua +++ /dev/null @@ -1,83 +0,0 @@ -modifier_item_longclaws_amulet = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:OnCreated( kv ) - self.spell_lifesteal_pct = self:GetAbility():GetSpecialValueFor( "spell_lifesteal_pct" ) - self.cooldown_reduction_pct = self:GetAbility():GetSpecialValueFor( "cooldown_reduction_pct" ) - self.mana_cost_reduction_pct = self:GetAbility():GetSpecialValueFor( "mana_cost_reduction_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_COOLDOWN_PERCENTAGE, - MODIFIER_PROPERTY_MANACOST_PERCENTAGE, - MODIFIER_PROPERTY_UNIT_STATS_NEEDS_REFRESH, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:GetModifierPercentageCooldown( params ) - return self.cooldown_reduction_pct -end - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:GetModifierPercentageManacost( params ) - return self.mana_cost_reduction_pct -end - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:GetModifierUnitStatsNeedsRefresh( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_item_longclaws_amulet:OnTakeDamage( params ) - if IsServer() then - local Attacker = params.attacker - local Target = params.unit - local Ability = params.inflictor - local flDamage = params.damage - - if Attacker ~= self:GetParent() or Ability == nil or Target == nil then - return 0 - end - - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION ) == DOTA_DAMAGE_FLAG_REFLECTION then - return 0 - end - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL ) == DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL then - return 0 - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/octarine_core_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local flLifesteal = flDamage * self.spell_lifesteal_pct / 100 - Attacker:Heal( flLifesteal, self:GetAbility() ) - end - return 0 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_oblivions_locket.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_oblivions_locket.lua deleted file mode 100755 index 724e368..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_oblivions_locket.lua +++ /dev/null @@ -1,47 +0,0 @@ -modifier_item_oblivions_locket = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_oblivions_locket:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_oblivions_locket:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_oblivions_locket:OnCreated( kv ) - self.bonus_all_stats = self:GetAbility():GetSpecialValueFor( "bonus_all_stats" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_oblivions_locket:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_oblivions_locket:GetModifierBonusStats_Strength( params ) - return self.bonus_all_stats -end --------------------------------------------------------------------------------- - -function modifier_item_oblivions_locket:GetModifierBonusStats_Agility( params ) - return self.bonus_all_stats -end --------------------------------------------------------------------------------- - -function modifier_item_oblivions_locket:GetModifierBonusStats_Intellect( params ) - return self.bonus_all_stats -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ogre_seal_totem.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ogre_seal_totem.lua deleted file mode 100755 index be48d8e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_ogre_seal_totem.lua +++ /dev/null @@ -1,49 +0,0 @@ - -modifier_item_ogre_seal_totem = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_ogre_seal_totem:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_ogre_seal_totem:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_ogre_seal_totem:OnCreated( kv ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) - self.bonus_hp = self:GetAbility():GetSpecialValueFor( "bonus_hp" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_ogre_seal_totem:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_HEALTH_BONUS, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_ogre_seal_totem:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - --------------------------------------------------------------------------------- - -function modifier_item_ogre_seal_totem:GetModifierHealthBonus( params ) - return self.bonus_hp -end - --------------------------------------------------------------------------------- - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_paw_of_lucius.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_paw_of_lucius.lua deleted file mode 100755 index e787e50..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_paw_of_lucius.lua +++ /dev/null @@ -1,62 +0,0 @@ -modifier_item_paw_of_lucius = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_paw_of_lucius:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_paw_of_lucius:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_paw_of_lucius:OnCreated( kv ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) - self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) - self.rupture_chance = self:GetAbility():GetSpecialValueFor( "rupture_chance" ) - self.rupture_duration = self:GetAbility():GetSpecialValueFor( "rupture_duration" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_paw_of_lucius:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_EVENT_ON_ATTACK_LANDED, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_paw_of_lucius:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - --------------------------------------------------------------------------------- - -function modifier_item_paw_of_lucius:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end - --------------------------------------------------------------------------------- - -function modifier_item_paw_of_lucius:OnAttackLanded( params ) - if IsServer() then - if params.attacker == self:GetParent() and RollPercentage( self.rupture_chance ) then - if params.target ~= nil then - params.target:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_bloodseeker_rupture", { duration = self.rupture_duration } ) - EmitSoundOn( "DOTA_Item.Maim", params.target ) - end - end - end - return 0 -end - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_pelt_of_the_old_wolf.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_pelt_of_the_old_wolf.lua deleted file mode 100755 index b351984..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_pelt_of_the_old_wolf.lua +++ /dev/null @@ -1,51 +0,0 @@ -modifier_item_pelt_of_the_old_wolf = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_pelt_of_the_old_wolf:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_pelt_of_the_old_wolf:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_pelt_of_the_old_wolf:OnCreated( kv ) - self.bonus_armor = self:GetAbility():GetSpecialValueFor( "bonus_armor" ) - self.bonus_move_speed = self:GetAbility():GetSpecialValueFor( "bonus_move_speed" ) - self.bonus_evasion = self:GetAbility():GetSpecialValueFor( "bonus_evasion" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_pelt_of_the_old_wolf:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_EVASION_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_pelt_of_the_old_wolf:GetModifierPhysicalArmorBonus( params ) - return self.bonus_armor -end - --------------------------------------------------------------------------------- - -function modifier_item_pelt_of_the_old_wolf:GetModifierMoveSpeedBonus_Constant( params ) - return self.bonus_move_speed -end - --------------------------------------------------------------------------------- - -function modifier_item_pelt_of_the_old_wolf:GetModifierEvasion_Constant( params ) - return self.bonus_evasion -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_precious_egg.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_precious_egg.lua deleted file mode 100755 index f90aade..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_precious_egg.lua +++ /dev/null @@ -1,79 +0,0 @@ -modifier_item_precious_egg = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_precious_egg:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_precious_egg:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_precious_egg:OnCreated( kv ) - self.bonus_all_stats = self:GetAbility():GetSpecialValueFor( "bonus_all_stats" ) - self.chance_to_resist_death = self:GetAbility():GetSpecialValueFor( "chance_to_resist_death" ) - self.bDeathPrevented = false -end - --------------------------------------------------------------------------------- - -function modifier_item_precious_egg:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - MODIFIER_PROPERTY_MIN_HEALTH, - MODIFIER_EVENT_ON_DEATH_PREVENTED, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_precious_egg:GetModifierBonusStats_Strength( params ) - return self.bonus_all_stats -end --------------------------------------------------------------------------------- - -function modifier_item_precious_egg:GetModifierBonusStats_Agility( params ) - return self.bonus_all_stats -end --------------------------------------------------------------------------------- - -function modifier_item_precious_egg:GetModifierBonusStats_Intellect( params ) - return self.bonus_all_stats -end - --------------------------------------------------------------------------------- - -function modifier_item_precious_egg:GetMinHealth( params ) - if IsServer() then - if RollPercentage( self.chance_to_resist_death ) then - self.bDeathPrevented = true - return 1 - end - end - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_item_precious_egg:OnDeathPrevented( params ) - if IsServer() then - if self:GetParent() == params.unit and self:GetParent():IsAlive() and self.bDeathPrevented then - local nFXIndex = ParticleManager:CreateParticle( "particles/items4_fx/combo_breaker_spell.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - ParticleManager:SetParticleControlEnt( nFXIndex, 1, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOn( "DOTA_Item.ComboBreaker", self:GetParent() ) - self.bDeathPrevented = false - end - end - return 0 -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_preserved_skull.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_preserved_skull.lua deleted file mode 100755 index 8c93a88..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_preserved_skull.lua +++ /dev/null @@ -1,68 +0,0 @@ -modifier_item_preserved_skull = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_preserved_skull:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_preserved_skull:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_preserved_skull:IsAura() - return true -end - ----------------------------------------- - -function modifier_item_preserved_skull:GetModifierAura() - return "modifier_item_preserved_skull_effect" -end - ----------------------------------------- - -function modifier_item_preserved_skull:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_FRIENDLY -end - ----------------------------------------- - -function modifier_item_preserved_skull:GetAuraSearchType() - return DOTA_UNIT_TARGET_ALL -end - ----------------------------------------- - -function modifier_item_preserved_skull:GetAuraRadius() - return self.radius -end - ----------------------------------------- - -function modifier_item_preserved_skull:OnCreated( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.bonus_intelligence = self:GetAbility():GetSpecialValueFor( "bonus_intelligence" ) -end - ----------------------------------------- - -function modifier_item_preserved_skull:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - } - return funcs -end - ----------------------------------------- - -function modifier_item_preserved_skull:GetModifierBonusStats_Intellect( params ) - return self.bonus_intelligence -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_preserved_skull_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_preserved_skull_effect.lua deleted file mode 100755 index fdf57ed..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_preserved_skull_effect.lua +++ /dev/null @@ -1,40 +0,0 @@ -modifier_item_preserved_skull_effect = class({}) - ----------------------------------------- - -function modifier_item_preserved_skull_effect:GetTexture() - return "item_preserved_skull" -end - ----------------------------------------- - -function modifier_item_preserved_skull_effect:OnCreated( kv ) - self.cooldown_reduction_pct = self:GetAbility():GetSpecialValueFor( "cooldown_reduction_pct" ) - self.aura_mana_regen = self:GetAbility():GetSpecialValueFor( "aura_mana_regen" ) -end - ----------------------------------------- - -function modifier_item_preserved_skull_effect:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_COOLDOWN_PERCENTAGE, - MODIFIER_PROPERTY_MANA_REGEN_CONSTANT, - } - return funcs -end - ----------------------------------------- - -function modifier_item_preserved_skull_effect:GetModifierConstantManaRegen( params ) - return self.aura_mana_regen -end - ----------------------------------------- - -function modifier_item_preserved_skull_effect:GetModifierPercentageCooldown( params ) - return self.cooldown_reduction_pct -end - - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_rhyziks_eye.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_rhyziks_eye.lua deleted file mode 100755 index 6106f74..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_rhyziks_eye.lua +++ /dev/null @@ -1,82 +0,0 @@ -modifier_item_rhyziks_eye = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_rhyziks_eye:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_rhyziks_eye:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:OnCreated( kv ) - self.bonus_damage_pct = self:GetAbility():GetSpecialValueFor( "bonus_damage_pct" ) - self.damage_reduction = self:GetAbility():GetSpecialValueFor( "damage_reduction" ) - self.mana_regen_sec = self:GetAbility():GetSpecialValueFor( "mana_regen_sec" ) - self.hp_regen_sec = self:GetAbility():GetSpecialValueFor( "hp_regen_sec" ) - self.bonus_all_stats = self:GetAbility():GetSpecialValueFor( "bonus_all_stats" ) -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE, - MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE, - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - MODIFIER_PROPERTY_MANA_REGEN_CONSTANT, - MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT, - - } - return funcs -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:GetModifierDamageOutgoing_Percentage( params ) - return self.bonus_damage_pct -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:GetModifierIncomingDamage_Percentage( params ) - return -self.damage_reduction -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:GetModifierBonusStats_Strength( params ) - return self.bonus_all_stats -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:GetModifierBonusStats_Agility( params ) - return self.bonus_all_stats -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:GetModifierBonusStats_Intellect( params ) - return self.bonus_all_stats -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:GetModifierConstantHealthRegen( params ) - return self.hp_regen_sec -end - ----------------------------------------- - -function modifier_item_rhyziks_eye:GetModifierConstantManaRegen( params ) - return self.mana_regen_sec -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_sign_of_the_arachnid.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_sign_of_the_arachnid.lua deleted file mode 100755 index 77aecc2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_sign_of_the_arachnid.lua +++ /dev/null @@ -1,68 +0,0 @@ -modifier_item_sign_of_the_arachnid = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_sign_of_the_arachnid:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_sign_of_the_arachnid:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:IsAura() - return true -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:GetModifierAura() - return "modifier_item_sign_of_the_arachnid_effect" -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_FRIENDLY -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:GetAuraSearchType() - return DOTA_UNIT_TARGET_ALL -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:GetAuraRadius() - return self.radius -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:OnCreated( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.bonus_agility = self:GetAbility():GetSpecialValueFor( "bonus_agility" ) -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - } - return funcs -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid:GetModifierBonusStats_Agility( params ) - return self.bonus_agility -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_sign_of_the_arachnid_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_sign_of_the_arachnid_effect.lua deleted file mode 100755 index 1f733ed..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_sign_of_the_arachnid_effect.lua +++ /dev/null @@ -1,37 +0,0 @@ -modifier_item_sign_of_the_arachnid_effect = class({}) - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid_effect:GetTexture() - return "item_sign_of_the_arachnid" -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid_effect:OnCreated( kv ) - self.bonus_move_speed_pct = self:GetAbility():GetSpecialValueFor( "bonus_move_speed_pct" ) - self.attack_speed = self:GetAbility():GetSpecialValueFor( "attack_speed" ) -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid_effect:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid_effect:GetModifierMoveSpeedBonus_Percentage( params ) - return self.bonus_move_speed_pct -end - ----------------------------------------- - -function modifier_item_sign_of_the_arachnid_effect:GetModifierAttackSpeedBonus_Constant( params ) - return self.attack_speed -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_slippers_of_the_abyss.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_slippers_of_the_abyss.lua deleted file mode 100755 index fbb7800..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_slippers_of_the_abyss.lua +++ /dev/null @@ -1,63 +0,0 @@ - -modifier_item_slippers_of_the_abyss = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:OnCreated( kv ) - self.bonus_movement_speed = self:GetAbility():GetSpecialValueFor( "bonus_movement_speed" ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) - self.bonus_agility = self:GetAbility():GetSpecialValueFor( "bonus_agility" ) - self.bonus_atk_speed = self:GetAbility():GetSpecialValueFor( "bonus_atk_speed" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_UNIQUE, - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:GetModifierMoveSpeedBonus_Special_Boots( params ) - return self.bonus_movement_speed -end - --------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - --------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:GetModifierBonusStats_Agility( params ) - return self.bonus_agility -end - --------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_atk_speed -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_slippers_of_the_abyss_sprint.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_slippers_of_the_abyss_sprint.lua deleted file mode 100755 index 275496f..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_slippers_of_the_abyss_sprint.lua +++ /dev/null @@ -1,72 +0,0 @@ - -modifier_item_slippers_of_the_abyss_sprint = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:GetTexture() - return "item_slippers_of_the_abyss" -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:GetEffectName() - return "particles/units/heroes/hero_slardar/slardar_sprint.vpcf" -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:IsPurgable() - return false -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:OnCreated( kv ) - self.sprint_bonus_ms = self:GetAbility():GetSpecialValueFor( "sprint_bonus_ms" ) - self.sprint_bonus_dmg = self:GetAbility():GetSpecialValueFor( "sprint_bonus_dmg" ) - self.sprint_bonus_atk_speed = self:GetAbility():GetSpecialValueFor( "sprint_bonus_atk_speed" ) -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_MOVESPEED_MAX, - MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:GetModifierMoveSpeedBonus_Constant( params ) - return self.sprint_bonus_ms -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:GetModifierMoveSpeed_Max( params ) - if IsServer() then - return 750 - end - - return 750 -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:GetModifierPreAttack_BonusDamage( params ) - return self.sprint_bonus_dmg -end - ------------------------------------------------------------------------------- - -function modifier_item_slippers_of_the_abyss_sprint:GetModifierAttackSpeedBonus_Constant( params ) - return self.sprint_bonus_atk_speed -end - ------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_spell_amp_potion.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_spell_amp_potion.lua deleted file mode 100755 index d0ae306..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_spell_amp_potion.lua +++ /dev/null @@ -1,43 +0,0 @@ - -modifier_item_spell_amp_potion = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_spell_amp_potion:GetEffectName() - return "particles/generic_gameplay/spell_amp_potion_owner.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_item_spell_amp_potion:GetTexture() - return "spell_amp_potion" -end - --------------------------------------------------------------------------------- - -function modifier_item_spell_amp_potion:OnCreated( kv ) - self.spell_amp_bonus_pct = self:GetAbility():GetSpecialValueFor( "spell_amp_bonus_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_spell_amp_potion:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE_UNIQUE - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_spell_amp_potion:GetModifierSpellAmplify_PercentageUnique( params ) - if self:GetParent():IsIllusion() then - return 0 - end - - return self.spell_amp_bonus_pct -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_stonework_pendant.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_stonework_pendant.lua deleted file mode 100755 index d6f93a4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_stonework_pendant.lua +++ /dev/null @@ -1,123 +0,0 @@ -modifier_item_stonework_pendant = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_stonework_pendant:OnCreated( kv ) - self.spell_lifesteal = self:GetAbility():GetSpecialValueFor( "spell_lifesteal" ) - self.hp_cost_multiplier = self:GetAbility():GetSpecialValueFor( "hp_cost_multiplier" ) - self.flBonusHP = self:GetParent():GetMaxMana() - self.flBonusHPRegen = self:GetParent():GetManaRegen() - if IsServer() then - self:GetParent():CalculateStatBonus() - end - self:StartIntervalThink( 0.5 ) -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:OnIntervalThink() - self.flBonusHP = self.flBonusHP + self:GetParent():GetMaxMana() - self.flBonusHPRegen = self.flBonusHPRegen + self:GetParent():GetManaRegen() - if IsServer() then - self:GetParent():CalculateStatBonus() - end -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_HEALTH_BONUS, - MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT, - MODIFIER_PROPERTY_MANA_REGEN_CONSTANT, - MODIFIER_PROPERTY_MANA_BONUS, - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_SPELLS_REQUIRE_HP, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:GetModifierHealthBonus( params ) - if self.flBonusHP == nil then - return 0 - end - - return self.flBonusHP -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:GetModifierConstantHealthRegen( params ) - if self.flBonusHPRegen == nil then - return 0 - end - return self.flBonusHPRegen -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:GetModifierManaBonus( params ) - if self.flBonusHP == nil then - return 0 - end - return -self.flBonusHP -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:GetModifierConstantManaRegen( params ) - if self.flBonusHPRegen == nil then - return 0 - end - return -self.flBonusHPRegen -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:OnTakeDamage( params ) - if IsServer() then - local Attacker = params.attacker - local Target = params.unit - local Ability = params.inflictor - local flDamage = params.damage - - if Attacker ~= self:GetParent() or Ability == nil or Target == nil then - return 0 - end - - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION ) == DOTA_DAMAGE_FLAG_REFLECTION then - return 0 - end - if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL ) == DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL then - return 0 - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/octarine_core_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - local flLifesteal = flDamage * self.spell_lifesteal / 100 - Attacker:Heal( flLifesteal, self:GetAbility() ) - end - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_item_stonework_pendant:GetModifierSpellsRequireHP( params ) - return self.hp_cost_multiplier -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_stony_coat.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_stony_coat.lua deleted file mode 100755 index 599b1d7..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_stony_coat.lua +++ /dev/null @@ -1,74 +0,0 @@ -modifier_item_stony_coat = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_stony_coat:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_stony_coat:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_stony_coat:OnCreated( kv ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) - self.bonus_armor = self:GetAbility():GetSpecialValueFor( "bonus_armor" ) - self.boulder_chance = self:GetAbility():GetSpecialValueFor( "boulder_chance" ) - self.boulder_speed = self:GetAbility():GetSpecialValueFor( "boulder_speed" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_stony_coat:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_EVENT_ON_TAKEDAMAGE - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_stony_coat:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - --------------------------------------------------------------------------------- - -function modifier_item_stony_coat:GetModifierPhysicalArmorBonus( params ) - return self.bonus_armor -end - --------------------------------------------------------------------------------- - -function modifier_item_stony_coat:OnTakeDamage( params ) - if IsServer() then - if params.unit == self:GetParent() then - local hAttacker = params.attacker - if hAttacker ~= nil and RollPercentage( self.boulder_chance ) then - local info = - { - Target = hAttacker, - Source = self:GetParent(), - Ability = self:GetAbility(), - iMoveSpeed = self.boulder_speed, - vSourceLoc = self:GetParent():GetOrigin(), - EffectName = "particles/neutral_fx/mud_golem_hurl_boulder.vpcf", - } - ProjectileManager:CreateTrackingProjectile( info ) - - EmitSoundOn( "n_mud_golem.Boulder.Cast", self:GetParent() ) - end - end - end - return 0 -end - - --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_the_caustic_finale.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_the_caustic_finale.lua deleted file mode 100755 index 4e07a08..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_the_caustic_finale.lua +++ /dev/null @@ -1,71 +0,0 @@ -modifier_item_the_caustic_finale = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_the_caustic_finale:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_the_caustic_finale:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_the_caustic_finale:OnCreated( kv ) - self.bonus_damage = self:GetAbility():GetSpecialValueFor( "bonus_damage" ) - self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) - self.caustic_duration = self:GetAbility():GetSpecialValueFor( "caustic_duration" ) - self.max_stack_count = self:GetAbility():GetSpecialValueFor( "max_stack_count" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_the_caustic_finale:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ATTACK_LANDED, - MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_item_the_caustic_finale:OnAttackLanded( params ) - if IsServer() then - if self:GetParent() == params.attacker then - local Target = params.target - if Target ~= nil then - local hCausticBuff = Target:FindModifierByName( "modifier_sand_king_boss_caustic_finale" ) - if hCausticBuff == nil then - hCausticBuff = Target:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sand_king_boss_caustic_finale", { duration = self.caustic_duration } ) - if hCausticBuff ~= nil then - hCausticBuff:SetStackCount( 0 ) - end - end - if hCausticBuff ~= nil then - hCausticBuff:SetStackCount( math.min( hCausticBuff:GetStackCount() + 1, self.max_stack_count ) ) - hCausticBuff:SetDuration( self.caustic_duration, true ) - end - end - end - end - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_item_the_caustic_finale:GetModifierPreAttack_BonusDamage( params ) - return self.bonus_damage -end - --------------------------------------------------------------------------------- - -function modifier_item_the_caustic_finale:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_torrent_effect_potion.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_torrent_effect_potion.lua deleted file mode 100755 index 667b239..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_torrent_effect_potion.lua +++ /dev/null @@ -1,89 +0,0 @@ - -modifier_item_torrent_effect_potion = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:GetTexture() - return "item_torrent_effect_potion" -end - --------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:IsPermanent() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:GetAttributes() - return MODIFIER_ATTRIBUTE_MULTIPLE -end - --------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:RemoveOnDeath() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:OnCreated( kv ) - if IsServer() then - self.proc_chance = self:GetAbility():GetSpecialValueFor( "proc_chance" ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.movespeed_bonus = self:GetAbility():GetSpecialValueFor( "movespeed_bonus" ) - self.slow_duration = self:GetAbility():GetSpecialValueFor( "slow_duration" ) - self.stun_duration = self:GetAbility():GetSpecialValueFor( "stun_duration" ) - self.delay = self:GetAbility():GetSpecialValueFor( "delay" ) - self.torrent_damage = self:GetAbility():GetSpecialValueFor( "torrent_damage" ) - self.torrent_cooldown = self:GetAbility():GetSpecialValueFor( "torrent_cooldown" ) - end -end - --------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ATTACKED, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_torrent_effect_potion:OnAttacked( params ) - if IsServer() then - if params.target == self:GetParent() and params.attacker ~= nil then - if RollPercentage( self.proc_chance ) then - if self.fLastTorrentTime == nil or ( GameRules:GetGameTime() >= ( self.fLastTorrentTime + self.torrent_cooldown ) ) then - -- Create a torrent at the attacker's feet - local kv = - { - radius = self.radius, - movespeed_bonus = self.movespeed_bonus, - slow_duration = self.slow_duration, - stun_duration = self.stun_duration, - duration = self.delay, - torrent_damage = self.torrent_damage, - } - - CreateModifierThinker( self:GetCaster(), self, "modifier_aghsfort_torrent_effect_potion_thinker", kv, params.attacker:GetOrigin(), self:GetCaster():GetTeamNumber(), false ) - - self.fLastTorrentTime = GameRules:GetGameTime() - end - end - end - end - - return 1 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_treads_of_ermacor.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_treads_of_ermacor.lua deleted file mode 100755 index 87a41c3..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_treads_of_ermacor.lua +++ /dev/null @@ -1,69 +0,0 @@ -modifier_item_treads_of_ermacor = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_treads_of_ermacor:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_treads_of_ermacor:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_treads_of_ermacor:OnCreated( kv ) - self.bonus_movement_speed = self:GetAbility():GetSpecialValueFor( "bonus_movement_speed" ) - self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) - self.bonus_all_stats = self:GetAbility():GetSpecialValueFor( "bonus_all_stats" ) -end - ----------------------------------------- - -function modifier_item_treads_of_ermacor:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - MODIFIER_PROPERTY_MOVESPEED_BONUS_UNIQUE, - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - } - return funcs -end - ----------------------------------------- - -function modifier_item_treads_of_ermacor:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end - ----------------------------------------- - -function modifier_item_treads_of_ermacor:GetModifierMoveSpeedBonus_Special_Boots( params ) - return self.bonus_movement_speed -end - ----------------------------------------- - -function modifier_item_treads_of_ermacor:GetModifierBonusStats_Strength( params ) - return self.bonus_all_stats -end - ----------------------------------------- - -function modifier_item_treads_of_ermacor:GetModifierBonusStats_Agility( params ) - return self.bonus_all_stats -end - ----------------------------------------- - -function modifier_item_treads_of_ermacor:GetModifierBonusStats_Intellect( params ) - return self.bonus_all_stats -end - - - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_unhallowed_icon.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_unhallowed_icon.lua deleted file mode 100755 index 0d5f332..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_unhallowed_icon.lua +++ /dev/null @@ -1,68 +0,0 @@ -modifier_item_unhallowed_icon = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_unhallowed_icon:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_unhallowed_icon:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:IsAura() - return true -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:GetModifierAura() - return "modifier_item_unhallowed_icon_effect" -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:GetAuraSearchTeam() - return DOTA_UNIT_TARGET_TEAM_FRIENDLY -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:GetAuraSearchType() - return DOTA_UNIT_TARGET_ALL -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:GetAuraRadius() - return self.radius -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:OnCreated( kv ) - self.radius = self:GetAbility():GetSpecialValueFor( "radius" ) - self.bonus_strength = self:GetAbility():GetSpecialValueFor( "bonus_strength" ) -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - } - return funcs -end - ----------------------------------------- - -function modifier_item_unhallowed_icon:GetModifierBonusStats_Strength( params ) - return self.bonus_strength -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_unhallowed_icon_effect.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_unhallowed_icon_effect.lua deleted file mode 100755 index dc37463..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_unhallowed_icon_effect.lua +++ /dev/null @@ -1,52 +0,0 @@ -modifier_item_unhallowed_icon_effect = class({}) - ----------------------------------------- - -function modifier_item_unhallowed_icon_effect:GetTexture() - return "item_unhallowed_icon" -end - ----------------------------------------- - -function modifier_item_unhallowed_icon_effect:OnCreated( kv ) - self.lifesteal_pct = self:GetAbility():GetSpecialValueFor( "lifesteal_pct" ) - self.hp_regen = self:GetAbility():GetSpecialValueFor( "hp_regen" ) -end - ----------------------------------------- - -function modifier_item_unhallowed_icon_effect:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT, - MODIFIER_EVENT_ON_ATTACK_LANDED, - } - return funcs -end - ----------------------------------------- - -function modifier_item_unhallowed_icon_effect:GetModifierConstantHealthRegen( params ) - return self.hp_regen -end - ----------------------------------------- - -function modifier_item_unhallowed_icon_effect:OnAttackLanded( params ) - if IsServer() then - local Target = params.target - local Attacker = params.attacker - if Attacker ~= nil and Attacker == self:GetParent() and Target ~= nil then - local allies = FindUnitsInRadius( Attacker:GetTeamNumber(), self:GetCaster():GetOrigin(), nil, 1500, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) - for _,ally in pairs( allies ) do - if ally ~= nil and ally:FindModifierByName( "modifier_item_unhallowed_icon_effect" ) then - local heal = ( params.damage * self.lifesteal_pct / 100 ) / #allies - ally:Heal( heal, self:GetAbility() ) - local nFXIndex = ParticleManager:CreateParticle( "particles/generic_gameplay/generic_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, ally ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - end - end - end - end - return 0 -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_wand_of_the_brine.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_wand_of_the_brine.lua deleted file mode 100755 index 2335c9d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_wand_of_the_brine.lua +++ /dev/null @@ -1,47 +0,0 @@ - -modifier_item_wand_of_the_brine = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine:OnCreated( kv ) - self.bonus_intelligence = self:GetAbility():GetSpecialValueFor( "bonus_intelligence" ) - self.bonus_mana_regen_pct = self:GetAbility():GetSpecialValueFor( "bonus_mana_regen_pct" ) -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - MODIFIER_PROPERTY_MANA_REGEN_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine:GetModifierBonusStats_Intellect( params ) - return self.bonus_intelligence -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine:GetModifierPercentageManaRegen( params ) - return self.bonus_mana_regen_pct -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_wand_of_the_brine_bubble.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_wand_of_the_brine_bubble.lua deleted file mode 100755 index faeea31..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_wand_of_the_brine_bubble.lua +++ /dev/null @@ -1,63 +0,0 @@ - -modifier_item_wand_of_the_brine_bubble = class({}) - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine_bubble:GetTexture() - return "item_wand_of_the_brine" -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine_bubble:OnCreated( kv ) - if IsServer() then - self.bubble_heal_per_tick = self:GetAbility():GetSpecialValueFor( "bubble_heal_per_tick" ) - self.heal_tick_interval = self:GetAbility():GetSpecialValueFor( "heal_tick_interval" ) - - self.nFXIndex = ParticleManager:CreateParticle( "particles/act_2/wand_of_the_brine_bubble.vpcf", PATTACH_CUSTOMORIGIN, nil ) - ParticleManager:SetParticleControlEnt( self.nFXIndex, 0, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_hitloc", self:GetParent():GetOrigin(), true ) - ParticleManager:SetParticleControl( self.nFXIndex, 1, Vector( 2.5, 2.5, 2.5 ) ) -- target model scale - --ParticleManager:SetParticleControlEnt( self.nFXIndex, 2, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_attack1", self:GetParent():GetOrigin(), true ) - --ParticleManager:SetParticleControlEnt( self.nFXIndex, 3, self:GetParent(), PATTACH_POINT_FOLLOW, "attach_attack2", self:GetParent():GetOrigin(), true ) - --ParticleManager:SetParticleControlEnt( self.nFXIndex, 4, self:GetParent(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetParent():GetOrigin(), true ) - - self:StartIntervalThink( self.heal_tick_interval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine_bubble:OnIntervalThink() - if IsServer() then - self:GetParent():Heal( self.bubble_heal_per_tick, self:GetAbility() ) - end -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine_bubble:CheckState() - local state = {} - if IsServer() then - state[ MODIFIER_STATE_STUNNED] = true - state[ MODIFIER_STATE_ROOTED ] = true - state[ MODIFIER_STATE_DISARMED] = true - state[ MODIFIER_STATE_OUT_OF_GAME ] = true - state[ MODIFIER_STATE_MAGIC_IMMUNE ] = true - state[ MODIFIER_STATE_INVULNERABLE ] = true - state[ MODIFIER_STATE_OUT_OF_GAME ] = true - state[ MODIFIER_STATE_UNSELECTABLE ] = true - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_item_wand_of_the_brine_bubble:OnDestroy() - if IsServer() then - ParticleManager:DestroyParticle( self.nFXIndex, false ) - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_watchers_gaze.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_watchers_gaze.lua deleted file mode 100755 index d5e4016..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_watchers_gaze.lua +++ /dev/null @@ -1,49 +0,0 @@ -modifier_item_watchers_gaze = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_watchers_gaze:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_watchers_gaze:IsPurgable() - return false -end ----------------------------------------- - -function modifier_item_watchers_gaze:OnCreated( kv ) - self.bonus_stats = self:GetAbility():GetSpecialValueFor( "bonus_stats" ) -end - ----------------------------------------- - -function modifier_item_watchers_gaze:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, - MODIFIER_PROPERTY_STATS_AGILITY_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - } - return funcs -end - ----------------------------------------- - -function modifier_item_watchers_gaze:GetModifierBonusStats_Strength( params ) - return self.bonus_stats -end - ----------------------------------------- - -function modifier_item_watchers_gaze:GetModifierBonusStats_Agility( params ) - return self.bonus_stats -end - ----------------------------------------- - -function modifier_item_watchers_gaze:GetModifierBonusStats_Intellect( params ) - return self.bonus_stats -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_winter_embrace.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_winter_embrace.lua deleted file mode 100755 index 15f3771..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_item_winter_embrace.lua +++ /dev/null @@ -1,63 +0,0 @@ -modifier_item_winter_embrace = class({}) - ------------------------------------------------------------------------------- - -function modifier_item_winter_embrace:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_item_winter_embrace:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_item_winter_embrace:OnCreated( kv ) - self.bonus_armor = self:GetAbility():GetSpecialValueFor( "bonus_armor" ) - self.bonus_intelligence = self:GetAbility():GetSpecialValueFor( "bonus_intelligence" ) - self.slow_duration = self:GetAbility():GetSpecialValueFor( "slow_duration" ) - -end - ----------------------------------------- - -function modifier_item_winter_embrace:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, - MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - ----------------------------------------- - -function modifier_item_winter_embrace:GetModifierPhysicalArmorBonus( params ) - return self.bonus_armor -end - ----------------------------------------- - -function modifier_item_winter_embrace:GetModifierBonusStats_Intellect( params ) - return self.bonus_intelligence -end - ----------------------------------------- - -function modifier_item_winter_embrace:OnTakeDamage( params ) - if IsServer() then - if params.unit ~= self:GetParent() then - return 0 - end - - local hAttacker = params.attacker - if hAttacker ~= nil and hAttacker:IsMagicImmune() == false and hAttacker:IsInvulnerable() == false and params.damage_type == DAMAGE_TYPE_PHYSICAL then - hAttacker:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_ogre_magi_frost_armor_slow", { duration = self.slow_duration} ) - end - end - return 0 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_large_frostbitten_icicle.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_large_frostbitten_icicle.lua deleted file mode 100755 index d8bbd9d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_large_frostbitten_icicle.lua +++ /dev/null @@ -1,30 +0,0 @@ -modifier_large_frostbitten_icicle = class({}) - ------------------------------------------------------------------- - -function modifier_large_frostbitten_icicle:OnCreated( kv ) - if IsServer() then - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_crystalmaiden/maiden_frostbite_buff.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - self:AddParticle( nFXIndex, false, false, -1, false, false ) - end -end - ------------------------------------------------------------------- - -function modifier_large_frostbitten_icicle:GetStatusEffectName() - return "particles/status_fx/status_effect_wyvern_cold_embrace.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_large_frostbitten_icicle:CheckState() - local state = {} - state[MODIFIER_STATE_STUNNED] = true - state[MODIFIER_STATE_FROZEN] = true - - return state -end - - - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_minor_ability_upgrades.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_minor_ability_upgrades.lua deleted file mode 100755 index 2b13d0a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_minor_ability_upgrades.lua +++ /dev/null @@ -1,339 +0,0 @@ -require( "aghanim_ability_upgrade_constants" ) -require( "utility_functions" ) - - -modifier_minor_ability_upgrades = class({}) - --------------------------------------------------------------------------------- - -function modifier_minor_ability_upgrades:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_minor_ability_upgrades:IsPermanent() - return true -end - --------------------------------------------------------------------------------- - -function modifier_minor_ability_upgrades:RemoveOnDeath() - return false -end - --------------------------------------------------------------------------------- - -function modifier_minor_ability_upgrades:OnCreated( kv ) - self.bDirty = true - - if IsServer() then - ListenToGameEvent( "dota_player_learned_ability", Dynamic_Wrap( modifier_minor_ability_upgrades, "OnPlayerLearnedAbility" ), self ) - CustomNetTables:SetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ), self:GetParent().MinorAbilityUpgrades ) - else - self:GetParent().MinorAbilityUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end -end - --------------------------------------------------------------------------------- - -function modifier_minor_ability_upgrades:OnRefresh( kv ) - self.bDirty = true - - if IsServer() then - CustomNetTables:SetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ), self:GetParent().MinorAbilityUpgrades ) - else - self:GetParent().MinorAbilityUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end -end - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:OnPlayerLearnedAbility( event ) - if IsServer() then - if event.PlayerID == self:GetParent():GetPlayerOwnerID() then - self:ForceRefresh() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_minor_ability_upgrades:DeclareFunctions( ) - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL, - MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE, - MODIFIER_PROPERTY_COOLDOWN_REDUCTION_CONSTANT, - MODIFIER_PROPERTY_COOLDOWN_PERCENTAGE, - MODIFIER_PROPERTY_MANACOST_REDUCTION_CONSTANT, - MODIFIER_PROPERTY_MANACOST_PERCENTAGE_STACKING, - } - return funcs -end - - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:GetModifierOverrideAbilitySpecial( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local hUpgrades = self:GetParent().MinorAbilityUpgrades - if hUpgrades == nil then - hUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - if hUpgrades == nil or hUpgrades[ szAbilityName ] == nil then - return 0 - end - - if hUpgrades[ szAbilityName ][ szSpecialValueName ] == nil then - return 0 - end - - return 1 -end - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:GetModifierOverrideAbilitySpecialValue( params ) - local hUpgrades = self:GetParent().MinorAbilityUpgrades - if hUpgrades == nil then - hUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end - local szAbilityName = params.ability:GetAbilityName() - local szSpecialValueName = params.ability_special_value - local nSpecialLevel = params.ability_special_level - if hUpgrades == nil or hUpgrades[ szAbilityName ] == nil then - return 0 - end - - local flBaseValue = params.ability:GetLevelSpecialValueNoOverride( szSpecialValueName, nSpecialLevel ) - local SpecialValueUpgrades = hUpgrades[ szAbilityName ][ szSpecialValueName ] - - if SpecialValueUpgrades ~= nil then - if self.bDirty == false and SpecialValueUpgrades[ "cached_result" ] ~= nil and SpecialValueUpgrades[ "cached_result" ][ nSpecialLevel ] ~= nil then - return SpecialValueUpgrades[ "cached_result" ][ nSpecialLevel ] - end - - local flAddResult = 0 - local flMulResult = 1.0 - - for _,Upgrade in pairs ( SpecialValueUpgrades ) do - if Upgrade[ "operator" ] == MINOR_ABILITY_UPGRADE_OP_ADD then - flAddResult = flAddResult + Upgrade[ "value" ] - end - if Upgrade[ "operator" ] == MINOR_ABILITY_UPGRADE_OP_MUL then - flMulResult = flMulResult * ( 1.0 - ( Upgrade[ "value" ] / 100.0 ) ) - end - end - - flMulResult = 1.0 + ( 1.0 - flMulResult ) - - local flResult = ( flBaseValue + flAddResult ) * flMulResult - if SpecialValueUpgrades[ "cached_result" ] == nil then - SpecialValueUpgrades[ "cached_result" ] = {} - end - SpecialValueUpgrades[ "cached_result" ][ nSpecialLevel ] = flResult - self.bDirty = false - return flResult - - end - - return flBaseValue -end - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:EnsureCachedResult( CooldownUpgrades ) - if CooldownUpgrades[ "cached_result" ] == nil then - CooldownUpgrades[ "cached_result" ] = {} - end - if CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ] == nil then - CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ] = {} - end - if CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ] == nil then - CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ] = {} - end -end - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:GetModifierCooldownReduction_Constant( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local hUpgrades = self:GetParent().MinorAbilityUpgrades - if hUpgrades == nil then - hUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end - - local szAbilityName = params.ability:GetAbilityName() - local nSpecialLevel = params.ability_special_level - if hUpgrades == nil or hUpgrades[ szAbilityName ] == nil or nSpecialLevel == nil then - return 0 - end - - local flResult = 0 - local CooldownUpgrades = hUpgrades[ szAbilityName ][ "cooldown" ] - if CooldownUpgrades ~= nil then - if self.bDirty == false and CooldownUpgrades[ "cached_result" ] ~= nil and CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ] ~= nil and CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ][ nSpecialLevel ] ~= nil then - return CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ][ nSpecialLevel ] - end - - for _,Upgrade in pairs ( CooldownUpgrades ) do - if Upgrade[ "operator" ] == MINOR_ABILITY_UPGRADE_OP_ADD then - flResult = flResult + Upgrade[ "value" ] - end - end - - self:EnsureCachedResult( CooldownUpgrades ) - CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ][ nSpecialLevel ] = flResult - return flResult - end - return flResult -end - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:GetModifierPercentageCooldown( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local hUpgrades = self:GetParent().MinorAbilityUpgrades - if hUpgrades == nil then - hUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end - - local szAbilityName = params.ability:GetAbilityName() - local nSpecialLevel = params.ability_special_level - if hUpgrades == nil or hUpgrades[ szAbilityName ] == nil or nSpecialLevel == nil then - return 0 - end - - local flResult = 0.0 - local CooldownUpgrades = hUpgrades[ szAbilityName ][ "cooldown" ] - if CooldownUpgrades ~= nil then - if self.bDirty == false and CooldownUpgrades[ "cached_result" ] ~= nil and CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ] ~= nil and CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ][ nSpecialLevel ] ~= nil then - return CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ][ nSpecialLevel ] - end - - flResult = 1.0 - - for _,Upgrade in pairs ( CooldownUpgrades ) do - if Upgrade[ "operator" ] == MINOR_ABILITY_UPGRADE_OP_MUL then - flResult = flResult * ( 1.0 - ( Upgrade[ "value" ] / 100.0 ) ) - end - end - - flResult = ( 1.0 - flResult ) * 100 - - --print( "cooldown result:" .. flResult ) - - self:EnsureCachedResult( CooldownUpgrades ) - CooldownUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ][ nSpecialLevel ] = flResult - self.bDirty = false - end - return flResult -end - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:GetModifierManacostReduction_Constant( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local hUpgrades = self:GetParent().MinorAbilityUpgrades - if hUpgrades == nil then - hUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end - - local szAbilityName = params.ability:GetAbilityName() - local nSpecialLevel = params.ability_special_level - if hUpgrades == nil or hUpgrades[ szAbilityName ] == nil or nSpecialLevel == nil then - return 0 - end - - local flResult = 0 - local ManaCostUpgrades = hUpgrades[ szAbilityName ][ "mana_cost" ] - if ManaCostUpgrades ~= nil then - if self.bDirty == false and ManaCostUpgrades[ "cached_result" ] ~= nil and ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ] ~= nil and ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ][ nSpecialLevel ] ~= nil then - -- if IsServer() then - -- print( "S: cached result for:" .. "mana_cost" .. " at " .. nSpecialLevel ) - -- PrintTable( ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ], "SSS: " ) - -- else - -- print( "C: cached result for:" .. "mana_cost" .. " at " .. nSpecialLevel ) - -- PrintTable( ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ], "CCC: " ) - -- end - --print( "CACHED VALUE for " .. szAbilityName .. ":" .. ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ][ nSpecialLevel ] ) - return ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ][ nSpecialLevel ] - end - - for _,Upgrade in pairs ( ManaCostUpgrades ) do - if Upgrade[ "operator" ] == MINOR_ABILITY_UPGRADE_OP_ADD then - flResult = flResult + Upgrade[ "value" ] - end - end - - self:EnsureCachedResult( ManaCostUpgrades ) - ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_ADD ][ nSpecialLevel ] = flResult - - self.bDirty = false - end - --print( "First run of func: " .. flResult ) - return flResult -end - ------------------------------------------------------------------------ - -function modifier_minor_ability_upgrades:GetModifierPercentageManacostStacking( params ) - if self:GetParent() == nil or params.ability == nil then - return 0 - end - - local hUpgrades = self:GetParent().MinorAbilityUpgrades - if hUpgrades == nil then - hUpgrades = CustomNetTables:GetTableValue( "minor_ability_upgrades", tostring( self:GetParent():GetPlayerOwnerID() ) ) - end - - - local szAbilityName = params.ability:GetAbilityName() - local nSpecialLevel = params.ability_special_level - if hUpgrades == nil or hUpgrades[ szAbilityName ] == nil or nSpecialLevel == nil then - return 0 - end - - if nSpecialLevel == nil then - print( "** Missing special level for " .. szAbilityName ) - return 0 - end - - local flResult = 0 - local ManaCostUpgrades = hUpgrades[ szAbilityName ][ "mana_cost" ] - if ManaCostUpgrades ~= nil then - if self.bDirty == false and ManaCostUpgrades[ "cached_result" ] ~= nil and ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ] ~= nil and ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ][ nSpecialLevel ] ~= nil then - return ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ][ nSpecialLevel ] - end - - flResult = 1.0 - - for _,Upgrade in pairs ( ManaCostUpgrades ) do - if Upgrade[ "operator" ] == MINOR_ABILITY_UPGRADE_OP_MUL then - flResult = flResult * ( 1.0 - ( Upgrade[ "value" ] / 100.0 ) ) - end - end - - flResult = ( 1.0 - flResult ) * 100 - --print( "mana cost result:" .. flResult ) - self:EnsureCachedResult( ManaCostUpgrades ) - ManaCostUpgrades[ "cached_result" ][ MINOR_ABILITY_UPGRADE_OP_MUL ][ nSpecialLevel ] = flResult - self.bDirty = false - end - return flResult -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_monster_leash.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_monster_leash.lua deleted file mode 100755 index fc750f0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_monster_leash.lua +++ /dev/null @@ -1,79 +0,0 @@ -LinkLuaModifier( "modifier_detect_invisible", "modifiers/modifier_detect_invisible", LUA_MODIFIER_MOTION_NONE ) - -modifier_monster_leash = class({}) - --------------------------------------------------------------------------------- - -function modifier_monster_leash:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_monster_leash:IsPermanent() - return true -end - --------------------------------------------------------------------------------- - -function modifier_monster_leash:OnCreated( kv ) - if IsServer() then - self.flKillStartTime = -1 - self.bAddedGem = false - - self.bProvideVision = false - self.fProvideVisionTime = 240 - - self:StartIntervalThink( 0.01 ) - end -end - ------------------------------------------------------------------------ - -function modifier_monster_leash:OnIntervalThink() - - local hEncounter = self:GetParent().Encounter - if hEncounter == nil then - self:Destroy() - return - end - - -- Check to see if we want to add a gem as counter-invisibility - if self.bAddedGem == false and self:GetParent():IsConsideredHero() and - hEncounter:HasStarted() == true and ( ( GameRules:GetGameTime() - hEncounter:GetStartTime() ) > 150 ) then - self.bAddedGem = true - self:GetParent():AddNewModifier( self:GetParent(), nil, "modifier_detect_invisible", {} ) - end - - -- Provide vision if the room has gone on for too long - helps to protect against enemies getting lost or stuck - if self.bProvideVision == false and - hEncounter:HasStarted() == true and ( ( GameRules:GetGameTime() - hEncounter:GetStartTime() ) > self.fProvideVisionTime ) then - - self.bProvideVision = true - self:GetParent():AddNewModifier( thisEntity, nil, "modifier_provide_vision", { duration = -1 } ) - end - - local vOrigin = self:GetParent():GetAbsOrigin() - local vClampedPos = hEncounter:GetRoom():ClampPointToRoomBounds( vOrigin, 128.0 ) - if vOrigin ~= vClampedPos then - FindClearSpaceForUnit( self:GetParent(), vClampedPos, true ) - end - - if vOrigin.z > -1000 then - self.flKillStartTime = -1 - return - end - - if self.flKillStartTime < 0 then - self.flKillStartTime = GameRules:GetGameTime() - end - - --print ("killcountdown = ", self.killcountdown ) - -- only kill the unit if they are in a bad position for 3 seconds, - -- to make sure it's not a weird flying unit thing that is actually behaving legally. - if ( GameRules:GetGameTime() - self.flKillStartTime ) >= 3 then - SendToServerConsole( "say *** KILLING ROGUE UNIT " .. self:GetParent():GetUnitName() .. " at " .. tostring( vOrigin ) ) - self:GetParent():ForceKill( false ) - end - -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_morty_leash.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_morty_leash.lua deleted file mode 100755 index 7b8a194..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_morty_leash.lua +++ /dev/null @@ -1,58 +0,0 @@ - -modifier_morty_leash = class({}) - --------------------------------------------------------------------------------- - -function modifier_morty_leash:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_morty_leash:IsPermanent() - return true -end - --------------------------------------------------------------------------------- - -function modifier_morty_leash:RemoveOnDeath() - return false -end - --------------------------------------------------------------------------------- - -function modifier_morty_leash:OnCreated( kv ) - if IsServer() then - self.flMinX = kv.min_x - self.flMinY = kv.min_y - self.flMaxX = kv.max_x - self.flMaxY = kv.max_y - self:StartIntervalThink( 0.01 ) - end -end - ------------------------------------------------------------------------ - -function modifier_morty_leash:OnIntervalThink() - - local vCurrentPos = self:GetParent():GetAbsOrigin() - local vClamped = Vector( vCurrentPos.x, vCurrentPos.y, vCurrentPos.z ) - - if vClamped.x < self.flMinX then - vClamped.x = self.flMinX - elseif vClamped.x > self.flMaxX then - vClamped.x = self.flMaxX - end - - if vClamped.y < self.flMinY then - vClamped.y = self.flMinY - elseif vClamped.y > self.flMaxY then - vClamped.y = self.flMaxY - end - - if vCurrentPos ~= vClamped then - --print( "Flying Teleporting to " .. tostring( vClamped ) ) - FindClearSpaceForUnit( self:GetParent(), vClamped, true ) - end - -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_move_speed_unslowable.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_move_speed_unslowable.lua deleted file mode 100755 index 5f500ea..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_move_speed_unslowable.lua +++ /dev/null @@ -1,72 +0,0 @@ - -modifier_move_speed_unslowable = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_move_speed_unslowable:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_move_speed_unslowable:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_move_speed_unslowable:OnCreated( kv ) - - -- Allow units to directly use this modifier, in which case the kv has the amount of reduction - if self:GetAbility() == nil and IsServer() == true then - self.move_speed_reduction_pct = 0 - if kv.move_speed_reduction_pct ~= nil then - self.move_speed_reduction_pct = kv.move_speed_reduction_pct - if self.move_speed_reduction_pct ~= 0 then - self:SetHasCustomTransmitterData( true ) - end - end - end - - self:OnRefresh( kv ) -end - ----------------------------------------- - -function modifier_move_speed_unslowable:OnRefresh( kv ) - if self:GetAbility() ~= nil then - self.move_speed_reduction_pct = self:GetAbility():GetSpecialValueFor( "move_speed_reduction_pct" ) - end -end - --------------------------------------------------------------------------------- - -function modifier_move_speed_unslowable:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_REDUCTION_PERCENTAGE, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_move_speed_unslowable:GetModifierMoveSpeedReductionPercentage( params ) - return self.move_speed_reduction_pct -end - --------------------------------------------------------------------------------- - -function modifier_move_speed_unslowable:AddCustomTransmitterData( ) - return - { - armor = self.move_speed_reduction_pct - } -end - --------------------------------------------------------------------------------- - -function modifier_move_speed_unslowable:HandleCustomTransmitterData( data ) - self.move_speed_reduction_pct = data.armor -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_pango_bonus.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_pango_bonus.lua deleted file mode 100755 index 8efeb1a..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_pango_bonus.lua +++ /dev/null @@ -1,38 +0,0 @@ -modifier_pango_bonus = class({}) - --------------------------------------------------------------------------------- - -function modifier_pango_bonus:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_pango_bonus:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_pango_bonus:GetPriority() - return MODIFIER_PRIORITY_ULTRA + 10001 -end - --------------------------------------------------------------------------------- - -function modifier_pango_bonus:CheckState() - local state = {} - - if IsServer() then - local hModifier = self:GetParent():FindModifierByName( "modifier_pangolier_gyroshell" ) - state[MODIFIER_STATE_SILENCED] = ( hModifier ~= nil ) - state[MODIFIER_STATE_MUTED] = true - state[MODIFIER_STATE_IGNORING_STOP_ORDERS] = true - state[MODIFIER_STATE_IGNORING_MOVE_AND_ATTACK_ORDERS] = ( hModifier == nil ) - state[MODIFIER_STATE_MAGIC_IMMUNE] = false - end - - return state -end - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_passive_autocast.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_passive_autocast.lua deleted file mode 100755 index 1fc37ad..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_passive_autocast.lua +++ /dev/null @@ -1,269 +0,0 @@ - -require( "utility_functions" ) - -modifier_passive_autocast = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_passive_autocast:IsHidden() - return true -end - ------------------------------------------------------------------------------------------ - -function modifier_passive_autocast:IsPurgable() - return false -end - ------------------------------------------------------------------------------------------ - -function modifier_passive_autocast:OnCreated( kv ) - if IsServer() then - self.nCastBehavior = kv[ "cast_behavior" ] - self.nTargetType = kv[ "target_type" ] - self.flHealthPercent = kv[ "health_percent" ] - self.nRange = kv[ "range" ] - self.flNextCastTime = GameRules:GetGameTime() - - -- If waiting for CD, then don't cast immediately - if self.nCastBehavior == ASCENSION_CAST_WHEN_COOLDOWN_READY then - local flCooldownTime = self:GetAbility():GetCooldownTimeRemaining() - if flCooldownTime > 0 then - self.flNextCastTime = GameRules:GetGameTime() + flCooldownTime + RandomFloat( 0.1, 1.0 ); - else - self.flNextCastTime = GameRules:GetGameTime() + RandomFloat( 1.0, 3.0 ); - end - end - - --print( "modifier_passive_autocast created " .. self:GetParent():GetUnitName() .. " " .. self:GetAbility():GetAbilityName() .. " " .. self.nCastBehavior .. " " .. self.nTargetType ) - - if self.nCastBehavior == ASCENSION_CAST_WHEN_COOLDOWN_READY or - self.nCastBehavior == ASCENSION_CAST_ON_LOW_HEALTH or - self.nCastBehavior == ASCENSION_CAST_ON_NEARBY_ENEMY - then - self:StartIntervalThink( 0.1 ) - elseif self.nCastBehavior == ASCENSION_CAST_ON_DEATH then - if bitand( self:GetAbility():GetBehavior(), DOTA_ABILITY_BEHAVIOR_UNRESTRICTED ) == 0 then - print( "*** WARNING: OnDeath behaviors must have DOTA_ABILITY_BEHAVIOR_UNRESTRICTED set " .. self:GetAbility():GetAbilityName() ) - end - end - - if self.nTargetType == ASCENSION_TARGET_NO_TARGET then - if bitand( self:GetAbility():GetBehavior(), DOTA_ABILITY_BEHAVIOR_UNIT_TARGET ) ~= 0 then - self.nTargetType = ASCENSION_TARGET_RANDOM_PLAYER - print( "*** WARNING: DOTA_ABILITY_BEHAVIOR_UNIT_TARGET didn't specify a target type " .. self:GetAbility():GetAbilityName() ) - end - end - - end -end - --------------------------------------------------------------------------------- - -function modifier_passive_autocast:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_DEATH, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - ------------------------------------------------------------------------------------------ - -function modifier_passive_autocast:GetAttributes() - -- Needed because we may have many ascension abilities on the same unit - -- and we need one passive_autocast modifier per ability - return MODIFIER_ATTRIBUTE_MULTIPLE -end - - -------------------------------------------------------------------------------- - -function modifier_passive_autocast:OnTakeDamage( params ) - if IsServer() == false then - return 0 - end - - if params.unit ~= self:GetParent() then - return 0 - end - - if self.nCastBehavior ~= ASCENSION_CAST_ON_TAKE_MAGIC_DAMAGE then - return 0 - end - - if params.damage_type ~= DAMAGE_TYPE_MAGICAL then - return 0 - end - - self:CastModifierAbility( params.attacker ) - return 0 -end - ------------------------------------------------------------------------------------------ - -function modifier_passive_autocast:OnIntervalThink() - - if not IsServer() then - return - end - - local hCaster = self:GetCaster() - if hCaster == nil then - return - end - - if self.flNextCastTime < 0 or self.flNextCastTime > GameRules:GetGameTime() then - return - end - - if self.nCastBehavior == ASCENSION_CAST_ON_LOW_HEALTH then - if hCaster:GetHealthPercent() > self.flHealthPercent then - return - end - end - - -- For CAST ON NEARBY ENEMY, check for enemies within range - if self.nCastBehavior == ASCENSION_CAST_ON_NEARBY_ENEMY then - local vecEnemies = FindUnitsInRadius( hCaster:GetTeamNumber(), hCaster:GetAbsOrigin(), - nil, self.nRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, - DOTA_UNIT_TARGET_FLAG_INVULNERABLE, 0, false ) - if #vecEnemies == 0 then - return - end - end - - -- Specifically for firefily + wave blaster, wait until leap - if self:GetAbility():GetAbilityName() == "aghsfort_ascension_firefly" then - if hCaster:GetUnitName() == "npc_dota_creature_wave_blaster" then - if hCaster:FindModifierByName( "modifier_aghsfort_waveblaster_leap" ) == nil then - return - end - end - end - - self:CastModifierAbility( nil ) - -end - ------------------------------------------------------------------------------------------ - -function modifier_passive_autocast:SelectClumpedPlayer() - - local vecPlayers = GetAliveHeroesInRoom( ) - local hBestTarget = nil - local flClumpAmount = 1000000000 - - for i=1,#vecPlayers do - local hTarget = vecPlayers[i] - local flDist = 0 - for j=1,#vecPlayers do - if i~=j then - local flCurDist = ( hTarget:GetAbsOrigin() - vecPlayers[j]:GetAbsOrigin() ):Length2D() - if self.nRange ~= nil and flCurDist > self.nRange then - flCurDist = self.nRange - end - flDist = flDist + flCurDist - end - end - if flDist < flClumpAmount then - hBestTarget = hTarget - flClumpAmount = flDist - end - end - return hBestTarget - -end - ------------------------------------------------------------------------------------------ - -function modifier_passive_autocast:CastModifierAbility( hAttackerUnit ) - - if self.flNextCastTime < 0 or self.flNextCastTime > GameRules:GetGameTime() then - return - end - - if self:GetAbility() == nil or self:GetAbility():IsFullyCastable() == false then - return - end - - local hCaster = self:GetCaster() - if hCaster == nil then - return - end - - -- NOTE: This is a little tricky. We're trying to completely avoid using - -- orders / behaviors for the passive so it doesn't interrupt normal AI behavior - -- However, for dummy casters, it's no problem since we know those are the - -- global encounter entity used for environmental effects so there's nothing to interrupt - - local bIsDummyCaster = hCaster:GetUnitName() == "npc_dota_dummy_caster" - local nBehavior = self:GetAbility():GetBehavior() - - --print( "modifier_passive_autocast cooldown-based cast " .. self:GetParent():entindex() .. " " .. self:GetParent():GetUnitName() .. " " .. self:GetAbility():GetAbilityName() ) - - if bitand( nBehavior, DOTA_ABILITY_BEHAVIOR_CHANNELLED ) ~= 0 then - - if not bIsDummyCaster then - print( "*** WARNING: Channeled behaviors cannot be autocast from normal units " .. self:GetAbility():GetAbilityName() ) - return - end - - ExecuteOrderFromTable({ - UnitIndex = hCaster:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = self:GetAbility():entindex(), - Queue = false, - }) - - else - - local hTarget = nil - if self.nTargetType == ASCENSION_TARGET_RANDOM_PLAYER then - local vecPlayers = GetAliveHeroes( ) - local nPlayerCount = #vecPlayers - if nPlayerCount > 0 then - local nPlayer = math.random( 1, nPlayerCount ) - hTarget = vecPlayers[nPlayer] - end - elseif self.nTargetType == ASCENSION_TARGET_CLUMPED_PLAYER then - hTarget = self:SelectClumpedPlayer() - elseif self.nTargetType == ASCENSION_TARGET_ATTACKER then - hTarget = hAttackerUnit - end - - if hTarget == nil and self.nTargetType ~= ASCENSION_TARGET_NO_TARGET then - return - end - - hCaster:SetCursorCastTarget( hTarget ) - self:GetAbility():CastAbility() - - end - - if self.nCastBehavior ~= ASCENSION_CAST_ON_LOW_HEALTH then - local flCooldown = self:GetAbility():GetEffectiveCooldown( -1 ) - self.flNextCastTime = GameRules:GetGameTime() + flCooldown + RandomFloat( 0.01, 1.0 ) - else - -- Cast on low health only gets to cast once - self.flNextCastTime = -1 - end - -end - --------------------------------------------------------------------------------- - -function modifier_passive_autocast:OnDeath( params ) - if IsServer() then - if self.nCastBehavior == ASCENSION_CAST_ON_DEATH then - local hUnit = params.unit - if hUnit:entindex() == self:GetParent():entindex() then - --print( "modifier_passive_autocast death-based cast " .. self:GetParent():GetUnitName() .. " " .. self:GetAbility():GetAbilityName() ) - self:GetAbility():EndCooldown() - self.flNextCastTime = GameRules:GetGameTime() - self:CastModifierAbility( params.attacker ) - end - end - end -end - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_player_light.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_player_light.lua deleted file mode 100755 index 2c854c1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_player_light.lua +++ /dev/null @@ -1,26 +0,0 @@ - -modifier_player_light = class({}) - --------------------------------------------------------------------------------- - ---[[ -function modifier_player_light:GetEffectName() - return "particles/addons_gameplay/player_deferred_light.vpcf" -end -]] - --------------------------------------------------------------------------------- - -function modifier_player_light:OnCreated( kv ) - if IsServer() then - local hPlayerHero = self:GetParent() - if hPlayerHero ~= nil then - local nLightParticleID = ParticleManager:CreateParticle( "particles/addons_gameplay/player_deferred_light.vpcf", PATTACH_ABSORIGIN_FOLLOW, hPlayerHero ) - ParticleManager:SetParticleControlEnt( nLightParticleID, PATTACH_ABSORIGIN_FOLLOW, hPlayerHero, PATTACH_ABSORIGIN_FOLLOW, "attach_hitloc", hPlayerHero:GetAbsOrigin(), true ) - hPlayerHero.nLightParticleID = nLightParticleID - end - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_provides_fow_position.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_provides_fow_position.lua deleted file mode 100755 index 0284c6c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_provides_fow_position.lua +++ /dev/null @@ -1,33 +0,0 @@ - -modifier_provides_fow_position = class({}) - --------------------------------------------------------------------------------- - -function modifier_provides_fow_position:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_provides_fow_position:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_provides_fow_position:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_PROVIDES_FOW_POSITION, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_provides_fow_position:GetModifierProvidesFOWVision( params ) - return 1 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_respawn_haste.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_respawn_haste.lua deleted file mode 100755 index 2237510..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_respawn_haste.lua +++ /dev/null @@ -1,48 +0,0 @@ - -modifier_respawn_haste = class({}) - ------------------------------------------------------------------------------------------ - -function modifier_respawn_haste:IsPurgable() - return false -end - ----------------------------------------- - -function modifier_respawn_haste:OnCreated( kv ) - self:OnRefresh( kv ) - - self.min_move_speed = kv.min_move_speed - self.bonus_attack_speed = kv.bonus_attack_speed - - EmitSoundOn( "DOTA_Item.MaskOfMadness.Activate", self:GetParent() ) -end - --------------------------------------------------------------------------------- - -function modifier_respawn_haste:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE_MIN, - MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, - } - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_respawn_haste:GetEffectName() - return "particles/items2_fx/mask_of_madness.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_respawn_haste:GetModifierMoveSpeed_AbsoluteMin( params ) - return self.min_move_speed -end - --------------------------------------------------------------------------------- - -function modifier_respawn_haste:GetModifierAttackSpeedBonus_Constant( params ) - return self.bonus_attack_speed -end diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ride_morty.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ride_morty.lua deleted file mode 100755 index e805bb4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_ride_morty.lua +++ /dev/null @@ -1,117 +0,0 @@ - -modifier_ride_morty = class({}) - ----------------------------------------------------------------------------------- - -function modifier_ride_morty:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_ride_morty:IsPurgable() - return false -end - ------------------------------------------------------------------------ - -function modifier_ride_morty:GetOverrideAnimation( params ) - return ACT_DOTA_FLAIL -end - ----------------------------------------------------------------------------------- - -function modifier_ride_morty:OnCreated( kv ) - if IsServer() then - if self:ApplyHorizontalMotionController() == false or self:ApplyVerticalMotionController() == false then - self:Destroy() - return - end - end -end - - --------------------------------------------------------------------------------- - -function modifier_ride_morty:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_ride_morty:CheckState() - local state = - { - [ MODIFIER_STATE_INVULNERABLE ] = true, - [ MODIFIER_STATE_NO_HEALTH_BAR ] = true, - [ MODIFIER_STATE_SILENCED ] = true, - [ MODIFIER_STATE_UNSELECTABLE ] = true, - [ MODIFIER_STATE_COMMAND_RESTRICTED ] = true, - } - - return state -end - --------------------------------------------------------------------------------- - -function modifier_ride_morty:UpdateHorizontalMotion( me, dt ) - if IsServer() then - if self:GetCaster() then - me:SetAbsOrigin( self:GetCaster():GetAbsOrigin() ) - - local MortyAngles = self:GetCaster():GetAngles() - me:SetAbsAngles( MortyAngles.x, MortyAngles.y, MortyAngles.z ) - end - end -end - - --------------------------------------------------------------------------------- - -function modifier_ride_morty:UpdateVerticalMotion( me, dt ) - if IsServer() then - if self:GetCaster() then - - local vPos = self:GetCaster():GetAbsOrigin() - vPos.z = vPos.z + 50 - me:SetAbsOrigin( vPos ) - end - end -end - - --------------------------------------------------------------------------------- - -function modifier_ride_morty:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - self:GetParent():RemoveVerticalMotionController( self ) - end -end - - --------------------------------------------------------------------------------- - -function modifier_ride_morty:OnHorizontalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - - --------------------------------------------------------------------------------- - -function modifier_ride_morty:OnVerticalMotionInterrupted() - if IsServer() then - self:Destroy() - end -end - - - - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_room_monster_sleep.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_room_monster_sleep.lua deleted file mode 100755 index 78d019c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_room_monster_sleep.lua +++ /dev/null @@ -1,103 +0,0 @@ - -modifier_room_monster_sleep = class({}) - --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:OnCreated( kv ) - if IsServer() then - self.iWakeRange = 500 - self:StartIntervalThink( 1 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_BLIND] = true - state[MODIFIER_STATE_STUNNED] = true - state[MODIFIER_STATE_SILENCED] = true - end - - return state -end - --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_ATTACKED, - MODIFIER_EVENT_ON_TAKEDAMAGE, - } - return funcs -end - ------------------------------------------------------------------------ -function modifier_room_monster_sleep:GetEffectName() - return "particles/generic_gameplay/generic_sleep.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:GetEffectAttachType() - return PATTACH_OVERHEAD_FOLLOW -end --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:OnAttacked( params ) - if IsServer() then - if params.target == self:GetParent() then - self:Destroy() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:OnTakeDamage( params ) - if IsServer() then - if params.unit == self:GetParent() then - self:Destroy() - end - end - - return 0 -end ------------------------------------------------------------------------------ - -function modifier_room_monster_sleep:OnIntervalThink() - if IsServer() then - local hEnemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, self.iWakeRange, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE, FIND_CLOSEST, false ) - if #hEnemies > 0 then - self:Destroy() - end - - end -end - - --------------------------------------------------------------------------------- - -function modifier_room_monster_sleep:OnDestroy() - if not IsServer() then - return - end - - local hAllies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_CLOSEST, false ) - for _, hAlly in pairs( hAllies ) do - if hAlly:HasModifier( "modifier_room_monster_sleep" ) then - hAlly:RemoveModifierByName( "modifier_room_monster_sleep" ) - end - end -end - --------------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_crash.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_crash.lua deleted file mode 100755 index ad74381..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_crash.lua +++ /dev/null @@ -1,57 +0,0 @@ - -modifier_sled_penguin_crash = class({}) - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_crash:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_crash:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_crash:OnCreated( kv ) - if IsServer() then - self.reset_pos_offset = self:GetAbility():GetSpecialValueFor( "reset_pos_offset" ) - - local vForward = self:GetCaster():GetForwardVector() - self.vResetPos = self:GetCaster():GetAbsOrigin() - ( vForward * self.reset_pos_offset ) - - self:GetCaster():RemoveGesture( ACT_DOTA_IDLE ) - self:GetCaster():RemoveGesture( ACT_DOTA_SLIDE_LOOP ) - self:GetCaster():StartGesture( ACT_DOTA_DIE ) - - EmitSoundOn( "SledPenguin.Crash.Impact", self:GetParent() ) - EmitSoundOn( "SledPenguin.Crash.Ow", self:GetParent() ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_crash:OnDestroy() - if IsServer() then - self:GetCaster():SetForwardVector( self:GetCaster():GetForwardVector() * -1 ) - - self:GetCaster():SetAbsOrigin( self.vResetPos ) - - --self:GetCaster():StartGesture( ACT_DOTA_IDLE ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_crash:CheckState() - local state = - { - [ MODIFIER_STATE_STUNNED ] = true, - } - - return state -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_impairment.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_impairment.lua deleted file mode 100755 index 5962448..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_impairment.lua +++ /dev/null @@ -1,34 +0,0 @@ - -modifier_sled_penguin_impairment = class({}) - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_impairment:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_impairment:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_impairment:GetEffectName() - return "particles/units/heroes/hero_brewmaster/brewmaster_drunken_haze_debuff.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_impairment:GetStatusEffectName() - return "particles/status_fx/status_effect_brewmaster_drunken_haze.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_impairment:StatusEffectPriority() - return 50 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_movement.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_movement.lua deleted file mode 100755 index d2c6e9b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_movement.lua +++ /dev/null @@ -1,301 +0,0 @@ - -modifier_sled_penguin_movement = class({}) - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:IsPurgable() - return false -end - --------------------------------------------------------------------------------- - - -function modifier_sled_penguin_movement:GetModifierDisableTurning( params ) - return 1 -end - ------------------------------------------------------------------------ - -function modifier_sled_penguin_movement:GetOverrideAnimation( params ) - if self:GetParent() ~= self:GetCaster() then - return ACT_DOTA_FLAIL - end - - return ACT_DOTA_SLIDE_LOOP -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:OnCreated( kv ) - if IsServer() then - self.max_sled_speed = self:GetAbility():GetSpecialValueFor( "max_sled_speed" ) - self.speed_step = self:GetAbility():GetSpecialValueFor( "speed_step" ) - self.tree_destroy_radius = self:GetAbility():GetSpecialValueFor( "tree_destroy_radius" ) - self.collision_radius = self:GetAbility():GetSpecialValueFor( "collision_radius" ) - self.reset_pos_offset = self:GetAbility():GetSpecialValueFor( "reset_pos_offset" ) - - self.nCurSpeed = 20 - self.flDesiredYaw = self:GetCaster():GetAnglesAsVector().y - - self.bPlayedVroomSinceLastCrash = false - - if kv.just_crashed ~= nil then - self.speed_step = self.speed_step / 2.0 - self.nCurSpeed = 0 - - local impaired_duration = self:GetAbility():GetSpecialValueFor( "impaired_duration" ) - self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sled_penguin_impairment", { duration = impaired_duration } ) - - self:GetParent():StartGesture( ACT_DOTA_DIE ) - - if self:IsParentPenguin() then - FindClearSpaceForUnit( self:GetParent(), self:GetParent():GetAbsOrigin(), true ) - end - end - - if self:ApplyHorizontalMotionController() == false then - self:Destroy() - return - end - - self.fThinkInterval = 0.02 - - self:StartIntervalThink( self.fThinkInterval ) - end -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:OnIntervalThink() - if IsServer() then - if self:GetParent():HasModifier( "modifier_sled_penguin_movement" ) and self:GetParent():HasModifier( "modifier_sled_penguin_crash" ) == false then - if self:GetParent():GetUnitName() == "npc_dota_sled_penguin" then - -- Search for any ogre seals to determine if I've crashed into them - local nTargetFlags = DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD + DOTA_UNIT_TARGET_FLAG_INVULNERABLE + DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES - local hEnemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.collision_radius, DOTA_UNIT_TARGET_TEAM_ENEMY, self:GetAbility():GetAbilityTargetType(), nTargetFlags, 0, false ) - for _, hOgreSeal in pairs( hEnemies ) do - if hOgreSeal ~= nil and hOgreSeal:IsNull() == false and ( hOgreSeal:GetUnitName() == "npc_dota_creature_wandering_ogre_seal" ) then - -- Knock ogre seal back - local vLocation = self:GetParent():GetAbsOrigin() + ( self:GetParent():GetForwardVector() * 50 ) - local kv = - { - center_x = vLocation.x, - center_y = vLocation.y, - center_z = vLocation.z, - should_stun = false, - duration = 0.4, - knockback_duration = 0.2, - knockback_distance = 150, - knockback_height = 50, - } - - EmitSoundOn( "OgreTank.Grunt", hOgreSeal ) - - hOgreSeal:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_knockback", kv ) - - self:CrashAndRecover() - return self.fThinkInterval - end - end - end - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:OnDestroy() - if IsServer() then - self:GetParent():RemoveHorizontalMotionController( self ) - if self:IsParentPenguin() then - self:GetCaster():RemoveGesture( ACT_DOTA_SLIDE_LOOP ) - - --StopSoundOn( "SledPenguin.RidingLoop", self:GetParent() ) - - EmitSoundOn( "Hero_Tusk.IceShards.Penguin", self:GetParent() ) - else - -- Apply knockback to player hero - local vLocation = self:GetParent():GetAbsOrigin() + ( self:GetParent():GetForwardVector() * 50 ) - local kv = - { - center_x = vLocation.x, - center_y = vLocation.y, - center_z = vLocation.z, - should_stun = true, - duration = 0.4, - knockback_duration = 0.3, - knockback_distance = 250, - knockback_height = 75, - } - - self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_knockback", kv ) - end - end -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:DeclareFunctions() - local funcs = - { - MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - MODIFIER_EVENT_ON_ORDER, - MODIFIER_PROPERTY_DISABLE_TURNING, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:CheckState() - local state = - { - [ MODIFIER_STATE_STUNNED ] = self:IsParentPenguin(), - [ MODIFIER_STATE_INVULNERABLE ] = self:IsParentPenguin(), - [ MODIFIER_STATE_NO_HEALTH_BAR ] = self:IsParentPenguin(), - - [ MODIFIER_STATE_MUTED ] = self:IsParentPenguin() == false, - [ MODIFIER_STATE_SILENCED ] = self:IsParentPenguin() == false, - } - - return state -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:UpdateHorizontalMotion( me, dt ) - if IsServer() then - - if not self:GetCaster() then - return - end - - if self:IsParentPenguin() then - if self.bStartedLoop == nil and self:GetElapsedTime() > 0.3 then - self.bStartedLoop = true - self:GetCaster():StartGesture( ACT_DOTA_SLIDE_LOOP ) - end - - if self:GetParent().Encounter == nil or self:GetParent().Encounter.bGameStarted == false then - return - end - - local flTurnAmount = 0.0 - local curAngles = self:GetCaster():GetAngles() - - local flAngleDiff = UTIL_AngleDiff( self.flDesiredYaw, curAngles.y ) - - local flTurnRate = 100 - flTurnAmount = flTurnRate * dt - flTurnAmount = math.min( flTurnAmount, math.abs( flAngleDiff ) ) - - if flAngleDiff < 0.0 then - flTurnAmount = flTurnAmount * -1 - end - - if flAngleDiff ~= 0.0 then - curAngles.y = curAngles.y + flTurnAmount - me:SetAbsAngles( curAngles.x, curAngles.y, curAngles.z ) - end - - local vNewPos = self:GetCaster():GetOrigin() + self:GetCaster():GetForwardVector() * ( dt * self.nCurSpeed ) - if GridNav:CanFindPath( me:GetOrigin(), vNewPos ) == false then - self:CrashAndRecover() - return - end - - me:SetOrigin( vNewPos ) - self.nCurSpeed = math.min( self.nCurSpeed + self.speed_step, self.max_sled_speed ) - - if ( self.nCurSpeed >= self.max_sled_speed ) and ( self.bPlayedVroomSinceLastCrash == false ) then - EmitSoundOn( "Frosthaven.Vroom", self:GetParent() ) - self.bPlayedVroomSinceLastCrash = true - - self.nHasteFXIndex = ParticleManager:CreateParticle( "particles/generic_gameplay/rune_haste.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() ) - end - else - if self:GetCaster():IsAlive() == false or self:GetCaster():FindModifierByName( "modifier_sled_penguin_movement" ) == nil then - self:Destroy() - return - end - me:SetOrigin( self:GetCaster():GetOrigin() ) - local casterAngles = self:GetCaster():GetAngles() - me:SetAbsAngles( casterAngles.x, casterAngles.y, casterAngles.z ) - end - - end -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:CrashAndRecover() - GridNav:DestroyTreesAroundPoint( self:GetParent():GetOrigin(), self.tree_destroy_radius, false ) - - -- Start a screenshake with the following parameters: vecCenter, flAmplitude, flFrequency, flDuration, flRadius, eCommand( SHAKE_START = 0, SHAKE_STOP = 1 ), bAirShake - ScreenShake( self:GetParent():GetOrigin(), 10.0, 100.0, 0.5, 1300.0, 0, true ) - - EmitSoundOn( "SledPenguin.Crash.Impact", self:GetParent() ) - EmitSoundOn( "SledPenguin.Crash.Ow", self:GetParent() ) - - if self.nHasteFXIndex then - ParticleManager:DestroyParticle( self.nHasteFXIndex, false ) - end - - local vForward = self:GetParent():GetForwardVector() - self.vResetPos = self:GetParent():GetAbsOrigin() - ( vForward * self.reset_pos_offset ) - - self:GetParent():SetForwardVector( self:GetParent():GetForwardVector() * -1 ) - self:GetParent():SetAbsOrigin( self.vResetPos ) - - self.bPlayedVroomSinceLastCrash = false - - self:Destroy() - - local kv = {} - kv.just_crashed = true - - self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sled_penguin_movement", kv ) -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:OnOrder( params ) - if IsServer() then - if not self:GetCaster() then - return 0 - end - - local hOrderedUnit = params.unit - local hTargetUnit = params.target - local nOrderType = params.order_type - if nOrderType == DOTA_UNIT_ORDER_MOVE_TO_POSITION or nOrderType == DOTA_UNIT_ORDER_ATTACK_MOVE then - if hOrderedUnit == self:GetParent() and self:IsParentPenguin() == false then - local vDir = params.new_pos - self:GetCaster():GetOrigin() - vDir.z = 0 - vDir = vDir:Normalized() - local angles = VectorAngles( vDir ) - local hBuff = self:GetCaster():FindModifierByName( "modifier_sled_penguin_movement" ) - if hBuff ~= nil then - hBuff.flDesiredYaw = angles.y - end - end - end - end - - return 0 -end - --------------------------------------------------------------------------------- - -function modifier_sled_penguin_movement:IsParentPenguin() - return ( self:GetCaster() == self:GetParent() ) -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_passive.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_passive.lua deleted file mode 100755 index 7d6c303..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_passive.lua +++ /dev/null @@ -1,117 +0,0 @@ - -modifier_sled_penguin_passive = class({}) - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_passive:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_passive:IsPurgable() - return false -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_passive:OnCreated( kv ) - if IsServer() then - self.hPlayerEnt = nil - self.bRideComplete = false - self.bRideStarted = false - end -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_passive:DeclareFunctions() - local funcs = - { - MODIFIER_EVENT_ON_ORDER, - } - - return funcs -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_passive:CheckState() - local state = - { - [MODIFIER_STATE_NO_HEALTH_BAR] = true, - } - return state -end - - ------------------------------------------------------------------------ - -function modifier_sled_penguin_passive:OnOrder( params ) - if IsServer() then - local hOrderedUnit = params.unit - local hTargetUnit = params.target - local nOrderType = params.order_type - if nOrderType ~= DOTA_UNIT_ORDER_MOVE_TO_TARGET then - return - end - - if hTargetUnit == nil or hTargetUnit ~= self:GetParent() then - return - end - - if hOrderedUnit ~= nil and hOrderedUnit:IsRealHero() and hOrderedUnit:GetTeamNumber() == DOTA_TEAM_GOODGUYS and hTargetUnit:GetOwnerEntity() == hOrderedUnit then - self.hPlayerEnt = hOrderedUnit - self:StartIntervalThink( 0.25 ) - return - end - - self:StartIntervalThink( -1 ) - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_sled_penguin_passive:OnDestroy() - if IsServer() then - if self.hPlayerEnt ~= nil and self.hPlayerEnt:IsNull() == false then - self.hPlayerEnt:RemoveModifierByName( "modifier_sled_penguin_movement" ) - end - - UTIL_Remove( self:GetParent() ) - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_sled_penguin_passive:OnIntervalThink() - if IsServer() then - if self.hPlayerEnt ~= nil then - local flTalkDistance = 250.0 - if flTalkDistance >= ( self.hPlayerEnt:GetOrigin() - self:GetParent():GetOrigin() ):Length2D() then - if GameRules.Aghanim ~= nil and self.bRideStarted == false then - self.hPlayerEnt:Interrupt() - - self:StartIntervalThink( -1 ) - self.bRideStarted = true - - EmitSoundOn( "SledPenguin.PlayerHopOn", self:GetParent() ) - - self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sled_penguin_movement", {} ) - self.hPlayerEnt:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sled_penguin_movement", {} ) - - if self:GetParent().Encounter ~= nil then - self:GetParent().Encounter:OnPlayerRidePenguin( self.hPlayerEnt:GetPlayerOwnerID(), self:GetParent() ) - end - - end - end - end - end -end - ---------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_timed_removal.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_timed_removal.lua deleted file mode 100755 index e1552d0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_timed_removal.lua +++ /dev/null @@ -1,24 +0,0 @@ - -modifier_sled_penguin_timed_removal = class({}) - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_timed_removal:IsHidden() - return true -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_timed_removal:IsPurgable() - return false -end - ----------------------------------------------------------------------------------- - -function modifier_sled_penguin_timed_removal:OnDestroy() - if IsServer() then - self:GetParent():ForceKill( false ) - end -end - ------------------------------------------------------------------------ diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_spike_trap_lua.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_spike_trap_lua.lua deleted file mode 100755 index b523df4..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_spike_trap_lua.lua +++ /dev/null @@ -1,54 +0,0 @@ -modifier_spike_trap_lua = class({}) - --------------------------------------------------------------------------------- - -function modifier_spike_trap_lua:IsDebuff() - return true -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_lua:IsStunDebuff() - return true -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_lua:GetEffectName() - return "particles/generic_gameplay/generic_stunned.vpcf" -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_lua:GetEffectAttachType() - return PATTACH_OVERHEAD_FOLLOW -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_lua:DeclareFunctions() - local funcs = { - MODIFIER_PROPERTY_OVERRIDE_ANIMATION, - } - - return funcs -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_lua:GetOverrideAnimation( params ) - return ACT_DOTA_DISABLED -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_lua:CheckState() - local state = { - [MODIFIER_STATE_STUNNED] = true, - } - - return state -end - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_spike_trap_thinker_lua.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_spike_trap_thinker_lua.lua deleted file mode 100755 index a2e115d..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_spike_trap_thinker_lua.lua +++ /dev/null @@ -1,64 +0,0 @@ -modifier_spike_trap_thinker_lua = class({}) - --------------------------------------------------------------------------------- - -function modifier_spike_trap_thinker_lua:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_thinker_lua:OnCreated( kv ) - self.light_strike_array_aoe = self:GetAbility():GetSpecialValueFor( "light_strike_array_aoe" ) - self.light_strike_array_damage = self:GetAbility():GetSpecialValueFor( "light_strike_array_damage" ) - self.light_strike_array_stun_duration = self:GetAbility():GetSpecialValueFor( "light_strike_array_stun_duration" ) - self.light_strike_array_delay_time = self:GetAbility():GetSpecialValueFor( "light_strike_array_delay_time" ) - if IsServer() then - self:StartIntervalThink( self.light_strike_array_delay_time ) - - EmitSoundOnLocationForAllies( self:GetParent():GetOrigin(), "Ability.PreLightStrikeArray", self:GetCaster() ) - - --local nFXIndex = ParticleManager:CreateParticleForTeam( "particles/units/heroes/hero_lina/lina_spell_light_strike_array_ray_team.vpcf", PATTACH_WORLDORIGIN, self:GetCaster(), self:GetCaster():GetTeamNumber() ) - --ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - --ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.light_strike_array_aoe, 1, 1 ) ) - --ParticleManager:ReleaseParticleIndex( nFXIndex ) - end -end - --------------------------------------------------------------------------------- - -function modifier_spike_trap_thinker_lua:OnIntervalThink() - if IsServer() then - GridNav:DestroyTreesAroundPoint( self:GetParent():GetOrigin(), self.light_strike_array_aoe, false ) - local enemies = FindUnitsInRadius( self:GetParent():GetTeamNumber(), self:GetParent():GetOrigin(), self:GetParent(), self.light_strike_array_aoe, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, 0, 0, false ) - if #enemies > 0 then - for _,enemy in pairs(enemies) do - if enemy ~= nil and ( not enemy:IsMagicImmune() ) and ( not enemy:IsInvulnerable() ) then - - local damage = { - victim = enemy, - attacker = self:GetCaster(), - damage = self.light_strike_array_damage, - damage_type = DAMAGE_TYPE_PHYSICAL, - ability = self:GetAbility() - } - - ApplyDamage( damage ) - enemy:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_spike_trap_lua", { duration = self.light_strike_array_stun_duration } ) - end - end - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_axe/axe_culling_blade.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( nFXIndex, 0, self:GetParent():GetOrigin() ) - ParticleManager:SetParticleControl( nFXIndex, 1, Vector( self.light_strike_array_aoe, 1, 1 ) ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - EmitSoundOnLocationWithCaster( self:GetParent():GetOrigin(), "Creature.SpikedCarapace.Stun", self:GetCaster() ) - - UTIL_Remove( self:GetParent() ) - end -end - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_treasure_chest.lua b/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_treasure_chest.lua deleted file mode 100755 index b863e90..0000000 --- a/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_treasure_chest.lua +++ /dev/null @@ -1,127 +0,0 @@ - -modifier_treasure_chest = class({}) - --------------------------------------------------------------------------------- - -function modifier_treasure_chest:IsHidden() - return true -end - --------------------------------------------------------------------------------- - -function modifier_treasure_chest:OnCreated( kv ) - if IsServer() then - self:StartIntervalThink( 0.5 ) - end -end - --------------------------------------------------------------------------------- - -function modifier_treasure_chest:DeclareFunctions() - local funcs = { - MODIFIER_EVENT_ON_ORDER, - MODIFIER_EVENT_ON_TAKEDAMAGE, - MODIFIER_PROPERTY_FIXED_DAY_VISION, - MODIFIER_PROPERTY_FIXED_NIGHT_VISION, - } - return funcs -end - ------------------------------------------------------------------------ - -function modifier_treasure_chest:OnOrder( params ) - if IsServer() then - local hOrderedUnit = params.unit - local hTargetUnit = params.target - local nOrderType = params.order_type - if nOrderType ~= DOTA_UNIT_ORDER_MOVE_TO_TARGET then - return - end - - if hTargetUnit == nil or hTargetUnit ~= self:GetParent() then - return - end - - if hOrderedUnit ~= nil and hOrderedUnit:IsRealHero() and hOrderedUnit:GetTeamNumber() == DOTA_TEAM_GOODGUYS then - self.hPlayerEnt = hOrderedUnit - self:StartIntervalThink( 0.25 ) - return - end - - self:StartIntervalThink( -1 ) - end - - return 0 -end - ------------------------------------------------------------------------ - -function modifier_treasure_chest:OnTakeDamage( params ) - return 0 -end - ------------------------------------------------------------------------ - -function modifier_treasure_chest:OnIntervalThink() - if IsServer() then - if not self.bWasOpened then - if self.hPlayerEnt ~= nil then - local flOpenDistance = 150.0 - if flOpenDistance >= ( self.hPlayerEnt:GetOrigin() - self:GetParent():GetOrigin() ):Length2D() then - if GameRules.Aghanim ~= nil then - self.hPlayerEnt:Interrupt() - self:GetParent():StartGesture( ACT_DOTA_PRESENT_ITEM ) - GameRules.Aghanim:OnTreasureOpen( self.hPlayerEnt, self:GetParent() ) - self.bWasOpened = true - self.hPlayerEnt = nil - - self.fTimeChestOpened = GameRules:GetGameTime() - self:StartIntervalThink( 4 ) - - return -1 - end - end - end - else - self:GetParent():Destroy() - end - end -end - --------------------------------------------------------------------------------- - -function modifier_treasure_chest:GetFixedDayVision( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_treasure_chest:GetFixedNightVision( params ) - return 1 -end - --------------------------------------------------------------------------------- - -function modifier_treasure_chest:CheckState() - local state = {} - if IsServer() then - state[MODIFIER_STATE_ATTACK_IMMUNE] = true - state[MODIFIER_STATE_ROOTED] = true - state[MODIFIER_STATE_NO_HEALTH_BAR] = true - state[MODIFIER_STATE_BLIND] = true - state[MODIFIER_STATE_NOT_ON_MINIMAP] = true - state[MODIFIER_STATE_INVULNERABLE] = true - - if self.bWasOpened then - state[MODIFIER_STATE_UNSELECTABLE] = true - - if self.fTimeChestOpened and ( GameRules:GetGameTime() > self.fTimeChestOpened + 2.5 ) then - state[MODIFIER_STATE_NO_UNIT_COLLISION] = true - end - end - end - - return state -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/portalspawner.lua b/aghanim_singleplayer/scripts/vscripts/portalspawner.lua deleted file mode 100755 index dedc294..0000000 --- a/aghanim_singleplayer/scripts/vscripts/portalspawner.lua +++ /dev/null @@ -1,383 +0,0 @@ -if CPortalSpawner == nil then - CPortalSpawner = class({}) -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:constructor( szSpawnerNameInput, szLocatorNameInput, nPortalHealthInput, flInitialPortalSpawnDelayInput, flInitialSummonTimeInput, flPortalIntervalInput, flScaleInput, rgUnitsInfoInput ) - self.szSpawnerName = szSpawnerNameInput - self.szLocatorName = szLocatorNameInput - self.rgUnitsInfo = rgUnitsInfoInput - self.nPortalHealth = nPortalHealthInput - self.flInitialPortalSpawnDelay = flInitialPortalSpawnDelayInput - self.flInitialSummonTime = flInitialSummonTimeInput - self.flPortalInterval = flPortalIntervalInput - self.flScale = flScaleInput - - self.nNumSpawnsRemaining = 3 - - self.Encounter = nil - - self.vLocation = nil - self.bHasCreatedPortal = false - self.hPortalEnt = nil - self.flNextSpawnTime = -1.0 - self.nWarningFX = nil -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:GetSpawnerType() - return "CPortalSpawner" -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:Precache( context ) - --print( "CPortalSpawner:Precache called for " .. self.szSpawnerName ) - - PrecacheUnitByNameSync( "npc_aghsfort_dark_portal", context, -1 ) - PrecacheResource( "particle", "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", context ) - PrecacheResource( "particle", "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", context ) - - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - PrecacheUnitByNameSync( rgUnitInfo.EntityName, context, -1 ) - end -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:SetLocation( vLocationInput ) - self.vLocation = vLocationInput -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:OnEncounterLoaded( EncounterInput ) - --print( "CPortalSpawner:OnEncounterLoaded called for " .. self.szSpawnerName ) - self.Encounter = EncounterInput - - ListenToGameEvent( "entity_killed", Dynamic_Wrap( CPortalSpawner, 'OnEntityKilled' ), self ) -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:Start( flStartTime ) - self.flNextSpawnTime = GameRules:GetGameTime() + self.flInitialPortalSpawnDelay -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:IsDestroyed() - if self.bHasCreatedPortal == false then - return false - end - - if not self.hPortalEnt or self.hPortalEnt:IsNull() or self.hPortalEnt:IsAlive() == false then - return true - end - - return false -end - ----------------------------------------------------------------------------- ---[[ -function CPortalSpawner:GetSpawnCountPerSpawnPosition() - - local nCount = 0 - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - nCount = nCount + rgUnitInfo.Count - end - return nCount - -end ---]] - ----------------------------------------------------------------------------- - -function CPortalSpawner:SpawnSingleUnitType( rgUnitInfo ) - - local hSpawnedUnits = {} - for i=1,rgUnitInfo.Count do - - local vSpawnPos = self.vLocation - if rgUnitInfo.PositionNoise ~= nil then - local nAttempts = 0 - while nAttempts < 16 do - local vTestPos = vSpawnPos + RandomVector( RandomFloat( 0.0, rgUnitInfo.PositionNoise ) ) - vTestPos.z = GetGroundHeight( vTestPos, nil ) - if GridNav:CanFindPath( vTestPos, self.vLocation ) then - vSpawnPos = vTestPos - break - end - nAttempts = nAttempts + 1 - end - end - - local hUnit = CreateUnitByName( rgUnitInfo.EntityName, vSpawnPos, true, nil, nil, rgUnitInfo.Team ) - - if hUnit == nil then - print( "ERROR! Failed to spawn unit named " .. rgUnitInfo.EntityName ) - return nil - else - hUnit.bPortalUnit = true - hUnit:FaceTowards( self.vLocation ) - if rgUnitInfo.PostSpawn ~= nil then - rgUnitInfo.PostSpawn( hUnit ) - end - - local nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", PATTACH_CUSTOMORIGIN, hUnit ); - ParticleManager:SetParticleControl( nFXIndex, 0, hUnit:GetAbsOrigin() ); - ParticleManager:SetParticleControlEnt( nFXIndex, 1, hUnit, PATTACH_POINT_FOLLOW, "attach_hitloc", hUnit:GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 2, hUnit, PATTACH_POINT_FOLLOW, "attach_hitloc", hUnit:GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 3, hUnit, PATTACH_POINT_FOLLOW, "attach_hitloc", hUnit:GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( nFXIndex, 4, hUnit, PATTACH_POINT_FOLLOW, "attach_hitloc", hUnit:GetAbsOrigin(), true ) - ParticleManager:ReleaseParticleIndex( nFXIndex ) - - table.insert( hSpawnedUnits, hUnit ) - end - end - - return hSpawnedUnits -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:TrySpawningUnits() - --print( "CPortalSpawner:TrySpawningUnits" ) - - -- Don't spawn if Start() hasn't been called - if self.flNextSpawnTime < 0 then - return - end - - if self.bHasCreatedPortal == false then - local flTimeReaminingToPortalSpawn = self.flNextSpawnTime - GameRules:GetGameTime() - - if flTimeReaminingToPortalSpawn <= 0 then - --print( "Portal named " .. self:GetSpawnerName() .. " spawning portal!" ) - self:SpawnPortal() - end - end - - if self.bHasCreatedPortal == false then - return - end - - if self.hPortalEnt ~= nil and self.hPortalEnt:IsNull() == false and self.hPortalEnt:IsAlive() then - local flTimeRemaining = self.flNextSpawnTime - GameRules:GetGameTime() - --print( "Portal named " .. self:GetSpawnerName() .. " has " .. flTimeRemaining .. " time remaining till spawn." ) - - if flTimeRemaining <= 0 then - --print( "Portal named " .. self:GetSpawnerName() .. " is spawning units!" ) - self:SpawnUnits() - if self.nNumSpawnsRemaining > 0 then - self.flNextSpawnTime = self.flNextSpawnTime + self.flPortalInterval - else - self.flNextSpawnTime = -1 -- disabled from here on out - end - end - - if flTimeRemaining <= 5 and flTimeRemaining > 0 and self.nWarningFX == nil then - --print( "Portal named " .. self:GetSpawnerName() .. " creating warning fx and sounds" ) - - self.nWarningFX = ParticleManager:CreateParticle( "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", PATTACH_OVERHEAD_FOLLOW, self.hPortalEnt ) - ParticleManager:SetParticleControlEnt( self.nWarningFX, 1, self.hPortalEnt, PATTACH_POINT_FOLLOW, "attach_hitloc", self.hPortalEnt:GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( self.nWarningFX, 6, self.hPortalEnt, PATTACH_ABSORIGIN_FOLLOW, nil, self.hPortalEnt:GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( self.nWarningFX, 10, Vector( flTimeRemaining*0.9, flTimeRemaining*0.9, flTimeRemaining*0.9 ) ); - - EmitSoundOn( "Aghsfort_DarkPortal.StartSummon", self.hPortalEnt ) - end - end -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:SpawnUnits() - if self.vLocation == nil then - print( "ERROR - Spawner " .. self.szSpawnerName .. " does not have a valid location!" ) - return - end - - local nSpawned = 0 - - local hSpawnedUnits = {} - - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - local hSingleSpawnedUnits = self:SpawnSingleUnitType( rgUnitInfo ) - nSpawned = nSpawned + rgUnitInfo.Count - - for _,hUnit in pairs ( hSingleSpawnedUnits ) do - table.insert( hSpawnedUnits, hUnit ) - end - end - - --printf( "%s spawning %d units", self.szSpawnerName, nSpawned ) - - if self.nWarningFX ~= nil then - ParticleManager:DestroyParticle( self.nWarningFX, false ) - self.nWarningFX = nil - end - - EmitSoundOn( "Aghsfort_DarkPortal.Complete", self.hPortalEnt ) - StopSoundOn( "Aghsfort_DarkPortal.StartSummon", self.hPortalEnt ) - - if #hSpawnedUnits > 0 then - self.Encounter:OnSpawnerFinished( self, hSpawnedUnits ) - end - - self.nNumSpawnsRemaining = self.nNumSpawnsRemaining - 1 - - if self.nNumSpawnsRemaining <= 0 then - self.hPortalEnt:SetSkin( 1 ) - end - ---[[ - if self.nNumSpawnsRemaining <= 0 then - if self.Encounter ~= nil then - local hAttacker = nil - self.Encounter:OnPortalKilled( self.hPortalEnt, hAttacker, 0 ) - end - - self:DestroyPortal( true ) - end ---]] - return hSpawnedUnits -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:SpawnPortal() - --print( "CPortalSpawner:SpawnPortal" ) - - if self.bHasCreatedPortal == true then - print( 'ERROR: Trying to spawn a portal named ' .. self.szSpawnerName .. ' but it has already spawned a portal!') - return - end - - if self.hPortalEnt ~= nil then - print( 'ERROR: Trying to spawn a portal named ' .. self.szSpawnerName .. ' but it already has a portal!') - return - end - - if self.vLocation == nil then - print( 'ERROR: Trying to spawn a portal named ' .. self.szSpawnerName .. ' with a nil location!' ) - return - end - - local portalTable = - { - MapUnitName = "npc_aghsfort_dark_portal", - origin = tostring( self.vLocation.x ) .. " " .. tostring( self.vLocation.y ) .. " " .. tostring( self.vLocation.z ), - StatusHealth = self.nPortalHealth, - teamnumber = DOTA_TEAM_BADGUYS, - modelscale = self.flScale, - } - - self.hPortalEnt = CreateUnitFromTable( portalTable, self.vLocation ) - - self.hPortalEnt:SetTeam( DOTA_TEAM_BADGUYS ) - self.hPortalEnt:RemoveModifierByName( "modifier_invulnerable" ) - - self.hPortalEnt:SetMaxHealth( self.nPortalHealth ) - self.hPortalEnt:SetBaseMaxHealth( self.nPortalHealth ) - self.hPortalEnt:Heal( self.nPortalHealth, nil ) - self.hPortalEnt:AddNewModifier( self.hPortalEnt, nil, "modifier_provide_vision", { duration = -1 } ) - self.hPortalEnt:AddNewModifier( self.hPortalEnt, nil, "modifier_magic_immune", { duration = -1 } ) - self.hPortalEnt:AddNewModifier( self.hPortalEnt, nil, "modifier_phased", { duration = -1 } ) - - self.hPortalEnt:SetAbsScale( self.flScale ) - - self.flNextSpawnTime = GameRules:GetGameTime() + self.flInitialSummonTime - --- hPortalEnt.nAmbientFX = ParticleManager:CreateParticle( "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", PATTACH_OVERHEAD_FOLLOW, hPortalEnt ) --- ParticleManager:SetParticleControlEnt( hPortalEnt.nAmbientFX , 1, hPortalEnt, PATTACH_POINT_FOLLOW, "attach_hitloc", hPortalEnt:GetAbsOrigin(), true ) --- ParticleManager:SetParticleControlEnt( hPortalEnt.nAmbientFX , 6, hPortalEnt, PATTACH_ABSORIGIN_FOLLOW, nil, hPortalEnt:GetAbsOrigin(), true ) --- ParticleManager:SetParticleControl( hPortalEnt.nAmbientFX , 10, Vector( 30, 30, 30 ) ); - --- self.nWarningFX = ParticleManager:CreateParticle( "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", PATTACH_OVERHEAD_FOLLOW, self.hPortalEnt ) --- ParticleManager:SetParticleControlEnt( self.nWarningFX, 1, self.hPortalEnt, PATTACH_POINT_FOLLOW, "attach_hitloc", self.hPortalEnt:GetAbsOrigin(), true ) --- ParticleManager:SetParticleControlEnt( self.nWarningFX, 6, self.hPortalEnt, PATTACH_ABSORIGIN_FOLLOW, nil, self.hPortalEnt:GetAbsOrigin(), true ) --- ParticleManager:SetParticleControl( self.nWarningFX, 10, Vector( self.flNextSpawnTime*0.9, self.flNextSpawnTime*0.9, self.flNextSpawnTime*0.9 ) ); - - EmitSoundOn( "Aghsfort_DarkPortal.Created", self.hPortalEnt ) - - self.bHasCreatedPortal = true -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:OnEntityKilled( event ) - local hVictim = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - - if hVictim == nil or hVictim:IsRealHero() then - return - end - - if hVictim ~= self.hPortalEnt then - return - end - - if self.Encounter ~= nil then - local hAttacker = nil - if event.entindex_attacker ~= nil then - hAttacker = EntIndexToHScript( event.entindex_attacker ) - end - - local nSupressedUnits = 0 - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - nSupressedUnits = nSupressedUnits + ( rgUnitInfo.Count * self.nNumSpawnsRemaining ) - end - - self.Encounter:OnPortalKilled( hVictim, hAttacker, nSupressedUnits ) - end - - self:DestroyPortal( false ) -end - - ----------------------------------------------------------------------------- - -function CPortalSpawner:DestroyPortal( bRemove ) - StopSoundOn( "Aghsfort_DarkPortal.StartSummon", self.hPortalEnt ) - StopSoundOn( "Aghsfort_DarkPortal.Created", self.hPortal ) - if self.hPortal and not self.hPortal:IsNull() then - EmitSoundOnLocationWithCaster( self.hPortal:GetAbsOrigin(), "Aghsfort_DarkPortal.Cancel", self.hPortal ) - end - - if self.nWarningFX ~= nil then - ParticleManager:DestroyParticle( self.nWarningFX, false ) - self.nWarningFX = nil - end - - if bRemove and self.hPortalEnt and not self.hPortalEnt:IsNull() then - UTIL_Remove( self.hPortalEnt ) - self.hPortalEnt = nil - end - --- if hVictim.nAmbientFX ~= nil then --- ParticleManager:DestroyParticle( hPortal.nAmbientFX, false ) --- hPortal.nAmbientFX = nil --- end -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:GetSpawnerName() - return self.szSpawnerName -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:GetLocatorName() - return self.szLocatorName -end - ----------------------------------------------------------------------------- - -function CPortalSpawner:GetNumSpawnsRemaining() - return self.nNumSpawnsRemaining -end diff --git a/aghanim_singleplayer/scripts/vscripts/portalspawnerv2.lua b/aghanim_singleplayer/scripts/vscripts/portalspawnerv2.lua deleted file mode 100755 index 2114f8c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/portalspawnerv2.lua +++ /dev/null @@ -1,399 +0,0 @@ -if CPortalSpawnerV2 == nil then - CPortalSpawnerV2 = class({}) -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:constructor( szSpawnerNameInput, szLocatorNameInput, nPortalHealthInput, flSummonTimeInput, flScaleInput, rgUnitsInfoInput, bInvulnerableInput ) - self.szSpawnerName = szSpawnerNameInput - self.szLocatorName = szLocatorNameInput - self.rgUnitsInfo = rgUnitsInfoInput - self.nPortalHealth = nPortalHealthInput - self.flSummonTime = flSummonTimeInput - - if bInvulnerableInput == nil then - self.bInvulnerable = false - else - self.bInvulnerable = bInvulnerableInput - end - - self.flScale = flScaleInput - self.vFocusPosition = nil - self.flFocusRadius = nil - self.rgSpawners = {} - self.rgSpawnedPortals = {} - self.Encounter = nil -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:GetSpawnerType() - return "CPortalSpawnerV2" -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:Precache( context ) - - PrecacheUnitByNameSync( "npc_aghsfort_dark_portal_v2", context, -1 ) - PrecacheResource( "particle", "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", context ) - PrecacheResource( "particle", "particles/portals/portal_ground_spawn_endpoint.vpcf", context ) - - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - PrecacheUnitByNameSync( rgUnitInfo.EntityName, context, -1 ) - end -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:OnEncounterLoaded( EncounterInput ) - --print( "CPortalSpawnerV2:OnEncounterLoaded called for " .. self.szSpawnerName ) - - self.Encounter = EncounterInput - self.rgSpawners = self.Encounter:GetRoom():FindAllEntitiesInRoomByName( self.szLocatorName, false ) - - if #self.rgSpawners == 0 then - print( "Failed to find entity " .. self.szSpawnerName .. " as spawner position in map " .. self.Encounter:GetRoom():GetMapName() ) - end - - ListenToGameEvent( "entity_killed", Dynamic_Wrap( CPortalSpawnerV2, 'OnEntityKilled' ), self ) - -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:GetSpawnPositionCount() - return #self.rgSpawners -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:GetSpawnPositions() - return self.rgSpawners -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:GetSpawnCountPerSpawnPosition() - - local nCount = 0 - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - nCount = nCount + rgUnitInfo.Count - end - return nCount - -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:SetSpawnInfo( vMins, vMaxs, vEndPos ) - self.vMins = vMins - self.vMaxs = vMaxs - self.vEndPos = vEndPos -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:SetSpawnFocus( vCenter, flRadius ) - self.vFocusPosition = vCenter - self.flFocusRadius = flRadius -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:SpawnSingleUnitType( rgUnitInfo, vLocation ) - - local hSpawnedUnits = {} - for i=1,rgUnitInfo.Count do - - local vSpawnPos = vLocation - if rgUnitInfo.PositionNoise ~= nil then - local nAttempts = 0 - while nAttempts < 16 do - local vTestPos = vSpawnPos + RandomVector( RandomFloat( 0.0, rgUnitInfo.PositionNoise ) ) - vTestPos.z = GetGroundHeight( vTestPos, nil ) - if GridNav:CanFindPath( vTestPos, vLocation ) then - vSpawnPos = vTestPos - break - end - nAttempts = nAttempts + 1 - end - end - - local hUnit = CreateUnitByName( rgUnitInfo.EntityName, vSpawnPos, true, nil, nil, rgUnitInfo.Team ) - - if hUnit == nil then - print( "ERROR! Failed to spawn unit named " .. rgUnitInfo.EntityName ) - else - hUnit.bPortalUnit = true - hUnit:FaceTowards( vLocation ) - if rgUnitInfo.PostSpawn ~= nil then - rgUnitInfo.PostSpawn( hUnit ) - end - table.insert( hSpawnedUnits, hUnit ) - end - end - - return hSpawnedUnits -end - --------------------------------------------------------------------------------- - -function CPortalSpawnerV2:TrySpawningPortalUnits() - - local hSpawnedUnits={} - local hActivatedPortals={} - - for i=#self.rgSpawnedPortals,1,-1 do - local hPortal = self.rgSpawnedPortals[i] - if hPortal ~= nil then - if hPortal.bStartedSound == false and ( hPortal.flSpawnTime - GameRules:GetGameTime() ) <= 6 then - hPortal.bStartedSound = true - EmitSoundOn( "Aghsfort_DarkPortal.StartSummon", hPortal ) - end - - if hPortal.flSpawnTime <= GameRules:GetGameTime() then - - local nSpawned = 0 - local vLocation = hPortal:GetAbsOrigin() - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - local hSingleSpawnedUnits = self:SpawnSingleUnitType( rgUnitInfo, vLocation ) - for _,hUnit in pairs ( hSingleSpawnedUnits ) do - table.insert( hSpawnedUnits, hUnit ) - end - end - - table.insert( hActivatedPortals, hPortal ) - --printf( "%s spawning %d units", self.szSpawnerName, nSpawned ) - end - end - end - - if #hSpawnedUnits > 0 then - self.Encounter:OnSpawnerFinished( self, hSpawnedUnits ) - end - - -- Once a portal has been spawned, it can die - for i=#hActivatedPortals,1,-1 do - - local hPortal = hActivatedPortals[i] - StopSoundOn( "Aghsfort_DarkPortal.StartSummon", hPortal ) - EmitSoundOn( "Aghsfort_DarkPortal.Complete", hPortal ) - - self:RemoveSpawnedPortal( hPortal ) - self:DestroyPortal( hPortal ) - UTIL_Remove( hPortal ) - end - - return hSpawnedUnits - -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:SpawnPortal( hPortalEnt ) - - hPortalEnt:SetTeam( DOTA_TEAM_BADGUYS ) - - hPortalEnt:SetMaxHealth( self.nPortalHealth ) - hPortalEnt:SetBaseMaxHealth( self.nPortalHealth ) - hPortalEnt:Heal( self.nPortalHealth, nil ) - hPortalEnt:AddNewModifier( hPortalEnt, nil, "modifier_provide_vision", { duration = -1 } ) - hPortalEnt:AddNewModifier( hPortalEnt, nil, "modifier_magic_immune", { duration = -1 } ) - hPortalEnt:AddNewModifier( hPortalEnt, nil, "modifier_phased", { duration = -1 } ) - - hPortalEnt:SetAbsScale( self.flScale ) - - hPortalEnt.flSpawnTime = GameRules:GetGameTime() + self.flSummonTime - hPortalEnt.bStartedSound = false - --- hPortalEnt.nAmbientFX = ParticleManager:CreateParticle( "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", PATTACH_OVERHEAD_FOLLOW, hPortalEnt ) --- ParticleManager:SetParticleControlEnt( hPortalEnt.nAmbientFX , 1, hPortalEnt, PATTACH_POINT_FOLLOW, "attach_hitloc", hPortalEnt:GetAbsOrigin(), true ) --- ParticleManager:SetParticleControlEnt( hPortalEnt.nAmbientFX , 6, hPortalEnt, PATTACH_ABSORIGIN_FOLLOW, nil, hPortalEnt:GetAbsOrigin(), true ) --- ParticleManager:SetParticleControl( hPortalEnt.nAmbientFX , 10, Vector( 30, 30, 30 ) ); - - if self.bInvulnerable == true then - -- invulnerable portals make the portal invisible and place an effect on the ground - hPortalEnt:AddEffects( EF_NODRAW ) - - hPortalEnt.nWarningFX = ParticleManager:CreateParticle( "particles/portals/portal_ground_spawn_endpoint.vpcf", PATTACH_WORLDORIGIN, nil ) - ParticleManager:SetParticleControl( hPortalEnt.nWarningFX, 0, hPortalEnt:GetAbsOrigin() ) - - else - -- vulnerable portals need to remove the invulnerable modifier that's built in to the building - hPortalEnt:RemoveModifierByName( "modifier_invulnerable" ) - - hPortalEnt.nWarningFX = ParticleManager:CreateParticle( "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", PATTACH_OVERHEAD_FOLLOW, hPortalEnt ) - ParticleManager:SetParticleControlEnt( hPortalEnt.nWarningFX, 1, hPortalEnt, PATTACH_POINT_FOLLOW, "attach_hitloc", hPortalEnt:GetAbsOrigin(), true ) - ParticleManager:SetParticleControlEnt( hPortalEnt.nWarningFX, 6, hPortalEnt, PATTACH_ABSORIGIN_FOLLOW, nil, hPortalEnt:GetAbsOrigin(), true ) - ParticleManager:SetParticleControl( hPortalEnt.nWarningFX, 10, Vector( self.flSummonTime*0.9, self.flSummonTime*0.9, self.flSummonTime*0.9 ) ); - end - - if self.flSummonTime <= 6 then - hPortalEnt.bStartedSound = true - EmitSoundOn( "Aghsfort_DarkPortal.StartSummon", hPortalEnt ) - end -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:DestroyPortal( hPortal ) - - if hPortal.nWarningFX ~= nil then - ParticleManager:DestroyParticle( hPortal.nWarningFX, false ) - hPortal.nWarningFX = nil - end - --- if hVictim.nAmbientFX ~= nil then --- ParticleManager:DestroyParticle( hPortal.nAmbientFX, false ) --- hPortal.nAmbientFX = nil --- end - - StopSoundOn( "Aghsfort_DarkPortal.StartSummon", hPortal ) - EmitSoundOnLocationWithCaster( hPortal:GetAbsOrigin(), "Aghsfort_DarkPortal.Cancel", hPortal ) - -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:ComputeSpawnerWeights( ) - - if self.vFocusPosition == nil then - return nil - end - - -- Ok, focus position. Means we're going to preferentially pick - -- spawn positions nearer to the spawn focus position - local flTotalWeight = 0.0 - for i=1,#self.rgSpawners do - local flDist = ( self.rgSpawners[i]:GetAbsOrigin() - self.vFocusPosition ):Length2D() - local flWeight = math.exp( -0.5 * flDist * flDist / ( self.flFocusRadius * self.flFocusRadius ) ) - self.rgSpawners[i].flFocusWeight = flWeight - flTotalWeight = flTotalWeight + flWeight - end - return flTotalWeight -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:RandomlySelectSpawner( Spawners, flTotalSpawnerWeight ) - - if flTotalSpawnerWeight == nil then - return math.random( 1, #Spawners ) - end - - -- Ok, focus position. Means we're going to preferentially pick - -- spawn positions close to the focus position. - -- We've already computed weights in ComputeSpawnerWeights - local flValue = RandomFloat( 0, flTotalSpawnerWeight ) - local flWeight = 0 - for i=1,#Spawners do - flWeight = flWeight + Spawners[i].flFocusWeight - if flValue < flWeight then - return i - end - end - return #Spawners -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:SpawnUnitsFromRandomSpawners( nSpawners ) - - --print( "spawning from " .. nSpawners .. " " .. self.szSpawnerName .. " spawers out of " .. #self.rgSpawners ) - local hAllSpawnedUnits = {} - local Spawners = nil - local flTotalSpawnerWeight = self:ComputeSpawnerWeights( ) - for n=1,nSpawners do - if Spawners == nil or #Spawners == 0 then - Spawners = deepcopy( self.rgSpawners ) - end - - local nIndex = self:RandomlySelectSpawner( Spawners, flTotalSpawnerWeight ) - local Spawner = Spawners[ nIndex ] - if Spawner == nil then - print ( "ERROR! CPortalSpawnerV2:SpawnUnitsFromRandomSpawners went WRONG!!!!!!!!!!!!!" ) - else - - if flTotalSpawnerWeight ~= nil then - flTotalSpawnerWeight = flTotalSpawnerWeight - Spawner.flFocusWeight - end - - local vLocation = Spawner:GetAbsOrigin() - - local portalTable = - { - MapUnitName = "npc_aghsfort_dark_portal_v2", - origin = tostring( vLocation.x ) .. " " .. tostring( vLocation.y ) .. " " .. tostring( vLocation.z ), - StatusHealth = self.nPortalHealth, - teamnumber = DOTA_TEAM_BADGUYS, - modelscale = self.flScale, - } - - local hPortal = CreateUnitFromTable( portalTable, vLocation ) - self:SpawnPortal( hPortal ) - table.insert( hAllSpawnedUnits, hPortal ) - table.insert( self.rgSpawnedPortals, hPortal ) - end - table.remove( Spawners, nIndex ) - end - - return hAllSpawnedUnits -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:RemoveSpawnedPortal( hPortal ) - - for i=#self.rgSpawnedPortals,1,-1 do - if self.rgSpawnedPortals[i] == hPortal then - table.remove( self.rgSpawnedPortals, i ) - return true - end - end - return false - -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:OnEntityKilled( event ) - local hVictim = nil - if event.entindex_killed ~= nil then - hVictim = EntIndexToHScript( event.entindex_killed ) - end - - if hVictim == nil or hVictim:IsRealHero() then - return - end - - if self:RemoveSpawnedPortal( hVictim ) == true then - if self.Encounter ~= nil then - local hAttacker = nil - if event.entindex_attacker ~= nil then - hAttacker = EntIndexToHScript( event.entindex_attacker ) - end - self.Encounter:OnPortalV2Killed( hVictim, hAttacker, self:GetSpawnCountPerSpawnPosition() ) - end - - self:DestroyPortal( hVictim ) - end -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:GetPortalUnitCount( event ) - return #self.rgSpawnedPortals -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:GetSpawnerName() - return self.szSpawnerName -end - ----------------------------------------------------------------------------- - -function CPortalSpawnerV2:GetLocatorName() - return self.szLocatorName -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/precache.lua b/aghanim_singleplayer/scripts/vscripts/precache.lua deleted file mode 100755 index 22bc07b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/precache.lua +++ /dev/null @@ -1,120 +0,0 @@ -g_ItemPrecache = -{ - "item_tombstone", - "item_bag_of_gold", - "item_health_potion", - "item_mana_potion", - "item_life_rune", - "item_battle_points", - "item_arcane_fragments", - "item_javelin", - "item_monkey_king_bar", -} - -g_UnitPrecache = -{ - -- YOU THERE!!!! YES, YOU!!!!!!! - -- Don't put your precaches in here. Units will already be precached by dota spawners - -- Put your other precache in Precache methods in your encounters, ai, or abilities - -- whether they are in script or C++ code. - -- Doing so means quicker load time and less total memory used - - -- Assets in Aghanim path - "npc_treasure_chest", - "npc_dota_explosive_barrel", - "aghsfort_ascension_level_picker_1", - "aghsfort_ascension_level_picker_2", - "aghsfort_ascension_level_picker_3", - "aghsfort_ascension_level_picker_4", - "npc_dota_announcer_aghanim", - "npc_dota_story_crystal", - - -- Assets in Dota path -} - -g_ModelPrecache = -{ - -- YOU THERE!!!! YES, YOU!!!!!!! - -- Don't put your precaches in here. Units will already be precached by dota spawners - -- Put your other precache in Precache methods in your encounters, ai, or abilities - -- whether they are in script or C++ code. - -- Doing so means quicker load time and less total memory used - "models/gameplay/breakingcrate_dest.vmdl", -- item_bag_of_gold - --"models/gameplay/attrib_tome_str.vmdl", -- item_book_of_strength - --"models/gameplay/attrib_tome_agi.vmdl", -- item_book_of_agility - --"models/gameplay/attrib_tome_int.vmdl", -- item_book_of_intelligence - - -- Assets in Dota path - "models/props_gameplay/treasure_chest_gold.vmdl", -- Bunch of gold from treasure - "models/props_gameplay/treasure_chest001.vmdl", -- Netural item chests - "models/props_gameplay/gold_bag.vmdl", -- item_bag_of_gold - "models/ui/exclamation/questionmark.vmdl", -- hidden challenges - "models/heroes/bristleback/bristleback_back.vmdl", - "models/heroes/bristleback/bristleback_bracer.vmdl", - "models/heroes/bristleback/bristleback_head.vmdl", - "models/heroes/bristleback/bristleback_necklace.vmdl", - "models/heroes/bristleback/bristleback_weapon.vmdl", -} - -g_ParticlePrecache = -{ - -- YOU THERE!!!! YES, YOU!!!!!!! - -- Don't put your precaches in here. Units will already be precached by dota spawners - -- Put your other precache in Precache methods in your encounters, ai, or abilities - -- whether they are in script or C++ code. - -- Doing so means quicker load time and less total memory unsed - - -- Assets in Aghanim path - "particles/dark_moon/darkmoon_last_hit_effect.vpcf", -- Last hit effect - "particles/dark_moon/darkmoon_creep_warning.vpcf", -- used in many places to warn about an attack - "particles/forest/crate_destruction.vpcf", -- crate - "particles/forest/vase_destruction.vpcf", -- vase - - -- Blessings - "particles/blessings/death_detonation/death_detonation_remote_mines_detonate.vpcf", - - -- Assets in Dota path - "particles/units/heroes/hero_visage/visage_summon_familiars.vpcf", -- dark portal fx - "particles/units/heroes/heroes_underlord/abyssal_underlord_darkrift_target.vpcf", -- dark portal fx - "particles/units/heroes/heroes_underlord/abbysal_underlord_darkrift_ambient.vpcf", -- dark portal fx - "particles/units/heroes/hero_dazzle/dazzle_shadow_wave.vpcf", -- fx for test_encounter concommand - "particles/units/heroes/hero_zuus/zuus_lightning_bolt.vpcf", -- fx for battle royale - "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_halo_buff.vpcf", -- Used by modifier_omninight_guardian_angel, for player respawn - "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_wings_buff.vpcf", -- Used by modifier_omninight_guardian_angel, for player respawn - "particles/status_fx/status_effect_guardian_angel.vpcf", -- Used by modifier_omninight_guardian_angel, for player respawn - "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_omni.vpcf", -- Used by modifier_omninight_guardian_angel, for player respawn - "particles/units/heroes/hero_omniknight/omniknight_guardian_angel_ally.vpcf", -- Used by modifier_omninight_guardian_angel, for player respawn - "particles/units/heroes/hero_ogre_magi/ogre_magi_bloodlust_buff.vpcf", -- used by modifier_enrage - "particles/items5_fx/neutral_treasurebox.vpcf", -- neutral item drop - "particles/items5_fx/neutral_treasurebox_lvl0.vpcf", -- neutral item drop - "particles/items5_fx/neutral_treasurebox_lvl1.vpcf", -- neutral item drop - "particles/items5_fx/neutral_treasurebox_lvl2.vpcf", -- neutral item drop - "particles/items5_fx/neutral_treasurebox_lvl3.vpcf", -- neutral item drop - "particles/items5_fx/neutral_treasurebox_lvl4.vpcf", -- neutral item drop - "particles/neutral_fx/neutral_item_drop_lvl0.vpcf", -- neutral item drop - "particles/neutral_fx/neutral_item_drop_lvl1.vpcf", -- neutral item drop - "particles/neutral_fx/neutral_item_drop_lvl2.vpcf", -- neutral item drop - "particles/neutral_fx/neutral_item_drop_lvl3.vpcf", -- neutral item drop - "particles/neutral_fx/neutral_item_drop_lvl4.vpcf", -- neutral item drop - "particles/neutral_fx/neutral_item_drop_lvl5.vpcf", -- neutral item drop - "particles/units/heroes/hero_invoker/invoker_sun_strike_team.vpcf", -- treasure chest surprise - "particles/units/heroes/hero_invoker/invoker_sun_strike.vpcf", - "particles/creature_true_sight.vpcf", -- modifier_detect_invisible - "particles/msg_fx/msg_bp.vpcf", - "particles/generic_gameplay/battle_point_splash.vpcf", -} - -g_SoundPrecache = -{ - -- Assets in Aghanim path - "soundevents/game_sounds_aghanim.vsndevts", - "soundevents/game_sounds_dungeon.vsndevts", - "soundevents/game_sounds_aghanim_creatures.vsndevts", - "soundevents/game_sounds_dungeon_enemies.vsndevts", - "soundevents/game_sounds_pudge_miniboss.vsndevts", - - -- Assets in Dota path - "soundevents/voscripts/game_sounds_vo_meepo.vsndevts", - "soundevents/voscripts/game_sounds_vo_bristleback.vsndevts", - "soundevents/game_sounds_heroes/game_sounds_abyssal_underlord.vsndevts", -- dark portal sounds -} diff --git a/aghanim_singleplayer/scripts/vscripts/reward_tables.lua b/aghanim_singleplayer/scripts/vscripts/reward_tables.lua deleted file mode 100755 index 88f0708..0000000 --- a/aghanim_singleplayer/scripts/vscripts/reward_tables.lua +++ /dev/null @@ -1,375 +0,0 @@ -require( "constants" ) - -_G.USE_PRICED_REWARDS = true -_G.PRICED_ITEM_GOLD_MIN_PCT = 0.60 -_G.PRICED_ITEM_GOLD_MAX_PCT = 1.20 -_G.PRICED_ITEM_BONUS_DEPTH_PCT = 0.05 -_G.GOLD_REWARD_CHOICE_MIN_PCT = 0.375 -- 1.5 * 0.25 -_G.GOLD_REWARD_CHOICE_MAX_PCT = 0.525 -- 1.5 * 0.35 -_G.ELITE_VALUE_MODIFIER = 2 -_G.ARCANE_FRAGMENT_ELITE_VALUE_MODIFIER = 1.25 -_G.ELITE_NEUTRAL_ITEM_VALUE_MODIFIER = 1.5 - --- Amount of XP earned per hero per depth (if the encounter gives XP) -_G.ENCOUNTER_DEPTH_XP_REWARD = -{ - 0, --1 Starting Room - 900, --2, - 1000, --3, - 1100, --4, - 1200, --5, - 400, --6 Act 1 Boss - 0, --7 Transition->Act2, Reward Room - 1575, --8, - 1775, --9, - 1975, --10, - 2175, --11, - 0, --12, - 1900, --13 Act 2 Boss - 2700, --14 Act 3 Reward Room - 3200, --15 - 3500, --16, - 6395, --17, - 0, --18, - 0, --19 Act 3 Boss -} - --- Amount of gold earned per hero per depth (if the encounter gives gold) -_G.ENCOUNTER_DEPTH_GOLD_REWARD = -{ - 0, --1 Starting Room - 650, --2, - 775, --3, - 900, --4, - 1000, --5, - 1000, --6 Act 1 Boss README: The boss has a gold bag fountain ability that gives 1000 gold, but gets slammed to 0 at reward time - 2500, --7 Transition->Act2 ( Note: this gold is not guaranteed ) - 1250, --8 - 1500, --9 - 1750, --10 - 2000, --11 - 0, --12 - 2000, --13 Act 2 Boss README: The boss has a gold bag fountain ability that gives 2000 gold, but gets slammed to 0 at reward time - 0, --14 Act 3 Reward Room [chickens drop loot] - 2300, --15 - 2500, --16 - 2700, --17 - 0, --18 - 2800, --19 Act 3 Boss, gold reward is for items at Bristle only -} - -_G.ENCOUNTER_DEPTH_BATTLE_POINTS = -{ - 0, --1 - 25, --2 - 25, --3 - 25, --4 - 25, --5 - 50, --6 120 - 0, --7 - 25, --8 - 25, --9 - 25, --10 - 25, --11 - 0, --12 - 50, --13 240 - 0, --14 - 25, --15 - 25, --16 - 25, --17 - 0, --18 - 50, --19 340 -} - -_G.BATTLE_POINT_DIFFICULTY_MODIFIERS = -{ - 1, - 1.1, - 1.2, - 1.3 -} - -_G.BATTLE_POINT_MIN_DROP_VALUE = 15 -_G.BATTLE_POINT_MAX_DROP_VALUE = 30 - -_G.ARCANE_FRAGMENT_ROOM_CLEAR_VALUE = 0.5 -_G.ARCANE_FRAGMENT_DROP_VALUE = 0.5 - -_G.ARCANE_FRAGMENT_DROP_VALUE_VARIANCE = 0.4 - -_G.ENCOUNTER_DEPTH_ARCANE_FRAGMENTS = -{ - 0, --1 - 20, --2 - 20, --3 - 20, --4 - 20, --5 - 40, --6 - 0, --7 - 22, --8 - 22, --9 - 22, --10 - 22, --11 - 0, --12 - 44, --13 - 0, --14 - 24, --15 - 24, --16 - 24, --17 - 0, --18 - 48, --19 -} - -_G.ARCANE_FRAGMENT_DIFFICULTY_MODIFIERS = -{ - 1, - 1.1, - 1.2, - 1.3, - 1.4 -} - -_G.ARCANE_FRAGMENT_RANDOM_DROP_CHANCES = -{ - { low_chance = 0, high_chance = 60, num_fragments = 0 }, - { low_chance = 60, high_chance = 90, num_fragments = 1 }, - { low_chance = 90, high_chance = 100, num_fragments = 2 }, -} - -_G.REWARD_TIER_TABLE = -{ - REWARD_TIER_UPGRADE = - { - REWARD_TYPE_ABILITY_UPGRADE = 100, - }, - - REWARD_TIER_MINOR_UPGRADE = - { - REWARD_TYPE_MINOR_ABILITY_UPGRADE = 100, - }, - - REWARD_TIER_OTHER = - { - --REWARD_TYPE_GOLD = 33, - --REWARD_TYPE_ITEM = 33, - --REWARD_TYPE_MINOR_ABILITY_UPGRADE = 100, - REWARD_TYPE_MINOR_STATS_UPGRADE = 100, - --REWARD_TYPE_EXTRA_LIVES = 1, - - }, -} - -_G.ROOM_CHOICE_REWARDS = -{ - REWARD_TYPE_GOLD = 40, - REWARD_TYPE_EXTRA_LIVES = 20, - REWARD_TYPE_TREASURE = 40, -} - -_G.TREASURE_REWARDS = {} -table.insert( TREASURE_REWARDS, 1, - { - "item_purification_potion", - "item_ravage_potion", - "item_echo_slam_potion", - "item_arcanist_potion", - "item_book_of_strength", - "item_book_of_agility", - "item_book_of_intelligence", - "item_dragon_potion", -} ) - -table.insert( TREASURE_REWARDS, 2, - { - "item_torrent_effect_potion", - "item_shadow_wave_effect_potion", - "item_tome_of_greater_knowledge", - "item_book_of_greater_strength", - "item_book_of_greater_agility", - "item_book_of_greater_intelligence", - "item_aghsfort_refresher_shard", -}) - -_G.PRICED_ITEM_REWARD_LIST = -{ - item_broom_handle = 600, - item_keen_optic = 600, - item_ocean_heart = 600, - item_oblivions_locket = 600, - item_precious_egg = 600, - item_faded_broach = 600, - item_arcane_ring = 600, - - - item_longclaws_amulet = 750, - item_bear_cloak = 750, - item_winter_embrace = 750, - item_poor_mans_shield = 750, - - --item_creed_of_omniscience = 750, - - item_ogre_seal_totem = 1000, - item_dragon_scale = 1000, - item_essence_ring = 1000, - item_pupils_gift = 1000, - - item_paw_of_lucius = 1250, - item_enchanted_quiver = 1250, - item_ring_of_aquila = 1250, - item_grove_bow = 1250, - item_bogduggs_baldric = 1250, - item_craggy_coat = 1250, - item_pelt_of_the_old_wolf = 1250, - - item_nether_shawl = 1500, - item_imp_claw = 1500, - item_ambient_sorcery = 1500, - item_vambrace = 1500, - - item_greater_faerie_fire = 1750, - - item_vampire_fangs = 2000, - --item_lifestone = 2000, - --item_ice_dragon_maw = 2000, - - item_quickening_charm = 2500, - item_titan_sliver = 2500, - item_sign_of_the_arachnid = 2500, - item_phoenix_ash = 2500, - - item_preserved_skull = 3000, - item_gravel_foot = 3000, - item_bogduggs_cudgel = 3000, - item_orb_of_destruction = 3000, - item_paladin_sword = 3000, - item_havoc_hammer = 3000, - item_witless_shako = 3000, - item_panic_button = 3000, - item_minotaur_horn = 3000, - - item_stony_coat = 3250, - item_bogduggs_lucky_femur = 3250, - item_illusionsts_cape = 3500, - - item_stonework_pendant = 3750, - item_spell_prism = 4000, - item_timeless_relic = 4000, - item_watchers_gaze = 4250, - item_guardian_shell = 4250, - - - item_ex_machina = 4500, - item_mirror_shield = 4750, - item_wand_of_the_brine = 4750, - item_fallen_sky = 4750, - - item_treads_of_ermacor = 5000, - item_demonicon = 5000, - item_force_boots = 5500, - item_slippers_of_the_abyss = 5500, - item_apex = 6000, - item_desolator_2 = 6000, -} - - -_G.ROOM_REWARDS = -{ - -- Act 1 - depth_1 = - { - normal = { { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 } } - }, - depth_2 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_3 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_4 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_5 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_6 = -- Boss - { - normal = { { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 } } - }, - depth_7 = -- Transition - { - normal = { } - }, - - -- Act 2 - depth_8 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_9 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_10 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_11 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_12 = - { - normal = { }, - }, - depth_13 = -- Boss - { - normal = { { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 } } - }, - - -- Act 3 - depth_14 = - { - normal = { }, - }, - depth_15 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_16 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_17 = - { - normal = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - elite = { { REWARD_TIER_OTHER = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, { REWARD_TIER_MINOR_UPGRADE = 100 }, }, - }, - depth_18 = - { - normal = { }, - }, - depth_19 = -- Boss - { - normal = { }, -- No need for rewards, the game is done [or should we put BP rewards in here?] - }, - - -- Traps - traps = - { - normal = { { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 }, { REWARD_TIER_UPGRADE = 100 } } - }, -} diff --git a/aghanim_singleplayer/scripts/vscripts/rewards.lua b/aghanim_singleplayer/scripts/vscripts/rewards.lua deleted file mode 100755 index 8b274aa..0000000 --- a/aghanim_singleplayer/scripts/vscripts/rewards.lua +++ /dev/null @@ -1,477 +0,0 @@ -require( "constants" ) -require( "gameplay_shared" ) -require( "map_room" ) -require( "reward_tables" ) -require( "utility_functions" ) -require( "ai/shared" ) -require( "aghanim_ability_upgrade_interface" ) - - -function GetMinMaxGoldChoiceReward( nRoomDepth, bElite ) - local nFixedGoldAwardOfDepth = ENCOUNTER_DEPTH_GOLD_REWARD[ nRoomDepth ] - if bElite then - --print( "Elite Room, increasing expected value of item reward " .. nFixedGoldAwardOfDepth .. " to " .. nFixedGoldAwardOfDepth * ELITE_VALUE_MODIFIER ) - nFixedGoldAwardOfDepth = nFixedGoldAwardOfDepth * ELITE_VALUE_MODIFIER - end - local nMaxValue = math.ceil( nFixedGoldAwardOfDepth * GOLD_REWARD_CHOICE_MAX_PCT ) - local nMinValue = math.floor( nFixedGoldAwardOfDepth * GOLD_REWARD_CHOICE_MIN_PCT ) - return nMinValue, nMaxValue -end - -function GetPricedNeutralItems( nRoomDepth, bElite ) - local vecItemRewards = PRICED_ITEM_REWARD_LIST - local nFixedGoldAwardOfDepth = ENCOUNTER_DEPTH_GOLD_REWARD[ nRoomDepth ] - if bElite then - --print( "Elite Room, increasing expected value of item reward " .. nFixedGoldAwardOfDepth .. " to " .. nFixedGoldAwardOfDepth * ELITE_NEUTRAL_ITEM_VALUE_MODIFIER ) - nFixedGoldAwardOfDepth = nFixedGoldAwardOfDepth * ELITE_NEUTRAL_ITEM_VALUE_MODIFIER - end - local flBonusPct = PRICED_ITEM_BONUS_DEPTH_PCT * nRoomDepth - local nMaxValue = math.ceil( nFixedGoldAwardOfDepth * ( PRICED_ITEM_GOLD_MAX_PCT + flBonusPct ) ) - local nMinValue = math.floor( nFixedGoldAwardOfDepth * ( PRICED_ITEM_GOLD_MIN_PCT + flBonusPct ) ) - local vecPossibleItems = {} - - for szItemName, nValue in pairs( vecItemRewards ) do - if nValue >= nMinValue and nValue <= nMaxValue then - table.insert( vecPossibleItems, szItemName ) - end - end - - return vecPossibleItems -end - - -function GetRandomUnique( hRandomStream, Array, BlacklistValues ) - if Array == nil then - return nil - end - - --PrintTable( Array, "Array:" ) - --PrintTable( BlacklistValues, "BlacklistValues:" ) - - local Whitelist = {} - if BlacklistValues == nil then - Whitelist = Array - else - for _,Value in pairs(Array) do - if not TableContainsValue( BlacklistValues, Value ) then - table.insert(Whitelist, Value) - end - end - end - - local bIgnoreBlacklist = false - if #Whitelist < 1 then - bIgnoreBlacklist = true - Whitelist = Array - end - - local Candidate = nil - nIndex = hRandomStream:RandomInt(1,#Whitelist) - Candidate = Whitelist[ nIndex ] - - if bIgnoreBlacklist then - printf("WARNING: GetRandomUnique returning array[%d] = %s, ignoring blacklist.", nIndex, Candidate) - end - - return Candidate -end - -function GetRoomRewards( nRoomDepth, nRoomType, bElite, nPlayerID, vecExternalExcludeList ) - - local vecRewardStruct = nil - - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - - if hPlayerHero == nil then - printf("GetRoomRewards; Aborting, no hero entity for Player %d", nPlayerID ) - return nil - end - - if( vecExternalExcludeList == nil ) then - vecExternalExcludeList = {} - end - - local bLimitUltimateUpgrades = tonumber(nRoomDepth) == 1 - - local szHeroName = hPlayerHero:GetName() - local bHardRoom = bElite --or nRoomType == ROOM_TYPE_TRAPS - - -- Rarity: - -- Common = 0 - -- Rare = 1 - -- Epic = 2 - local iRewardRarity = 0 - - if bHardRoom == true then - iRewardRarity = 1 - end - - vecRewardStruct = ROOM_REWARDS[ "depth_" .. nRoomDepth].normal - - local hHeroRandomStream = GameRules.Aghanim:GetHeroRandomStream( nPlayerID ) - - -- first, choose the appropriate reward tier for each option - local vecGeneratedRewardTiers = {} - - for _,aRewardDef in pairs( vecRewardStruct ) do - - local flRoll = hHeroRandomStream:RandomFloat(0, 100.0) - local flThreshold = 0.0 - - for eRewardTier,flPct in pairs( aRewardDef ) do - flThreshold = flThreshold + flPct - if flRoll <= flThreshold then - table.insert( vecGeneratedRewardTiers, eRewardTier ) - break - end - end - end - - if TableLength(vecGeneratedRewardTiers) < 1 then - return nil - end - - -- shuffle the chosen reward tiers so that progressive probabilities are randomized - ShuffleListInPlace( vecGeneratedRewardTiers, hHeroRandomStream ) - - -- exclude any item or ability they've learned, chosen, have in inventory or are externally marked for exclusion - local vecAbilitiesToExclude = GetPlayerAbilitiesAndItems( nPlayerID ) - for ii=1,nRoomDepth-1 do - local RewardChoices = CustomNetTables:GetTableValue( "reward_choices", tostring(ii) ) - local RewardChoice = RewardChoices and RewardChoices[ tostring(nPlayerID) ] or nil - if RewardChoice and RewardChoice["ability_name"] and RewardChoice["reward_type"] ~= "REWARD_TYPE_MINOR_ABILITY_UPGRADE" and RewardChoice["reward_type"] ~= "REWARD_TYPE_MINOR_STATS_UPGRADE" then - table.insert( vecAbilitiesToExclude, RewardChoice["ability_name"] ) - end - end - - for _,ExcludeAbility in pairs(vecExternalExcludeList) do - table.insert( vecAbilitiesToExclude, ExcludeAbility ) - end - - local MinorUpgrades = deepcopy( MINOR_ABILITY_UPGRADES[ szHeroName ] ) - local MinorStatsUpgrades = deepcopy( MINOR_ABILITY_UPGRADES ["base_stats_upgrades"]) - - -- then for each option, roll a reward type, and don't repeat types - local vecGeneratedRewards = {} - local vecMinorAbilityIDsToExclude = {} - for _,eRewardTier in pairs(vecGeneratedRewardTiers) do - - local eGeneratedRewardType = nil - - local aRewardTierDef = RebalanceRewards( REWARD_TIER_TABLE[eRewardTier], vecGeneratedRewards ) - - local flRoll = hHeroRandomStream:RandomFloat(0, 100.0) - local flThreshold = 0.0 - local MinorAbilityUpgrade = nil - local MinorStatsUpgrade = nil - - for eRewardType,flPct in pairs( aRewardTierDef ) do - - flThreshold = flThreshold + flPct - if flRoll <= flThreshold then - - local szAbilityName = nil - local nQuantity = nil - - if eRewardType == "REWARD_TYPE_ABILITY_UPGRADE" then - - szAbilityName = GetRandomUnique( hHeroRandomStream, SPECIAL_ABILITY_UPGRADES[szHeroName], vecAbilitiesToExclude ) - iRewardRarity = 2 - - elseif eRewardType == "REWARD_TYPE_MINOR_ABILITY_UPGRADE" then - local k = hHeroRandomStream:RandomInt( 1, #MinorUpgrades ) - local Upgrade = MinorUpgrades[ k ] - table.remove( MinorUpgrades, k ) - MinorAbilityUpgrade = deepcopy( Upgrade ) - if bHardRoom then - print( "Elite Room, increasing expected value of ability upgrade from " .. MinorAbilityUpgrade[ "value" ] .. " to " .. MinorAbilityUpgrade[ "value" ] * ELITE_VALUE_MODIFIER ) - MinorAbilityUpgrade[ "value" ] = MinorAbilityUpgrade[ "value" ] * ELITE_VALUE_MODIFIER - end - --table.insert( vecMinorAbilityIDsToExclude, MinorAbilityUpgrade[ "id" ] ) - elseif eRewardType == "REWARD_TYPE_MINOR_STATS_UPGRADE" then - local k = hHeroRandomStream:RandomInt( 1, #MinorStatsUpgrades ) - local StatsUpgrade = MinorStatsUpgrades[ k ] - table.remove( MinorStatsUpgrades, k ) - MinorStatsUpgrade = deepcopy( StatsUpgrade ) - if bHardRoom then - print( "Elite Room, increasing expected value of stats upgrade from " .. MinorStatsUpgrade[ "value" ] .. " to " .. MinorStatsUpgrade[ "value" ] * ELITE_VALUE_MODIFIER ) - MinorStatsUpgrade[ "value" ] = MinorStatsUpgrade[ "value" ] * ELITE_VALUE_MODIFIER - end - - end - - if szAbilityName ~= nil then - - if bLimitUltimateUpgrades and szAbilityName and string.match(szAbilityName, ULTIMATE_ABILITY_NAMES[szHeroName] ) then - for _key,szAbilityUpgrade in pairs(SPECIAL_ABILITY_UPGRADES[szHeroName]) do - if string.match(szAbilityUpgrade, ULTIMATE_ABILITY_NAMES[szHeroName] ) then - table.insert( vecAbilitiesToExclude, szAbilityUpgrade ) - end - end - end - - table.insert( vecAbilitiesToExclude, szAbilityName ) - end - - local GeneratedReward = - { - reward_type = eRewardType, - reward_tier = eRewardTier, - ability_name = szAbilityName, - quantity = nQuantity, - rarity = iRewardRarity, - } - - if bHardRoom then - GeneratedReward[ "elite" ] = 1 - else - GeneratedReward[ "elite" ] = 0 - end - - if MinorAbilityUpgrade ~= nil then - GeneratedReward[ "ability_name" ] = MinorAbilityUpgrade[ "ability_name" ] - GeneratedReward[ "description" ] = MinorAbilityUpgrade[ "description" ] - GeneratedReward[ "value" ] = MinorAbilityUpgrade[ "value" ] - GeneratedReward[ "id" ] = MinorAbilityUpgrade[ "id" ] - end - - if MinorStatsUpgrade ~= nil then - GeneratedReward[ "ability_name" ] = MinorStatsUpgrade[ "ability_name" ] - GeneratedReward[ "description" ] = MinorStatsUpgrade[ "description" ] - GeneratedReward[ "value" ] = MinorStatsUpgrade[ "value" ] - GeneratedReward[ "id" ] = MinorStatsUpgrade[ "id" ] - end - - table.insert( vecGeneratedRewards, GeneratedReward ) - break - end - end - - table.insert( vecGeneratedRewards, GeneratedReward ) - end - - return vecGeneratedRewards - -end - -function TestRoomRewardConsoleCommand( cmdName, szRoomDepth, szIsElite, szIsTrapRoom ) - - --CustomNetTables:SetTableValue( "reward_options", "current_depth", { szRoomDepth } ); - - local bIsElite = (szIsElite == "true") - local bIsTrapRoom = (szIsTrapRoom == "true") - local szRoomDepth = tostring( tonumber( szRoomDepth ) ) - local nPlayerID = Entities:GetLocalPlayer():GetPlayerID() - local nRoomType = ROOM_TYPE_ENEMY - if bIsTrapRoom == true then - nRoomType = ROOM_TYPE_TRAPS - end - - --printf( "Running %s %d %s %s %s...", cmdName, nPlayerID, szRoomDepth, szIsElite, szIsTrapRoom ) - - CustomNetTables:SetTableValue( "reward_options", "current_depth", { szRoomDepth } ) - - CustomNetTables:SetTableValue( "reward_choices", szRoomDepth, {} ) - - local RewardOptions = {} - local vecPlayerRewards = GetRoomRewards( tonumber(szRoomDepth), nRoomType, bIsElite, nPlayerID ) - RewardOptions[ tostring(nPlayerID) ] = vecPlayerRewards; - - --DeepPrintTable( vecPlayerRewards ) - - CustomNetTables:SetTableValue( "reward_options", szRoomDepth, RewardOptions ) - -end - -function RebalanceRewards( aRewardDef, vecPreviouslyGeneratedRewards ) - - local aRebalancedRewardDef = deepcopy( aRewardDef ) - NormalizeFloatArrayInPlace( aRebalancedRewardDef, 100.0 ) - return aRebalancedRewardDef - -end - -function NormalizeFloatArrayInPlace( aFloatValues, flDesiredSum ) - - if flDesiredSum == nil then - flDesiredSum = 1.0 - end - - local flSum = 0 - for _,flFloatValue in pairs( aFloatValues ) do - flSum = flSum + flFloatValue - end - - for key,flFloatValue in pairs( aFloatValues ) do - aFloatValues[key] = ( aFloatValues[key] / flSum ) * flDesiredSum - end - -end - -function GrantRewards( nPlayerID, szRoomDepth, aReward ) - - local hPlayerHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - if hPlayerHero == nil then - printf("Aborting grant reward, no hero entity for Player %d", nPlayerID ) - return - end - - local RewardChoices = CustomNetTables:GetTableValue( "reward_choices", szRoomDepth ) - if RewardChoices == nil then - RewardChoices = {} - end - - local aExistingReward = RewardChoices[ tostring(nPlayerID) ] - if aExistingReward ~= nil then - printf("GrantRewards: Player %d, Depth %s, aborting granting Reward %s to to existing Reward: %s", nPlayerID, szRoomDepth, DeepToString(aReward), DeepToString(aExistingReward) ) - return - end - - printf("granting reward to %s: %s", hPlayerHero:GetName(), DeepToString(aReward) ) - - local eRewardType = aReward["reward_type"] - local nQuantity = aReward["quantity"] - local szAbilityName = aReward["ability_name"] - local bEliteReward = aReward["elite"] == 1 - - - --local eRewardTier = aReward["reward_tier" - if eRewardType == "REWARD_TYPE_ABILITY_UPGRADE" then - local data = {} - data["PlayerID"] = nPlayerID - data["AbilityName"] = szAbilityName - data["LevelReward"] = true - CAghanim:OnAbilityUpgradeButtonClicked(1, data) - GameRules.Aghanim:GetAnnouncer():OnRewardSelected( hPlayerHero, tonumber( szRoomDepth ), eRewardType, szAbilityName ) - elseif eRewardType == "REWARD_TYPE_MINOR_ABILITY_UPGRADE" then - local Upgrade = deepcopy( MINOR_ABILITY_UPGRADES[ hPlayerHero:GetUnitName() ][ aReward[ "id" ] ] ) - if bEliteReward then - Upgrade[ "value" ] = Upgrade[ "value" ] * ELITE_VALUE_MODIFIER - end - CAghanim:AddMinorAbilityUpgrade( hPlayerHero, Upgrade ) - GameRules.Aghanim:GetAnnouncer():OnRewardSelected( hPlayerHero, tonumber( szRoomDepth ), eRewardType, Upgrade.description ) - elseif eRewardType == "REWARD_TYPE_MINOR_STATS_UPGRADE" then - --Hook up via the same path as the minor ability upgrades - local StatsUpgrade = deepcopy( MINOR_ABILITY_UPGRADES[ "base_stats_upgrades" ][aReward[ "id" ] ] ) - if bEliteReward then - StatsUpgrade[ "value" ] = StatsUpgrade[ "value" ] * ELITE_VALUE_MODIFIER - end - --Make sure to grant and level up the stats ability if we haven't taken this reward yet - CAghanim:AddMinorAbilityUpgrade( hPlayerHero, StatsUpgrade ) - CAghanim:VerifyStatsAbility(hPlayerHero, StatsUpgrade[ "ability_name" ]) - GameRules.Aghanim:GetAnnouncer():OnRewardSelected( hPlayerHero, tonumber( szRoomDepth ), eRewardType, StatsUpgrade.description ) - end - - RewardChoices[ tostring(nPlayerID) ] = aReward - CustomNetTables:SetTableValue( "reward_choices", szRoomDepth, RewardChoices ) - CustomNetTables:SetTableValue( "reward_choices", "current_depth", { szRoomDepth } ) - - - local gameEvent = {} - if aReward["quantity"] then - gameEvent["int_value"] = tonumber(aReward["quantity"]) - end - if aReward["ability_name"] then - if eRewardType == "REWARD_TYPE_MINOR_ABILITY_UPGRADE" or eRewardType == "REWARD_TYPE_MINOR_STATS_UPGRADE" then - --PrintTable( aReward, " reward choice: " ) - gameEvent["string_replace_token"] = aReward [ "description" ] - gameEvent["ability_name"] = aReward[ "ability_name" ] - gameEvent["value"] = tonumber(aReward[ "value" ]) - else - gameEvent["locstring_value"] ="#DOTA_Tooltip_Ability_" .. aReward["ability_name"] - end - end - gameEvent["player_id"] = nPlayerID - gameEvent["teamnumber"] = -1 - gameEvent["message"] = "#DOTA_HUD_" .. aReward["reward_type"] .. "_Toast" - - --DeepPrintTable( RewardChoices ) - FireGameEvent( "dota_combat_event_message", gameEvent ) -end - --------------------------------------------------------------------------------- - -function GenerateRewardStatsForPlayer( hPlayerHero, reward ) - - local szAbilityName = nil - local szAbilityTexture = nil - - if reward.reward_type == "REWARD_TYPE_ABILITY_UPGRADE" then - szAbilityName = reward.ability_name - szAbilityTexture = GetAbilityTextureNameForAbility( szAbilityName ) - elseif reward.reward_type == "REWARD_TYPE_MINOR_ABILITY_UPGRADE" then - szAbilityName = MINOR_ABILITY_UPGRADES[ hPlayerHero:GetUnitName() ][ reward.id ].description - szAbilityTexture = GetAbilityTextureNameForAbility( reward.ability_name ) - elseif reward.reward_type == "REWARD_TYPE_MINOR_STATS_UPGRADE" then - szAbilityName = MINOR_ABILITY_UPGRADES[ "base_stats_upgrades" ][ reward.id ].description - szAbilityTexture = "attribute_bonus" - end - - if szAbilityName == nil then - return nil - end - - local rewardStats = - { - ability_name = szAbilityName, - rarity = reward.rarity, -- 0 - normal, 1 - elite, 2 - boss - } - - if reward.value ~= nil then - rewardStats.value = reward.value - end - - if szAbilityTexture ~= nil then - rewardStats.ability_texture = szAbilityTexture - end - - return rewardStats - -end - --------------------------------------------------------------------------------- - -function GenerateRewardStats( nPlayerID, szRoomDepth, roomOptions, szRewardIndex ) - - local hHero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) - local rewardStats = - { - selected_reward = GenerateRewardStatsForPlayer( hHero, roomOptions[ szRewardIndex ] ), - unselected_rewards = {} - } - - for key,reward in pairs ( roomOptions ) do - if key ~= szRewardIndex then - table.insert( rewardStats.unselected_rewards, GenerateRewardStatsForPlayer( hHero, reward ) ) - end - end - - GameRules.Aghanim:RegisterRewardStats( nPlayerID, szRoomDepth, rewardStats ) - -end - --------------------------------------------------------------------------------- - -function OnRewardChoice( eventSourceIndex, data ) - - local nPlayerID = data["PlayerID"] - local szRoomDepth = tostring(data["room_depth"]) - local szRewardIndex = tostring(data["reward_index"]) - - --printf("Processing reward choice for Player %d, %s", nPlayerID, DeepToString(data)) - - local rewardOptions = CustomNetTables:GetTableValue( "reward_options", szRoomDepth ) - if rewardOptions == nil then - return - end - - local roomOptions = rewardOptions[ tostring( nPlayerID ) ] - - --printf("reward options data %d %s %s %s", nPlayerID, szRewardIndex, DeepToString(roomOptions.keys), DeepToString(roomOptions)); - - local aReward = roomOptions[szRewardIndex] - - GrantRewards( nPlayerID, szRoomDepth, aReward ) - - GenerateRewardStats( nPlayerID, szRoomDepth, roomOptions, szRewardIndex ) -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/room_tables.lua b/aghanim_singleplayer/scripts/vscripts/room_tables.lua deleted file mode 100755 index 311e8d2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/room_tables.lua +++ /dev/null @@ -1,1187 +0,0 @@ -require( "constants" ) - -_G.MAP_ATLAS_ROOM_SIZE = 4096 -_G.MAP_ATLAS_ACT2_OFFSET = 1536 -_G.MAP_ATLAS_ELITE_ROOMS_PER_ACT = -{ - -- NOTE: Indexed by ascension level - { - 3, 4, 4 - }, - { - 4, 5, 5 - }, - { - 5, 6, 6 - }, - { - 6, 6, 7 - }, -} -_G.MAP_TRAP_ROOMS_PER_ACT = -{ - 1, 1, 1 -} -_G.MAP_HIDDEN_ENCOUNTERS_PER_ACT = -{ - 3, 3, 3 -} - --- Starting bottom left -_G.MAP_ATLAS = -{ - -- - -- Act 1 - -- - - a1_1a = - { - name="a1_1a", - exit_up="a1_2a", - exit_side="a1_2b", - nRoomType = ROOM_TYPE_STARTING, - bCannotBeElite = true, - nDepth = 1, - vCenter = Vector( -7 * MAP_ATLAS_ROOM_SIZE / 2, -7 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a1_2a = - { - name="a1_2a", - exit_up="a1_3a", - exit_side="a1_3b", - nRoomType = ROOM_TYPE_ENEMY, - bCannotBeTrap = true, - nDepth = 2, - vCenter = Vector( -7 * MAP_ATLAS_ROOM_SIZE / 2, -5 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a1_2b = - { - name="a1_2b", - exit_up="a1_3b", - exit_side="a1_3c", - nRoomType = ROOM_TYPE_ENEMY, - bCannotBeTrap = true, - nDepth = 2, - vCenter = Vector( -5 * MAP_ATLAS_ROOM_SIZE / 2, -7 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a1_3a = - { - name="a1_3a", - exit_up="a1_4a", - exit_side="a1_4b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 3, - vCenter = Vector( -7 * MAP_ATLAS_ROOM_SIZE / 2, -3 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a1_3b = - { - name="a1_3b", - exit_up="a1_4b", - exit_side="a1_4c", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 3, - vCenter = Vector( -5 * MAP_ATLAS_ROOM_SIZE / 2, -5 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a1_3c = - { - name="a1_3c", - exit_up="a1_4c", - exit_side="a1_4d", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 3, - vCenter = Vector( -3 * MAP_ATLAS_ROOM_SIZE / 2, -7 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a1_4a = - { - name="a1_4a", - exit_side="a1_5a", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 4, - vCenter = Vector( -7 * MAP_ATLAS_ROOM_SIZE / 2, -1 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a1_4b = - { - name="a1_4b", - exit_up="a1_5a", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 4, - vCenter = Vector( -5 * MAP_ATLAS_ROOM_SIZE / 2, -3 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a1_4c = - { - name="a1_4c", - exit_side="a1_5b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 4, - vCenter = Vector( -3 * MAP_ATLAS_ROOM_SIZE / 2, -5 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a1_4d = - { - name="a1_4d", - exit_up="a1_5b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 4, - vCenter = Vector( -1 * MAP_ATLAS_ROOM_SIZE / 2, -7 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a1_5a = - { - name="a1_5a", - exit_side="a1_boss", - nRoomType = ROOM_TYPE_ENEMY, - bCannotBeTrap = true, - bCannotBeElite = true, - nDepth = 5, - vCenter = Vector( -5 * MAP_ATLAS_ROOM_SIZE / 2, -1 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a1_5b = - { - name="a1_5b", - exit_up="a1_boss", - nRoomType = ROOM_TYPE_ENEMY, - bCannotBeTrap = true, - bCannotBeElite = true, - nDepth = 5, - vCenter = Vector( -1 * MAP_ATLAS_ROOM_SIZE / 2, -5 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a1_boss = - { - name="a1_boss", - exit_side="a2_transition", - nRoomType = ROOM_TYPE_BOSS, - bCannotBeElite = true, - nDepth = 6, - vCenter = Vector( -1 * MAP_ATLAS_ROOM_SIZE, -1 * MAP_ATLAS_ROOM_SIZE, 0 ), - vSize = Vector( 2 * MAP_ATLAS_ROOM_SIZE, 2 * MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - -- - -- Transition Act 1 -> Act 2 - -- - - a2_transition = - { - name="a2_transition", - exit_up="a2_1a", - nRoomType = ROOM_TYPE_BONUS, - bCannotBeElite = true, - nDepth = 7, - vCenter = Vector( 2 * MAP_ATLAS_ROOM_SIZE, -11 * MAP_ATLAS_ROOM_SIZE / 4 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( 4 * MAP_ATLAS_ROOM_SIZE, 3 * MAP_ATLAS_ROOM_SIZE / 2, 0 ) - }, - - -- - -- Act 2 - -- - a2_1a = - { - name="a2_1a", - exit_up="a2_2a", - exit_side="a2_2b", - nRoomType = ROOM_TYPE_ENEMY, - bCannotBeElite = true, - bCannotBeTrap = true, - nDepth = 8, - vCenter = Vector( 7 * MAP_ATLAS_ROOM_SIZE / 2, -3 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a2_2a = - { - name="a2_2a", - exit_up="a2_3a", - exit_side="a2_3b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 9, - vCenter = Vector( 7 * MAP_ATLAS_ROOM_SIZE / 2, -1 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a2_2b = - { - name="a2_2b", - exit_up="a2_3b", - exit_side="a2_3c", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 9, - vCenter = Vector( 5 * MAP_ATLAS_ROOM_SIZE / 2, -3 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a2_3a = - { - name="a2_3a", - exit_up="a2_4a", - exit_side="a2_4b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 10, - vCenter = Vector( 7 * MAP_ATLAS_ROOM_SIZE / 2, 1 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a2_3b = - { - name="a2_3b", - exit_up="a2_4b", - exit_side="a2_4c", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 10, - vCenter = Vector( 5 * MAP_ATLAS_ROOM_SIZE / 2, -1 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a2_3c = - { - name="a2_3c", - exit_up="a2_4c", - exit_side="a2_4d", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 10, - vCenter = Vector( 3 * MAP_ATLAS_ROOM_SIZE / 2, -3 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a2_4a = - { - name="a2_4a", - exit_side="a2_5a", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 11, - vCenter = Vector( 7 * MAP_ATLAS_ROOM_SIZE / 2, 3 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a2_4b = - { - name="a2_4b", - exit_up="a2_5a", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 11, - vCenter = Vector( 5 * MAP_ATLAS_ROOM_SIZE / 2, 1 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a2_4c = - { - name="a2_4c", - exit_side="a2_5b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 11, - vCenter = Vector( 3 * MAP_ATLAS_ROOM_SIZE / 2, -1 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a2_4d = - { - name="a2_4d", - exit_up="a2_5b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 11, - vCenter = Vector( 1 * MAP_ATLAS_ROOM_SIZE / 2, -3 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a2_5a = - { - name="a2_5a", - exit_side="a2_boss", - nRoomType = ROOM_TYPE_TRANSITIONAL, - bCannotBeElite = true, - nDepth = 12, - vCenter = Vector( 5 * MAP_ATLAS_ROOM_SIZE / 2, 3 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a2_5b = - { - name="a2_5b", - exit_up="a2_boss", - nRoomType = ROOM_TYPE_TRANSITIONAL, - bCannotBeElite = true, - nDepth = 12, - vCenter = Vector( 1 * MAP_ATLAS_ROOM_SIZE / 2, -1 * MAP_ATLAS_ROOM_SIZE / 2 + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a2_boss = - { - name="a2_boss", - exit_side="a3_1a", - nRoomType = ROOM_TYPE_BOSS, - bCannotBeElite = true, - nDepth = 13, - vCenter = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE + MAP_ATLAS_ACT2_OFFSET, 0 ), - vSize = Vector( 2 * MAP_ATLAS_ROOM_SIZE, 2 * MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - -- - -- Act 3 - -- - a3_1a = - { - name="a3_1a", - exit_up="a3_2a", - exit_side="a3_2b", - nRoomType = ROOM_TYPE_BONUS, - bCannotBeElite = true, - nDepth = 14, - vCenter = Vector( -1 * MAP_ATLAS_ROOM_SIZE / 2, 1 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a3_2a = - { - name="a3_2a", - exit_up="a3_3a", - exit_side="a3_3b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 15, - vCenter = Vector( -1 * MAP_ATLAS_ROOM_SIZE / 2, 3 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a3_2b = - { - name="a3_2b", - exit_up="a3_3b", - exit_side="a3_3c", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 15, - vCenter = Vector( -3 * MAP_ATLAS_ROOM_SIZE / 2, 1 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a3_3a = - { - name="a3_3a", - exit_up="a3_4a", - exit_side="a3_4b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 16, - vCenter = Vector( -1 * MAP_ATLAS_ROOM_SIZE / 2, 5 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a3_3b = - { - name="a3_3b", - exit_up="a3_4b", - exit_side="a3_4c", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 16, - vCenter = Vector( -3 * MAP_ATLAS_ROOM_SIZE / 2, 3 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a3_3c = - { - name="a3_3c", - exit_up="a3_4c", - exit_side="a3_4d", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 16, - vCenter = Vector( -5 * MAP_ATLAS_ROOM_SIZE / 2, 1 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a3_4a = - { - name="a3_4a", - exit_side="a3_5a", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 17, - vCenter = Vector( -1 * MAP_ATLAS_ROOM_SIZE / 2, 7 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a3_4b = - { - name="a3_4b", - exit_up="a3_5a", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 17, - vCenter = Vector( -3 * MAP_ATLAS_ROOM_SIZE / 2, 5 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a3_4c = - { - name="a3_4c", - exit_side="a3_5b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 17, - vCenter = Vector( -5 * MAP_ATLAS_ROOM_SIZE / 2, 3 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a3_4d = - { - name="a3_4d", - exit_up="a3_5b", - nRoomType = ROOM_TYPE_ENEMY, - nDepth = 17, - vCenter = Vector( -7 * MAP_ATLAS_ROOM_SIZE / 2, 1 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a3_5a = - { - name="a3_5a", - exit_side="a3_boss", - nRoomType = ROOM_TYPE_TRANSITIONAL, - bCannotBeElite = true, - nDepth = 18, - vCenter = Vector( -3 * MAP_ATLAS_ROOM_SIZE / 2, 7 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - a3_5b = - { - name="a3_5b", - exit_up="a3_boss", - nRoomType = ROOM_TYPE_TRANSITIONAL, - bCannotBeElite = true, - nDepth = 18, - vCenter = Vector( -7 * MAP_ATLAS_ROOM_SIZE / 2, 3 * MAP_ATLAS_ROOM_SIZE / 2, 0 ), - vSize = Vector( MAP_ATLAS_ROOM_SIZE, MAP_ATLAS_ROOM_SIZE, 0 ) - }, - - a3_boss = - { - name="a3_boss", - nRoomType = ROOM_TYPE_BOSS, - bCannotBeElite = true, - nDepth = 19, - vCenter = Vector( -3 * MAP_ATLAS_ROOM_SIZE, 3 * MAP_ATLAS_ROOM_SIZE, 0 ), - vSize = Vector( 2 * MAP_ATLAS_ROOM_SIZE, 2 * MAP_ATLAS_ROOM_SIZE, 0 ) - }, -} - -_G.ENCOUNTER_DEFINITIONS = -{ - -- Spawn room encounter - encounter_starting_room = - { - nEncounterType = ROOM_TYPE_STARTING, - nMinDepth = 1, - nMaxDepth = 1, - }, - - -- Normal encounters - encounter_empty_cavern = - { - szMapNames = { "empty_cavern" }, - nEncounterType = ROOM_TYPE_TRANSITIONAL, - nMinDepth = 12, - nMaxDepth = 12, - }, - - encounter_empty_beach = - { - szMapNames = { "empty_beach" }, - nEncounterType = ROOM_TYPE_TRANSITIONAL, - nMinDepth = 18, - nMaxDepth = 18, - }, - encounter_brewmaster = - { - szMapNames = { "radiant_ring" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 2, - nMaxDepth = 2, - }, - encounter_hellbears_portal_v3 = - { - szMapNames = { "fodder_arena2" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 2, - nMaxDepth = 2, - }, - encounter_pinecones = - { - szMapNames = { "fodder_random_portals", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 2, - nMaxDepth = 2, - }, - encounter_quill_beasts = - { - szMapNames = { "radiant_forest", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 2, - nMaxDepth = 2, - }, - encounter_jungle_hijinx = - { - szMapNames = { "jungle_hijinx" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 3, - nMaxDepth = 3, - }, - encounter_tusk_skeletons = - { - szMapNames = { "defend_highground_snow", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 3, - nMaxDepth = 3, - }, - encounter_bombers = - { - szMapNames = { "defend_highground" }, -- Need a "trigger_spawn_creatures" trigger - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 3, - nMaxDepth = 3, - }, - encounter_drow_ranger_miniboss = - { - szMapNames = { "drow_ranger_miniboss" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 3, - nMaxDepth = 3, - }, - - encounter_wave_blasters = - { - szMapNames = { "arena" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 4, - nMaxDepth = 4, - }, - encounter_baby_ogres = - { - szMapNames = { "baby_ogres", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 4, - nMaxDepth = 4, - }, - encounter_morphlings_b = - { - szMapNames = { "shoal", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 4, - nMaxDepth = 4, - }, - encounter_zealot_scarabs = - { - szMapNames = { "desert_oasis" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 4, - nMaxDepth = 4, - }, - - encounter_ogre_seals = - { - szMapNames = { "snowy_river" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 5, - nMaxDepth = 5, - }, - encounter_warlocks = - { - szMapNames = { "scorched_plain" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 5, - nMaxDepth = 5, - }, - encounter_gauntlet = - { - szMapNames = { "catacombs", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 5, - nMaxDepth = 5, - }, - - -- Act 2 - - encounter_morty_transition = - { - szMapNames = { "morty_transition" }, - nEncounterType = ROOM_TYPE_BONUS, - nMinDepth = 7, - nMaxDepth = 7, - }, - encounter_penguins_transition = - { - szMapNames = { "penguins_transition" }, - nEncounterType = ROOM_TYPE_BONUS, - nMinDepth = 7, - nMaxDepth = 7, - }, - - encounter_mirana = - { - szMapNames = { "plains" }, -- If you add more here, make sure there are info_target "retreat_point" entities authored in the map - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 8, - nMaxDepth = 8, - }, - encounter_mushroom_mines = - { - szMapNames = { "mushroom_mines" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 8, - nMaxDepth = 8, - }, - encounter_legion_commander = - { - szMapNames = { "radiant_stadium" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 8, - nMaxDepth = 8, - }, - - encounter_troll_warlord = - { - szMapNames = { "dire_trading_post" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 9, - nMaxDepth = 9, - }, - encounter_pudge_miniboss = - { - szMapNames = { "pudge_defend_lowground" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 9, - nMaxDepth = 9, - }, - encounter_pucks = - { - szMapNames = { "meadow" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 9, - nMaxDepth = 9, - }, - encounter_dark_seer = - { - szMapNames = { "frozen_cliffs" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 9, - nMaxDepth = 9, - }, - - encounter_spectres = - { - szMapNames = { "gloom" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 10, - nMaxDepth = 10, - }, - encounter_shadow_demons = - { - szMapNames = { "shadow_demon_forest" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 10, - nMaxDepth = 10, - }, - encounter_rock_golems = - { - szMapNames = { "mines_arena" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 10, - nMaxDepth = 10, - }, - - encounter_naga_siren = - { - szMapNames = { "defend_lowground" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 10, - nMaxDepth = 10, - }, - - encounter_dire_siege = - { - szMapNames = { "a2_gauntlet" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 11, - nMaxDepth = 11, - }, - encounter_big_ogres = - { - szMapNames = { "bog", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 11, - nMaxDepth = 11, - }, - encounter_dragon_knight = - { - szMapNames = { "fortress", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 11, - nMaxDepth = 11, - }, - - encounter_kunkka_tide = - { - szMapNames = { "coastal_arena", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 11, - nMaxDepth = 11, - }, - - -- Act 3 - encounter_alchemist = - { - szMapNames = { "chemlab" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 15, - nMaxDepth = 15, - }, - - encounter_enraged_wildwings = - { - szMapNames = { "wildwings_arena" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 15, - nMaxDepth = 15, - }, - encounter_elemental_tiny = - { - szMapNames = { "tiny_arena" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 15, - nMaxDepth = 15, - }, - - encounter_bandits = - { - szMapNames = { "badlands" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 16, - nMaxDepth = 16, - }, - encounter_bomb_squad = - { - szMapNames = { "snowy_portals" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 16, - nMaxDepth = 16, - }, - encounter_undead_woods = - { - szMapNames = { "undead_woods" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 16, - nMaxDepth = 16, - }, - - encounter_phoenix = - { - szMapNames = { "burning_mesa" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 17, - nMaxDepth = 17, - }, - encounter_broodmothers = - { - szMapNames = { "spider_cave" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 17, - nMaxDepth = 17, - }, - - encounter_fire_roshan = - { - szMapNames = { "underground_cave" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 17, - nMaxDepth = 17, - }, - - - encounter_boss_visage = - { - szMapNames = { "mausoleum" }, - nEncounterType = ROOM_TYPE_BOSS, - nMinDepth = 6, - nMaxDepth = 6, - }, - - encounter_boss_timbersaw = - { - szMapNames = { "forest_hill_boss" }, - nEncounterType = ROOM_TYPE_BOSS, - nMinDepth = 6, - nMaxDepth = 6, - }, - encounter_temple_guardians = - { - szMapNames = { "floating_chamber_boss2" }, - szFlippedMapNames = { "template_boss_r_to_l" }, - nEncounterType = ROOM_TYPE_BOSS, - nMinDepth = 6, - nMaxDepth = 6, - }, - - encounter_storegga = - { - szMapNames = { "boss_island_r_to_l" }, - szFlippedMapNames = { "template_boss_l_to_r" }, - nEncounterType = ROOM_TYPE_BOSS, - nMinDepth = 13, - nMaxDepth = 13, - }, - encounter_boss_void_spirit = - { - szMapNames = { "boss_void_spirit" }, - szFlippedMapNames = { "template_boss_l_to_r" }, - nEncounterType = ROOM_TYPE_BOSS, - nMinDepth = 13, - nMaxDepth = 13, - }, - - encounter_aghanim = - { - szMapNames = { "aghanim_arena2" }, - nEncounterType = ROOM_TYPE_BOSS, - nMinDepth = 19, - nMaxDepth = 19, - }, - - encounter_rhyzik = - { - szMapNames = { "boss_island_r_to_l" }, - szFlippedMapNames = { "template_boss_l_to_r" }, - nEncounterType = ROOM_TYPE_BOSS, - nMinDepth = 19, - nMaxDepth = 19, - }, - - -- Traps - encounter_jungle_fire_maze = - { - szMapNames = { "jungle_fire_maze" }, - nEncounterType = ROOM_TYPE_TRAPS, - nMinDepth = 3, - nMaxDepth = 6, - }, - - encounter_cliff_pass = - { - szMapNames = { "desert_cliff_pass" }, - nEncounterType = ROOM_TYPE_TRAPS, - nMinDepth = 3, - nMaxDepth = 6, - }, - - encounter_hellfire_canyon = - { - szMapNames = { "hellfire_canyon" }, - nEncounterType = ROOM_TYPE_TRAPS, - nMinDepth = 8, - nMaxDepth = 12, - }, - - encounter_temple_garden = - { - szMapNames = { "temple_garden_traps" }, - nEncounterType = ROOM_TYPE_TRAPS, - nMinDepth = 8, - nMaxDepth = 12, - }, - - encounter_castle_traps = - { - szMapNames = { "castle_traps" }, - nEncounterType = ROOM_TYPE_TRAPS, - nMinDepth = 15, - nMaxDepth = 17, - }, - - encounter_crypt_traps = - { - szMapNames = { "crypt_traps" }, - nEncounterType = ROOM_TYPE_TRAPS, - nMinDepth = 15, - nMaxDepth = 17, - }, - - --[[ - encounter_wrath = - { - szMapNames = { "kerblam" }, - nEncounterType = ROOM_TYPE_TRAPS, - nMinDepth = 7, - nMaxDepth = 19, - }, - ]] - - -- Transitions - --[[ - encounter_transition = - { - szMapNames = { "template_transitional_l_to_r" }, - szFlippedMapNames = { "template_transitional_r_to_l" }, - nEncounterType = ROOM_TYPE_BONUS, - nMinDepth = 1, - nMaxDepth = 19, - }, - ]] - - -- Reward room encounter - --[[ - encounter_test_reward_room = - { - szMapNames = { "template" }, - nEncounterType = ROOM_TYPE_BONUS, - nMinDepth = 2, - nMaxDepth = 19, - }, - ]] - - encounter_bonus_chicken = - { - szMapNames = { "defend_highground_chickens" }, -- Need a "trigger_spawn_creatures" trigger - nEncounterType = ROOM_TYPE_BONUS, - nMinDepth = 14, - nMaxDepth = 14, - }, - - encounter_pangolier = - { - szMapNames = { "temple_arena" }, -- Need a "trigger_spawn_creatures" trigger - nEncounterType = ROOM_TYPE_BONUS, - nMinDepth = 14, - nMaxDepth = 14, - }, - - - - - -- CUT ENCOUNTERS - --[[ - encounter_hellbears_portal_v2 = - { - szMapNames = { "fodder_arena2" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 2, - nMaxDepth = 2, - }, - - encounter_hellbears = - { - szMapNames = { "fodder_arena2" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 2, - nMaxDepth = 2, - }, - - encounter_enraged_hellbears = - { - szMapNames = { "fodder_arena", }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 2, - nMaxDepth = 2, - }, - ]]-- - - --[[ - encounter_wildwings = - { - szMapNames = { "fodder_arena2" }, - nEncounterType = ROOM_TYPE_ENEMY, - nMinDepth = 3, - nMaxDepth = 3, - }, - ]]-- - -} - --- Used to specify exit heights for particular maps -_G.MAP_EXIT_HEIGHTS = -{ - arena = - { - up = 128, - left = 0, - right = 0, - down = 0, - }, - - baby_ogres = - { - up = 128, - left = 0, - right = 0, - down = 0, - }, - - desert_oasis = - { - up = 128, - left = 0, - right = 0, - down = 0, - }, - - morty_transition = - { - up = 384, - left = 384, - right = 0, - down = 0, - }, - - penguins_transition = - { - up = 0, - left = 0, - right = 0, - down = 0, - }, - - floating_chamber_boss2 = - { - up = 256, - left = 256, - right = 256, - down = 256, - }, - - radiant_stadium = - { - up = 0, - left = 0, - right = 0, - down = 0, - }, - - test_height_diff = - { - up = 256, - left = 0, - right = 128, - down = 0, - }, - - empty_cavern = - { - up = 256, - left = 0, - right = 128, - down = 0, - }, - - empty_beach = - { - up = 256, - left = 0, - right = 128, - down = 0, - }, - - hellfire_canyon = - { - up = 128, - left = 128, - right = 128, - down = 128, - }, - - temple_garden_traps = - { - up = 0, - left = 0, - right = 0, - down = 0, - }, - - mausoleum = - { - up = 256, - left = 256, - right = 0, - down = 0, - }, -} - --- If you want a particular unit to have a different model scale, put it here -_G.ENCOUNTER_PREVIEW_SCALES = -{ - npc_dota_pinecone_champion = 1.2, - npc_dota_creature_hellbear = 1.2, - npc_dota_creature_spectral_tusk_mage = 1.5, - npc_dota_creature_baby_ogre_tank = 1.3, - npc_dota_creature_large_ogre_seal = 0.8, - npc_dota_creature_dazzle = 1.35, - npc_dota_creature_huge_broodmother = 1.6, - npc_dota_creature_morphling_big = 1.4, - npc_dota_creature_zealot_scarab = 1.4, - npc_dota_creature_ogre_tank = 1.8, - npc_dota_sled_penguin = 3.5, - npc_dota_creature_storegga = 1.5, - npc_dota_creature_mirana = 1.25, - npc_dota_creature_puck = 1.2, - npc_dota_creature_alchemist = 1.2, - npc_dota_creature_pudge = 1.2, - npc_dota_creature_warlock = 1.4, - npc_dota_creature_dragon_knight = 1.2, - npc_dota_creature_pudge_miniboss = 1.3, - npc_dota_creature_bomber = 1.5, - npc_dota_creature_bonus_chicken = 2.8, - npc_dota_creature_temple_guardian = 1.2, - npc_dota_boss_void_spirit = 1.2, - npc_aghsfort_creature_tornado_harpy = 1.8, - npc_dota_creature_drow_ranger_miniboss = 1.5, - npc_dota_creature_dark_seer = 1.5, - npc_dota_creature_shroom_giant = 1.6, - npc_dota_creature_troll_warlord_ranged = 1.5, - npc_dota_creature_bonus_greevil = 2.0, - npc_dota_creature_naga_siren_boss = 1.5, - npc_dota_creature_legion_commander = 1.25, - npc_dota_shop_keeper = 1.5, - npc_dota_spike_trap_ward = 0.5, - npc_dota_creature_huskar = 1.5, -} - --- For debugging at the moment, a fixed layout of rooms -_G.USE_ENCOUNTER_FIXED_LAYOUT = false - -_G.ENCOUNTER_FIXED_LAYOUT = -{ - a1_1a = "encounter_starting_room", - a1_2a = "encounter_quill_beasts", - a1_2b = "encounter_enraged_hellbears", - a1_3a = "encounter_bombers", - a1_3b = "encounter_jungle_fire_maze", --"encounter_tusk_skeletons", - a1_3c = "encounter_wildwings", - a1_4a = "encounter_wave_blasters", - a1_4b = "encounter_baby_ogres", - a1_4c = "encounter_morphlings", - a1_4d = "encounter_zealot_scarabs", - a1_5a = "encounter_warlocks", - a1_5b = "encounter_ogre_seals", - a1_boss = "encounter_boss_timbersaw", - - a2_transition = "encounter_morty_transition", - - a2_1a = "encounter_pudge_miniboss", - a2_2a = "encounter_mirana", - a2_2b = "encounter_mirana", - a2_3a = "encounter_spectres", - a2_3b = "encounter_rock_golems", - a2_3c = "encounter_spectres", - a2_4a = "encounter_dire_siege", - a2_4b = "encounter_big_ogres", - a2_4c = "encounter_hellfire_canyon", - a2_4d = "encounter_big_ogres", - a2_5a = "encounter_test_immediate_victory", - a2_5b = "encounter_test_immediate_victory", - a2_boss = "encounter_storegga", - - a3_1a = "encounter_bonus_chicken", - a3_2a = "encounter_alchemist", - a3_2b = "encounter_enraged_wildwings", - a3_3a = "encounter_elemental_tiny", - a3_3b = "encounter_bandits", - a3_3c = "encounter_bomb_squad", - a3_4a = "encounter_broodmothers", - a3_4b = "encounter_kunkka_tide", - a3_4c = "encounter_broodmothers", - a3_4d = "encounter_kunkka_tide", - a3_5a = "encounter_test_immediate_victory", - a3_5b = "encounter_test_immediate_victory", - a3_boss = "encounter_rhyzik", -} \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/spawner.lua b/aghanim_singleplayer/scripts/vscripts/spawner.lua deleted file mode 100755 index e3a6e91..0000000 --- a/aghanim_singleplayer/scripts/vscripts/spawner.lua +++ /dev/null @@ -1,173 +0,0 @@ -if CDotaSpawner == nil then - CDotaSpawner = class({}) -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:constructor( szSpawnerNameInput, szLocatorNameInput, rgUnitsInfoInput ) - self.szSpawnerName = szSpawnerNameInput - self.szLocatorName = szLocatorNameInput - self.rgUnitsInfo = rgUnitsInfoInput - self.rgSpawners = {} - self.Encounter = nil -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:GetSpawnerType() - return "CDotaSpawner" -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:Precache( context ) - --print( "CDotaSpawner:Precache called for " .. self.szSpawnerName ) - - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - PrecacheUnitByNameSync( rgUnitInfo.EntityName, context, -1 ) - end -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:OnEncounterLoaded( EncounterInput ) - --print( "CDotaSpawner:OnEncounterLoaded called for " .. self.szSpawnerName ) - self.Encounter = EncounterInput - self.rgSpawners = self.Encounter:GetRoom():FindAllEntitiesInRoomByName( self.szLocatorName, false ) - if #self.rgSpawners == 0 then - print( "Failed to find entity " .. self.szSpawnerName .. " as spawner position in map " .. self.Encounter:GetRoom():GetMapName() ) - end -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:GetSpawnPositionCount() - return #self.rgSpawners -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:GetSpawnCountPerSpawnPosition() - - local nCount = 0 - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - nCount = nCount + rgUnitInfo.Count - end - return nCount - -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:SpawnUnits() - - if #self.rgSpawners == 0 then - print( "ERROR - Spawner " .. self.szSpawnerName .. " found no spawn entities, cannot spawn" ) - return - end - - local nSpawned = 0 - - local hSpawnedUnits = {} - - for nSpawnerIndex,hSpawner in pairs( self.rgSpawners ) do - local vLocation = hSpawner:GetAbsOrigin() - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - local hSingleSpawnedUnits = self:SpawnSingleUnitType( rgUnitInfo, vLocation ) - nSpawned = nSpawned + rgUnitInfo.Count - - for _,hUnit in pairs ( hSingleSpawnedUnits ) do - table.insert( hSpawnedUnits, hUnit ) - end - end - end - - printf( "%s spawning %d units", self.szSpawnerName, nSpawned ) - - if #hSpawnedUnits > 0 then - self.Encounter:OnSpawnerFinished( self, hSpawnedUnits ) - end - - return hSpawnedUnits -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:SpawnSingleUnitType( rgUnitInfo, vLocation ) - local hSpawnedUnits = {} - for i=1,rgUnitInfo.Count do - local vSpawnPos = vLocation - if rgUnitInfo.PositionNoise ~= nil then - vSpawnPos = vSpawnPos + RandomVector( RandomFloat( 0.0, rgUnitInfo.PositionNoise ) ) - end - - local hUnit = CreateUnitByName( rgUnitInfo.EntityName, vSpawnPos, true, nil, nil, rgUnitInfo.Team ) - - if hUnit == nil then - print( "ERROR! Failed to spawn unit named " .. rgUnitInfo.EntityName ) - - else - hUnit:FaceTowards( vLocation ) - if rgUnitInfo.PostSpawn ~= nil then - rgUnitInfo.PostSpawn( hUnit ) - end - table.insert( hSpawnedUnits, hUnit ) - end - end - - return hSpawnedUnits -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:GetSpawners() - return self.rgSpawners -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:SpawnUnitsFromRandomSpawners( nSpawners ) - print( "spawning from " .. nSpawners .. " " .. self.szSpawnerName .. " spawers out of " .. #self.rgSpawners ) - local hAllSpawnedUnits = {} - local Spawners = nil - for n=1,nSpawners do - if Spawners == nil or #Spawners == 0 then - Spawners = deepcopy( self.rgSpawners ) - end - - --print ( #Spawners .. " potential spawners to use." ) - - local nIndex = math.random( 1, #Spawners ) - local Spawner = Spawners[ nIndex ] - if Spawner == nil then - print ( "ERROR! SpawnUnitsFromRandomSpawners went WRONG!!!!!!!!!!!!!" ) - else - local vLocation = Spawner:GetAbsOrigin() - for _,rgUnitInfo in pairs ( self.rgUnitsInfo ) do - local hSpawnedUnits = self:SpawnSingleUnitType( rgUnitInfo, vLocation ) - for _,hUnit in pairs ( hSpawnedUnits ) do - table.insert( hAllSpawnedUnits, hUnit ) - end - end - end - table.remove( Spawners, nIndex ) - end - - if #hAllSpawnedUnits > 0 then - self.Encounter:OnSpawnerFinished( self, hAllSpawnedUnits ) - end - - return hAllSpawnedUnits -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:GetSpawnerName() - return self.szSpawnerName -end - ----------------------------------------------------------------------------- - -function CDotaSpawner:GetLocatorName() - return self.szLocatorName -end \ No newline at end of file diff --git a/aghanim_singleplayer/scripts/vscripts/traps/arrow_trap_triggered.lua b/aghanim_singleplayer/scripts/vscripts/traps/arrow_trap_triggered.lua deleted file mode 100755 index 55658e0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/arrow_trap_triggered.lua +++ /dev/null @@ -1,47 +0,0 @@ - ---------------------------------------------------------------------------- --- Arrow Trap ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - if thisEntity.isTrapActivated then - printf( "Trap Skip" ) - return - end - - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.TrapActivate", thisEntity ) - thisEntity.isTrapActivated = true - - thisEntity.hArrowAbility = thisEntity:FindAbilityByName( "arrow" ) - if thisEntity.hArrowAbility == nil then - print( "ERROR: thisEntity.hArrowAbility not found" ) - return - end - - local fDelay = 0.6 - thisEntity:SetContextThink( "ArrowTrapActivate", function() return ArrowTrapActivate() end, fDelay ) -end - ---------------------------------------------------------------------------- - -function ArrowTrapActivate() - if not IsServer() then - return - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if thisEntity.isTrapActivated == true then - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hArrowAbility, -1 ) - - thisEntity.isTrapActivated = false - end - - return -1 -end - ---------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_a.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_a.lua deleted file mode 100755 index 3b344d0..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_a.lua +++ /dev/null @@ -1,56 +0,0 @@ - ---print( "fire_trap_cycle_a" ) - ---------------------------------------------------------------------------- --- Fire Trap Cycle ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - thisEntity.fRefireTime = 1.5 - - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger ) - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - - thisEntity:SetContextThink( "ActivateTrap", function() return FireTrapActivate() end, 0 ) -end - ---------------------------------------------------------------------------- - -function DisableTrap( trigger ) - thisEntity.bDisabled = true -end - ---------------------------------------------------------------------------- - -function FireTrapActivate() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - end - - return 0.5 -end - ---------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_alternating.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_alternating.lua deleted file mode 100755 index 6d04d1b..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_alternating.lua +++ /dev/null @@ -1,90 +0,0 @@ - ---------------------------------------------------------------------------- --- Fire Trap ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger ) - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - thisEntity.fRefireTime = 1.8 - thisEntity.fQuickRefireTime = 0.5 - thisEntity.bNextAttackIsNormal = false - - thisEntity.nQuickRefires = 0 - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - - thisEntity:SetContextThink( "FireTrapActivateAlternating", function() return FireTrapActivateAlternating() end, 0 ) -end - ---------------------------------------------------------------------------- - -function DisableTrap( trigger ) - thisEntity.bDisabled = true -end - ---------------------------------------------------------------------------- - -function FireTrapActivateAlternating() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - if thisEntity.bNextAttackIsNormal == false then - return QuickRefire() - else - return NormalRefire() - end - end - - return 0.25 -end - ---------------------------------------------------------------------------- - -function QuickRefire() - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - - thisEntity.nQuickRefires = thisEntity.nQuickRefires + 1 - - if thisEntity.nQuickRefires <= 2 then - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - else - thisEntity.bNextAttackIsNormal = true - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - thisEntity.nQuickRefires = 0 -- reset counter - end - - return 0.25 -end - ---------------------------------------------------------------------------- - -function NormalRefire() - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - thisEntity.bNextAttackIsNormal = false - - return 0.25 -end - ---------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_b.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_b.lua deleted file mode 100755 index 738ebd6..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_b.lua +++ /dev/null @@ -1,54 +0,0 @@ - ---------------------------------------------------------------------------- --- Fire Trap Cycle ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - thisEntity.fRefireTime = 2.0 - - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger ) - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - - thisEntity:SetContextThink( "ActivateTrap", function() return FireTrapActivate() end, 0 ) -end - ---------------------------------------------------------------------------- - -function DisableTrap( trigger ) - thisEntity.bDisabled = true -end - ---------------------------------------------------------------------------- - -function FireTrapActivate() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - end - - return 0.5 -end - ---------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_c.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_c.lua deleted file mode 100755 index 0b68f0e..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_c.lua +++ /dev/null @@ -1,54 +0,0 @@ - ---------------------------------------------------------------------------- --- Fire Trap Cycle ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - thisEntity.fRefireTime = 2.5 - - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger ) - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - - thisEntity:SetContextThink( "ActivateTrap", function() return FireTrapActivate() end, 0 ) -end - ---------------------------------------------------------------------------- - -function DisableTrap( trigger ) - thisEntity.bDisabled = true -end - ---------------------------------------------------------------------------- - -function FireTrapActivate() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - end - - return 0.5 -end - ---------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_d.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_d.lua deleted file mode 100755 index d30f604..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_d.lua +++ /dev/null @@ -1,54 +0,0 @@ - ---------------------------------------------------------------------------- --- Fire Trap Cycle ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - thisEntity.fRefireTime = 3.9 - - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger ) - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - - thisEntity:SetContextThink( "ActivateTrap", function() return FireTrapActivate() end, 0 ) -end - ---------------------------------------------------------------------------- - -function DisableTrap( trigger ) - thisEntity.bDisabled = true -end - ---------------------------------------------------------------------------- - -function FireTrapActivate() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - end - - return 0.5 -end - ---------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_shuffle.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_shuffle.lua deleted file mode 100755 index cd2f487..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_shuffle.lua +++ /dev/null @@ -1,220 +0,0 @@ - ---print( "fire_trap_cycle_shuffle" ) - ---------------------------------------------------------------------------- --- Fire Trap Cycle Shuffle ---------------------------------------------------------------------------- -function Spawn( entityKeyValues ) - if not IsServer() then - return - end - - if thisEntity == nil then - return - end - -- Determine the type of trap - -- If any one type is weighted we can insert more entries into the table - thisEntity.hTrapTable = { "standard", "standard", "standard", "tripleshot", "alternating" } - local nRandomType = RandomInt( 1,5 ) -- Change this number to correspond to the trap table entries - thisEntity.szTrapType = thisEntity.hTrapTable[nRandomType] - thisEntity.hRefireTable = { 1.5, 2.0, 2.5, 3.9 } - thisEntity.nQuickRefires = 0 - thisEntity.bNextAttackIsNormal = false - thisEntity.fRefireTime = 1.5 - thisEntity.fQuickRefireTime = 0.5 - - if thisEntity.szTrapType == "standard" then - --print("Standard Trap") - local nRandomRefireTime = RandomInt( 1,4 ) - thisEntity.fRefireTime = thisEntity.hRefireTable[ nRandomRefireTime ] - --print( "Refire time = " .. thisEntity.fRefireTime ) - elseif thisEntity.szTrapType == "tripleshot" then - --print("Triple Shot Trap") - thisEntity.fRefireTime = 2.0 - --print( "Refire time = " .. thisEntity.fRefireTime ) - elseif thisEntity.szTrapType == "alternating" then - --print("Alternating Trap") - thisEntity.fRefireTime = 1.8 - --print( "Refire time = " .. thisEntity.fRefireTime ) - end -end - - -function OnTrigger( trigger ) - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger ) - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - if thisEntity.szTrapType == "standard" then - -- Standard - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - - thisEntity:SetContextThink( "FireTrapActivate", function() return FireTrapActivate() end, 0 ) - elseif thisEntity.szTrapType == "tripleshot" then - -- TripleShot - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - - thisEntity:SetContextThink( "FireTrapActivateTriple", function() return FireTrapActivateTriple() end, 0 ) - elseif thisEntity.szTrapType == "alternating" then - -- Alternating - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - - thisEntity:SetContextThink( "FireTrapActivateAlternating", function() return FireTrapActivateAlternating() end, 0 ) - end -end - ---------------------------------------------------------------------------- - -function DisableTrap( trigger ) - thisEntity.bDisabled = true -end - ---------------------------------------------------------------------------- - -function FireTrapActivate() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - end - - return 0.5 -end - ---------------------------------------------------------------------------- - -function FireTrapActivateTriple() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - return QuickRefireTriple() - end - - return 0.25 -end - ---------------------------------------------------------------------------- - -function QuickRefireTriple() - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - - thisEntity.nQuickRefires = thisEntity.nQuickRefires + 1 - - if thisEntity.nQuickRefires <= 2 then - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - else - thisEntity.bNextAttackIsNormal = true - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - thisEntity.nQuickRefires = 0 -- reset counter - end - - return 0.25 -end - ---------------------------------------------------------------------------- - -function FireTrapActivateAlternating() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - if thisEntity.bNextAttackIsNormal == false then - return QuickRefireAlternating() - else - return NormalRefire() - end - end - - return 0.25 -end - ---------------------------------------------------------------------------- - -function QuickRefireAlternating() - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - - thisEntity.nQuickRefires = thisEntity.nQuickRefires + 1 - - if thisEntity.nQuickRefires <= 2 then - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - else - thisEntity.bNextAttackIsNormal = true - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - thisEntity.nQuickRefires = 0 -- reset counter - end - - return 0.25 -end - ---------------------------------------------------------------------------- - -function NormalRefire() - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - thisEntity.bNextAttackIsNormal = false - - return 0.25 -end - ---------------------------------------------------------------------------- - -function PickRandomShuffle( reference_list, bucket ) - if ( #reference_list == 0 ) then - return nil - end - - if ( #bucket == 0 ) then - -- ran out of options, refill the bucket from the reference - for k, v in pairs(reference_list) do - bucket[k] = v - end - end - - -- pick a value from the bucket and remove it - local pick_index = RandomInt( 1, #bucket ) - local result = bucket[ pick_index ] - table.remove( bucket, pick_index ) - return result -end - ---------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_tripleshot.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_tripleshot.lua deleted file mode 100755 index 1106e38..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_tripleshot.lua +++ /dev/null @@ -1,73 +0,0 @@ - ---------------------------------------------------------------------------- --- Fire Trap ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger ) - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - thisEntity.fRefireTime = 2.0 - thisEntity.fQuickRefireTime = 0.5 - - thisEntity.nQuickRefires = 0 - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - - thisEntity:SetContextThink( "ActivateTrap", function() return FireTrapActivate() end, 0 ) -end - ---------------------------------------------------------------------------- - -function DisableTrap( trigger ) - thisEntity.bDisabled = true -end - ---------------------------------------------------------------------------- - -function FireTrapActivate() - if not IsServer() then - return - end - - if thisEntity.bDisabled then - return -1 - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then - return QuickRefire() - end - - return 0.25 -end - ---------------------------------------------------------------------------- - -function QuickRefire() - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - - thisEntity.nQuickRefires = thisEntity.nQuickRefires + 1 - - if thisEntity.nQuickRefires <= 2 then - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime - else - thisEntity.bNextAttackIsNormal = true - thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime - thisEntity.nQuickRefires = 0 -- reset counter - end - - return 0.25 -end - ---------------------------------------------------------------------------- - diff --git a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_triggered.lua b/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_triggered.lua deleted file mode 100755 index 0496d7c..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/fire_trap_triggered.lua +++ /dev/null @@ -1,49 +0,0 @@ - ---------------------------------------------------------------------------- --- Fire Trap ---------------------------------------------------------------------------- - -function OnTrigger( trigger ) - if thisEntity.isTrapActivated then - print( "Trap Skip" ) - return - end - - EmitGlobalSound( "ui.ui_player_disconnected" ) - EmitSoundOn( "AghanimsFortress.FireTrap", thisEntity ) - thisEntity.isTrapActivated = true - - thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" ) - if thisEntity.hBreatheFireAbility == nil then - print( "ERROR: thisEntity.hBreatheFireAbility not found" ) - return - end - - thisEntity:SetContextThink( "ActivateTrap", function() return FireTrapActivate() end, 0 ) -end - -function FireTrapActivate() - if not IsServer() then - return - end - - if GameRules:IsGamePaused() == true then - return 0.5 - end - - if thisEntity.isTrapActivated == true then - --[[ - print( "----------------------------------------------------------" ) - print( "FireTrapActivate... thisEntity:" ) - PrintTable( thisEntity, " " ) - ]] - - thisEntity:SetAnimation( "bark_attack" ); - thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 ) - - thisEntity.isTrapActivated = false - end - - return -1 -end - diff --git a/aghanim_singleplayer/scripts/vscripts/traps/pendulum_trap.lua b/aghanim_singleplayer/scripts/vscripts/traps/pendulum_trap.lua deleted file mode 100755 index baeb6f8..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/pendulum_trap.lua +++ /dev/null @@ -1,41 +0,0 @@ - -require("ai/shared") - --------------------------------------------------------------------------------- - -function Spawn( entityKeyValues ) - if IsServer() == false then - return - end - - --printf( "thisEntity:GetUnitName() == %s", thisEntity:GetUnitName() ) - - thisEntity.hSwingAbility = thisEntity:FindAbilityByName( "pendulum_swing" ) - thisEntity:SetContextThink( "PendulumTrapThink", PendulumTrapThink, RandomFloat( 0.1, 1.0 ) ) -end - --------------------------------------------------------------------------------- - -function PendulumTrapThink() - if IsServer() then - local enemies = GetEnemyHeroesInRange( thisEntity, 2048 ) -- will need to search just in room - if not enemies or #enemies == 0 then - --print( "no enemies" ) - thisEntity:InterruptChannel() - return RandomFloat( 0.1, 1.0 ) - end - - if not thisEntity:IsChanneling() then - ExecuteOrderFromTable({ - UnitIndex = thisEntity:entindex(), - OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, - AbilityIndex = thisEntity.hSwingAbility:entindex(), - Queue = false, - }) - end - end - - return 1 -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/traps/spike_trap_ai.lua b/aghanim_singleplayer/scripts/vscripts/traps/spike_trap_ai.lua deleted file mode 100755 index 982bdd2..0000000 --- a/aghanim_singleplayer/scripts/vscripts/traps/spike_trap_ai.lua +++ /dev/null @@ -1,38 +0,0 @@ ---[[ spike_trap_ai.lua ]] - ---------------------------------------------------------------------------- --- AI for the Spike Trap ---------------------------------------------------------------------------- - -local triggerActive = true - -function Fire(trigger) - local triggerName = thisEntity:GetName() - --print(tostring(triggerName)) - local level = trigger.activator:GetLevel() - local target = Entities:FindByName( nil, triggerName .. "_target" ) - local spikes = triggerName .. "_model" - local dust = triggerName .. "_particle" - local fx = triggerName .. "_fx" - --print(spikes) - if target ~= nil and triggerActive == true then - local spikeTrap = thisEntity:FindAbilityByName("spike_trap") - thisEntity:CastAbilityOnPosition(target:GetOrigin(), spikeTrap, -1 ) - EmitSoundOn( "AghanimsFortress.TrapActivate" , spikeTrap) - DoEntFire( spikes, "SetAnimation", "spiketrap_activate", 0, self, self ) - DoEntFire( dust, "Start", "", 0, self, self ) - DoEntFire( dust, "Stop", "", 2, self, self ) - DoEntFire( fx, "Start", "", 0, self, self ) - DoEntFire( fx, "Stop", "", 2, self, self ) - - --thisEntity:SetContextThink( "ResetTrapModel", function() ResetTrapModel( spikes ) end, 3 ) - triggerActive = false - thisEntity:SetContextThink( "ResetTrapModel", function() ResetTrapModel() end, 4 ) - end -end - -function ResetTrapModel() - DoEntFire( spikes, "SetAnimation", "spiketrap_idle", 0, self, self ) - triggerActive = true -end - diff --git a/aghanim_singleplayer/scripts/vscripts/triggers.lua b/aghanim_singleplayer/scripts/vscripts/triggers.lua deleted file mode 100755 index c94eeef..0000000 --- a/aghanim_singleplayer/scripts/vscripts/triggers.lua +++ /dev/null @@ -1,29 +0,0 @@ - --- This file is a redirection to events.lua ---print( "loaded triggers.lua" ) - -function OnStartTouch( trigger ) - local triggerName = thisEntity:GetName() - --printf( "OnStartTouch - trigger \"%s\"", triggerName ) - - local event = {} - event["trigger_name"] = triggerName - event["activator_entindex"] = trigger.activator:GetEntityIndex() - event["caller_entindex"] = trigger.caller:GetEntityIndex() - FireGameEvent( "trigger_start_touch", event ) -end - --------------------------------------------------------------------------------- - -function OnEndTouch( trigger ) - local triggerName = thisEntity:GetName() - --printf( "OnEndTouch - trigger \"%s\"", triggerName ) - - local event = {} - event["trigger_name"] = triggerName - event["activator_entindex"] = trigger.activator:GetEntityIndex() - event["caller_entindex"] = trigger.caller:GetEntityIndex() - FireGameEvent( "trigger_end_touch", event ) -end - --------------------------------------------------------------------------------- diff --git a/aghanim_singleplayer/scripts/vscripts/utility_functions.lua b/aghanim_singleplayer/scripts/vscripts/utility_functions.lua deleted file mode 100755 index a7eb0f1..0000000 --- a/aghanim_singleplayer/scripts/vscripts/utility_functions.lua +++ /dev/null @@ -1,313 +0,0 @@ ---[[ Utility Functions ]] - ---------------------------------------------------------------------------- --- Bitwise and --------------------------------------------------------------------------- -function bitand(a, b) - local result = 0 - local bitval = 1 - while a > 0 and b > 0 do - if a % 2 == 1 and b % 2 == 1 then -- test the rightmost bits - result = result + bitval -- set the current bit - end - bitval = bitval * 2 -- shift left - a = math.floor(a/2) -- shift right - b = math.floor(b/2) - end - return result -end - ---------------------------------------------------------------------------- -function Lerp(t, a, b) - return a + t * (b - a) -end - ---------------------------------------------------------------------------- -function LerpClamp(t, a, b) - if t < 0 then - t = 0 - elseif t > 1 then - t = 1 - end - return Lerp( t, a, b ) -end - ---------------------------------------------------------------------------- --- Broadcast messages to screen ---------------------------------------------------------------------------- -function printf(...) - print(string.format(...)) -end - ---------------------------------------------------------------------------- --- Broadcast messages to screen ---------------------------------------------------------------------------- -function BroadcastMessage( sMessage, fDuration ) - local centerMessage = { - message = sMessage, - duration = fDuration - } - FireGameEvent( "show_center_message", centerMessage ) -end - ---------------------------------------------------------------------------- --- GetRandomElement ---------------------------------------------------------------------------- -function GetRandomElement( table ) - local nRandomIndex = RandomInt( 1, #table ) - local randomElement = table[ nRandomIndex ] - return randomElement -end - ---------------------------------------------------------------------------- --- ShuffledList ---------------------------------------------------------------------------- -function ShuffledList( orig_list ) - local list = shallowcopy( orig_list ) - local result = {} - local count = #list - for i = 1, count do - local pick = RandomInt( 1, #list ) - result[ #result + 1 ] = list[ pick ] - table.remove( list, pick ) - end - return result -end - ---------------------------------------------------------------------------- --- ShuffleListInPlace ---------------------------------------------------------------------------- -function ShuffleListInPlace( list, hRandomStream ) - local count = #list - for i = 1, count do - local j = 0 - if hRandomStream == nil then - j = RandomInt( 1, #list ) - else - j = hRandomStream:RandomInt( 1, #list ) - end - list[i] , list[j] = list[j] , list[i] - end -end - ---------------------------------------------------------------------------- --- string.starts ---------------------------------------------------------------------------- -function string.starts( string, start ) - return string.sub( string, 1, string.len( start ) ) == start -end - -function string.ends( String, End ) - return End=='' or string.sub(String,-string.len(End))==End -end - ---------------------------------------------------------------------------- --- string.split ---------------------------------------------------------------------------- -function string.split( str, sep ) - local sep, fields = sep or ":", {} - local pattern = string.format("([^%s]+)", sep) - str:gsub(pattern, function(c) fields[#fields+1] = c end) - return fields -end - ---------------------------------------------------------------------------- --- shallowcopy ---------------------------------------------------------------------------- -function shallowcopy(orig) - local orig_type = type(orig) - local copy - if orig_type == 'table' then - copy = {} - for orig_key, orig_value in pairs(orig) do - copy[orig_key] = orig_value - end - else -- number, string, boolean, etc - copy = orig - end - return copy -end - ---------------------------------------------------------------------------- --- deepcopy ---------------------------------------------------------------------------- -function deepcopy(orig) - local orig_type = type(orig) - local copy - if orig_type == 'table' then - copy = {} - for orig_key, orig_value in next, orig, nil do - copy[deepcopy(orig_key)] = deepcopy(orig_value) - end - setmetatable(copy, deepcopy(getmetatable(orig))) - else -- number, string, boolean, etc - copy = orig - end - - return copy -end - - ---------------------------------------------------------------------------- --- Table functions ---------------------------------------------------------------------------- -function PrintTable( t, indent ) - --print( "PrintTable( t, indent ): " ) - - if type(t) ~= "table" then return end - - if indent == nil then - indent = " " - end - - for k,v in pairs( t ) do - if type( v ) == "table" then - if ( v ~= t ) then - print( indent .. tostring( k ) .. ":\n" .. indent .. "{" ) - PrintTable( v, indent .. " " ) - print( indent .. "}" ) - end - else - print( indent .. tostring( k ) .. ":" .. tostring(v) ) - end - end -end - -function table.ToStringShallow(t) - if t == nil then return "nil" end - - local s = "{" - for k,v in pairs(t) do - s = string.format(" %s %s=%s, ", s, k, v) - end - s = s .. "}" - return s -end - -function TableFindKey( table, val ) - if table == nil then - print( "nil" ) - return nil - end - - for k, v in pairs( table ) do - if v == val then - return k - end - end - return nil -end - -function TableLength( t ) - local nCount = 0 - for _ in pairs( t ) do - nCount = nCount + 1 - end - return nCount -end - -function tablefirstkey( t ) - for k, _ in pairs( t ) do - return k - end - return nil -end - -function tablehaselements( t ) - return tablefirstkey( t ) ~= nil -end - ---------------------------------------------------------------------------- - -function TableContainsValue( t, value ) - for _, v in pairs( t ) do - if v == value then - return true - end - end - - return false -end - -function TableContainsSubstring( t, substr ) - for _, v in pairs( t ) do - if v and string.match(v,substr) then - return true - end - end - - return false -end - ---------------------------------------------------------------------------- - -function ConvertToTime( value ) - local value = tonumber( value ) - - if value <= 0 then - return "00:00:00"; - else - hours = string.format( "%02.f", math.floor( value / 3600 ) ); - mins = string.format( "%02.f", math.floor( value / 60 - ( hours * 60 ) ) ); - secs = string.format( "%02.f", math.floor( value - hours * 3600 - mins * 60 ) ); - if math.floor( value / 3600 ) == 0 then - return mins .. ":" .. secs - end - return hours .. ":" .. mins .. ":" .. secs - end -end - ---------------------------------------------------------------------------- - -function SimpleSpline( value ) - local valueSquared = value * value; - return ( 3 * valueSquared ) - ( 2 * valueSquared * value ) -end - ---------------------------------------------------------------------------- - -function IsGlobalAscensionCaster( hUnit ) - if hUnit == nil then - return false - end - return hUnit:GetName() == "ascension_global_caster" -end - ---------------------------------------------------------------------------- --- AI functions ---------------------------------------------------------------------------- - -function SetAggroRange( hUnit, fRange ) - --print( string.format( "Set search radius and acquisition range (%.2f) for unit %s", fRange, hUnit:GetUnitName() ) ) - hUnit.fSearchRadius = fRange - hUnit:SetAcquisitionRange( fRange ) - hUnit.bAcqRangeModified = true -end - --------------------------------------------------------------------------------- - -function GetRandomPathablePositionWithin( vPos, nRadius, nMinRadius ) - if IsServer() then - -- Try to find a good position, be willing to fail and return a nil value - local nMaxAttempts = 10 - local nAttempts = 0 - local vTryPos = nil - - if nMinRadius == nil then - nMinRadius = nRadius - end - - repeat - vTryPos = vPos + RandomVector( RandomFloat( nMinRadius, nRadius ) ) - - nAttempts = nAttempts + 1 - if nAttempts >= nMaxAttempts then - break - end - until ( GridNav:CanFindPath( vPos, vTryPos ) ) - - return vTryPos - end -end - --------------------------------------------------------------------------------- diff --git a/english_localization_set/panorama_decompile/decompiled_layout/custom_loading_screen.xml b/content/panorama/layout/custom_game/custom_loading_screen.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/custom_loading_screen.xml rename to content/panorama/layout/custom_game/custom_loading_screen.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/custom_ui_manifest.xml b/content/panorama/layout/custom_game/custom_ui_manifest.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/custom_ui_manifest.xml rename to content/panorama/layout/custom_game/custom_ui_manifest.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/dps_panel.xml b/content/panorama/layout/custom_game/dps_panel.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/dps_panel.xml rename to content/panorama/layout/custom_game/dps_panel.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/end_screen.xml b/content/panorama/layout/custom_game/end_screen.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/end_screen.xml rename to content/panorama/layout/custom_game/end_screen.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.css b/content/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.css similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.css rename to content/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.css diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.js b/content/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.js rename to content/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.js diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.xml b/content/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.xml rename to content/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/creator.js b/content/panorama/layout/custom_game/frames/cosmetic_abilities/creator.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/creator.js rename to content/panorama/layout/custom_game/frames/cosmetic_abilities/creator.js diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/message/message.css b/content/panorama/layout/custom_game/frames/message/message.css similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/message/message.css rename to content/panorama/layout/custom_game/frames/message/message.css diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/message/message.js b/content/panorama/layout/custom_game/frames/message/message.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/message/message.js rename to content/panorama/layout/custom_game/frames/message/message.js diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/message/message.xml b/content/panorama/layout/custom_game/frames/message/message.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/message/message.xml rename to content/panorama/layout/custom_game/frames/message/message.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/payment/payment.css b/content/panorama/layout/custom_game/frames/payment/payment.css similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/payment/payment.css rename to content/panorama/layout/custom_game/frames/payment/payment.css diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/payment/payment.js b/content/panorama/layout/custom_game/frames/payment/payment.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/payment/payment.js rename to content/panorama/layout/custom_game/frames/payment/payment.js diff --git a/english_localization_set/panorama_decompile/decompiled_layout/frames/payment/payment.xml b/content/panorama/layout/custom_game/frames/payment/payment.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/frames/payment/payment.xml rename to content/panorama/layout/custom_game/frames/payment/payment.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/info.xml b/content/panorama/layout/custom_game/info.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/info.xml rename to content/panorama/layout/custom_game/info.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/shop.xml b/content/panorama/layout/custom_game/shop.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/shop.xml rename to content/panorama/layout/custom_game/shop.xml diff --git a/english_localization_set/panorama_decompile/decompiled_layout/team_select.xml b/content/panorama/layout/custom_game/team_select.xml similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_layout/team_select.xml rename to content/panorama/layout/custom_game/team_select.xml diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/custom_loading_screen.js b/content/panorama/scripts/custom_game/custom_loading_screen.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/custom_loading_screen.js rename to content/panorama/scripts/custom_game/custom_loading_screen.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/display_error.js b/content/panorama/scripts/custom_game/display_error.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/display_error.js rename to content/panorama/scripts/custom_game/display_error.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/dps_panel.js b/content/panorama/scripts/custom_game/dps_panel.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/dps_panel.js rename to content/panorama/scripts/custom_game/dps_panel.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/end_screen.js b/content/panorama/scripts/custom_game/end_screen.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/end_screen.js rename to content/panorama/scripts/custom_game/end_screen.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/info.js b/content/panorama/scripts/custom_game/info.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/info.js rename to content/panorama/scripts/custom_game/info.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/power.js b/content/panorama/scripts/custom_game/power.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/power.js rename to content/panorama/scripts/custom_game/power.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/shop.js b/content/panorama/scripts/custom_game/shop.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/shop.js rename to content/panorama/scripts/custom_game/shop.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/team_select.js b/content/panorama/scripts/custom_game/team_select.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/team_select.js rename to content/panorama/scripts/custom_game/team_select.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/team_select_card.js b/content/panorama/scripts/custom_game/team_select_card.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/team_select_card.js rename to content/panorama/scripts/custom_game/team_select_card.js diff --git a/english_localization_set/panorama_decompile/decompiled_scrips/util.js b/content/panorama/scripts/custom_game/util.js similarity index 100% rename from english_localization_set/panorama_decompile/decompiled_scrips/util.js rename to content/panorama/scripts/custom_game/util.js diff --git a/english_localization_set/copy_localization_lines.py b/english_localization_set/copy_localization_lines.py deleted file mode 100644 index e69de29..0000000 diff --git a/ConvertDataToJson.lua b/game/ConvertDataToJson.lua similarity index 100% rename from ConvertDataToJson.lua rename to game/ConvertDataToJson.lua diff --git a/addoninfo.txt b/game/addoninfo.txt similarity index 100% rename from addoninfo.txt rename to game/addoninfo.txt diff --git a/effect/3sha/killbanner_text_a.vpcf_c b/game/effect/3sha/killbanner_text_a.vpcf_c similarity index 100% rename from effect/3sha/killbanner_text_a.vpcf_c rename to game/effect/3sha/killbanner_text_a.vpcf_c diff --git a/effect/3sha/tripple_kill_text.vpcf_c b/game/effect/3sha/tripple_kill_text.vpcf_c similarity index 100% rename from effect/3sha/tripple_kill_text.vpcf_c rename to game/effect/3sha/tripple_kill_text.vpcf_c diff --git a/effect/3sha/vr_killbanner_triplekill.vpcf_c b/game/effect/3sha/vr_killbanner_triplekill.vpcf_c similarity index 100% rename from effect/3sha/vr_killbanner_triplekill.vpcf_c rename to game/effect/3sha/vr_killbanner_triplekill.vpcf_c diff --git a/effect/3sha/vr_killbanner_triplekill_a.vpcf_c b/game/effect/3sha/vr_killbanner_triplekill_a.vpcf_c similarity index 100% rename from effect/3sha/vr_killbanner_triplekill_a.vpcf_c rename to game/effect/3sha/vr_killbanner_triplekill_a.vpcf_c diff --git a/effect/3sha/vr_killbanner_triplekill_b.vpcf_c b/game/effect/3sha/vr_killbanner_triplekill_b.vpcf_c similarity index 100% rename from effect/3sha/vr_killbanner_triplekill_b.vpcf_c rename to game/effect/3sha/vr_killbanner_triplekill_b.vpcf_c diff --git a/effect/3sha/vr_killbanner_triplekill_c.vpcf_c b/game/effect/3sha/vr_killbanner_triplekill_c.vpcf_c similarity index 100% rename from effect/3sha/vr_killbanner_triplekill_c.vpcf_c rename to game/effect/3sha/vr_killbanner_triplekill_c.vpcf_c diff --git a/effect/3sha/vr_killbanner_triplekill_d.vpcf_c b/game/effect/3sha/vr_killbanner_triplekill_d.vpcf_c similarity index 100% rename from effect/3sha/vr_killbanner_triplekill_d.vpcf_c rename to game/effect/3sha/vr_killbanner_triplekill_d.vpcf_c diff --git a/effect/3sha/vr_killbanner_triplekill_e.vpcf_c b/game/effect/3sha/vr_killbanner_triplekill_e.vpcf_c similarity index 100% rename from effect/3sha/vr_killbanner_triplekill_e.vpcf_c rename to game/effect/3sha/vr_killbanner_triplekill_e.vpcf_c diff --git a/effect/5sha/rampage_text.vpcf_c b/game/effect/5sha/rampage_text.vpcf_c similarity index 100% rename from effect/5sha/rampage_text.vpcf_c rename to game/effect/5sha/rampage_text.vpcf_c diff --git a/effect/5sha/rampage_text_a.vpcf_c b/game/effect/5sha/rampage_text_a.vpcf_c similarity index 100% rename from effect/5sha/rampage_text_a.vpcf_c rename to game/effect/5sha/rampage_text_a.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage.vpcf_c b/game/effect/5sha/vr_killbanner_rampage.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_a.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_a.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_a.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_a.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_a0.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_a0.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_a0.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_a0.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_a1.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_a1.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_a1.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_a1.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_a2.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_a2.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_a2.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_a2.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_a3.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_a3.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_a3.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_a3.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_b.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_b.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_b.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_b.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_c.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_c.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_c.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_c.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_d.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_d.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_d.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_d.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_d0.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_d0.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_d0.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_d0.vpcf_c diff --git a/effect/5sha/vr_killbanner_rampage_e.vpcf_c b/game/effect/5sha/vr_killbanner_rampage_e.vpcf_c similarity index 100% rename from effect/5sha/vr_killbanner_rampage_e.vpcf_c rename to game/effect/5sha/vr_killbanner_rampage_e.vpcf_c diff --git a/effect/airen/1.vpcf_c b/game/effect/airen/1.vpcf_c similarity index 100% rename from effect/airen/1.vpcf_c rename to game/effect/airen/1.vpcf_c diff --git a/effect/airen/1_c.vpcf_c b/game/effect/airen/1_c.vpcf_c similarity index 100% rename from effect/airen/1_c.vpcf_c rename to game/effect/airen/1_c.vpcf_c diff --git a/effect/anyue/anyueember.vpcf_c b/game/effect/anyue/anyueember.vpcf_c similarity index 100% rename from effect/anyue/anyueember.vpcf_c rename to game/effect/anyue/anyueember.vpcf_c diff --git a/effect/anyue/anyueeyes.vpcf_c b/game/effect/anyue/anyueeyes.vpcf_c similarity index 100% rename from effect/anyue/anyueeyes.vpcf_c rename to game/effect/anyue/anyueeyes.vpcf_c diff --git a/effect/anyue/anyueeyes_b.vpcf_c b/game/effect/anyue/anyueeyes_b.vpcf_c similarity index 100% rename from effect/anyue/anyueeyes_b.vpcf_c rename to game/effect/anyue/anyueeyes_b.vpcf_c diff --git a/effect/anyue/anyueeyes_c.vpcf_c b/game/effect/anyue/anyueeyes_c.vpcf_c similarity index 100% rename from effect/anyue/anyueeyes_c.vpcf_c rename to game/effect/anyue/anyueeyes_c.vpcf_c diff --git a/effect/anyue/anyueeyes_d.vpcf_c b/game/effect/anyue/anyueeyes_d.vpcf_c similarity index 100% rename from effect/anyue/anyueeyes_d.vpcf_c rename to game/effect/anyue/anyueeyes_d.vpcf_c diff --git a/effect/anyue/anyueflying.vpcf_c b/game/effect/anyue/anyueflying.vpcf_c similarity index 100% rename from effect/anyue/anyueflying.vpcf_c rename to game/effect/anyue/anyueflying.vpcf_c diff --git a/effect/anyue/anyueglow.vpcf_c b/game/effect/anyue/anyueglow.vpcf_c similarity index 100% rename from effect/anyue/anyueglow.vpcf_c rename to game/effect/anyue/anyueglow.vpcf_c diff --git a/effect/anyue/anyuelight.vpcf_c b/game/effect/anyue/anyuelight.vpcf_c similarity index 100% rename from effect/anyue/anyuelight.vpcf_c rename to game/effect/anyue/anyuelight.vpcf_c diff --git a/effect/anyue/anyuelight_flying.vpcf_c b/game/effect/anyue/anyuelight_flying.vpcf_c similarity index 100% rename from effect/anyue/anyuelight_flying.vpcf_c rename to game/effect/anyue/anyuelight_flying.vpcf_c diff --git a/effect/anyue/anyuemagic.vpcf_c b/game/effect/anyue/anyuemagic.vpcf_c similarity index 100% rename from effect/anyue/anyuemagic.vpcf_c rename to game/effect/anyue/anyuemagic.vpcf_c diff --git a/effect/anyue/anyuesteam.vpcf_c b/game/effect/anyue/anyuesteam.vpcf_c similarity index 100% rename from effect/anyue/anyuesteam.vpcf_c rename to game/effect/anyue/anyuesteam.vpcf_c diff --git a/effect/anyue/anyuetrail.vpcf_c b/game/effect/anyue/anyuetrail.vpcf_c similarity index 100% rename from effect/anyue/anyuetrail.vpcf_c rename to game/effect/anyue/anyuetrail.vpcf_c diff --git a/effect/anyue/anyuetrail_wing.vpcf_c b/game/effect/anyue/anyuetrail_wing.vpcf_c similarity index 100% rename from effect/anyue/anyuetrail_wing.vpcf_c rename to game/effect/anyue/anyuetrail_wing.vpcf_c diff --git a/effect/arrow/0.vpcf_c b/game/effect/arrow/0.vpcf_c similarity index 100% rename from effect/arrow/0.vpcf_c rename to game/effect/arrow/0.vpcf_c diff --git a/effect/arrow/1.vpcf_c b/game/effect/arrow/1.vpcf_c similarity index 100% rename from effect/arrow/1.vpcf_c rename to game/effect/arrow/1.vpcf_c diff --git a/effect/arrow/1/star1.vpcf_c b/game/effect/arrow/1/star1.vpcf_c similarity index 100% rename from effect/arrow/1/star1.vpcf_c rename to game/effect/arrow/1/star1.vpcf_c diff --git a/effect/arrow/1/star2.vpcf_c b/game/effect/arrow/1/star2.vpcf_c similarity index 100% rename from effect/arrow/1/star2.vpcf_c rename to game/effect/arrow/1/star2.vpcf_c diff --git a/effect/arrow/1/star2_1.vpcf_c b/game/effect/arrow/1/star2_1.vpcf_c similarity index 100% rename from effect/arrow/1/star2_1.vpcf_c rename to game/effect/arrow/1/star2_1.vpcf_c diff --git a/effect/arrow/1/star3.vpcf_c b/game/effect/arrow/1/star3.vpcf_c similarity index 100% rename from effect/arrow/1/star3.vpcf_c rename to game/effect/arrow/1/star3.vpcf_c diff --git a/effect/arrow/1/star3_1.vpcf_c b/game/effect/arrow/1/star3_1.vpcf_c similarity index 100% rename from effect/arrow/1/star3_1.vpcf_c rename to game/effect/arrow/1/star3_1.vpcf_c diff --git a/effect/arrow/1/star3_2.vpcf_c b/game/effect/arrow/1/star3_2.vpcf_c similarity index 100% rename from effect/arrow/1/star3_2.vpcf_c rename to game/effect/arrow/1/star3_2.vpcf_c diff --git a/effect/arrow/2.vpcf_c b/game/effect/arrow/2.vpcf_c similarity index 100% rename from effect/arrow/2.vpcf_c rename to game/effect/arrow/2.vpcf_c diff --git a/effect/arrow/2/star1.vpcf_c b/game/effect/arrow/2/star1.vpcf_c similarity index 100% rename from effect/arrow/2/star1.vpcf_c rename to game/effect/arrow/2/star1.vpcf_c diff --git a/effect/arrow/2/star2.vpcf_c b/game/effect/arrow/2/star2.vpcf_c similarity index 100% rename from effect/arrow/2/star2.vpcf_c rename to game/effect/arrow/2/star2.vpcf_c diff --git a/effect/arrow/2/star2_1.vpcf_c b/game/effect/arrow/2/star2_1.vpcf_c similarity index 100% rename from effect/arrow/2/star2_1.vpcf_c rename to game/effect/arrow/2/star2_1.vpcf_c diff --git a/effect/arrow/2/star3.vpcf_c b/game/effect/arrow/2/star3.vpcf_c similarity index 100% rename from effect/arrow/2/star3.vpcf_c rename to game/effect/arrow/2/star3.vpcf_c diff --git a/effect/arrow/2/star3_1.vpcf_c b/game/effect/arrow/2/star3_1.vpcf_c similarity index 100% rename from effect/arrow/2/star3_1.vpcf_c rename to game/effect/arrow/2/star3_1.vpcf_c diff --git a/effect/arrow/2/star3_2.vpcf_c b/game/effect/arrow/2/star3_2.vpcf_c similarity index 100% rename from effect/arrow/2/star3_2.vpcf_c rename to game/effect/arrow/2/star3_2.vpcf_c diff --git a/effect/arrow/3.vpcf_c b/game/effect/arrow/3.vpcf_c similarity index 100% rename from effect/arrow/3.vpcf_c rename to game/effect/arrow/3.vpcf_c diff --git a/effect/arrow/3/star1.vpcf_c b/game/effect/arrow/3/star1.vpcf_c similarity index 100% rename from effect/arrow/3/star1.vpcf_c rename to game/effect/arrow/3/star1.vpcf_c diff --git a/effect/arrow/3/star2.vpcf_c b/game/effect/arrow/3/star2.vpcf_c similarity index 100% rename from effect/arrow/3/star2.vpcf_c rename to game/effect/arrow/3/star2.vpcf_c diff --git a/effect/arrow/3/star2_1.vpcf_c b/game/effect/arrow/3/star2_1.vpcf_c similarity index 100% rename from effect/arrow/3/star2_1.vpcf_c rename to game/effect/arrow/3/star2_1.vpcf_c diff --git a/effect/arrow/3/star3.vpcf_c b/game/effect/arrow/3/star3.vpcf_c similarity index 100% rename from effect/arrow/3/star3.vpcf_c rename to game/effect/arrow/3/star3.vpcf_c diff --git a/effect/arrow/3/star3_1.vpcf_c b/game/effect/arrow/3/star3_1.vpcf_c similarity index 100% rename from effect/arrow/3/star3_1.vpcf_c rename to game/effect/arrow/3/star3_1.vpcf_c diff --git a/effect/arrow/3/star3_2.vpcf_c b/game/effect/arrow/3/star3_2.vpcf_c similarity index 100% rename from effect/arrow/3/star3_2.vpcf_c rename to game/effect/arrow/3/star3_2.vpcf_c diff --git a/effect/arrow/4.vpcf_c b/game/effect/arrow/4.vpcf_c similarity index 100% rename from effect/arrow/4.vpcf_c rename to game/effect/arrow/4.vpcf_c diff --git a/effect/arrow/4/star1.vpcf_c b/game/effect/arrow/4/star1.vpcf_c similarity index 100% rename from effect/arrow/4/star1.vpcf_c rename to game/effect/arrow/4/star1.vpcf_c diff --git a/effect/arrow/4/star2.vpcf_c b/game/effect/arrow/4/star2.vpcf_c similarity index 100% rename from effect/arrow/4/star2.vpcf_c rename to game/effect/arrow/4/star2.vpcf_c diff --git a/effect/arrow/4/star2_1.vpcf_c b/game/effect/arrow/4/star2_1.vpcf_c similarity index 100% rename from effect/arrow/4/star2_1.vpcf_c rename to game/effect/arrow/4/star2_1.vpcf_c diff --git a/effect/arrow/4/star3.vpcf_c b/game/effect/arrow/4/star3.vpcf_c similarity index 100% rename from effect/arrow/4/star3.vpcf_c rename to game/effect/arrow/4/star3.vpcf_c diff --git a/effect/arrow/4/star3_1.vpcf_c b/game/effect/arrow/4/star3_1.vpcf_c similarity index 100% rename from effect/arrow/4/star3_1.vpcf_c rename to game/effect/arrow/4/star3_1.vpcf_c diff --git a/effect/arrow/4/star3_2.vpcf_c b/game/effect/arrow/4/star3_2.vpcf_c similarity index 100% rename from effect/arrow/4/star3_2.vpcf_c rename to game/effect/arrow/4/star3_2.vpcf_c diff --git a/effect/arrow/5.vpcf_c b/game/effect/arrow/5.vpcf_c similarity index 100% rename from effect/arrow/5.vpcf_c rename to game/effect/arrow/5.vpcf_c diff --git a/effect/arrow/5/star1.vpcf_c b/game/effect/arrow/5/star1.vpcf_c similarity index 100% rename from effect/arrow/5/star1.vpcf_c rename to game/effect/arrow/5/star1.vpcf_c diff --git a/effect/arrow/5/star2.vpcf_c b/game/effect/arrow/5/star2.vpcf_c similarity index 100% rename from effect/arrow/5/star2.vpcf_c rename to game/effect/arrow/5/star2.vpcf_c diff --git a/effect/arrow/5/star2_1.vpcf_c b/game/effect/arrow/5/star2_1.vpcf_c similarity index 100% rename from effect/arrow/5/star2_1.vpcf_c rename to game/effect/arrow/5/star2_1.vpcf_c diff --git a/effect/arrow/5/star3.vpcf_c b/game/effect/arrow/5/star3.vpcf_c similarity index 100% rename from effect/arrow/5/star3.vpcf_c rename to game/effect/arrow/5/star3.vpcf_c diff --git a/effect/arrow/5/star3_1.vpcf_c b/game/effect/arrow/5/star3_1.vpcf_c similarity index 100% rename from effect/arrow/5/star3_1.vpcf_c rename to game/effect/arrow/5/star3_1.vpcf_c diff --git a/effect/arrow/5/star3_2.vpcf_c b/game/effect/arrow/5/star3_2.vpcf_c similarity index 100% rename from effect/arrow/5/star3_2.vpcf_c rename to game/effect/arrow/5/star3_2.vpcf_c diff --git a/effect/arrow/ssr/star1.vpcf_c b/game/effect/arrow/ssr/star1.vpcf_c similarity index 100% rename from effect/arrow/ssr/star1.vpcf_c rename to game/effect/arrow/ssr/star1.vpcf_c diff --git a/effect/arrow/star1.vpcf_c b/game/effect/arrow/star1.vpcf_c similarity index 100% rename from effect/arrow/star1.vpcf_c rename to game/effect/arrow/star1.vpcf_c diff --git a/effect/arrow/star2.vpcf_c b/game/effect/arrow/star2.vpcf_c similarity index 100% rename from effect/arrow/star2.vpcf_c rename to game/effect/arrow/star2.vpcf_c diff --git a/effect/arrow/star2_1.vpcf_c b/game/effect/arrow/star2_1.vpcf_c similarity index 100% rename from effect/arrow/star2_1.vpcf_c rename to game/effect/arrow/star2_1.vpcf_c diff --git a/effect/arrow/star3.vpcf_c b/game/effect/arrow/star3.vpcf_c similarity index 100% rename from effect/arrow/star3.vpcf_c rename to game/effect/arrow/star3.vpcf_c diff --git a/effect/arrow/star3_1.vpcf_c b/game/effect/arrow/star3_1.vpcf_c similarity index 100% rename from effect/arrow/star3_1.vpcf_c rename to game/effect/arrow/star3_1.vpcf_c diff --git a/effect/arrow/star3_2.vpcf_c b/game/effect/arrow/star3_2.vpcf_c similarity index 100% rename from effect/arrow/star3_2.vpcf_c rename to game/effect/arrow/star3_2.vpcf_c diff --git a/effect/bianpao/bianpaobig_explosion.vpcf_c b/game/effect/bianpao/bianpaobig_explosion.vpcf_c similarity index 100% rename from effect/bianpao/bianpaobig_explosion.vpcf_c rename to game/effect/bianpao/bianpaobig_explosion.vpcf_c diff --git a/effect/bianpao/bianpaobig_explosion_trail.vpcf_c b/game/effect/bianpao/bianpaobig_explosion_trail.vpcf_c similarity index 100% rename from effect/bianpao/bianpaobig_explosion_trail.vpcf_c rename to game/effect/bianpao/bianpaobig_explosion_trail.vpcf_c diff --git a/effect/bianpao/bianpaofireworks.vpcf_c b/game/effect/bianpao/bianpaofireworks.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks.vpcf_c rename to game/effect/bianpao/bianpaofireworks.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_b.vpcf_c b/game/effect/bianpao/bianpaofireworks_b.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_b.vpcf_c rename to game/effect/bianpao/bianpaofireworks_b.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_explosion_b.vpcf_c b/game/effect/bianpao/bianpaofireworks_explosion_b.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_explosion_b.vpcf_c rename to game/effect/bianpao/bianpaofireworks_explosion_b.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_explosion_c.vpcf_c b/game/effect/bianpao/bianpaofireworks_explosion_c.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_explosion_c.vpcf_c rename to game/effect/bianpao/bianpaofireworks_explosion_c.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_explosion_d.vpcf_c b/game/effect/bianpao/bianpaofireworks_explosion_d.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_explosion_d.vpcf_c rename to game/effect/bianpao/bianpaofireworks_explosion_d.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_fuse_sparks.vpcf_c b/game/effect/bianpao/bianpaofireworks_fuse_sparks.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_fuse_sparks.vpcf_c rename to game/effect/bianpao/bianpaofireworks_fuse_sparks.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_fuse_sparks_b.vpcf_c b/game/effect/bianpao/bianpaofireworks_fuse_sparks_b.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_fuse_sparks_b.vpcf_c rename to game/effect/bianpao/bianpaofireworks_fuse_sparks_b.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_fuse_sparks_c.vpcf_c b/game/effect/bianpao/bianpaofireworks_fuse_sparks_c.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_fuse_sparks_c.vpcf_c rename to game/effect/bianpao/bianpaofireworks_fuse_sparks_c.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_fuse_sparks_d.vpcf_c b/game/effect/bianpao/bianpaofireworks_fuse_sparks_d.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_fuse_sparks_d.vpcf_c rename to game/effect/bianpao/bianpaofireworks_fuse_sparks_d.vpcf_c diff --git a/effect/bianpao/bianpaofireworks_special.vpcf_c b/game/effect/bianpao/bianpaofireworks_special.vpcf_c similarity index 100% rename from effect/bianpao/bianpaofireworks_special.vpcf_c rename to game/effect/bianpao/bianpaofireworks_special.vpcf_c diff --git a/effect/big.vpcf_c b/game/effect/big.vpcf_c similarity index 100% rename from effect/big.vpcf_c rename to game/effect/big.vpcf_c diff --git a/effect/bingnv/ambient.vpcf_c b/game/effect/bingnv/ambient.vpcf_c similarity index 100% rename from effect/bingnv/ambient.vpcf_c rename to game/effect/bingnv/ambient.vpcf_c diff --git a/effect/bingnv/b_ambient.vpcf_c b/game/effect/bingnv/b_ambient.vpcf_c similarity index 100% rename from effect/bingnv/b_ambient.vpcf_c rename to game/effect/bingnv/b_ambient.vpcf_c diff --git a/effect/bingnv/c_ambient.vpcf_c b/game/effect/bingnv/c_ambient.vpcf_c similarity index 100% rename from effect/bingnv/c_ambient.vpcf_c rename to game/effect/bingnv/c_ambient.vpcf_c diff --git a/effect/bingnv/d_ambient.vpcf_c b/game/effect/bingnv/d_ambient.vpcf_c similarity index 100% rename from effect/bingnv/d_ambient.vpcf_c rename to game/effect/bingnv/d_ambient.vpcf_c diff --git a/effect/biyu_roshan/1.vpcf_c b/game/effect/biyu_roshan/1.vpcf_c similarity index 100% rename from effect/biyu_roshan/1.vpcf_c rename to game/effect/biyu_roshan/1.vpcf_c diff --git a/effect/biyu_roshan/1_bodytrail.vpcf_c b/game/effect/biyu_roshan/1_bodytrail.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_bodytrail.vpcf_c rename to game/effect/biyu_roshan/1_bodytrail.vpcf_c diff --git a/effect/biyu_roshan/1_bodytrail_glow.vpcf_c b/game/effect/biyu_roshan/1_bodytrail_glow.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_bodytrail_glow.vpcf_c rename to game/effect/biyu_roshan/1_bodytrail_glow.vpcf_c diff --git a/effect/biyu_roshan/1_drop.vpcf_c b/game/effect/biyu_roshan/1_drop.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_drop.vpcf_c rename to game/effect/biyu_roshan/1_drop.vpcf_c diff --git a/effect/biyu_roshan/1_drop_b.vpcf_c b/game/effect/biyu_roshan/1_drop_b.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_drop_b.vpcf_c rename to game/effect/biyu_roshan/1_drop_b.vpcf_c diff --git a/effect/biyu_roshan/1_drop_b_glow.vpcf_c b/game/effect/biyu_roshan/1_drop_b_glow.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_drop_b_glow.vpcf_c rename to game/effect/biyu_roshan/1_drop_b_glow.vpcf_c diff --git a/effect/biyu_roshan/1_eye.vpcf_c b/game/effect/biyu_roshan/1_eye.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_eye.vpcf_c rename to game/effect/biyu_roshan/1_eye.vpcf_c diff --git a/effect/biyu_roshan/1_eye_a.vpcf_c b/game/effect/biyu_roshan/1_eye_a.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_eye_a.vpcf_c rename to game/effect/biyu_roshan/1_eye_a.vpcf_c diff --git a/effect/biyu_roshan/1_eye_glow.vpcf_c b/game/effect/biyu_roshan/1_eye_glow.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_eye_glow.vpcf_c rename to game/effect/biyu_roshan/1_eye_glow.vpcf_c diff --git a/effect/biyu_roshan/1_eye_streak.vpcf_c b/game/effect/biyu_roshan/1_eye_streak.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_eye_streak.vpcf_c rename to game/effect/biyu_roshan/1_eye_streak.vpcf_c diff --git a/effect/biyu_roshan/1_gem.vpcf_c b/game/effect/biyu_roshan/1_gem.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_gem.vpcf_c rename to game/effect/biyu_roshan/1_gem.vpcf_c diff --git a/effect/biyu_roshan/1_gem_glow.vpcf_c b/game/effect/biyu_roshan/1_gem_glow.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_gem_glow.vpcf_c rename to game/effect/biyu_roshan/1_gem_glow.vpcf_c diff --git a/effect/biyu_roshan/1_glow.vpcf_c b/game/effect/biyu_roshan/1_glow.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_glow.vpcf_c rename to game/effect/biyu_roshan/1_glow.vpcf_c diff --git a/effect/biyu_roshan/1_sparks.vpcf_c b/game/effect/biyu_roshan/1_sparks.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_sparks.vpcf_c rename to game/effect/biyu_roshan/1_sparks.vpcf_c diff --git a/effect/biyu_roshan/1_sparks_red.vpcf_c b/game/effect/biyu_roshan/1_sparks_red.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_sparks_red.vpcf_c rename to game/effect/biyu_roshan/1_sparks_red.vpcf_c diff --git a/effect/biyu_roshan/1_trail.vpcf_c b/game/effect/biyu_roshan/1_trail.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_trail.vpcf_c rename to game/effect/biyu_roshan/1_trail.vpcf_c diff --git a/effect/biyu_roshan/1_trail_rope.vpcf_c b/game/effect/biyu_roshan/1_trail_rope.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_trail_rope.vpcf_c rename to game/effect/biyu_roshan/1_trail_rope.vpcf_c diff --git a/effect/biyu_roshan/1_trail_rope_glow.vpcf_c b/game/effect/biyu_roshan/1_trail_rope_glow.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_trail_rope_glow.vpcf_c rename to game/effect/biyu_roshan/1_trail_rope_glow.vpcf_c diff --git a/effect/biyu_roshan/1_trail_rope_red.vpcf_c b/game/effect/biyu_roshan/1_trail_rope_red.vpcf_c similarity index 100% rename from effect/biyu_roshan/1_trail_rope_red.vpcf_c rename to game/effect/biyu_roshan/1_trail_rope_red.vpcf_c diff --git a/effect/blue_gem/ti7.vpcf_c b/game/effect/blue_gem/ti7.vpcf_c similarity index 100% rename from effect/blue_gem/ti7.vpcf_c rename to game/effect/blue_gem/ti7.vpcf_c diff --git a/effect/blue_gem/ti7_angels.vpcf_c b/game/effect/blue_gem/ti7_angels.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_angels.vpcf_c rename to game/effect/blue_gem/ti7_angels.vpcf_c diff --git a/effect/blue_gem/ti7_angels_glow.vpcf_c b/game/effect/blue_gem/ti7_angels_glow.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_angels_glow.vpcf_c rename to game/effect/blue_gem/ti7_angels_glow.vpcf_c diff --git a/effect/blue_gem/ti7_cm.vpcf_c b/game/effect/blue_gem/ti7_cm.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_cm.vpcf_c rename to game/effect/blue_gem/ti7_cm.vpcf_c diff --git a/effect/blue_gem/ti7_ember.vpcf_c b/game/effect/blue_gem/ti7_ember.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_ember.vpcf_c rename to game/effect/blue_gem/ti7_ember.vpcf_c diff --git a/effect/blue_gem/ti7_flakes.vpcf_c b/game/effect/blue_gem/ti7_flakes.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_flakes.vpcf_c rename to game/effect/blue_gem/ti7_flakes.vpcf_c diff --git a/effect/blue_gem/ti7_flakes_b.vpcf_c b/game/effect/blue_gem/ti7_flakes_b.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_flakes_b.vpcf_c rename to game/effect/blue_gem/ti7_flakes_b.vpcf_c diff --git a/effect/blue_gem/ti7_flare.vpcf_c b/game/effect/blue_gem/ti7_flare.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_flare.vpcf_c rename to game/effect/blue_gem/ti7_flare.vpcf_c diff --git a/effect/blue_gem/ti7_frost.vpcf_c b/game/effect/blue_gem/ti7_frost.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_frost.vpcf_c rename to game/effect/blue_gem/ti7_frost.vpcf_c diff --git a/effect/blue_gem/ti7_glow.vpcf_c b/game/effect/blue_gem/ti7_glow.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_glow.vpcf_c rename to game/effect/blue_gem/ti7_glow.vpcf_c diff --git a/effect/blue_gem/ti7_ground_frost.vpcf_c b/game/effect/blue_gem/ti7_ground_frost.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_ground_frost.vpcf_c rename to game/effect/blue_gem/ti7_ground_frost.vpcf_c diff --git a/effect/blue_gem/ti7_ground_glint.vpcf_c b/game/effect/blue_gem/ti7_ground_glint.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_ground_glint.vpcf_c rename to game/effect/blue_gem/ti7_ground_glint.vpcf_c diff --git a/effect/blue_gem/ti7_ground_ice.vpcf_c b/game/effect/blue_gem/ti7_ground_ice.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_ground_ice.vpcf_c rename to game/effect/blue_gem/ti7_ground_ice.vpcf_c diff --git a/effect/blue_gem/ti7_ground_shard.vpcf_c b/game/effect/blue_gem/ti7_ground_shard.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_ground_shard.vpcf_c rename to game/effect/blue_gem/ti7_ground_shard.vpcf_c diff --git a/effect/blue_gem/ti7_halo.vpcf_c b/game/effect/blue_gem/ti7_halo.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_halo.vpcf_c rename to game/effect/blue_gem/ti7_halo.vpcf_c diff --git a/effect/blue_gem/ti7_poof.vpcf_c b/game/effect/blue_gem/ti7_poof.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_poof.vpcf_c rename to game/effect/blue_gem/ti7_poof.vpcf_c diff --git a/effect/blue_gem/ti7_trail.vpcf_c b/game/effect/blue_gem/ti7_trail.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_trail.vpcf_c rename to game/effect/blue_gem/ti7_trail.vpcf_c diff --git a/effect/blue_gem/ti7_trail_b.vpcf_c b/game/effect/blue_gem/ti7_trail_b.vpcf_c similarity index 100% rename from effect/blue_gem/ti7_trail_b.vpcf_c rename to game/effect/blue_gem/ti7_trail_b.vpcf_c diff --git a/effect/bottle/1_concoction_explosion_smoke.vpcf_c b/game/effect/bottle/1_concoction_explosion_smoke.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_explosion_smoke.vpcf_c rename to game/effect/bottle/1_concoction_explosion_smoke.vpcf_c diff --git a/effect/bottle/1_concoction_projectile.vpcf_c b/game/effect/bottle/1_concoction_projectile.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile.vpcf_c rename to game/effect/bottle/1_concoction_projectile.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_a.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_a.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_a.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_a.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_fire.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_fire.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_fire.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_fire.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_flash_b.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_flash_b.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_flash_b.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_flash_b.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_flash_c.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_flash_c.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_flash_c.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_flash_c.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_flash_d.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_flash_d.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_flash_d.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_flash_d.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_flash_e.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_flash_e.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_flash_e.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_flash_e.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_flash_light.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_flash_light.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_flash_light.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_flash_light.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_ring.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_ring.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_ring.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_ring.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_explosion_sphere.vpcf_c b/game/effect/bottle/1_concoction_projectile_explosion_sphere.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_explosion_sphere.vpcf_c rename to game/effect/bottle/1_concoction_projectile_explosion_sphere.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_glow.vpcf_c b/game/effect/bottle/1_concoction_projectile_glow.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_glow.vpcf_c rename to game/effect/bottle/1_concoction_projectile_glow.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_glow_b.vpcf_c b/game/effect/bottle/1_concoction_projectile_glow_b.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_glow_b.vpcf_c rename to game/effect/bottle/1_concoction_projectile_glow_b.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_impact_burst.vpcf_c b/game/effect/bottle/1_concoction_projectile_impact_burst.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_impact_burst.vpcf_c rename to game/effect/bottle/1_concoction_projectile_impact_burst.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_launch.vpcf_c b/game/effect/bottle/1_concoction_projectile_launch.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_launch.vpcf_c rename to game/effect/bottle/1_concoction_projectile_launch.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_model.vpcf_c b/game/effect/bottle/1_concoction_projectile_model.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_model.vpcf_c rename to game/effect/bottle/1_concoction_projectile_model.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_trail.vpcf_c b/game/effect/bottle/1_concoction_projectile_trail.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_trail.vpcf_c rename to game/effect/bottle/1_concoction_projectile_trail.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_trail_b.vpcf_c b/game/effect/bottle/1_concoction_projectile_trail_b.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_trail_b.vpcf_c rename to game/effect/bottle/1_concoction_projectile_trail_b.vpcf_c diff --git a/effect/bottle/1_concoction_projectile_trail_d.vpcf_c b/game/effect/bottle/1_concoction_projectile_trail_d.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_projectile_trail_d.vpcf_c rename to game/effect/bottle/1_concoction_projectile_trail_d.vpcf_c diff --git a/effect/bottle/1_concoction_trail_smoke.vpcf_c b/game/effect/bottle/1_concoction_trail_smoke.vpcf_c similarity index 100% rename from effect/bottle/1_concoction_trail_smoke.vpcf_c rename to game/effect/bottle/1_concoction_trail_smoke.vpcf_c diff --git a/effect/bottle/1conc_flying_bottle.vpcf_c b/game/effect/bottle/1conc_flying_bottle.vpcf_c similarity index 100% rename from effect/bottle/1conc_flying_bottle.vpcf_c rename to game/effect/bottle/1conc_flying_bottle.vpcf_c diff --git a/effect/bottle/2_concoction_explosion_smoke.vpcf_c b/game/effect/bottle/2_concoction_explosion_smoke.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_explosion_smoke.vpcf_c rename to game/effect/bottle/2_concoction_explosion_smoke.vpcf_c diff --git a/effect/bottle/2_concoction_projectile.vpcf_c b/game/effect/bottle/2_concoction_projectile.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile.vpcf_c rename to game/effect/bottle/2_concoction_projectile.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_a.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_a.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_a.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_a.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_fire.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_fire.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_fire.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_fire.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_flash_b.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_flash_b.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_flash_b.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_flash_b.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_flash_c.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_flash_c.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_flash_c.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_flash_c.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_flash_d.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_flash_d.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_flash_d.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_flash_d.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_flash_e.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_flash_e.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_flash_e.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_flash_e.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_flash_light.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_flash_light.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_flash_light.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_flash_light.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_ring.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_ring.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_ring.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_ring.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_explosion_sphere.vpcf_c b/game/effect/bottle/2_concoction_projectile_explosion_sphere.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_explosion_sphere.vpcf_c rename to game/effect/bottle/2_concoction_projectile_explosion_sphere.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_glow.vpcf_c b/game/effect/bottle/2_concoction_projectile_glow.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_glow.vpcf_c rename to game/effect/bottle/2_concoction_projectile_glow.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_glow_b.vpcf_c b/game/effect/bottle/2_concoction_projectile_glow_b.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_glow_b.vpcf_c rename to game/effect/bottle/2_concoction_projectile_glow_b.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_impact_burst.vpcf_c b/game/effect/bottle/2_concoction_projectile_impact_burst.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_impact_burst.vpcf_c rename to game/effect/bottle/2_concoction_projectile_impact_burst.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_launch.vpcf_c b/game/effect/bottle/2_concoction_projectile_launch.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_launch.vpcf_c rename to game/effect/bottle/2_concoction_projectile_launch.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_model.vpcf_c b/game/effect/bottle/2_concoction_projectile_model.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_model.vpcf_c rename to game/effect/bottle/2_concoction_projectile_model.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_trail.vpcf_c b/game/effect/bottle/2_concoction_projectile_trail.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_trail.vpcf_c rename to game/effect/bottle/2_concoction_projectile_trail.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_trail_b.vpcf_c b/game/effect/bottle/2_concoction_projectile_trail_b.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_trail_b.vpcf_c rename to game/effect/bottle/2_concoction_projectile_trail_b.vpcf_c diff --git a/effect/bottle/2_concoction_projectile_trail_d.vpcf_c b/game/effect/bottle/2_concoction_projectile_trail_d.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_projectile_trail_d.vpcf_c rename to game/effect/bottle/2_concoction_projectile_trail_d.vpcf_c diff --git a/effect/bottle/2_concoction_trail_smoke.vpcf_c b/game/effect/bottle/2_concoction_trail_smoke.vpcf_c similarity index 100% rename from effect/bottle/2_concoction_trail_smoke.vpcf_c rename to game/effect/bottle/2_concoction_trail_smoke.vpcf_c diff --git a/effect/bottle/2conc_flying_bottle.vpcf_c b/game/effect/bottle/2conc_flying_bottle.vpcf_c similarity index 100% rename from effect/bottle/2conc_flying_bottle.vpcf_c rename to game/effect/bottle/2conc_flying_bottle.vpcf_c diff --git a/effect/bottle2/1_concoction_explosion_smoke.vpcf_c b/game/effect/bottle2/1_concoction_explosion_smoke.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_explosion_smoke.vpcf_c rename to game/effect/bottle2/1_concoction_explosion_smoke.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile.vpcf_c b/game/effect/bottle2/1_concoction_projectile.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile.vpcf_c rename to game/effect/bottle2/1_concoction_projectile.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_a.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_a.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_a.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_a.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_fire.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_fire.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_fire.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_fire.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_flash_b.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_flash_b.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_flash_b.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_flash_b.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_flash_c.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_flash_c.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_flash_c.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_flash_c.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_flash_d.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_flash_d.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_flash_d.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_flash_d.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_flash_e.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_flash_e.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_flash_e.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_flash_e.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_flash_light.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_flash_light.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_flash_light.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_flash_light.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_ring.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_ring.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_ring.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_ring.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_explosion_sphere.vpcf_c b/game/effect/bottle2/1_concoction_projectile_explosion_sphere.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_explosion_sphere.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_explosion_sphere.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_glow.vpcf_c b/game/effect/bottle2/1_concoction_projectile_glow.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_glow.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_glow.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_glow_b.vpcf_c b/game/effect/bottle2/1_concoction_projectile_glow_b.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_glow_b.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_glow_b.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_impact_burst.vpcf_c b/game/effect/bottle2/1_concoction_projectile_impact_burst.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_impact_burst.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_impact_burst.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_launch.vpcf_c b/game/effect/bottle2/1_concoction_projectile_launch.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_launch.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_launch.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_model.vpcf_c b/game/effect/bottle2/1_concoction_projectile_model.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_model.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_model.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_trail.vpcf_c b/game/effect/bottle2/1_concoction_projectile_trail.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_trail.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_trail.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_trail_b.vpcf_c b/game/effect/bottle2/1_concoction_projectile_trail_b.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_trail_b.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_trail_b.vpcf_c diff --git a/effect/bottle2/1_concoction_projectile_trail_d.vpcf_c b/game/effect/bottle2/1_concoction_projectile_trail_d.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_projectile_trail_d.vpcf_c rename to game/effect/bottle2/1_concoction_projectile_trail_d.vpcf_c diff --git a/effect/bottle2/1_concoction_trail_smoke.vpcf_c b/game/effect/bottle2/1_concoction_trail_smoke.vpcf_c similarity index 100% rename from effect/bottle2/1_concoction_trail_smoke.vpcf_c rename to game/effect/bottle2/1_concoction_trail_smoke.vpcf_c diff --git a/effect/bottle2/1conc_flying_bottle.vpcf_c b/game/effect/bottle2/1conc_flying_bottle.vpcf_c similarity index 100% rename from effect/bottle2/1conc_flying_bottle.vpcf_c rename to game/effect/bottle2/1conc_flying_bottle.vpcf_c diff --git a/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c b/game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c similarity index 100% rename from effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c rename to game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c diff --git a/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c b/game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c similarity index 100% rename from effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c rename to game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c diff --git a/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c b/game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c similarity index 100% rename from effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c rename to game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c diff --git a/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c b/game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c similarity index 100% rename from effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c rename to game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c diff --git a/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c b/game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c similarity index 100% rename from effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c rename to game/effect/cike/1econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c diff --git a/effect/cike/1units/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c b/game/effect/cike/1units/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c similarity index 100% rename from effect/cike/1units/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c rename to game/effect/cike/1units/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c diff --git a/effect/crown/1.vpcf_c b/game/effect/crown/1.vpcf_c similarity index 100% rename from effect/crown/1.vpcf_c rename to game/effect/crown/1.vpcf_c diff --git a/effect/crown/1_ring.vpcf_c b/game/effect/crown/1_ring.vpcf_c similarity index 100% rename from effect/crown/1_ring.vpcf_c rename to game/effect/crown/1_ring.vpcf_c diff --git a/effect/crown/1_ring_sparks.vpcf_c b/game/effect/crown/1_ring_sparks.vpcf_c similarity index 100% rename from effect/crown/1_ring_sparks.vpcf_c rename to game/effect/crown/1_ring_sparks.vpcf_c diff --git a/effect/crown/1_shield.vpcf_c b/game/effect/crown/1_shield.vpcf_c similarity index 100% rename from effect/crown/1_shield.vpcf_c rename to game/effect/crown/1_shield.vpcf_c diff --git a/effect/crown/1_shield_glow.vpcf_c b/game/effect/crown/1_shield_glow.vpcf_c similarity index 100% rename from effect/crown/1_shield_glow.vpcf_c rename to game/effect/crown/1_shield_glow.vpcf_c diff --git a/effect/crown/2.vpcf_c b/game/effect/crown/2.vpcf_c similarity index 100% rename from effect/crown/2.vpcf_c rename to game/effect/crown/2.vpcf_c diff --git a/effect/crown/2_ring.vpcf_c b/game/effect/crown/2_ring.vpcf_c similarity index 100% rename from effect/crown/2_ring.vpcf_c rename to game/effect/crown/2_ring.vpcf_c diff --git a/effect/crown/2_ring_sparks.vpcf_c b/game/effect/crown/2_ring_sparks.vpcf_c similarity index 100% rename from effect/crown/2_ring_sparks.vpcf_c rename to game/effect/crown/2_ring_sparks.vpcf_c diff --git a/effect/crown/2_shield.vpcf_c b/game/effect/crown/2_shield.vpcf_c similarity index 100% rename from effect/crown/2_shield.vpcf_c rename to game/effect/crown/2_shield.vpcf_c diff --git a/effect/crown/2_shield_glow.vpcf_c b/game/effect/crown/2_shield_glow.vpcf_c similarity index 100% rename from effect/crown/2_shield_glow.vpcf_c rename to game/effect/crown/2_shield_glow.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_b.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_b.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_b.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_b.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_c.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_c.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_c.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_c.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_d.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_d.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_d.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_d.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_e.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_e.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_e.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_e.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_f.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_f.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_f.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_f.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_g.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_g.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_g.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_g.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_h.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_h.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_h.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_h.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_i.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_i.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_i.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_i.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_j.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_j.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_j.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_j.vpcf_c diff --git a/effect/dabaiyin/laser_cutter_sparks_k.vpcf_c b/game/effect/dabaiyin/laser_cutter_sparks_k.vpcf_c similarity index 100% rename from effect/dabaiyin/laser_cutter_sparks_k.vpcf_c rename to game/effect/dabaiyin/laser_cutter_sparks_k.vpcf_c diff --git a/effect/dabaiyin/tinker_laser.vpcf_c b/game/effect/dabaiyin/tinker_laser.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser.vpcf_c rename to game/effect/dabaiyin/tinker_laser.vpcf_c diff --git a/effect/dabaiyin/tinker_laser_b.vpcf_c b/game/effect/dabaiyin/tinker_laser_b.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser_b.vpcf_c rename to game/effect/dabaiyin/tinker_laser_b.vpcf_c diff --git a/effect/dabaiyin/tinker_laser_c.vpcf_c b/game/effect/dabaiyin/tinker_laser_c.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser_c.vpcf_c rename to game/effect/dabaiyin/tinker_laser_c.vpcf_c diff --git a/effect/dabaiyin/tinker_laser_d.vpcf_c b/game/effect/dabaiyin/tinker_laser_d.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser_d.vpcf_c rename to game/effect/dabaiyin/tinker_laser_d.vpcf_c diff --git a/effect/dabaiyin/tinker_laser_e.vpcf_c b/game/effect/dabaiyin/tinker_laser_e.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser_e.vpcf_c rename to game/effect/dabaiyin/tinker_laser_e.vpcf_c diff --git a/effect/dabaiyin/tinker_laser_f.vpcf_c b/game/effect/dabaiyin/tinker_laser_f.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser_f.vpcf_c rename to game/effect/dabaiyin/tinker_laser_f.vpcf_c diff --git a/effect/dabaiyin/tinker_laser_g.vpcf_c b/game/effect/dabaiyin/tinker_laser_g.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser_g.vpcf_c rename to game/effect/dabaiyin/tinker_laser_g.vpcf_c diff --git a/effect/dabaiyin/tinker_laser_h.vpcf_c b/game/effect/dabaiyin/tinker_laser_h.vpcf_c similarity index 100% rename from effect/dabaiyin/tinker_laser_h.vpcf_c rename to game/effect/dabaiyin/tinker_laser_h.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_b.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_b.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_b.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_b.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_c.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_c.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_c.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_c.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_d.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_d.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_d.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_d.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_e.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_e.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_e.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_e.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_f.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_f.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_f.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_f.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_g.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_g.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_g.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_g.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_h.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_h.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_h.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_h.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_i.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_i.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_i.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_i.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_j.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_j.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_j.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_j.vpcf_c diff --git a/effect/dabaiyin2/laser_cutter_sparks_k.vpcf_c b/game/effect/dabaiyin2/laser_cutter_sparks_k.vpcf_c similarity index 100% rename from effect/dabaiyin2/laser_cutter_sparks_k.vpcf_c rename to game/effect/dabaiyin2/laser_cutter_sparks_k.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser.vpcf_c b/game/effect/dabaiyin2/tinker_laser.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser.vpcf_c rename to game/effect/dabaiyin2/tinker_laser.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser_b.vpcf_c b/game/effect/dabaiyin2/tinker_laser_b.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser_b.vpcf_c rename to game/effect/dabaiyin2/tinker_laser_b.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser_c.vpcf_c b/game/effect/dabaiyin2/tinker_laser_c.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser_c.vpcf_c rename to game/effect/dabaiyin2/tinker_laser_c.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser_d.vpcf_c b/game/effect/dabaiyin2/tinker_laser_d.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser_d.vpcf_c rename to game/effect/dabaiyin2/tinker_laser_d.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser_e.vpcf_c b/game/effect/dabaiyin2/tinker_laser_e.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser_e.vpcf_c rename to game/effect/dabaiyin2/tinker_laser_e.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser_f.vpcf_c b/game/effect/dabaiyin2/tinker_laser_f.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser_f.vpcf_c rename to game/effect/dabaiyin2/tinker_laser_f.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser_g.vpcf_c b/game/effect/dabaiyin2/tinker_laser_g.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser_g.vpcf_c rename to game/effect/dabaiyin2/tinker_laser_g.vpcf_c diff --git a/effect/dabaiyin2/tinker_laser_h.vpcf_c b/game/effect/dabaiyin2/tinker_laser_h.vpcf_c similarity index 100% rename from effect/dabaiyin2/tinker_laser_h.vpcf_c rename to game/effect/dabaiyin2/tinker_laser_h.vpcf_c diff --git a/effect/dakongque/hantomlancer_lance_smoke.vpcf_c b/game/effect/dakongque/hantomlancer_lance_smoke.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_lance_smoke.vpcf_c rename to game/effect/dakongque/hantomlancer_lance_smoke.vpcf_c diff --git a/effect/dakongque/hantomlancer_phant_lance_trail.vpcf_c b/game/effect/dakongque/hantomlancer_phant_lance_trail.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_phant_lance_trail.vpcf_c rename to game/effect/dakongque/hantomlancer_phant_lance_trail.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile_explosion.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile_explosion.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile_explosion.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile_explosion.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile_explosion_flash.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile_explosion_flash.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile_explosion_flash.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile_explosion_flash.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile_launch.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile_launch.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile_launch.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile_launch.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile_launch_trails.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile_launch_trails.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile_launch_trails.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile_launch_trails.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile_trail.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile_trail.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile_trail.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile_trail.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparkexpl.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparkexpl.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparkexpl.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparkexpl.vpcf_c diff --git a/effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparks.vpcf_c b/game/effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparks.vpcf_c similarity index 100% rename from effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparks.vpcf_c rename to game/effect/dakongque/hantomlancer_spiritlance_projectile_trail_sparks.vpcf_c diff --git a/effect/dakongque/l_pl_slash_flashbang_glow.vpcf_c b/game/effect/dakongque/l_pl_slash_flashbang_glow.vpcf_c similarity index 100% rename from effect/dakongque/l_pl_slash_flashbang_glow.vpcf_c rename to game/effect/dakongque/l_pl_slash_flashbang_glow.vpcf_c diff --git a/effect/dakongque/l_pl_slash_radiant_smoke.vpcf_c b/game/effect/dakongque/l_pl_slash_radiant_smoke.vpcf_c similarity index 100% rename from effect/dakongque/l_pl_slash_radiant_smoke.vpcf_c rename to game/effect/dakongque/l_pl_slash_radiant_smoke.vpcf_c diff --git a/effect/dapao/1.vpcf_c b/game/effect/dapao/1.vpcf_c similarity index 100% rename from effect/dapao/1.vpcf_c rename to game/effect/dapao/1.vpcf_c diff --git a/effect/dapao/1_b.vpcf_c b/game/effect/dapao/1_b.vpcf_c similarity index 100% rename from effect/dapao/1_b.vpcf_c rename to game/effect/dapao/1_b.vpcf_c diff --git a/effect/dapao/1_cross.vpcf_c b/game/effect/dapao/1_cross.vpcf_c similarity index 100% rename from effect/dapao/1_cross.vpcf_c rename to game/effect/dapao/1_cross.vpcf_c diff --git a/effect/dapao/1_glow.vpcf_c b/game/effect/dapao/1_glow.vpcf_c similarity index 100% rename from effect/dapao/1_glow.vpcf_c rename to game/effect/dapao/1_glow.vpcf_c diff --git a/effect/dapao/1_glow_b.vpcf_c b/game/effect/dapao/1_glow_b.vpcf_c similarity index 100% rename from effect/dapao/1_glow_b.vpcf_c rename to game/effect/dapao/1_glow_b.vpcf_c diff --git a/effect/dapao/1_left.vpcf_c b/game/effect/dapao/1_left.vpcf_c similarity index 100% rename from effect/dapao/1_left.vpcf_c rename to game/effect/dapao/1_left.vpcf_c diff --git a/effect/dapao/1_right.vpcf_c b/game/effect/dapao/1_right.vpcf_c similarity index 100% rename from effect/dapao/1_right.vpcf_c rename to game/effect/dapao/1_right.vpcf_c diff --git a/effect/darkmoon_roshan/1.vpcf_c b/game/effect/darkmoon_roshan/1.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1.vpcf_c rename to game/effect/darkmoon_roshan/1.vpcf_c diff --git a/effect/darkmoon_roshan/1_ember.vpcf_c b/game/effect/darkmoon_roshan/1_ember.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_ember.vpcf_c rename to game/effect/darkmoon_roshan/1_ember.vpcf_c diff --git a/effect/darkmoon_roshan/1_eyes.vpcf_c b/game/effect/darkmoon_roshan/1_eyes.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_eyes.vpcf_c rename to game/effect/darkmoon_roshan/1_eyes.vpcf_c diff --git a/effect/darkmoon_roshan/1_eyes_b.vpcf_c b/game/effect/darkmoon_roshan/1_eyes_b.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_eyes_b.vpcf_c rename to game/effect/darkmoon_roshan/1_eyes_b.vpcf_c diff --git a/effect/darkmoon_roshan/1_eyes_c.vpcf_c b/game/effect/darkmoon_roshan/1_eyes_c.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_eyes_c.vpcf_c rename to game/effect/darkmoon_roshan/1_eyes_c.vpcf_c diff --git a/effect/darkmoon_roshan/1_eyes_d.vpcf_c b/game/effect/darkmoon_roshan/1_eyes_d.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_eyes_d.vpcf_c rename to game/effect/darkmoon_roshan/1_eyes_d.vpcf_c diff --git a/effect/darkmoon_roshan/1_glow.vpcf_c b/game/effect/darkmoon_roshan/1_glow.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_glow.vpcf_c rename to game/effect/darkmoon_roshan/1_glow.vpcf_c diff --git a/effect/darkmoon_roshan/1_light.vpcf_c b/game/effect/darkmoon_roshan/1_light.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_light.vpcf_c rename to game/effect/darkmoon_roshan/1_light.vpcf_c diff --git a/effect/darkmoon_roshan/1_magic.vpcf_c b/game/effect/darkmoon_roshan/1_magic.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_magic.vpcf_c rename to game/effect/darkmoon_roshan/1_magic.vpcf_c diff --git a/effect/darkmoon_roshan/1_steam.vpcf_c b/game/effect/darkmoon_roshan/1_steam.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_steam.vpcf_c rename to game/effect/darkmoon_roshan/1_steam.vpcf_c diff --git a/effect/darkmoon_roshan/1_trail.vpcf_c b/game/effect/darkmoon_roshan/1_trail.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_trail.vpcf_c rename to game/effect/darkmoon_roshan/1_trail.vpcf_c diff --git a/effect/darkmoon_roshan/1_trail_wing.vpcf_c b/game/effect/darkmoon_roshan/1_trail_wing.vpcf_c similarity index 100% rename from effect/darkmoon_roshan/1_trail_wing.vpcf_c rename to game/effect/darkmoon_roshan/1_trail_wing.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_center.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_center.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_center.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_center.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_gulls.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_gulls.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_gulls.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_gulls.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_model.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_model.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_model.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_model.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_outer.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_outer.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_outer.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_outer.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_puddle.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_puddle.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_puddle.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_puddle.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash_ring.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash_ring.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash_ring.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_splash_ring.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_swirl.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_swirl.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_swirl.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_swirl.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_texture.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_texture.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_texture.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_texture.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_wake.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_wake.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_wake.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_wake.vpcf_c diff --git a/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_x.vpcf_c b/game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_x.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_x.vpcf_c rename to game/effect/daxuanwo/xuanwoecon/items/kunkka/kunkka_immortal/kunkka_immortal_ghost_ship_marker_x.vpcf_c diff --git a/effect/daxuanwo/xuanwounits/heroes/hero_kunkka/kunkka_ghostship_marker_glow.vpcf_c b/game/effect/daxuanwo/xuanwounits/heroes/hero_kunkka/kunkka_ghostship_marker_glow.vpcf_c similarity index 100% rename from effect/daxuanwo/xuanwounits/heroes/hero_kunkka/kunkka_ghostship_marker_glow.vpcf_c rename to game/effect/daxuanwo/xuanwounits/heroes/hero_kunkka/kunkka_ghostship_marker_glow.vpcf_c diff --git a/effect/dizuo/1.vpcf_c b/game/effect/dizuo/1.vpcf_c similarity index 100% rename from effect/dizuo/1.vpcf_c rename to game/effect/dizuo/1.vpcf_c diff --git a/effect/dizuo/1_glow.vpcf_c b/game/effect/dizuo/1_glow.vpcf_c similarity index 100% rename from effect/dizuo/1_glow.vpcf_c rename to game/effect/dizuo/1_glow.vpcf_c diff --git a/effect/douyu/2.vpcf_c b/game/effect/douyu/2.vpcf_c similarity index 100% rename from effect/douyu/2.vpcf_c rename to game/effect/douyu/2.vpcf_c diff --git a/effect/dragon/baseattack/2.vpcf_c b/game/effect/dragon/baseattack/2.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2.vpcf_c rename to game/effect/dragon/baseattack/2.vpcf_c diff --git a/effect/dragon/baseattack/2_explosion.vpcf_c b/game/effect/dragon/baseattack/2_explosion.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_explosion.vpcf_c rename to game/effect/dragon/baseattack/2_explosion.vpcf_c diff --git a/effect/dragon/baseattack/2_explosion_ember.vpcf_c b/game/effect/dragon/baseattack/2_explosion_ember.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_explosion_ember.vpcf_c rename to game/effect/dragon/baseattack/2_explosion_ember.vpcf_c diff --git a/effect/dragon/baseattack/2_explosion_flare.vpcf_c b/game/effect/dragon/baseattack/2_explosion_flare.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_explosion_flare.vpcf_c rename to game/effect/dragon/baseattack/2_explosion_flare.vpcf_c diff --git a/effect/dragon/baseattack/2_explosion_flash.vpcf_c b/game/effect/dragon/baseattack/2_explosion_flash.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_explosion_flash.vpcf_c rename to game/effect/dragon/baseattack/2_explosion_flash.vpcf_c diff --git a/effect/dragon/baseattack/2_explosion_smoke.vpcf_c b/game/effect/dragon/baseattack/2_explosion_smoke.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_explosion_smoke.vpcf_c rename to game/effect/dragon/baseattack/2_explosion_smoke.vpcf_c diff --git a/effect/dragon/baseattack/2_explosion_spark.vpcf_c b/game/effect/dragon/baseattack/2_explosion_spark.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_explosion_spark.vpcf_c rename to game/effect/dragon/baseattack/2_explosion_spark.vpcf_c diff --git a/effect/dragon/baseattack/2_hot_core.vpcf_c b/game/effect/dragon/baseattack/2_hot_core.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_hot_core.vpcf_c rename to game/effect/dragon/baseattack/2_hot_core.vpcf_c diff --git a/effect/dragon/baseattack/2_rope.vpcf_c b/game/effect/dragon/baseattack/2_rope.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_rope.vpcf_c rename to game/effect/dragon/baseattack/2_rope.vpcf_c diff --git a/effect/dragon/baseattack/2_smoke.vpcf_c b/game/effect/dragon/baseattack/2_smoke.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_smoke.vpcf_c rename to game/effect/dragon/baseattack/2_smoke.vpcf_c diff --git a/effect/dragon/baseattack/2_trail_fire.vpcf_c b/game/effect/dragon/baseattack/2_trail_fire.vpcf_c similarity index 100% rename from effect/dragon/baseattack/2_trail_fire.vpcf_c rename to game/effect/dragon/baseattack/2_trail_fire.vpcf_c diff --git a/effect/dragon/baseattack/3.vpcf_c b/game/effect/dragon/baseattack/3.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3.vpcf_c rename to game/effect/dragon/baseattack/3.vpcf_c diff --git a/effect/dragon/baseattack/3_c.vpcf_c b/game/effect/dragon/baseattack/3_c.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_c.vpcf_c rename to game/effect/dragon/baseattack/3_c.vpcf_c diff --git a/effect/dragon/baseattack/3_e.vpcf_c b/game/effect/dragon/baseattack/3_e.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_e.vpcf_c rename to game/effect/dragon/baseattack/3_e.vpcf_c diff --git a/effect/dragon/baseattack/3_explode.vpcf_c b/game/effect/dragon/baseattack/3_explode.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_explode.vpcf_c rename to game/effect/dragon/baseattack/3_explode.vpcf_c diff --git a/effect/dragon/baseattack/3_explode_b.vpcf_c b/game/effect/dragon/baseattack/3_explode_b.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_explode_b.vpcf_c rename to game/effect/dragon/baseattack/3_explode_b.vpcf_c diff --git a/effect/dragon/baseattack/3_explode_beam.vpcf_c b/game/effect/dragon/baseattack/3_explode_beam.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_explode_beam.vpcf_c rename to game/effect/dragon/baseattack/3_explode_beam.vpcf_c diff --git a/effect/dragon/baseattack/3_explode_c.vpcf_c b/game/effect/dragon/baseattack/3_explode_c.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_explode_c.vpcf_c rename to game/effect/dragon/baseattack/3_explode_c.vpcf_c diff --git a/effect/dragon/baseattack/3_explode_d.vpcf_c b/game/effect/dragon/baseattack/3_explode_d.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_explode_d.vpcf_c rename to game/effect/dragon/baseattack/3_explode_d.vpcf_c diff --git a/effect/dragon/baseattack/3_f.vpcf_c b/game/effect/dragon/baseattack/3_f.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_f.vpcf_c rename to game/effect/dragon/baseattack/3_f.vpcf_c diff --git a/effect/dragon/baseattack/3_flakes.vpcf_c b/game/effect/dragon/baseattack/3_flakes.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_flakes.vpcf_c rename to game/effect/dragon/baseattack/3_flakes.vpcf_c diff --git a/effect/dragon/baseattack/3_g.vpcf_c b/game/effect/dragon/baseattack/3_g.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_g.vpcf_c rename to game/effect/dragon/baseattack/3_g.vpcf_c diff --git a/effect/dragon/baseattack/3_launch.vpcf_c b/game/effect/dragon/baseattack/3_launch.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_launch.vpcf_c rename to game/effect/dragon/baseattack/3_launch.vpcf_c diff --git a/effect/dragon/baseattack/3_launch_b.vpcf_c b/game/effect/dragon/baseattack/3_launch_b.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_launch_b.vpcf_c rename to game/effect/dragon/baseattack/3_launch_b.vpcf_c diff --git a/effect/dragon/baseattack/3_light.vpcf_c b/game/effect/dragon/baseattack/3_light.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_light.vpcf_c rename to game/effect/dragon/baseattack/3_light.vpcf_c diff --git a/effect/dragon/baseattack/3_mist.vpcf_c b/game/effect/dragon/baseattack/3_mist.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_mist.vpcf_c rename to game/effect/dragon/baseattack/3_mist.vpcf_c diff --git a/effect/dragon/baseattack/3_trail.vpcf_c b/game/effect/dragon/baseattack/3_trail.vpcf_c similarity index 100% rename from effect/dragon/baseattack/3_trail.vpcf_c rename to game/effect/dragon/baseattack/3_trail.vpcf_c diff --git a/effect/drodo/1.vpcf_c b/game/effect/drodo/1.vpcf_c similarity index 100% rename from effect/drodo/1.vpcf_c rename to game/effect/drodo/1.vpcf_c diff --git a/effect/drodo/1_death.vpcf_c b/game/effect/drodo/1_death.vpcf_c similarity index 100% rename from effect/drodo/1_death.vpcf_c rename to game/effect/drodo/1_death.vpcf_c diff --git a/effect/drodo/1_death_b.vpcf_c b/game/effect/drodo/1_death_b.vpcf_c similarity index 100% rename from effect/drodo/1_death_b.vpcf_c rename to game/effect/drodo/1_death_b.vpcf_c diff --git a/effect/emengchanrao/1.vpcf_c b/game/effect/emengchanrao/1.vpcf_c similarity index 100% rename from effect/emengchanrao/1.vpcf_c rename to game/effect/emengchanrao/1.vpcf_c diff --git a/effect/emengchanrao/1_end_ember.vpcf_c b/game/effect/emengchanrao/1_end_ember.vpcf_c similarity index 100% rename from effect/emengchanrao/1_end_ember.vpcf_c rename to game/effect/emengchanrao/1_end_ember.vpcf_c diff --git a/effect/emengchanrao/1_light.vpcf_c b/game/effect/emengchanrao/1_light.vpcf_c similarity index 100% rename from effect/emengchanrao/1_light.vpcf_c rename to game/effect/emengchanrao/1_light.vpcf_c diff --git a/effect/emengchanrao/1_ring.vpcf_c b/game/effect/emengchanrao/1_ring.vpcf_c similarity index 100% rename from effect/emengchanrao/1_ring.vpcf_c rename to game/effect/emengchanrao/1_ring.vpcf_c diff --git a/effect/emengchanrao/1_ring_edge.vpcf_c b/game/effect/emengchanrao/1_ring_edge.vpcf_c similarity index 100% rename from effect/emengchanrao/1_ring_edge.vpcf_c rename to game/effect/emengchanrao/1_ring_edge.vpcf_c diff --git a/effect/emengchanrao/1_ring_ember.vpcf_c b/game/effect/emengchanrao/1_ring_ember.vpcf_c similarity index 100% rename from effect/emengchanrao/1_ring_ember.vpcf_c rename to game/effect/emengchanrao/1_ring_ember.vpcf_c diff --git a/effect/emengchanrao/1_ring_end.vpcf_c b/game/effect/emengchanrao/1_ring_end.vpcf_c similarity index 100% rename from effect/emengchanrao/1_ring_end.vpcf_c rename to game/effect/emengchanrao/1_ring_end.vpcf_c diff --git a/effect/emengchanrao/1_ring_end_flash.vpcf_c b/game/effect/emengchanrao/1_ring_end_flash.vpcf_c similarity index 100% rename from effect/emengchanrao/1_ring_end_flash.vpcf_c rename to game/effect/emengchanrao/1_ring_end_flash.vpcf_c diff --git a/effect/emengchanrao/1_ring_mist.vpcf_c b/game/effect/emengchanrao/1_ring_mist.vpcf_c similarity index 100% rename from effect/emengchanrao/1_ring_mist.vpcf_c rename to game/effect/emengchanrao/1_ring_mist.vpcf_c diff --git a/effect/emengchanrao/1_ring_rope.vpcf_c b/game/effect/emengchanrao/1_ring_rope.vpcf_c similarity index 100% rename from effect/emengchanrao/1_ring_rope.vpcf_c rename to game/effect/emengchanrao/1_ring_rope.vpcf_c diff --git a/effect/emengchanrao/1_rope.vpcf_c b/game/effect/emengchanrao/1_rope.vpcf_c similarity index 100% rename from effect/emengchanrao/1_rope.vpcf_c rename to game/effect/emengchanrao/1_rope.vpcf_c diff --git a/effect/emengchanrao/1_rope_core.vpcf_c b/game/effect/emengchanrao/1_rope_core.vpcf_c similarity index 100% rename from effect/emengchanrao/1_rope_core.vpcf_c rename to game/effect/emengchanrao/1_rope_core.vpcf_c diff --git a/effect/emengchanrao/1_rope_pnt.vpcf_c b/game/effect/emengchanrao/1_rope_pnt.vpcf_c similarity index 100% rename from effect/emengchanrao/1_rope_pnt.vpcf_c rename to game/effect/emengchanrao/1_rope_pnt.vpcf_c diff --git a/effect/emengchanrao/1_rope_rig.vpcf_c b/game/effect/emengchanrao/1_rope_rig.vpcf_c similarity index 100% rename from effect/emengchanrao/1_rope_rig.vpcf_c rename to game/effect/emengchanrao/1_rope_rig.vpcf_c diff --git a/effect/fangtexiao/child.vpcf_c b/game/effect/fangtexiao/child.vpcf_c similarity index 100% rename from effect/fangtexiao/child.vpcf_c rename to game/effect/fangtexiao/child.vpcf_c diff --git a/effect/fangtexiao/child_embers.vpcf_c b/game/effect/fangtexiao/child_embers.vpcf_c similarity index 100% rename from effect/fangtexiao/child_embers.vpcf_c rename to game/effect/fangtexiao/child_embers.vpcf_c diff --git a/effect/fangtexiao/square.vpcf_c b/game/effect/fangtexiao/square.vpcf_c similarity index 100% rename from effect/fangtexiao/square.vpcf_c rename to game/effect/fangtexiao/square.vpcf_c diff --git a/effect/fenghuolun/1.vpcf_c b/game/effect/fenghuolun/1.vpcf_c similarity index 100% rename from effect/fenghuolun/1.vpcf_c rename to game/effect/fenghuolun/1.vpcf_c diff --git a/effect/fenghuolun/1_ember.vpcf_c b/game/effect/fenghuolun/1_ember.vpcf_c similarity index 100% rename from effect/fenghuolun/1_ember.vpcf_c rename to game/effect/fenghuolun/1_ember.vpcf_c diff --git a/effect/fenghuolun/1_ember_b.vpcf_c b/game/effect/fenghuolun/1_ember_b.vpcf_c similarity index 100% rename from effect/fenghuolun/1_ember_b.vpcf_c rename to game/effect/fenghuolun/1_ember_b.vpcf_c diff --git a/effect/fenghuolun/1_flare.vpcf_c b/game/effect/fenghuolun/1_flare.vpcf_c similarity index 100% rename from effect/fenghuolun/1_flare.vpcf_c rename to game/effect/fenghuolun/1_flare.vpcf_c diff --git a/effect/fenghuolun/1_glow.vpcf_c b/game/effect/fenghuolun/1_glow.vpcf_c similarity index 100% rename from effect/fenghuolun/1_glow.vpcf_c rename to game/effect/fenghuolun/1_glow.vpcf_c diff --git a/effect/fenghuolun/1_glow_b.vpcf_c b/game/effect/fenghuolun/1_glow_b.vpcf_c similarity index 100% rename from effect/fenghuolun/1_glow_b.vpcf_c rename to game/effect/fenghuolun/1_glow_b.vpcf_c diff --git a/effect/fire/f.vpcf_c b/game/effect/fire/f.vpcf_c similarity index 100% rename from effect/fire/f.vpcf_c rename to game/effect/fire/f.vpcf_c diff --git a/effect/frost_roshan/ambient.vpcf_c b/game/effect/frost_roshan/ambient.vpcf_c similarity index 100% rename from effect/frost_roshan/ambient.vpcf_c rename to game/effect/frost_roshan/ambient.vpcf_c diff --git a/effect/frost_roshan/eye.vpcf_c b/game/effect/frost_roshan/eye.vpcf_c similarity index 100% rename from effect/frost_roshan/eye.vpcf_c rename to game/effect/frost_roshan/eye.vpcf_c diff --git a/effect/frost_roshan/eyes.vpcf_c b/game/effect/frost_roshan/eyes.vpcf_c similarity index 100% rename from effect/frost_roshan/eyes.vpcf_c rename to game/effect/frost_roshan/eyes.vpcf_c diff --git a/effect/frost_roshan/eyes_b.vpcf_c b/game/effect/frost_roshan/eyes_b.vpcf_c similarity index 100% rename from effect/frost_roshan/eyes_b.vpcf_c rename to game/effect/frost_roshan/eyes_b.vpcf_c diff --git a/effect/frost_roshan/eyes_c.vpcf_c b/game/effect/frost_roshan/eyes_c.vpcf_c similarity index 100% rename from effect/frost_roshan/eyes_c.vpcf_c rename to game/effect/frost_roshan/eyes_c.vpcf_c diff --git a/effect/frost_roshan/eyes_d.vpcf_c b/game/effect/frost_roshan/eyes_d.vpcf_c similarity index 100% rename from effect/frost_roshan/eyes_d.vpcf_c rename to game/effect/frost_roshan/eyes_d.vpcf_c diff --git a/effect/frost_roshan/flek.vpcf_c b/game/effect/frost_roshan/flek.vpcf_c similarity index 100% rename from effect/frost_roshan/flek.vpcf_c rename to game/effect/frost_roshan/flek.vpcf_c diff --git a/effect/frost_roshan/ground.vpcf_c b/game/effect/frost_roshan/ground.vpcf_c similarity index 100% rename from effect/frost_roshan/ground.vpcf_c rename to game/effect/frost_roshan/ground.vpcf_c diff --git a/effect/frost_roshan/ground_crystal.vpcf_c b/game/effect/frost_roshan/ground_crystal.vpcf_c similarity index 100% rename from effect/frost_roshan/ground_crystal.vpcf_c rename to game/effect/frost_roshan/ground_crystal.vpcf_c diff --git a/effect/frost_roshan/ice.vpcf_c b/game/effect/frost_roshan/ice.vpcf_c similarity index 100% rename from effect/frost_roshan/ice.vpcf_c rename to game/effect/frost_roshan/ice.vpcf_c diff --git a/effect/frost_roshan/snowball_proj.vpcf_c b/game/effect/frost_roshan/snowball_proj.vpcf_c similarity index 100% rename from effect/frost_roshan/snowball_proj.vpcf_c rename to game/effect/frost_roshan/snowball_proj.vpcf_c diff --git a/effect/frost_roshan/steam.vpcf_c b/game/effect/frost_roshan/steam.vpcf_c similarity index 100% rename from effect/frost_roshan/steam.vpcf_c rename to game/effect/frost_roshan/steam.vpcf_c diff --git a/effect/gewugu/1.vpcf_c b/game/effect/gewugu/1.vpcf_c similarity index 100% rename from effect/gewugu/1.vpcf_c rename to game/effect/gewugu/1.vpcf_c diff --git a/effect/gewugu/2.vpcf_c b/game/effect/gewugu/2.vpcf_c similarity index 100% rename from effect/gewugu/2.vpcf_c rename to game/effect/gewugu/2.vpcf_c diff --git a/effect/gewugu/2_b.vpcf_c b/game/effect/gewugu/2_b.vpcf_c similarity index 100% rename from effect/gewugu/2_b.vpcf_c rename to game/effect/gewugu/2_b.vpcf_c diff --git a/effect/gewugu/2_c.vpcf_c b/game/effect/gewugu/2_c.vpcf_c similarity index 100% rename from effect/gewugu/2_c.vpcf_c rename to game/effect/gewugu/2_c.vpcf_c diff --git a/effect/gewugu/2_d.vpcf_c b/game/effect/gewugu/2_d.vpcf_c similarity index 100% rename from effect/gewugu/2_d.vpcf_c rename to game/effect/gewugu/2_d.vpcf_c diff --git a/effect/gewugu/2_e.vpcf_c b/game/effect/gewugu/2_e.vpcf_c similarity index 100% rename from effect/gewugu/2_e.vpcf_c rename to game/effect/gewugu/2_e.vpcf_c diff --git a/effect/gewugu/2_f.vpcf_c b/game/effect/gewugu/2_f.vpcf_c similarity index 100% rename from effect/gewugu/2_f.vpcf_c rename to game/effect/gewugu/2_f.vpcf_c diff --git a/effect/gewugu/2_g.vpcf_c b/game/effect/gewugu/2_g.vpcf_c similarity index 100% rename from effect/gewugu/2_g.vpcf_c rename to game/effect/gewugu/2_g.vpcf_c diff --git a/effect/gewugu/3.vpcf_c b/game/effect/gewugu/3.vpcf_c similarity index 100% rename from effect/gewugu/3.vpcf_c rename to game/effect/gewugu/3.vpcf_c diff --git a/effect/gewugu/3_c.vpcf_c b/game/effect/gewugu/3_c.vpcf_c similarity index 100% rename from effect/gewugu/3_c.vpcf_c rename to game/effect/gewugu/3_c.vpcf_c diff --git a/effect/gewugu/3_e.vpcf_c b/game/effect/gewugu/3_e.vpcf_c similarity index 100% rename from effect/gewugu/3_e.vpcf_c rename to game/effect/gewugu/3_e.vpcf_c diff --git a/effect/gewugu/3_g.vpcf_c b/game/effect/gewugu/3_g.vpcf_c similarity index 100% rename from effect/gewugu/3_g.vpcf_c rename to game/effect/gewugu/3_g.vpcf_c diff --git a/effect/gewugu/flyup/ambient.vpcf_c b/game/effect/gewugu/flyup/ambient.vpcf_c similarity index 100% rename from effect/gewugu/flyup/ambient.vpcf_c rename to game/effect/gewugu/flyup/ambient.vpcf_c diff --git a/effect/gewugu/flyup/bag.vpcf_c b/game/effect/gewugu/flyup/bag.vpcf_c similarity index 100% rename from effect/gewugu/flyup/bag.vpcf_c rename to game/effect/gewugu/flyup/bag.vpcf_c diff --git a/effect/gewugu/flyup/bag_coin.vpcf_c b/game/effect/gewugu/flyup/bag_coin.vpcf_c similarity index 100% rename from effect/gewugu/flyup/bag_coin.vpcf_c rename to game/effect/gewugu/flyup/bag_coin.vpcf_c diff --git a/effect/gewugu/flyup/bag_coin_glint.vpcf_c b/game/effect/gewugu/flyup/bag_coin_glint.vpcf_c similarity index 100% rename from effect/gewugu/flyup/bag_coin_glint.vpcf_c rename to game/effect/gewugu/flyup/bag_coin_glint.vpcf_c diff --git a/effect/gewugu/flyup/bag_coin_ground.vpcf_c b/game/effect/gewugu/flyup/bag_coin_ground.vpcf_c similarity index 100% rename from effect/gewugu/flyup/bag_coin_ground.vpcf_c rename to game/effect/gewugu/flyup/bag_coin_ground.vpcf_c diff --git a/effect/gewugu/flyup/bag_gold_glint.vpcf_c b/game/effect/gewugu/flyup/bag_gold_glint.vpcf_c similarity index 100% rename from effect/gewugu/flyup/bag_gold_glint.vpcf_c rename to game/effect/gewugu/flyup/bag_gold_glint.vpcf_c diff --git a/effect/gewugu/flyup/bag_gold_twinkle.vpcf_c b/game/effect/gewugu/flyup/bag_gold_twinkle.vpcf_c similarity index 100% rename from effect/gewugu/flyup/bag_gold_twinkle.vpcf_c rename to game/effect/gewugu/flyup/bag_gold_twinkle.vpcf_c diff --git a/effect/god/1.vpcf_c b/game/effect/god/1.vpcf_c similarity index 100% rename from effect/god/1.vpcf_c rename to game/effect/god/1.vpcf_c diff --git a/effect/god/1_b.vpcf_c b/game/effect/god/1_b.vpcf_c similarity index 100% rename from effect/god/1_b.vpcf_c rename to game/effect/god/1_b.vpcf_c diff --git a/effect/god/1_c.vpcf_c b/game/effect/god/1_c.vpcf_c similarity index 100% rename from effect/god/1_c.vpcf_c rename to game/effect/god/1_c.vpcf_c diff --git a/effect/god/1_c_fallback_mid.vpcf_c b/game/effect/god/1_c_fallback_mid.vpcf_c similarity index 100% rename from effect/god/1_c_fallback_mid.vpcf_c rename to game/effect/god/1_c_fallback_mid.vpcf_c diff --git a/effect/god/1_e.vpcf_c b/game/effect/god/1_e.vpcf_c similarity index 100% rename from effect/god/1_e.vpcf_c rename to game/effect/god/1_e.vpcf_c diff --git a/effect/god/1_fallback_mid.vpcf_c b/game/effect/god/1_fallback_mid.vpcf_c similarity index 100% rename from effect/god/1_fallback_mid.vpcf_c rename to game/effect/god/1_fallback_mid.vpcf_c diff --git a/effect/gold_angel/angels.vpcf_c b/game/effect/gold_angel/angels.vpcf_c similarity index 100% rename from effect/gold_angel/angels.vpcf_c rename to game/effect/gold_angel/angels.vpcf_c diff --git a/effect/gold_angel/angels_glow.vpcf_c b/game/effect/gold_angel/angels_glow.vpcf_c similarity index 100% rename from effect/gold_angel/angels_glow.vpcf_c rename to game/effect/gold_angel/angels_glow.vpcf_c diff --git a/effect/gold_angel/flare.vpcf_c b/game/effect/gold_angel/flare.vpcf_c similarity index 100% rename from effect/gold_angel/flare.vpcf_c rename to game/effect/gold_angel/flare.vpcf_c diff --git a/effect/gold_angel/ti7angels.vpcf_c b/game/effect/gold_angel/ti7angels.vpcf_c similarity index 100% rename from effect/gold_angel/ti7angels.vpcf_c rename to game/effect/gold_angel/ti7angels.vpcf_c diff --git a/effect/gold_angel/ti7angels_glow.vpcf_c b/game/effect/gold_angel/ti7angels_glow.vpcf_c similarity index 100% rename from effect/gold_angel/ti7angels_glow.vpcf_c rename to game/effect/gold_angel/ti7angels_glow.vpcf_c diff --git a/effect/gold_angel/ti7flare.vpcf_c b/game/effect/gold_angel/ti7flare.vpcf_c similarity index 100% rename from effect/gold_angel/ti7flare.vpcf_c rename to game/effect/gold_angel/ti7flare.vpcf_c diff --git a/effect/golden_roshan/ambient.vpcf_c b/game/effect/golden_roshan/ambient.vpcf_c similarity index 100% rename from effect/golden_roshan/ambient.vpcf_c rename to game/effect/golden_roshan/ambient.vpcf_c diff --git a/effect/golden_roshan/ambient_b.vpcf_c b/game/effect/golden_roshan/ambient_b.vpcf_c similarity index 100% rename from effect/golden_roshan/ambient_b.vpcf_c rename to game/effect/golden_roshan/ambient_b.vpcf_c diff --git a/effect/golden_roshan/ambient_c.vpcf_c b/game/effect/golden_roshan/ambient_c.vpcf_c similarity index 100% rename from effect/golden_roshan/ambient_c.vpcf_c rename to game/effect/golden_roshan/ambient_c.vpcf_c diff --git a/effect/golden_roshan/ambient_d.vpcf_c b/game/effect/golden_roshan/ambient_d.vpcf_c similarity index 100% rename from effect/golden_roshan/ambient_d.vpcf_c rename to game/effect/golden_roshan/ambient_d.vpcf_c diff --git a/effect/golden_roshan/eyes.vpcf_c b/game/effect/golden_roshan/eyes.vpcf_c similarity index 100% rename from effect/golden_roshan/eyes.vpcf_c rename to game/effect/golden_roshan/eyes.vpcf_c diff --git a/effect/golden_roshan/eyes_b.vpcf_c b/game/effect/golden_roshan/eyes_b.vpcf_c similarity index 100% rename from effect/golden_roshan/eyes_b.vpcf_c rename to game/effect/golden_roshan/eyes_b.vpcf_c diff --git a/effect/golden_roshan/eyes_c.vpcf_c b/game/effect/golden_roshan/eyes_c.vpcf_c similarity index 100% rename from effect/golden_roshan/eyes_c.vpcf_c rename to game/effect/golden_roshan/eyes_c.vpcf_c diff --git a/effect/golden_roshan/eyes_d.vpcf_c b/game/effect/golden_roshan/eyes_d.vpcf_c similarity index 100% rename from effect/golden_roshan/eyes_d.vpcf_c rename to game/effect/golden_roshan/eyes_d.vpcf_c diff --git a/effect/golden_roshan/goldenambient.vpcf_c b/game/effect/golden_roshan/goldenambient.vpcf_c similarity index 100% rename from effect/golden_roshan/goldenambient.vpcf_c rename to game/effect/golden_roshan/goldenambient.vpcf_c diff --git a/effect/golden_roshan/goldenambient_b.vpcf_c b/game/effect/golden_roshan/goldenambient_b.vpcf_c similarity index 100% rename from effect/golden_roshan/goldenambient_b.vpcf_c rename to game/effect/golden_roshan/goldenambient_b.vpcf_c diff --git a/effect/golden_roshan/goldenambient_c.vpcf_c b/game/effect/golden_roshan/goldenambient_c.vpcf_c similarity index 100% rename from effect/golden_roshan/goldenambient_c.vpcf_c rename to game/effect/golden_roshan/goldenambient_c.vpcf_c diff --git a/effect/golden_roshan/goldenambient_d.vpcf_c b/game/effect/golden_roshan/goldenambient_d.vpcf_c similarity index 100% rename from effect/golden_roshan/goldenambient_d.vpcf_c rename to game/effect/golden_roshan/goldenambient_d.vpcf_c diff --git a/effect/golden_roshan/goldeneyes.vpcf_c b/game/effect/golden_roshan/goldeneyes.vpcf_c similarity index 100% rename from effect/golden_roshan/goldeneyes.vpcf_c rename to game/effect/golden_roshan/goldeneyes.vpcf_c diff --git a/effect/golden_roshan/goldeneyes_b.vpcf_c b/game/effect/golden_roshan/goldeneyes_b.vpcf_c similarity index 100% rename from effect/golden_roshan/goldeneyes_b.vpcf_c rename to game/effect/golden_roshan/goldeneyes_b.vpcf_c diff --git a/effect/golden_roshan/goldeneyes_c.vpcf_c b/game/effect/golden_roshan/goldeneyes_c.vpcf_c similarity index 100% rename from effect/golden_roshan/goldeneyes_c.vpcf_c rename to game/effect/golden_roshan/goldeneyes_c.vpcf_c diff --git a/effect/golden_roshan/goldeneyes_d.vpcf_c b/game/effect/golden_roshan/goldeneyes_d.vpcf_c similarity index 100% rename from effect/golden_roshan/goldeneyes_d.vpcf_c rename to game/effect/golden_roshan/goldeneyes_d.vpcf_c diff --git a/effect/golden_treasure_ti7_ambient_2/ti7.vpcf_c b/game/effect/golden_treasure_ti7_ambient_2/ti7.vpcf_c similarity index 100% rename from effect/golden_treasure_ti7_ambient_2/ti7.vpcf_c rename to game/effect/golden_treasure_ti7_ambient_2/ti7.vpcf_c diff --git a/effect/golden_treasure_ti7_ambient_2/ti7_glow.vpcf_c b/game/effect/golden_treasure_ti7_ambient_2/ti7_glow.vpcf_c similarity index 100% rename from effect/golden_treasure_ti7_ambient_2/ti7_glow.vpcf_c rename to game/effect/golden_treasure_ti7_ambient_2/ti7_glow.vpcf_c diff --git a/effect/golden_treasure_ti7_ambient_2/ti7_magic.vpcf_c b/game/effect/golden_treasure_ti7_ambient_2/ti7_magic.vpcf_c similarity index 100% rename from effect/golden_treasure_ti7_ambient_2/ti7_magic.vpcf_c rename to game/effect/golden_treasure_ti7_ambient_2/ti7_magic.vpcf_c diff --git a/effect/golden_treasure_ti7_ambient_2/ti7_shine.vpcf_c b/game/effect/golden_treasure_ti7_ambient_2/ti7_shine.vpcf_c similarity index 100% rename from effect/golden_treasure_ti7_ambient_2/ti7_shine.vpcf_c rename to game/effect/golden_treasure_ti7_ambient_2/ti7_shine.vpcf_c diff --git a/effect/golden_treasure_ti7_ambient_2/ti7_twinkle.vpcf_c b/game/effect/golden_treasure_ti7_ambient_2/ti7_twinkle.vpcf_c similarity index 100% rename from effect/golden_treasure_ti7_ambient_2/ti7_twinkle.vpcf_c rename to game/effect/golden_treasure_ti7_ambient_2/ti7_twinkle.vpcf_c diff --git a/effect/golden_ww/1.vpcf_c b/game/effect/golden_ww/1.vpcf_c similarity index 100% rename from effect/golden_ww/1.vpcf_c rename to game/effect/golden_ww/1.vpcf_c diff --git a/effect/gs_fuhun/debuffdebuff.vpcf_c b/game/effect/gs_fuhun/debuffdebuff.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffdebuff.vpcf_c rename to game/effect/gs_fuhun/debuffdebuff.vpcf_c diff --git a/effect/gs_fuhun/debuffground_chains_glow.vpcf_c b/game/effect/gs_fuhun/debuffground_chains_glow.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffground_chains_glow.vpcf_c rename to game/effect/gs_fuhun/debuffground_chains_glow.vpcf_c diff --git a/effect/gs_fuhun/debuffground_model.vpcf_c b/game/effect/gs_fuhun/debuffground_model.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffground_model.vpcf_c rename to game/effect/gs_fuhun/debuffground_model.vpcf_c diff --git a/effect/gs_fuhun/debuffground_proj.vpcf_c b/game/effect/gs_fuhun/debuffground_proj.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffground_proj.vpcf_c rename to game/effect/gs_fuhun/debuffground_proj.vpcf_c diff --git a/effect/gs_fuhun/debuffground_rope.vpcf_c b/game/effect/gs_fuhun/debuffground_rope.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffground_rope.vpcf_c rename to game/effect/gs_fuhun/debuffground_rope.vpcf_c diff --git a/effect/gs_fuhun/debuffground_splash.vpcf_c b/game/effect/gs_fuhun/debuffground_splash.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffground_splash.vpcf_c rename to game/effect/gs_fuhun/debuffground_splash.vpcf_c diff --git a/effect/gs_fuhun/debuffground_splatter.vpcf_c b/game/effect/gs_fuhun/debuffground_splatter.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffground_splatter.vpcf_c rename to game/effect/gs_fuhun/debuffground_splatter.vpcf_c diff --git a/effect/gs_fuhun/debuffmain_embers.vpcf_c b/game/effect/gs_fuhun/debuffmain_embers.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffmain_embers.vpcf_c rename to game/effect/gs_fuhun/debuffmain_embers.vpcf_c diff --git a/effect/gs_fuhun/debuffmain_glow.vpcf_c b/game/effect/gs_fuhun/debuffmain_glow.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffmain_glow.vpcf_c rename to game/effect/gs_fuhun/debuffmain_glow.vpcf_c diff --git a/effect/gs_fuhun/debuffmain_outline.vpcf_c b/game/effect/gs_fuhun/debuffmain_outline.vpcf_c similarity index 100% rename from effect/gs_fuhun/debuffmain_outline.vpcf_c rename to game/effect/gs_fuhun/debuffmain_outline.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c diff --git a/effect/huangsha/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c b/game/effect/huangsha/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c similarity index 100% rename from effect/huangsha/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c rename to game/effect/huangsha/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c diff --git a/effect/huangsha/roushancourier_roshan_desert_sands_eyes.vpcf_c b/game/effect/huangsha/roushancourier_roshan_desert_sands_eyes.vpcf_c similarity index 100% rename from effect/huangsha/roushancourier_roshan_desert_sands_eyes.vpcf_c rename to game/effect/huangsha/roushancourier_roshan_desert_sands_eyes.vpcf_c diff --git a/effect/huangsha/roushancourier_roshan_desert_sands_eyes_a.vpcf_c b/game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_a.vpcf_c similarity index 100% rename from effect/huangsha/roushancourier_roshan_desert_sands_eyes_a.vpcf_c rename to game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_a.vpcf_c diff --git a/effect/huangsha/roushancourier_roshan_desert_sands_eyes_b.vpcf_c b/game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_b.vpcf_c similarity index 100% rename from effect/huangsha/roushancourier_roshan_desert_sands_eyes_b.vpcf_c rename to game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_b.vpcf_c diff --git a/effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c b/game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c similarity index 100% rename from effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c rename to game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c diff --git a/effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c b/game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c similarity index 100% rename from effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c rename to game/effect/huangsha/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_a.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_b_trail.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_c_trail.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_d.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_sand_trail.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_ambient_wings_a.vpcf_c diff --git a/effect/huangsha2/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c b/game/effect/huangsha2/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c similarity index 100% rename from effect/huangsha2/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c rename to game/effect/huangsha2/roushanbaby_roshan_desert_sands_rocks_model.vpcf_c diff --git a/effect/huangsha2/roushancourier_roshan_desert_sands_eyes.vpcf_c b/game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes.vpcf_c similarity index 100% rename from effect/huangsha2/roushancourier_roshan_desert_sands_eyes.vpcf_c rename to game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes.vpcf_c diff --git a/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_a.vpcf_c b/game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_a.vpcf_c similarity index 100% rename from effect/huangsha2/roushancourier_roshan_desert_sands_eyes_a.vpcf_c rename to game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_a.vpcf_c diff --git a/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_b.vpcf_c b/game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_b.vpcf_c similarity index 100% rename from effect/huangsha2/roushancourier_roshan_desert_sands_eyes_b.vpcf_c rename to game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_b.vpcf_c diff --git a/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c b/game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c similarity index 100% rename from effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c rename to game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers.vpcf_c diff --git a/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c b/game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c similarity index 100% rename from effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c rename to game/effect/huangsha2/roushancourier_roshan_desert_sands_eyes_embers_b.vpcf_c diff --git a/effect/hunter/monkey_king_fur_army_destroy.vpcf_c b/game/effect/hunter/monkey_king_fur_army_destroy.vpcf_c similarity index 100% rename from effect/hunter/monkey_king_fur_army_destroy.vpcf_c rename to game/effect/hunter/monkey_king_fur_army_destroy.vpcf_c diff --git a/effect/hunter/monkey_king_fur_army_positions.vpcf_c b/game/effect/hunter/monkey_king_fur_army_positions.vpcf_c similarity index 100% rename from effect/hunter/monkey_king_fur_army_positions.vpcf_c rename to game/effect/hunter/monkey_king_fur_army_positions.vpcf_c diff --git a/effect/hunter/monkey_king_fur_army_positions_ring_base.vpcf_c b/game/effect/hunter/monkey_king_fur_army_positions_ring_base.vpcf_c similarity index 100% rename from effect/hunter/monkey_king_fur_army_positions_ring_base.vpcf_c rename to game/effect/hunter/monkey_king_fur_army_positions_ring_base.vpcf_c diff --git a/effect/hunter/monkey_king_fur_army_positions_ring_dragon.vpcf_c b/game/effect/hunter/monkey_king_fur_army_positions_ring_dragon.vpcf_c similarity index 100% rename from effect/hunter/monkey_king_fur_army_positions_ring_dragon.vpcf_c rename to game/effect/hunter/monkey_king_fur_army_positions_ring_dragon.vpcf_c diff --git a/effect/hunter/monkey_king_fur_army_positions_ring_flash.vpcf_c b/game/effect/hunter/monkey_king_fur_army_positions_ring_flash.vpcf_c similarity index 100% rename from effect/hunter/monkey_king_fur_army_positions_ring_flash.vpcf_c rename to game/effect/hunter/monkey_king_fur_army_positions_ring_flash.vpcf_c diff --git a/effect/item_shanguang/1.vpcf_c b/game/effect/item_shanguang/1.vpcf_c similarity index 100% rename from effect/item_shanguang/1.vpcf_c rename to game/effect/item_shanguang/1.vpcf_c diff --git a/effect/jiangbing/1.vpcf_c b/game/effect/jiangbing/1.vpcf_c similarity index 100% rename from effect/jiangbing/1.vpcf_c rename to game/effect/jiangbing/1.vpcf_c diff --git a/effect/jiangbing/1_bodytrail.vpcf_c b/game/effect/jiangbing/1_bodytrail.vpcf_c similarity index 100% rename from effect/jiangbing/1_bodytrail.vpcf_c rename to game/effect/jiangbing/1_bodytrail.vpcf_c diff --git a/effect/jiangbing/1_bodytrail_glow.vpcf_c b/game/effect/jiangbing/1_bodytrail_glow.vpcf_c similarity index 100% rename from effect/jiangbing/1_bodytrail_glow.vpcf_c rename to game/effect/jiangbing/1_bodytrail_glow.vpcf_c diff --git a/effect/jiangbing/1_drop.vpcf_c b/game/effect/jiangbing/1_drop.vpcf_c similarity index 100% rename from effect/jiangbing/1_drop.vpcf_c rename to game/effect/jiangbing/1_drop.vpcf_c diff --git a/effect/jiangbing/1_drop_b.vpcf_c b/game/effect/jiangbing/1_drop_b.vpcf_c similarity index 100% rename from effect/jiangbing/1_drop_b.vpcf_c rename to game/effect/jiangbing/1_drop_b.vpcf_c diff --git a/effect/jiangbing/1_drop_b_glow.vpcf_c b/game/effect/jiangbing/1_drop_b_glow.vpcf_c similarity index 100% rename from effect/jiangbing/1_drop_b_glow.vpcf_c rename to game/effect/jiangbing/1_drop_b_glow.vpcf_c diff --git a/effect/jiangbing/1_eye.vpcf_c b/game/effect/jiangbing/1_eye.vpcf_c similarity index 100% rename from effect/jiangbing/1_eye.vpcf_c rename to game/effect/jiangbing/1_eye.vpcf_c diff --git a/effect/jiangbing/1_eye_a.vpcf_c b/game/effect/jiangbing/1_eye_a.vpcf_c similarity index 100% rename from effect/jiangbing/1_eye_a.vpcf_c rename to game/effect/jiangbing/1_eye_a.vpcf_c diff --git a/effect/jiangbing/1_eye_glow.vpcf_c b/game/effect/jiangbing/1_eye_glow.vpcf_c similarity index 100% rename from effect/jiangbing/1_eye_glow.vpcf_c rename to game/effect/jiangbing/1_eye_glow.vpcf_c diff --git a/effect/jiangbing/1_eye_streak.vpcf_c b/game/effect/jiangbing/1_eye_streak.vpcf_c similarity index 100% rename from effect/jiangbing/1_eye_streak.vpcf_c rename to game/effect/jiangbing/1_eye_streak.vpcf_c diff --git a/effect/jiangbing/1_gem.vpcf_c b/game/effect/jiangbing/1_gem.vpcf_c similarity index 100% rename from effect/jiangbing/1_gem.vpcf_c rename to game/effect/jiangbing/1_gem.vpcf_c diff --git a/effect/jiangbing/1_gem_glow.vpcf_c b/game/effect/jiangbing/1_gem_glow.vpcf_c similarity index 100% rename from effect/jiangbing/1_gem_glow.vpcf_c rename to game/effect/jiangbing/1_gem_glow.vpcf_c diff --git a/effect/jiangbing/1_glow.vpcf_c b/game/effect/jiangbing/1_glow.vpcf_c similarity index 100% rename from effect/jiangbing/1_glow.vpcf_c rename to game/effect/jiangbing/1_glow.vpcf_c diff --git a/effect/jiangbing/1_sparks.vpcf_c b/game/effect/jiangbing/1_sparks.vpcf_c similarity index 100% rename from effect/jiangbing/1_sparks.vpcf_c rename to game/effect/jiangbing/1_sparks.vpcf_c diff --git a/effect/jiangbing/1_sparks_red.vpcf_c b/game/effect/jiangbing/1_sparks_red.vpcf_c similarity index 100% rename from effect/jiangbing/1_sparks_red.vpcf_c rename to game/effect/jiangbing/1_sparks_red.vpcf_c diff --git a/effect/jiangbing/1_trail.vpcf_c b/game/effect/jiangbing/1_trail.vpcf_c similarity index 100% rename from effect/jiangbing/1_trail.vpcf_c rename to game/effect/jiangbing/1_trail.vpcf_c diff --git a/effect/jiangbing/1_trail_rope.vpcf_c b/game/effect/jiangbing/1_trail_rope.vpcf_c similarity index 100% rename from effect/jiangbing/1_trail_rope.vpcf_c rename to game/effect/jiangbing/1_trail_rope.vpcf_c diff --git a/effect/jiangbing/1_trail_rope_glow.vpcf_c b/game/effect/jiangbing/1_trail_rope_glow.vpcf_c similarity index 100% rename from effect/jiangbing/1_trail_rope_glow.vpcf_c rename to game/effect/jiangbing/1_trail_rope_glow.vpcf_c diff --git a/effect/jiangbing/1_trail_rope_red.vpcf_c b/game/effect/jiangbing/1_trail_rope_red.vpcf_c similarity index 100% rename from effect/jiangbing/1_trail_rope_red.vpcf_c rename to game/effect/jiangbing/1_trail_rope_red.vpcf_c diff --git a/effect/jigubang/1.vpcf_c b/game/effect/jigubang/1.vpcf_c similarity index 100% rename from effect/jigubang/1.vpcf_c rename to game/effect/jigubang/1.vpcf_c diff --git a/effect/jin_dp/courier_krobeling_gold_ambient.vpcf_c b/game/effect/jin_dp/courier_krobeling_gold_ambient.vpcf_c similarity index 100% rename from effect/jin_dp/courier_krobeling_gold_ambient.vpcf_c rename to game/effect/jin_dp/courier_krobeling_gold_ambient.vpcf_c diff --git a/effect/jin_dp/courier_krobeling_gold_ambient_glow.vpcf_c b/game/effect/jin_dp/courier_krobeling_gold_ambient_glow.vpcf_c similarity index 100% rename from effect/jin_dp/courier_krobeling_gold_ambient_glow.vpcf_c rename to game/effect/jin_dp/courier_krobeling_gold_ambient_glow.vpcf_c diff --git a/effect/jin_dp/courier_krobeling_gold_ambient_magic.vpcf_c b/game/effect/jin_dp/courier_krobeling_gold_ambient_magic.vpcf_c similarity index 100% rename from effect/jin_dp/courier_krobeling_gold_ambient_magic.vpcf_c rename to game/effect/jin_dp/courier_krobeling_gold_ambient_magic.vpcf_c diff --git a/effect/jin_dp/courier_krobeling_gold_ambient_twinkle.vpcf_c b/game/effect/jin_dp/courier_krobeling_gold_ambient_twinkle.vpcf_c similarity index 100% rename from effect/jin_dp/courier_krobeling_gold_ambient_twinkle.vpcf_c rename to game/effect/jin_dp/courier_krobeling_gold_ambient_twinkle.vpcf_c diff --git a/effect/jinbi/jinbigold.vpcf_c b/game/effect/jinbi/jinbigold.vpcf_c similarity index 100% rename from effect/jinbi/jinbigold.vpcf_c rename to game/effect/jinbi/jinbigold.vpcf_c diff --git a/effect/jinbi/jinbigoldend.vpcf_c b/game/effect/jinbi/jinbigoldend.vpcf_c similarity index 100% rename from effect/jinbi/jinbigoldend.vpcf_c rename to game/effect/jinbi/jinbigoldend.vpcf_c diff --git a/effect/jinbi/jinbigoldglow.vpcf_c b/game/effect/jinbi/jinbigoldglow.vpcf_c similarity index 100% rename from effect/jinbi/jinbigoldglow.vpcf_c rename to game/effect/jinbi/jinbigoldglow.vpcf_c diff --git a/effect/jinbi/jinbitrail.vpcf_c b/game/effect/jinbi/jinbitrail.vpcf_c similarity index 100% rename from effect/jinbi/jinbitrail.vpcf_c rename to game/effect/jinbi/jinbitrail.vpcf_c diff --git a/effect/knight/1.vpcf_c b/game/effect/knight/1.vpcf_c similarity index 100% rename from effect/knight/1.vpcf_c rename to game/effect/knight/1.vpcf_c diff --git a/effect/knight/1_body_glow.vpcf_c b/game/effect/knight/1_body_glow.vpcf_c similarity index 100% rename from effect/knight/1_body_glow.vpcf_c rename to game/effect/knight/1_body_glow.vpcf_c diff --git a/effect/knight/1_cylinder.vpcf_c b/game/effect/knight/1_cylinder.vpcf_c similarity index 100% rename from effect/knight/1_cylinder.vpcf_c rename to game/effect/knight/1_cylinder.vpcf_c diff --git a/effect/knight/1_cylinder_active.vpcf_c b/game/effect/knight/1_cylinder_active.vpcf_c similarity index 100% rename from effect/knight/1_cylinder_active.vpcf_c rename to game/effect/knight/1_cylinder_active.vpcf_c diff --git a/effect/knight/1_flash.vpcf_c b/game/effect/knight/1_flash.vpcf_c similarity index 100% rename from effect/knight/1_flash.vpcf_c rename to game/effect/knight/1_flash.vpcf_c diff --git a/effect/knight/1_glyph.vpcf_c b/game/effect/knight/1_glyph.vpcf_c similarity index 100% rename from effect/knight/1_glyph.vpcf_c rename to game/effect/knight/1_glyph.vpcf_c diff --git a/effect/knight/1_glyph_glow.vpcf_c b/game/effect/knight/1_glyph_glow.vpcf_c similarity index 100% rename from effect/knight/1_glyph_glow.vpcf_c rename to game/effect/knight/1_glyph_glow.vpcf_c diff --git a/effect/knight/1_rings.vpcf_c b/game/effect/knight/1_rings.vpcf_c similarity index 100% rename from effect/knight/1_rings.vpcf_c rename to game/effect/knight/1_rings.vpcf_c diff --git a/effect/knight/1_sphere.vpcf_c b/game/effect/knight/1_sphere.vpcf_c similarity index 100% rename from effect/knight/1_sphere.vpcf_c rename to game/effect/knight/1_sphere.vpcf_c diff --git a/effect/knight/1_swoosh.vpcf_c b/game/effect/knight/1_swoosh.vpcf_c similarity index 100% rename from effect/knight/1_swoosh.vpcf_c rename to game/effect/knight/1_swoosh.vpcf_c diff --git a/effect/knight/1_swoosh_b.vpcf_c b/game/effect/knight/1_swoosh_b.vpcf_c similarity index 100% rename from effect/knight/1_swoosh_b.vpcf_c rename to game/effect/knight/1_swoosh_b.vpcf_c diff --git a/effect/lanhuo/b_motenai.vpcf_c b/game/effect/lanhuo/b_motenai.vpcf_c similarity index 100% rename from effect/lanhuo/b_motenai.vpcf_c rename to game/effect/lanhuo/b_motenai.vpcf_c diff --git a/effect/lanhuo/c_motenai.vpcf_c b/game/effect/lanhuo/c_motenai.vpcf_c similarity index 100% rename from effect/lanhuo/c_motenai.vpcf_c rename to game/effect/lanhuo/c_motenai.vpcf_c diff --git a/effect/lanhuo/glow_motenai.vpcf_c b/game/effect/lanhuo/glow_motenai.vpcf_c similarity index 100% rename from effect/lanhuo/glow_motenai.vpcf_c rename to game/effect/lanhuo/glow_motenai.vpcf_c diff --git a/effect/lanhuo/motenai.vpcf_c b/game/effect/lanhuo/motenai.vpcf_c similarity index 100% rename from effect/lanhuo/motenai.vpcf_c rename to game/effect/lanhuo/motenai.vpcf_c diff --git a/effect/lava_roshan/1.vpcf_c b/game/effect/lava_roshan/1.vpcf_c similarity index 100% rename from effect/lava_roshan/1.vpcf_c rename to game/effect/lava_roshan/1.vpcf_c diff --git a/effect/lava_roshan/1_ember.vpcf_c b/game/effect/lava_roshan/1_ember.vpcf_c similarity index 100% rename from effect/lava_roshan/1_ember.vpcf_c rename to game/effect/lava_roshan/1_ember.vpcf_c diff --git a/effect/lava_roshan/1_eyes.vpcf_c b/game/effect/lava_roshan/1_eyes.vpcf_c similarity index 100% rename from effect/lava_roshan/1_eyes.vpcf_c rename to game/effect/lava_roshan/1_eyes.vpcf_c diff --git a/effect/lava_roshan/1_eyes_b.vpcf_c b/game/effect/lava_roshan/1_eyes_b.vpcf_c similarity index 100% rename from effect/lava_roshan/1_eyes_b.vpcf_c rename to game/effect/lava_roshan/1_eyes_b.vpcf_c diff --git a/effect/lava_roshan/1_eyes_c.vpcf_c b/game/effect/lava_roshan/1_eyes_c.vpcf_c similarity index 100% rename from effect/lava_roshan/1_eyes_c.vpcf_c rename to game/effect/lava_roshan/1_eyes_c.vpcf_c diff --git a/effect/lava_roshan/1_eyes_d.vpcf_c b/game/effect/lava_roshan/1_eyes_d.vpcf_c similarity index 100% rename from effect/lava_roshan/1_eyes_d.vpcf_c rename to game/effect/lava_roshan/1_eyes_d.vpcf_c diff --git a/effect/lava_roshan/1_fire.vpcf_c b/game/effect/lava_roshan/1_fire.vpcf_c similarity index 100% rename from effect/lava_roshan/1_fire.vpcf_c rename to game/effect/lava_roshan/1_fire.vpcf_c diff --git a/effect/lava_roshan/1_ground.vpcf_c b/game/effect/lava_roshan/1_ground.vpcf_c similarity index 100% rename from effect/lava_roshan/1_ground.vpcf_c rename to game/effect/lava_roshan/1_ground.vpcf_c diff --git a/effect/lava_roshan/1_halo.vpcf_c b/game/effect/lava_roshan/1_halo.vpcf_c similarity index 100% rename from effect/lava_roshan/1_halo.vpcf_c rename to game/effect/lava_roshan/1_halo.vpcf_c diff --git a/effect/lava_roshan/1_steam.vpcf_c b/game/effect/lava_roshan/1_steam.vpcf_c similarity index 100% rename from effect/lava_roshan/1_steam.vpcf_c rename to game/effect/lava_roshan/1_steam.vpcf_c diff --git a/effect/lianhua/lianhua.vpcf_c b/game/effect/lianhua/lianhua.vpcf_c similarity index 100% rename from effect/lianhua/lianhua.vpcf_c rename to game/effect/lianhua/lianhua.vpcf_c diff --git a/effect/lianhua/lianhua_b.vpcf_c b/game/effect/lianhua/lianhua_b.vpcf_c similarity index 100% rename from effect/lianhua/lianhua_b.vpcf_c rename to game/effect/lianhua/lianhua_b.vpcf_c diff --git a/effect/liansai_dog/1.vpcf_c b/game/effect/liansai_dog/1.vpcf_c similarity index 100% rename from effect/liansai_dog/1.vpcf_c rename to game/effect/liansai_dog/1.vpcf_c diff --git a/effect/liansai_dog/1_a.vpcf_c b/game/effect/liansai_dog/1_a.vpcf_c similarity index 100% rename from effect/liansai_dog/1_a.vpcf_c rename to game/effect/liansai_dog/1_a.vpcf_c diff --git a/effect/liansai_dog/1_base.vpcf_c b/game/effect/liansai_dog/1_base.vpcf_c similarity index 100% rename from effect/liansai_dog/1_base.vpcf_c rename to game/effect/liansai_dog/1_base.vpcf_c diff --git a/effect/liansai_dog/1_base_b.vpcf_c b/game/effect/liansai_dog/1_base_b.vpcf_c similarity index 100% rename from effect/liansai_dog/1_base_b.vpcf_c rename to game/effect/liansai_dog/1_base_b.vpcf_c diff --git a/effect/liansai_dog/1_body_flash.vpcf_c b/game/effect/liansai_dog/1_body_flash.vpcf_c similarity index 100% rename from effect/liansai_dog/1_body_flash.vpcf_c rename to game/effect/liansai_dog/1_body_flash.vpcf_c diff --git a/effect/liansai_dog/1_body_glow.vpcf_c b/game/effect/liansai_dog/1_body_glow.vpcf_c similarity index 100% rename from effect/liansai_dog/1_body_glow.vpcf_c rename to game/effect/liansai_dog/1_body_glow.vpcf_c diff --git a/effect/liansai_dog/1_body_sparkle.vpcf_c b/game/effect/liansai_dog/1_body_sparkle.vpcf_c similarity index 100% rename from effect/liansai_dog/1_body_sparkle.vpcf_c rename to game/effect/liansai_dog/1_body_sparkle.vpcf_c diff --git a/effect/liansai_dog/1_buff.vpcf_c b/game/effect/liansai_dog/1_buff.vpcf_c similarity index 100% rename from effect/liansai_dog/1_buff.vpcf_c rename to game/effect/liansai_dog/1_buff.vpcf_c diff --git a/effect/liansai_dog/1_buff_elec.vpcf_c b/game/effect/liansai_dog/1_buff_elec.vpcf_c similarity index 100% rename from effect/liansai_dog/1_buff_elec.vpcf_c rename to game/effect/liansai_dog/1_buff_elec.vpcf_c diff --git a/effect/liansai_dog/1_ember.vpcf_c b/game/effect/liansai_dog/1_ember.vpcf_c similarity index 100% rename from effect/liansai_dog/1_ember.vpcf_c rename to game/effect/liansai_dog/1_ember.vpcf_c diff --git a/effect/liansai_dog/1_halo_body.vpcf_c b/game/effect/liansai_dog/1_halo_body.vpcf_c similarity index 100% rename from effect/liansai_dog/1_halo_body.vpcf_c rename to game/effect/liansai_dog/1_halo_body.vpcf_c diff --git a/effect/liansai_dog/1_hands.vpcf_c b/game/effect/liansai_dog/1_hands.vpcf_c similarity index 100% rename from effect/liansai_dog/1_hands.vpcf_c rename to game/effect/liansai_dog/1_hands.vpcf_c diff --git a/effect/liansai_dog/1_hands_arc.vpcf_c b/game/effect/liansai_dog/1_hands_arc.vpcf_c similarity index 100% rename from effect/liansai_dog/1_hands_arc.vpcf_c rename to game/effect/liansai_dog/1_hands_arc.vpcf_c diff --git a/effect/liansai_dog/1_hands_arc_head.vpcf_c b/game/effect/liansai_dog/1_hands_arc_head.vpcf_c similarity index 100% rename from effect/liansai_dog/1_hands_arc_head.vpcf_c rename to game/effect/liansai_dog/1_hands_arc_head.vpcf_c diff --git a/effect/liansai_dog/1_hands_arc_pnt.vpcf_c b/game/effect/liansai_dog/1_hands_arc_pnt.vpcf_c similarity index 100% rename from effect/liansai_dog/1_hands_arc_pnt.vpcf_c rename to game/effect/liansai_dog/1_hands_arc_pnt.vpcf_c diff --git a/effect/liansai_dog/1_hands_glow.vpcf_c b/game/effect/liansai_dog/1_hands_glow.vpcf_c similarity index 100% rename from effect/liansai_dog/1_hands_glow.vpcf_c rename to game/effect/liansai_dog/1_hands_glow.vpcf_c diff --git a/effect/liansai_dog/1_light.vpcf_c b/game/effect/liansai_dog/1_light.vpcf_c similarity index 100% rename from effect/liansai_dog/1_light.vpcf_c rename to game/effect/liansai_dog/1_light.vpcf_c diff --git a/effect/liansai_dog/1_magic.vpcf_c b/game/effect/liansai_dog/1_magic.vpcf_c similarity index 100% rename from effect/liansai_dog/1_magic.vpcf_c rename to game/effect/liansai_dog/1_magic.vpcf_c diff --git a/effect/liansai_dog/1_magic_burst.vpcf_c b/game/effect/liansai_dog/1_magic_burst.vpcf_c similarity index 100% rename from effect/liansai_dog/1_magic_burst.vpcf_c rename to game/effect/liansai_dog/1_magic_burst.vpcf_c diff --git a/effect/liansai_dog/1_regen.vpcf_c b/game/effect/liansai_dog/1_regen.vpcf_c similarity index 100% rename from effect/liansai_dog/1_regen.vpcf_c rename to game/effect/liansai_dog/1_regen.vpcf_c diff --git a/effect/liansai_dog/1_ribbon.vpcf_c b/game/effect/liansai_dog/1_ribbon.vpcf_c similarity index 100% rename from effect/liansai_dog/1_ribbon.vpcf_c rename to game/effect/liansai_dog/1_ribbon.vpcf_c diff --git a/effect/liansai_dog/1_ribbon_glow.vpcf_c b/game/effect/liansai_dog/1_ribbon_glow.vpcf_c similarity index 100% rename from effect/liansai_dog/1_ribbon_glow.vpcf_c rename to game/effect/liansai_dog/1_ribbon_glow.vpcf_c diff --git a/effect/liansai_dog/1_ribbon_glow_rev.vpcf_c b/game/effect/liansai_dog/1_ribbon_glow_rev.vpcf_c similarity index 100% rename from effect/liansai_dog/1_ribbon_glow_rev.vpcf_c rename to game/effect/liansai_dog/1_ribbon_glow_rev.vpcf_c diff --git a/effect/liansai_dog/1_ring.vpcf_c b/game/effect/liansai_dog/1_ring.vpcf_c similarity index 100% rename from effect/liansai_dog/1_ring.vpcf_c rename to game/effect/liansai_dog/1_ring.vpcf_c diff --git a/effect/liansai_dog/1_sphere.vpcf_c b/game/effect/liansai_dog/1_sphere.vpcf_c similarity index 100% rename from effect/liansai_dog/1_sphere.vpcf_c rename to game/effect/liansai_dog/1_sphere.vpcf_c diff --git a/effect/liansai_dog/1_sphere_b.vpcf_c b/game/effect/liansai_dog/1_sphere_b.vpcf_c similarity index 100% rename from effect/liansai_dog/1_sphere_b.vpcf_c rename to game/effect/liansai_dog/1_sphere_b.vpcf_c diff --git a/effect/liansai_dog/1_sphere_edge.vpcf_c b/game/effect/liansai_dog/1_sphere_edge.vpcf_c similarity index 100% rename from effect/liansai_dog/1_sphere_edge.vpcf_c rename to game/effect/liansai_dog/1_sphere_edge.vpcf_c diff --git a/effect/liansai_dog/1_streamers_l.vpcf_c b/game/effect/liansai_dog/1_streamers_l.vpcf_c similarity index 100% rename from effect/liansai_dog/1_streamers_l.vpcf_c rename to game/effect/liansai_dog/1_streamers_l.vpcf_c diff --git a/effect/liansai_dog/1_streamers_l_b.vpcf_c b/game/effect/liansai_dog/1_streamers_l_b.vpcf_c similarity index 100% rename from effect/liansai_dog/1_streamers_l_b.vpcf_c rename to game/effect/liansai_dog/1_streamers_l_b.vpcf_c diff --git a/effect/liansai_dog/1_streamers_r.vpcf_c b/game/effect/liansai_dog/1_streamers_r.vpcf_c similarity index 100% rename from effect/liansai_dog/1_streamers_r.vpcf_c rename to game/effect/liansai_dog/1_streamers_r.vpcf_c diff --git a/effect/liansai_dog/1_streamers_r_b.vpcf_c b/game/effect/liansai_dog/1_streamers_r_b.vpcf_c similarity index 100% rename from effect/liansai_dog/1_streamers_r_b.vpcf_c rename to game/effect/liansai_dog/1_streamers_r_b.vpcf_c diff --git a/effect/liansai_dog2/1.vpcf_c b/game/effect/liansai_dog2/1.vpcf_c similarity index 100% rename from effect/liansai_dog2/1.vpcf_c rename to game/effect/liansai_dog2/1.vpcf_c diff --git a/effect/liansai_dog2/1_a.vpcf_c b/game/effect/liansai_dog2/1_a.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_a.vpcf_c rename to game/effect/liansai_dog2/1_a.vpcf_c diff --git a/effect/liansai_dog2/1_base.vpcf_c b/game/effect/liansai_dog2/1_base.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_base.vpcf_c rename to game/effect/liansai_dog2/1_base.vpcf_c diff --git a/effect/liansai_dog2/1_base_b.vpcf_c b/game/effect/liansai_dog2/1_base_b.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_base_b.vpcf_c rename to game/effect/liansai_dog2/1_base_b.vpcf_c diff --git a/effect/liansai_dog2/1_body_flash.vpcf_c b/game/effect/liansai_dog2/1_body_flash.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_body_flash.vpcf_c rename to game/effect/liansai_dog2/1_body_flash.vpcf_c diff --git a/effect/liansai_dog2/1_body_glow.vpcf_c b/game/effect/liansai_dog2/1_body_glow.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_body_glow.vpcf_c rename to game/effect/liansai_dog2/1_body_glow.vpcf_c diff --git a/effect/liansai_dog2/1_body_sparkle.vpcf_c b/game/effect/liansai_dog2/1_body_sparkle.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_body_sparkle.vpcf_c rename to game/effect/liansai_dog2/1_body_sparkle.vpcf_c diff --git a/effect/liansai_dog2/1_buff.vpcf_c b/game/effect/liansai_dog2/1_buff.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_buff.vpcf_c rename to game/effect/liansai_dog2/1_buff.vpcf_c diff --git a/effect/liansai_dog2/1_buff_elec.vpcf_c b/game/effect/liansai_dog2/1_buff_elec.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_buff_elec.vpcf_c rename to game/effect/liansai_dog2/1_buff_elec.vpcf_c diff --git a/effect/liansai_dog2/1_ember.vpcf_c b/game/effect/liansai_dog2/1_ember.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_ember.vpcf_c rename to game/effect/liansai_dog2/1_ember.vpcf_c diff --git a/effect/liansai_dog2/1_halo_body.vpcf_c b/game/effect/liansai_dog2/1_halo_body.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_halo_body.vpcf_c rename to game/effect/liansai_dog2/1_halo_body.vpcf_c diff --git a/effect/liansai_dog2/1_hands.vpcf_c b/game/effect/liansai_dog2/1_hands.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_hands.vpcf_c rename to game/effect/liansai_dog2/1_hands.vpcf_c diff --git a/effect/liansai_dog2/1_hands_arc.vpcf_c b/game/effect/liansai_dog2/1_hands_arc.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_hands_arc.vpcf_c rename to game/effect/liansai_dog2/1_hands_arc.vpcf_c diff --git a/effect/liansai_dog2/1_hands_arc_head.vpcf_c b/game/effect/liansai_dog2/1_hands_arc_head.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_hands_arc_head.vpcf_c rename to game/effect/liansai_dog2/1_hands_arc_head.vpcf_c diff --git a/effect/liansai_dog2/1_hands_arc_pnt.vpcf_c b/game/effect/liansai_dog2/1_hands_arc_pnt.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_hands_arc_pnt.vpcf_c rename to game/effect/liansai_dog2/1_hands_arc_pnt.vpcf_c diff --git a/effect/liansai_dog2/1_hands_glow.vpcf_c b/game/effect/liansai_dog2/1_hands_glow.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_hands_glow.vpcf_c rename to game/effect/liansai_dog2/1_hands_glow.vpcf_c diff --git a/effect/liansai_dog2/1_light.vpcf_c b/game/effect/liansai_dog2/1_light.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_light.vpcf_c rename to game/effect/liansai_dog2/1_light.vpcf_c diff --git a/effect/liansai_dog2/1_magic.vpcf_c b/game/effect/liansai_dog2/1_magic.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_magic.vpcf_c rename to game/effect/liansai_dog2/1_magic.vpcf_c diff --git a/effect/liansai_dog2/1_magic_burst.vpcf_c b/game/effect/liansai_dog2/1_magic_burst.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_magic_burst.vpcf_c rename to game/effect/liansai_dog2/1_magic_burst.vpcf_c diff --git a/effect/liansai_dog2/1_regen.vpcf_c b/game/effect/liansai_dog2/1_regen.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_regen.vpcf_c rename to game/effect/liansai_dog2/1_regen.vpcf_c diff --git a/effect/liansai_dog2/1_ribbon.vpcf_c b/game/effect/liansai_dog2/1_ribbon.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_ribbon.vpcf_c rename to game/effect/liansai_dog2/1_ribbon.vpcf_c diff --git a/effect/liansai_dog2/1_ribbon_glow.vpcf_c b/game/effect/liansai_dog2/1_ribbon_glow.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_ribbon_glow.vpcf_c rename to game/effect/liansai_dog2/1_ribbon_glow.vpcf_c diff --git a/effect/liansai_dog2/1_ribbon_glow_rev.vpcf_c b/game/effect/liansai_dog2/1_ribbon_glow_rev.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_ribbon_glow_rev.vpcf_c rename to game/effect/liansai_dog2/1_ribbon_glow_rev.vpcf_c diff --git a/effect/liansai_dog2/1_ring.vpcf_c b/game/effect/liansai_dog2/1_ring.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_ring.vpcf_c rename to game/effect/liansai_dog2/1_ring.vpcf_c diff --git a/effect/liansai_dog2/1_sphere.vpcf_c b/game/effect/liansai_dog2/1_sphere.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_sphere.vpcf_c rename to game/effect/liansai_dog2/1_sphere.vpcf_c diff --git a/effect/liansai_dog2/1_sphere_b.vpcf_c b/game/effect/liansai_dog2/1_sphere_b.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_sphere_b.vpcf_c rename to game/effect/liansai_dog2/1_sphere_b.vpcf_c diff --git a/effect/liansai_dog2/1_sphere_edge.vpcf_c b/game/effect/liansai_dog2/1_sphere_edge.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_sphere_edge.vpcf_c rename to game/effect/liansai_dog2/1_sphere_edge.vpcf_c diff --git a/effect/liansai_dog2/1_streamers_l.vpcf_c b/game/effect/liansai_dog2/1_streamers_l.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_streamers_l.vpcf_c rename to game/effect/liansai_dog2/1_streamers_l.vpcf_c diff --git a/effect/liansai_dog2/1_streamers_l_b.vpcf_c b/game/effect/liansai_dog2/1_streamers_l_b.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_streamers_l_b.vpcf_c rename to game/effect/liansai_dog2/1_streamers_l_b.vpcf_c diff --git a/effect/liansai_dog2/1_streamers_r.vpcf_c b/game/effect/liansai_dog2/1_streamers_r.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_streamers_r.vpcf_c rename to game/effect/liansai_dog2/1_streamers_r.vpcf_c diff --git a/effect/liansai_dog2/1_streamers_r_b.vpcf_c b/game/effect/liansai_dog2/1_streamers_r_b.vpcf_c similarity index 100% rename from effect/liansai_dog2/1_streamers_r_b.vpcf_c rename to game/effect/liansai_dog2/1_streamers_r_b.vpcf_c diff --git a/effect/lieren/1.vpcf_c b/game/effect/lieren/1.vpcf_c similarity index 100% rename from effect/lieren/1.vpcf_c rename to game/effect/lieren/1.vpcf_c diff --git a/effect/lieren/1_b.vpcf_c b/game/effect/lieren/1_b.vpcf_c similarity index 100% rename from effect/lieren/1_b.vpcf_c rename to game/effect/lieren/1_b.vpcf_c diff --git a/effect/lieren/1_c.vpcf_c b/game/effect/lieren/1_c.vpcf_c similarity index 100% rename from effect/lieren/1_c.vpcf_c rename to game/effect/lieren/1_c.vpcf_c diff --git a/effect/lieren/1huriken_glow.vpcf_c b/game/effect/lieren/1huriken_glow.vpcf_c similarity index 100% rename from effect/lieren/1huriken_glow.vpcf_c rename to game/effect/lieren/1huriken_glow.vpcf_c diff --git a/effect/lieren/1huriken_glow_add.vpcf_c b/game/effect/lieren/1huriken_glow_add.vpcf_c similarity index 100% rename from effect/lieren/1huriken_glow_add.vpcf_c rename to game/effect/lieren/1huriken_glow_add.vpcf_c diff --git a/effect/lieren/1huriken_glow_gb.vpcf_c b/game/effect/lieren/1huriken_glow_gb.vpcf_c similarity index 100% rename from effect/lieren/1huriken_glow_gb.vpcf_c rename to game/effect/lieren/1huriken_glow_gb.vpcf_c diff --git a/effect/lieren/1huriken_toss_main.vpcf_c b/game/effect/lieren/1huriken_toss_main.vpcf_c similarity index 100% rename from effect/lieren/1huriken_toss_main.vpcf_c rename to game/effect/lieren/1huriken_toss_main.vpcf_c diff --git a/effect/lieren/1huriken_trail.vpcf_c b/game/effect/lieren/1huriken_trail.vpcf_c similarity index 100% rename from effect/lieren/1huriken_trail.vpcf_c rename to game/effect/lieren/1huriken_trail.vpcf_c diff --git a/effect/lieren/1uriken_impact.vpcf_c b/game/effect/lieren/1uriken_impact.vpcf_c similarity index 100% rename from effect/lieren/1uriken_impact.vpcf_c rename to game/effect/lieren/1uriken_impact.vpcf_c diff --git a/effect/lieren/1uriken_impact_flash.vpcf_c b/game/effect/lieren/1uriken_impact_flash.vpcf_c similarity index 100% rename from effect/lieren/1uriken_impact_flash.vpcf_c rename to game/effect/lieren/1uriken_impact_flash.vpcf_c diff --git a/effect/lieren/1uriken_impact_flashb.vpcf_c b/game/effect/lieren/1uriken_impact_flashb.vpcf_c similarity index 100% rename from effect/lieren/1uriken_impact_flashb.vpcf_c rename to game/effect/lieren/1uriken_impact_flashb.vpcf_c diff --git a/effect/lieren/1uriken_impact_sparks.vpcf_c b/game/effect/lieren/1uriken_impact_sparks.vpcf_c similarity index 100% rename from effect/lieren/1uriken_impact_sparks.vpcf_c rename to game/effect/lieren/1uriken_impact_sparks.vpcf_c diff --git a/effect/lieren/1uriken_toss.vpcf_c b/game/effect/lieren/1uriken_toss.vpcf_c similarity index 100% rename from effect/lieren/1uriken_toss.vpcf_c rename to game/effect/lieren/1uriken_toss.vpcf_c diff --git a/effect/lieren/1uriken_toss_traila.vpcf_c b/game/effect/lieren/1uriken_toss_traila.vpcf_c similarity index 100% rename from effect/lieren/1uriken_toss_traila.vpcf_c rename to game/effect/lieren/1uriken_toss_traila.vpcf_c diff --git a/effect/lieren/1uriken_toss_trailb.vpcf_c b/game/effect/lieren/1uriken_toss_trailb.vpcf_c similarity index 100% rename from effect/lieren/1uriken_toss_trailb.vpcf_c rename to game/effect/lieren/1uriken_toss_trailb.vpcf_c diff --git a/effect/longxin/1.vpcf_c b/game/effect/longxin/1.vpcf_c similarity index 100% rename from effect/longxin/1.vpcf_c rename to game/effect/longxin/1.vpcf_c diff --git a/effect/longxin/1_disk.vpcf_c b/game/effect/longxin/1_disk.vpcf_c similarity index 100% rename from effect/longxin/1_disk.vpcf_c rename to game/effect/longxin/1_disk.vpcf_c diff --git a/effect/longxin/1_dragon.vpcf_c b/game/effect/longxin/1_dragon.vpcf_c similarity index 100% rename from effect/longxin/1_dragon.vpcf_c rename to game/effect/longxin/1_dragon.vpcf_c diff --git a/effect/longxin/1_dragon_trail.vpcf_c b/game/effect/longxin/1_dragon_trail.vpcf_c similarity index 100% rename from effect/longxin/1_dragon_trail.vpcf_c rename to game/effect/longxin/1_dragon_trail.vpcf_c diff --git a/effect/longxin/1_dragon_trail_detail.vpcf_c b/game/effect/longxin/1_dragon_trail_detail.vpcf_c similarity index 100% rename from effect/longxin/1_dragon_trail_detail.vpcf_c rename to game/effect/longxin/1_dragon_trail_detail.vpcf_c diff --git a/effect/longxin/1_dragon_trail_embers.vpcf_c b/game/effect/longxin/1_dragon_trail_embers.vpcf_c similarity index 100% rename from effect/longxin/1_dragon_trail_embers.vpcf_c rename to game/effect/longxin/1_dragon_trail_embers.vpcf_c diff --git a/effect/mars/1/e.vpcf_c b/game/effect/mars/1/e.vpcf_c similarity index 100% rename from effect/mars/1/e.vpcf_c rename to game/effect/mars/1/e.vpcf_c diff --git a/effect/mars/1/e_smoke.vpcf_c b/game/effect/mars/1/e_smoke.vpcf_c similarity index 100% rename from effect/mars/1/e_smoke.vpcf_c rename to game/effect/mars/1/e_smoke.vpcf_c diff --git a/effect/mars/1/e_sparkles.vpcf_c b/game/effect/mars/1/e_sparkles.vpcf_c similarity index 100% rename from effect/mars/1/e_sparkles.vpcf_c rename to game/effect/mars/1/e_sparkles.vpcf_c diff --git a/effect/mars/2/e.vpcf_c b/game/effect/mars/2/e.vpcf_c similarity index 100% rename from effect/mars/2/e.vpcf_c rename to game/effect/mars/2/e.vpcf_c diff --git a/effect/mars/2/e_smoke.vpcf_c b/game/effect/mars/2/e_smoke.vpcf_c similarity index 100% rename from effect/mars/2/e_smoke.vpcf_c rename to game/effect/mars/2/e_smoke.vpcf_c diff --git a/effect/mars/2/e_sparkles.vpcf_c b/game/effect/mars/2/e_sparkles.vpcf_c similarity index 100% rename from effect/mars/2/e_sparkles.vpcf_c rename to game/effect/mars/2/e_sparkles.vpcf_c diff --git a/effect/merge/prime/hero_spawn_hero_level_4_center.vpcf_c b/game/effect/merge/prime/hero_spawn_hero_level_4_center.vpcf_c similarity index 100% rename from effect/merge/prime/hero_spawn_hero_level_4_center.vpcf_c rename to game/effect/merge/prime/hero_spawn_hero_level_4_center.vpcf_c diff --git a/effect/merge/prime/hero_spawn_hero_level_4_elec.vpcf_c b/game/effect/merge/prime/hero_spawn_hero_level_4_elec.vpcf_c similarity index 100% rename from effect/merge/prime/hero_spawn_hero_level_4_elec.vpcf_c rename to game/effect/merge/prime/hero_spawn_hero_level_4_elec.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_badge_glow.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_badge_glow.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_badge_glow.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_badge_glow.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_bg_glow.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_bg_glow.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_bg_glow.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_bg_glow.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_center.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_center.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_center.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_center.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_core.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_core.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_core.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_core.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_embers.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_embers.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_embers.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_embers.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_icon_ambient.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_icon_ambient.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_anim.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_anim.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_icon_ambient_anim.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_anim.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_glow.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_glow.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_icon_ambient_glow.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_glow.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_light.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_light.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_icon_ambient_light.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_light.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_rays.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_rays.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_icon_ambient_rays.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_icon_ambient_rays.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_magic.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_magic.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_magic.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_magic.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_model.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_model.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_model.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_model.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_model_static.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_model_static.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_model_static.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_model_static.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_rays.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_rays.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_rays.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_rays.vpcf_c diff --git a/effect/merge/ui/plus/ui_hero_level_4_soft_glow.vpcf_c b/game/effect/merge/ui/plus/ui_hero_level_4_soft_glow.vpcf_c similarity index 100% rename from effect/merge/ui/plus/ui_hero_level_4_soft_glow.vpcf_c rename to game/effect/merge/ui/plus/ui_hero_level_4_soft_glow.vpcf_c diff --git a/effect/music/1.vpcf_c b/game/effect/music/1.vpcf_c similarity index 100% rename from effect/music/1.vpcf_c rename to game/effect/music/1.vpcf_c diff --git a/effect/music/1_ember.vpcf_c b/game/effect/music/1_ember.vpcf_c similarity index 100% rename from effect/music/1_ember.vpcf_c rename to game/effect/music/1_ember.vpcf_c diff --git a/effect/music/1_ground_frost.vpcf_c b/game/effect/music/1_ground_frost.vpcf_c similarity index 100% rename from effect/music/1_ground_frost.vpcf_c rename to game/effect/music/1_ground_frost.vpcf_c diff --git a/effect/music/1_ground_ice.vpcf_c b/game/effect/music/1_ground_ice.vpcf_c similarity index 100% rename from effect/music/1_ground_ice.vpcf_c rename to game/effect/music/1_ground_ice.vpcf_c diff --git a/effect/nianshou/courier_nian_ambient.vpcf_c b/game/effect/nianshou/courier_nian_ambient.vpcf_c similarity index 100% rename from effect/nianshou/courier_nian_ambient.vpcf_c rename to game/effect/nianshou/courier_nian_ambient.vpcf_c diff --git a/effect/nianshou/courier_nian_bag.vpcf_c b/game/effect/nianshou/courier_nian_bag.vpcf_c similarity index 100% rename from effect/nianshou/courier_nian_bag.vpcf_c rename to game/effect/nianshou/courier_nian_bag.vpcf_c diff --git a/effect/nianshou/courier_nian_bag_coin.vpcf_c b/game/effect/nianshou/courier_nian_bag_coin.vpcf_c similarity index 100% rename from effect/nianshou/courier_nian_bag_coin.vpcf_c rename to game/effect/nianshou/courier_nian_bag_coin.vpcf_c diff --git a/effect/nianshou/courier_nian_bag_coin_glint.vpcf_c b/game/effect/nianshou/courier_nian_bag_coin_glint.vpcf_c similarity index 100% rename from effect/nianshou/courier_nian_bag_coin_glint.vpcf_c rename to game/effect/nianshou/courier_nian_bag_coin_glint.vpcf_c diff --git a/effect/nianshou/courier_nian_bag_coin_ground.vpcf_c b/game/effect/nianshou/courier_nian_bag_coin_ground.vpcf_c similarity index 100% rename from effect/nianshou/courier_nian_bag_coin_ground.vpcf_c rename to game/effect/nianshou/courier_nian_bag_coin_ground.vpcf_c diff --git a/effect/nianshou/courier_nian_bag_gold_glint.vpcf_c b/game/effect/nianshou/courier_nian_bag_gold_glint.vpcf_c similarity index 100% rename from effect/nianshou/courier_nian_bag_gold_glint.vpcf_c rename to game/effect/nianshou/courier_nian_bag_gold_glint.vpcf_c diff --git a/effect/nianshou/courier_nian_bag_gold_twinkle.vpcf_c b/game/effect/nianshou/courier_nian_bag_gold_twinkle.vpcf_c similarity index 100% rename from effect/nianshou/courier_nian_bag_gold_twinkle.vpcf_c rename to game/effect/nianshou/courier_nian_bag_gold_twinkle.vpcf_c diff --git a/effect/omniwings/ally.vpcf_c b/game/effect/omniwings/ally.vpcf_c similarity index 100% rename from effect/omniwings/ally.vpcf_c rename to game/effect/omniwings/ally.vpcf_c diff --git a/effect/omniwings/buff_b.vpcf_c b/game/effect/omniwings/buff_b.vpcf_c similarity index 100% rename from effect/omniwings/buff_b.vpcf_c rename to game/effect/omniwings/buff_b.vpcf_c diff --git a/effect/omniwings/buff_d.vpcf_c b/game/effect/omniwings/buff_d.vpcf_c similarity index 100% rename from effect/omniwings/buff_d.vpcf_c rename to game/effect/omniwings/buff_d.vpcf_c diff --git a/effect/omniwings/buff_e.vpcf_c b/game/effect/omniwings/buff_e.vpcf_c similarity index 100% rename from effect/omniwings/buff_e.vpcf_c rename to game/effect/omniwings/buff_e.vpcf_c diff --git a/effect/omniwings/buff_f.vpcf_c b/game/effect/omniwings/buff_f.vpcf_c similarity index 100% rename from effect/omniwings/buff_f.vpcf_c rename to game/effect/omniwings/buff_f.vpcf_c diff --git a/effect/omniwings/buff_h.vpcf_c b/game/effect/omniwings/buff_h.vpcf_c similarity index 100% rename from effect/omniwings/buff_h.vpcf_c rename to game/effect/omniwings/buff_h.vpcf_c diff --git a/effect/omniwings/buff_i.vpcf_c b/game/effect/omniwings/buff_i.vpcf_c similarity index 100% rename from effect/omniwings/buff_i.vpcf_c rename to game/effect/omniwings/buff_i.vpcf_c diff --git a/effect/omniwings/buff_j.vpcf_c b/game/effect/omniwings/buff_j.vpcf_c similarity index 100% rename from effect/omniwings/buff_j.vpcf_c rename to game/effect/omniwings/buff_j.vpcf_c diff --git a/effect/omniwings/buff_k.vpcf_c b/game/effect/omniwings/buff_k.vpcf_c similarity index 100% rename from effect/omniwings/buff_k.vpcf_c rename to game/effect/omniwings/buff_k.vpcf_c diff --git a/effect/omniwings/buff_l.vpcf_c b/game/effect/omniwings/buff_l.vpcf_c similarity index 100% rename from effect/omniwings/buff_l.vpcf_c rename to game/effect/omniwings/buff_l.vpcf_c diff --git a/effect/omniwings/buff_m.vpcf_c b/game/effect/omniwings/buff_m.vpcf_c similarity index 100% rename from effect/omniwings/buff_m.vpcf_c rename to game/effect/omniwings/buff_m.vpcf_c diff --git a/effect/omniwings/buff_n.vpcf_c b/game/effect/omniwings/buff_n.vpcf_c similarity index 100% rename from effect/omniwings/buff_n.vpcf_c rename to game/effect/omniwings/buff_n.vpcf_c diff --git a/effect/omniwings/buff_start_wings.vpcf_c b/game/effect/omniwings/buff_start_wings.vpcf_c similarity index 100% rename from effect/omniwings/buff_start_wings.vpcf_c rename to game/effect/omniwings/buff_start_wings.vpcf_c diff --git a/effect/omniwings/omni.vpcf_c b/game/effect/omniwings/omni.vpcf_c similarity index 100% rename from effect/omniwings/omni.vpcf_c rename to game/effect/omniwings/omni.vpcf_c diff --git a/effect/omniwings/wings.vpcf_c b/game/effect/omniwings/wings.vpcf_c similarity index 100% rename from effect/omniwings/wings.vpcf_c rename to game/effect/omniwings/wings.vpcf_c diff --git a/effect/overhead_arrow/1.vpcf_c b/game/effect/overhead_arrow/1.vpcf_c similarity index 100% rename from effect/overhead_arrow/1.vpcf_c rename to game/effect/overhead_arrow/1.vpcf_c diff --git a/effect/platinum_roshan/ambient.vpcf_c b/game/effect/platinum_roshan/ambient.vpcf_c similarity index 100% rename from effect/platinum_roshan/ambient.vpcf_c rename to game/effect/platinum_roshan/ambient.vpcf_c diff --git a/effect/platinum_roshan/ambient_b.vpcf_c b/game/effect/platinum_roshan/ambient_b.vpcf_c similarity index 100% rename from effect/platinum_roshan/ambient_b.vpcf_c rename to game/effect/platinum_roshan/ambient_b.vpcf_c diff --git a/effect/platinum_roshan/ambient_c.vpcf_c b/game/effect/platinum_roshan/ambient_c.vpcf_c similarity index 100% rename from effect/platinum_roshan/ambient_c.vpcf_c rename to game/effect/platinum_roshan/ambient_c.vpcf_c diff --git a/effect/platinum_roshan/ambient_d.vpcf_c b/game/effect/platinum_roshan/ambient_d.vpcf_c similarity index 100% rename from effect/platinum_roshan/ambient_d.vpcf_c rename to game/effect/platinum_roshan/ambient_d.vpcf_c diff --git a/effect/platinum_roshan/ambient_e.vpcf_c b/game/effect/platinum_roshan/ambient_e.vpcf_c similarity index 100% rename from effect/platinum_roshan/ambient_e.vpcf_c rename to game/effect/platinum_roshan/ambient_e.vpcf_c diff --git a/effect/platinum_roshan/ambient_f.vpcf_c b/game/effect/platinum_roshan/ambient_f.vpcf_c similarity index 100% rename from effect/platinum_roshan/ambient_f.vpcf_c rename to game/effect/platinum_roshan/ambient_f.vpcf_c diff --git a/effect/platinum_roshan/eye.vpcf_c b/game/effect/platinum_roshan/eye.vpcf_c similarity index 100% rename from effect/platinum_roshan/eye.vpcf_c rename to game/effect/platinum_roshan/eye.vpcf_c diff --git a/effect/platinum_roshan/eyes.vpcf_c b/game/effect/platinum_roshan/eyes.vpcf_c similarity index 100% rename from effect/platinum_roshan/eyes.vpcf_c rename to game/effect/platinum_roshan/eyes.vpcf_c diff --git a/effect/platinum_roshan/eyes_b.vpcf_c b/game/effect/platinum_roshan/eyes_b.vpcf_c similarity index 100% rename from effect/platinum_roshan/eyes_b.vpcf_c rename to game/effect/platinum_roshan/eyes_b.vpcf_c diff --git a/effect/platinum_roshan/eyes_c.vpcf_c b/game/effect/platinum_roshan/eyes_c.vpcf_c similarity index 100% rename from effect/platinum_roshan/eyes_c.vpcf_c rename to game/effect/platinum_roshan/eyes_c.vpcf_c diff --git a/effect/platinum_roshan/eyes_d.vpcf_c b/game/effect/platinum_roshan/eyes_d.vpcf_c similarity index 100% rename from effect/platinum_roshan/eyes_d.vpcf_c rename to game/effect/platinum_roshan/eyes_d.vpcf_c diff --git a/effect/pom_arrow_far/arrow.vpcf_c b/game/effect/pom_arrow_far/arrow.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow.vpcf_c rename to game/effect/pom_arrow_far/arrow.vpcf_c diff --git a/effect/pom_arrow_far/arrow_b.vpcf_c b/game/effect/pom_arrow_far/arrow_b.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_b.vpcf_c rename to game/effect/pom_arrow_far/arrow_b.vpcf_c diff --git a/effect/pom_arrow_far/arrow_c.vpcf_c b/game/effect/pom_arrow_far/arrow_c.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_c.vpcf_c rename to game/effect/pom_arrow_far/arrow_c.vpcf_c diff --git a/effect/pom_arrow_far/arrow_d.vpcf_c b/game/effect/pom_arrow_far/arrow_d.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_d.vpcf_c rename to game/effect/pom_arrow_far/arrow_d.vpcf_c diff --git a/effect/pom_arrow_far/arrow_e.vpcf_c b/game/effect/pom_arrow_far/arrow_e.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_e.vpcf_c rename to game/effect/pom_arrow_far/arrow_e.vpcf_c diff --git a/effect/pom_arrow_far/arrow_f.vpcf_c b/game/effect/pom_arrow_far/arrow_f.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_f.vpcf_c rename to game/effect/pom_arrow_far/arrow_f.vpcf_c diff --git a/effect/pom_arrow_far/arrow_g.vpcf_c b/game/effect/pom_arrow_far/arrow_g.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_g.vpcf_c rename to game/effect/pom_arrow_far/arrow_g.vpcf_c diff --git a/effect/pom_arrow_far/arrow_i.vpcf_c b/game/effect/pom_arrow_far/arrow_i.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_i.vpcf_c rename to game/effect/pom_arrow_far/arrow_i.vpcf_c diff --git a/effect/pom_arrow_far/arrow_j.vpcf_c b/game/effect/pom_arrow_far/arrow_j.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_j.vpcf_c rename to game/effect/pom_arrow_far/arrow_j.vpcf_c diff --git a/effect/pom_arrow_far/arrow_k.vpcf_c b/game/effect/pom_arrow_far/arrow_k.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_k.vpcf_c rename to game/effect/pom_arrow_far/arrow_k.vpcf_c diff --git a/effect/pom_arrow_far/arrow_l.vpcf_c b/game/effect/pom_arrow_far/arrow_l.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_l.vpcf_c rename to game/effect/pom_arrow_far/arrow_l.vpcf_c diff --git a/effect/pom_arrow_far/arrow_m.vpcf_c b/game/effect/pom_arrow_far/arrow_m.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_m.vpcf_c rename to game/effect/pom_arrow_far/arrow_m.vpcf_c diff --git a/effect/pom_arrow_far/arrow_n.vpcf_c b/game/effect/pom_arrow_far/arrow_n.vpcf_c similarity index 100% rename from effect/pom_arrow_far/arrow_n.vpcf_c rename to game/effect/pom_arrow_far/arrow_n.vpcf_c diff --git a/effect/priest/shield.vpcf_c b/game/effect/priest/shield.vpcf_c similarity index 100% rename from effect/priest/shield.vpcf_c rename to game/effect/priest/shield.vpcf_c diff --git a/effect/priest/shield_b.vpcf_c b/game/effect/priest/shield_b.vpcf_c similarity index 100% rename from effect/priest/shield_b.vpcf_c rename to game/effect/priest/shield_b.vpcf_c diff --git a/effect/priest/shield_c.vpcf_c b/game/effect/priest/shield_c.vpcf_c similarity index 100% rename from effect/priest/shield_c.vpcf_c rename to game/effect/priest/shield_c.vpcf_c diff --git a/effect/priest/shield_cast.vpcf_c b/game/effect/priest/shield_cast.vpcf_c similarity index 100% rename from effect/priest/shield_cast.vpcf_c rename to game/effect/priest/shield_cast.vpcf_c diff --git a/effect/priest/shield_d.vpcf_c b/game/effect/priest/shield_d.vpcf_c similarity index 100% rename from effect/priest/shield_d.vpcf_c rename to game/effect/priest/shield_d.vpcf_c diff --git a/effect/priest/shield_e.vpcf_c b/game/effect/priest/shield_e.vpcf_c similarity index 100% rename from effect/priest/shield_e.vpcf_c rename to game/effect/priest/shield_e.vpcf_c diff --git a/effect/priest/shield_end.vpcf_c b/game/effect/priest/shield_end.vpcf_c similarity index 100% rename from effect/priest/shield_end.vpcf_c rename to game/effect/priest/shield_end.vpcf_c diff --git a/effect/priest/shield_end_b.vpcf_c b/game/effect/priest/shield_end_b.vpcf_c similarity index 100% rename from effect/priest/shield_end_b.vpcf_c rename to game/effect/priest/shield_end_b.vpcf_c diff --git a/effect/priest/shield_shell.vpcf_c b/game/effect/priest/shield_shell.vpcf_c similarity index 100% rename from effect/priest/shield_shell.vpcf_c rename to game/effect/priest/shield_shell.vpcf_c diff --git a/effect/priest/shield_trace1.vpcf_c b/game/effect/priest/shield_trace1.vpcf_c similarity index 100% rename from effect/priest/shield_trace1.vpcf_c rename to game/effect/priest/shield_trace1.vpcf_c diff --git a/effect/priest/shield_trace1_a.vpcf_c b/game/effect/priest/shield_trace1_a.vpcf_c similarity index 100% rename from effect/priest/shield_trace1_a.vpcf_c rename to game/effect/priest/shield_trace1_a.vpcf_c diff --git a/effect/priest/shield_trace2.vpcf_c b/game/effect/priest/shield_trace2.vpcf_c similarity index 100% rename from effect/priest/shield_trace2.vpcf_c rename to game/effect/priest/shield_trace2.vpcf_c diff --git a/effect/priest/shield_trace3.vpcf_c b/game/effect/priest/shield_trace3.vpcf_c similarity index 100% rename from effect/priest/shield_trace3.vpcf_c rename to game/effect/priest/shield_trace3.vpcf_c diff --git a/effect/puck_xuehua/1.vpcf_c b/game/effect/puck_xuehua/1.vpcf_c similarity index 100% rename from effect/puck_xuehua/1.vpcf_c rename to game/effect/puck_xuehua/1.vpcf_c diff --git a/effect/puck_xuehua/1_bits.vpcf_c b/game/effect/puck_xuehua/1_bits.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_bits.vpcf_c rename to game/effect/puck_xuehua/1_bits.vpcf_c diff --git a/effect/puck_xuehua/1_flare.vpcf_c b/game/effect/puck_xuehua/1_flare.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_flare.vpcf_c rename to game/effect/puck_xuehua/1_flare.vpcf_c diff --git a/effect/puck_xuehua/1_flare_bot.vpcf_c b/game/effect/puck_xuehua/1_flare_bot.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_flare_bot.vpcf_c rename to game/effect/puck_xuehua/1_flare_bot.vpcf_c diff --git a/effect/puck_xuehua/1_flare_topl.vpcf_c b/game/effect/puck_xuehua/1_flare_topl.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_flare_topl.vpcf_c rename to game/effect/puck_xuehua/1_flare_topl.vpcf_c diff --git a/effect/puck_xuehua/1_flare_topr.vpcf_c b/game/effect/puck_xuehua/1_flare_topr.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_flare_topr.vpcf_c rename to game/effect/puck_xuehua/1_flare_topr.vpcf_c diff --git a/effect/puck_xuehua/1_glow.vpcf_c b/game/effect/puck_xuehua/1_glow.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_glow.vpcf_c rename to game/effect/puck_xuehua/1_glow.vpcf_c diff --git a/effect/puck_xuehua/1_glow_soft.vpcf_c b/game/effect/puck_xuehua/1_glow_soft.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_glow_soft.vpcf_c rename to game/effect/puck_xuehua/1_glow_soft.vpcf_c diff --git a/effect/puck_xuehua/1_magic.vpcf_c b/game/effect/puck_xuehua/1_magic.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_magic.vpcf_c rename to game/effect/puck_xuehua/1_magic.vpcf_c diff --git a/effect/puck_xuehua/1_snow.vpcf_c b/game/effect/puck_xuehua/1_snow.vpcf_c similarity index 100% rename from effect/puck_xuehua/1_snow.vpcf_c rename to game/effect/puck_xuehua/1_snow.vpcf_c diff --git a/effect/qiangxi/1.vpcf_c b/game/effect/qiangxi/1.vpcf_c similarity index 100% rename from effect/qiangxi/1.vpcf_c rename to game/effect/qiangxi/1.vpcf_c diff --git a/effect/qishi/1.vpcf_c b/game/effect/qishi/1.vpcf_c similarity index 100% rename from effect/qishi/1.vpcf_c rename to game/effect/qishi/1.vpcf_c diff --git a/effect/qishi/1_glow.vpcf_c b/game/effect/qishi/1_glow.vpcf_c similarity index 100% rename from effect/qishi/1_glow.vpcf_c rename to game/effect/qishi/1_glow.vpcf_c diff --git a/effect/roshan_ti9/1.vpcf_c b/game/effect/roshan_ti9/1.vpcf_c similarity index 100% rename from effect/roshan_ti9/1.vpcf_c rename to game/effect/roshan_ti9/1.vpcf_c diff --git a/effect/roshan_ti9/1_bees.vpcf_c b/game/effect/roshan_ti9/1_bees.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_bees.vpcf_c rename to game/effect/roshan_ti9/1_bees.vpcf_c diff --git a/effect/roshan_ti9/1_bees_glow.vpcf_c b/game/effect/roshan_ti9/1_bees_glow.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_bees_glow.vpcf_c rename to game/effect/roshan_ti9/1_bees_glow.vpcf_c diff --git a/effect/roshan_ti9/1_bees_trail.vpcf_c b/game/effect/roshan_ti9/1_bees_trail.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_bees_trail.vpcf_c rename to game/effect/roshan_ti9/1_bees_trail.vpcf_c diff --git a/effect/roshan_ti9/1_eyes.vpcf_c b/game/effect/roshan_ti9/1_eyes.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_eyes.vpcf_c rename to game/effect/roshan_ti9/1_eyes.vpcf_c diff --git a/effect/roshan_ti9/1_eyes_a.vpcf_c b/game/effect/roshan_ti9/1_eyes_a.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_eyes_a.vpcf_c rename to game/effect/roshan_ti9/1_eyes_a.vpcf_c diff --git a/effect/roshan_ti9/1_eyes_embers.vpcf_c b/game/effect/roshan_ti9/1_eyes_embers.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_eyes_embers.vpcf_c rename to game/effect/roshan_ti9/1_eyes_embers.vpcf_c diff --git a/effect/roshan_ti9/1_eyes_glow.vpcf_c b/game/effect/roshan_ti9/1_eyes_glow.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_eyes_glow.vpcf_c rename to game/effect/roshan_ti9/1_eyes_glow.vpcf_c diff --git a/effect/roshan_ti9/1_eyes_streak.vpcf_c b/game/effect/roshan_ti9/1_eyes_streak.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_eyes_streak.vpcf_c rename to game/effect/roshan_ti9/1_eyes_streak.vpcf_c diff --git a/effect/roshan_ti9/1_flowers.vpcf_c b/game/effect/roshan_ti9/1_flowers.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_flowers.vpcf_c rename to game/effect/roshan_ti9/1_flowers.vpcf_c diff --git a/effect/roshan_ti9/1_flowers_glow.vpcf_c b/game/effect/roshan_ti9/1_flowers_glow.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_flowers_glow.vpcf_c rename to game/effect/roshan_ti9/1_flowers_glow.vpcf_c diff --git a/effect/roshan_ti9/1_flowers_petals.vpcf_c b/game/effect/roshan_ti9/1_flowers_petals.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_flowers_petals.vpcf_c rename to game/effect/roshan_ti9/1_flowers_petals.vpcf_c diff --git a/effect/roshan_ti9/1_gem.vpcf_c b/game/effect/roshan_ti9/1_gem.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_gem.vpcf_c rename to game/effect/roshan_ti9/1_gem.vpcf_c diff --git a/effect/roshan_ti9/1_gem_glow.vpcf_c b/game/effect/roshan_ti9/1_gem_glow.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_gem_glow.vpcf_c rename to game/effect/roshan_ti9/1_gem_glow.vpcf_c diff --git a/effect/roshan_ti9/1_glow.vpcf_c b/game/effect/roshan_ti9/1_glow.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_glow.vpcf_c rename to game/effect/roshan_ti9/1_glow.vpcf_c diff --git a/effect/roshan_ti9/1_honey.vpcf_c b/game/effect/roshan_ti9/1_honey.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_honey.vpcf_c rename to game/effect/roshan_ti9/1_honey.vpcf_c diff --git a/effect/roshan_ti9/1_honey_drip.vpcf_c b/game/effect/roshan_ti9/1_honey_drip.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_honey_drip.vpcf_c rename to game/effect/roshan_ti9/1_honey_drip.vpcf_c diff --git a/effect/roshan_ti9/1_honey_drop.vpcf_c b/game/effect/roshan_ti9/1_honey_drop.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_honey_drop.vpcf_c rename to game/effect/roshan_ti9/1_honey_drop.vpcf_c diff --git a/effect/roshan_ti9/1_honey_drop_bounce.vpcf_c b/game/effect/roshan_ti9/1_honey_drop_bounce.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_honey_drop_bounce.vpcf_c rename to game/effect/roshan_ti9/1_honey_drop_bounce.vpcf_c diff --git a/effect/roshan_ti9/1_honey_drop_ground.vpcf_c b/game/effect/roshan_ti9/1_honey_drop_ground.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_honey_drop_ground.vpcf_c rename to game/effect/roshan_ti9/1_honey_drop_ground.vpcf_c diff --git a/effect/roshan_ti9/1_honeypot.vpcf_c b/game/effect/roshan_ti9/1_honeypot.vpcf_c similarity index 100% rename from effect/roshan_ti9/1_honeypot.vpcf_c rename to game/effect/roshan_ti9/1_honeypot.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_a.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_a.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_a.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_a.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_b.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_b.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_b.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_b.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_b_trail.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_b_trail.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_b_trail.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_b_trail.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_c.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_c.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_c.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_c.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_c_trail.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_c_trail.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_c_trail.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_c_trail.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_d.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_d.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_d.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_d.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_sand_trail.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_sand_trail.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_sand_trail.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_sand_trail.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_ambient_wings_a.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_ambient_wings_a.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_ambient_wings_a.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_ambient_wings_a.vpcf_c diff --git a/effect/sand_roshan/baby_roshan_desert_sands_rocks_model.vpcf_c b/game/effect/sand_roshan/baby_roshan_desert_sands_rocks_model.vpcf_c similarity index 100% rename from effect/sand_roshan/baby_roshan_desert_sands_rocks_model.vpcf_c rename to game/effect/sand_roshan/baby_roshan_desert_sands_rocks_model.vpcf_c diff --git a/effect/sand_roshan/courier_roshan_desert_sands_eyes.vpcf_c b/game/effect/sand_roshan/courier_roshan_desert_sands_eyes.vpcf_c similarity index 100% rename from effect/sand_roshan/courier_roshan_desert_sands_eyes.vpcf_c rename to game/effect/sand_roshan/courier_roshan_desert_sands_eyes.vpcf_c diff --git a/effect/sand_roshan/courier_roshan_desert_sands_eyes_a.vpcf_c b/game/effect/sand_roshan/courier_roshan_desert_sands_eyes_a.vpcf_c similarity index 100% rename from effect/sand_roshan/courier_roshan_desert_sands_eyes_a.vpcf_c rename to game/effect/sand_roshan/courier_roshan_desert_sands_eyes_a.vpcf_c diff --git a/effect/sand_roshan/courier_roshan_desert_sands_eyes_b.vpcf_c b/game/effect/sand_roshan/courier_roshan_desert_sands_eyes_b.vpcf_c similarity index 100% rename from effect/sand_roshan/courier_roshan_desert_sands_eyes_b.vpcf_c rename to game/effect/sand_roshan/courier_roshan_desert_sands_eyes_b.vpcf_c diff --git a/effect/sand_roshan/courier_roshan_desert_sands_eyes_embers.vpcf_c b/game/effect/sand_roshan/courier_roshan_desert_sands_eyes_embers.vpcf_c similarity index 100% rename from effect/sand_roshan/courier_roshan_desert_sands_eyes_embers.vpcf_c rename to game/effect/sand_roshan/courier_roshan_desert_sands_eyes_embers.vpcf_c diff --git a/effect/sand_roshan/courier_roshan_desert_sands_eyes_embers_b.vpcf_c b/game/effect/sand_roshan/courier_roshan_desert_sands_eyes_embers_b.vpcf_c similarity index 100% rename from effect/sand_roshan/courier_roshan_desert_sands_eyes_embers_b.vpcf_c rename to game/effect/sand_roshan/courier_roshan_desert_sands_eyes_embers_b.vpcf_c diff --git a/effect/satyr/riki_loadout.vpcf_c b/game/effect/satyr/riki_loadout.vpcf_c similarity index 100% rename from effect/satyr/riki_loadout.vpcf_c rename to game/effect/satyr/riki_loadout.vpcf_c diff --git a/effect/satyr/riki_smokebomb.vpcf_c b/game/effect/satyr/riki_smokebomb.vpcf_c similarity index 100% rename from effect/satyr/riki_smokebomb.vpcf_c rename to game/effect/satyr/riki_smokebomb.vpcf_c diff --git a/effect/satyr/riki_smokebomb_b.vpcf_c b/game/effect/satyr/riki_smokebomb_b.vpcf_c similarity index 100% rename from effect/satyr/riki_smokebomb_b.vpcf_c rename to game/effect/satyr/riki_smokebomb_b.vpcf_c diff --git a/effect/satyr/riki_smokebomb_smoke.vpcf_c b/game/effect/satyr/riki_smokebomb_smoke.vpcf_c similarity index 100% rename from effect/satyr/riki_smokebomb_smoke.vpcf_c rename to game/effect/satyr/riki_smokebomb_smoke.vpcf_c diff --git a/effect/satyr_3/dust_of_appearance_true_sight.vpcf_c b/game/effect/satyr_3/dust_of_appearance_true_sight.vpcf_c similarity index 100% rename from effect/satyr_3/dust_of_appearance_true_sight.vpcf_c rename to game/effect/satyr_3/dust_of_appearance_true_sight.vpcf_c diff --git a/effect/satyr_fog/smoke_of_deceit_buff.vpcf_c b/game/effect/satyr_fog/smoke_of_deceit_buff.vpcf_c similarity index 100% rename from effect/satyr_fog/smoke_of_deceit_buff.vpcf_c rename to game/effect/satyr_fog/smoke_of_deceit_buff.vpcf_c diff --git a/effect/satyr_fog/smoke_of_deceit_buff_b.vpcf_c b/game/effect/satyr_fog/smoke_of_deceit_buff_b.vpcf_c similarity index 100% rename from effect/satyr_fog/smoke_of_deceit_buff_b.vpcf_c rename to game/effect/satyr_fog/smoke_of_deceit_buff_b.vpcf_c diff --git a/effect/satyr_fog/smoke_of_deceit_buff_c.vpcf_c b/game/effect/satyr_fog/smoke_of_deceit_buff_c.vpcf_c similarity index 100% rename from effect/satyr_fog/smoke_of_deceit_buff_c.vpcf_c rename to game/effect/satyr_fog/smoke_of_deceit_buff_c.vpcf_c diff --git a/effect/select_ring/1.vpcf_c b/game/effect/select_ring/1.vpcf_c similarity index 100% rename from effect/select_ring/1.vpcf_c rename to game/effect/select_ring/1.vpcf_c diff --git a/effect/shengjie/shengjie.vpcf_c b/game/effect/shengjie/shengjie.vpcf_c similarity index 100% rename from effect/shengjie/shengjie.vpcf_c rename to game/effect/shengjie/shengjie.vpcf_c diff --git a/effect/shengjie/shengjie_b.vpcf_c b/game/effect/shengjie/shengjie_b.vpcf_c similarity index 100% rename from effect/shengjie/shengjie_b.vpcf_c rename to game/effect/shengjie/shengjie_b.vpcf_c diff --git a/effect/shengjie/shengjie_c.vpcf_c b/game/effect/shengjie/shengjie_c.vpcf_c similarity index 100% rename from effect/shengjie/shengjie_c.vpcf_c rename to game/effect/shengjie/shengjie_c.vpcf_c diff --git a/effect/shengjie/shengjie_d.vpcf_c b/game/effect/shengjie/shengjie_d.vpcf_c similarity index 100% rename from effect/shengjie/shengjie_d.vpcf_c rename to game/effect/shengjie/shengjie_d.vpcf_c diff --git a/effect/shengjie/shengjie_e.vpcf_c b/game/effect/shengjie/shengjie_e.vpcf_c similarity index 100% rename from effect/shengjie/shengjie_e.vpcf_c rename to game/effect/shengjie/shengjie_e.vpcf_c diff --git a/effect/shengjie/shengjie_f.vpcf_c b/game/effect/shengjie/shengjie_f.vpcf_c similarity index 100% rename from effect/shengjie/shengjie_f.vpcf_c rename to game/effect/shengjie/shengjie_f.vpcf_c diff --git a/effect/shushi/bloodseeker/warlock_shadow_word_debuff_j.vpcf_c b/game/effect/shushi/bloodseeker/warlock_shadow_word_debuff_j.vpcf_c similarity index 100% rename from effect/shushi/bloodseeker/warlock_shadow_word_debuff_j.vpcf_c rename to game/effect/shushi/bloodseeker/warlock_shadow_word_debuff_j.vpcf_c diff --git a/effect/shushi/warlock/warlock_shadow_word_debuff.vpcf_c b/game/effect/shushi/warlock/warlock_shadow_word_debuff.vpcf_c similarity index 100% rename from effect/shushi/warlock/warlock_shadow_word_debuff.vpcf_c rename to game/effect/shushi/warlock/warlock_shadow_word_debuff.vpcf_c diff --git a/effect/shushi/warlock/warlock_shadow_word_debuff_core.vpcf_c b/game/effect/shushi/warlock/warlock_shadow_word_debuff_core.vpcf_c similarity index 100% rename from effect/shushi/warlock/warlock_shadow_word_debuff_core.vpcf_c rename to game/effect/shushi/warlock/warlock_shadow_word_debuff_core.vpcf_c diff --git a/effect/shushi/warlock/warlock_shadow_word_debuff_e.vpcf_c b/game/effect/shushi/warlock/warlock_shadow_word_debuff_e.vpcf_c similarity index 100% rename from effect/shushi/warlock/warlock_shadow_word_debuff_e.vpcf_c rename to game/effect/shushi/warlock/warlock_shadow_word_debuff_e.vpcf_c diff --git a/effect/shushi/warlock/warlock_shadow_word_debuff_f.vpcf_c b/game/effect/shushi/warlock/warlock_shadow_word_debuff_f.vpcf_c similarity index 100% rename from effect/shushi/warlock/warlock_shadow_word_debuff_f.vpcf_c rename to game/effect/shushi/warlock/warlock_shadow_word_debuff_f.vpcf_c diff --git a/effect/shushi/warlock/warlock_shadow_word_debuff_k.vpcf_c b/game/effect/shushi/warlock/warlock_shadow_word_debuff_k.vpcf_c similarity index 100% rename from effect/shushi/warlock/warlock_shadow_word_debuff_k.vpcf_c rename to game/effect/shushi/warlock/warlock_shadow_word_debuff_k.vpcf_c diff --git a/effect/shushi/warlock/warlock_shadow_word_glyph_glow.vpcf_c b/game/effect/shushi/warlock/warlock_shadow_word_glyph_glow.vpcf_c similarity index 100% rename from effect/shushi/warlock/warlock_shadow_word_glyph_glow.vpcf_c rename to game/effect/shushi/warlock/warlock_shadow_word_glyph_glow.vpcf_c diff --git a/effect/shushi/warlock/warlock_shadow_word_glyph_sparks.vpcf_c b/game/effect/shushi/warlock/warlock_shadow_word_glyph_sparks.vpcf_c similarity index 100% rename from effect/shushi/warlock/warlock_shadow_word_glyph_sparks.vpcf_c rename to game/effect/shushi/warlock/warlock_shadow_word_glyph_sparks.vpcf_c diff --git a/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c b/game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c similarity index 100% rename from effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c rename to game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c diff --git a/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c b/game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c similarity index 100% rename from effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c rename to game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c diff --git a/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c b/game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c similarity index 100% rename from effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c rename to game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c diff --git a/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c b/game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c similarity index 100% rename from effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c rename to game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c diff --git a/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c b/game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c similarity index 100% rename from effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c rename to game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c diff --git a/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c b/game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c similarity index 100% rename from effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c rename to game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c diff --git a/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c b/game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c similarity index 100% rename from effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c rename to game/effect/snow2012/1econ/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c diff --git a/effect/snow2012/1rain_fx/snow_drift_b.vpcf_c b/game/effect/snow2012/1rain_fx/snow_drift_b.vpcf_c similarity index 100% rename from effect/snow2012/1rain_fx/snow_drift_b.vpcf_c rename to game/effect/snow2012/1rain_fx/snow_drift_b.vpcf_c diff --git a/effect/snow2012/1rain_fx/snow_fallback.vpcf_c b/game/effect/snow2012/1rain_fx/snow_fallback.vpcf_c similarity index 100% rename from effect/snow2012/1rain_fx/snow_fallback.vpcf_c rename to game/effect/snow2012/1rain_fx/snow_fallback.vpcf_c diff --git a/effect/snow2012/1rain_fx/snow_fallback_2.vpcf_c b/game/effect/snow2012/1rain_fx/snow_fallback_2.vpcf_c similarity index 100% rename from effect/snow2012/1rain_fx/snow_fallback_2.vpcf_c rename to game/effect/snow2012/1rain_fx/snow_fallback_2.vpcf_c diff --git a/effect/ti7_shanguang/ti7.vpcf_c b/game/effect/ti7_shanguang/ti7.vpcf_c similarity index 100% rename from effect/ti7_shanguang/ti7.vpcf_c rename to game/effect/ti7_shanguang/ti7.vpcf_c diff --git a/effect/ti7_shengwu/ti7.vpcf_c b/game/effect/ti7_shengwu/ti7.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7.vpcf_c rename to game/effect/ti7_shengwu/ti7.vpcf_c diff --git a/effect/ti7_shengwu/ti7_aegis_back.vpcf_c b/game/effect/ti7_shengwu/ti7_aegis_back.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_aegis_back.vpcf_c rename to game/effect/ti7_shengwu/ti7_aegis_back.vpcf_c diff --git a/effect/ti7_shengwu/ti7_aegis_top.vpcf_c b/game/effect/ti7_shengwu/ti7_aegis_top.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_aegis_top.vpcf_c rename to game/effect/ti7_shengwu/ti7_aegis_top.vpcf_c diff --git a/effect/ti7_shengwu/ti7_caustic.vpcf_c b/game/effect/ti7_shengwu/ti7_caustic.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_caustic.vpcf_c rename to game/effect/ti7_shengwu/ti7_caustic.vpcf_c diff --git a/effect/ti7_shengwu/ti7_core.vpcf_c b/game/effect/ti7_shengwu/ti7_core.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_core.vpcf_c rename to game/effect/ti7_shengwu/ti7_core.vpcf_c diff --git a/effect/ti7_shengwu/ti7_gem_flare.vpcf_c b/game/effect/ti7_shengwu/ti7_gem_flare.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_gem_flare.vpcf_c rename to game/effect/ti7_shengwu/ti7_gem_flare.vpcf_c diff --git a/effect/ti7_shengwu/ti7_gem_glow.vpcf_c b/game/effect/ti7_shengwu/ti7_gem_glow.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_gem_glow.vpcf_c rename to game/effect/ti7_shengwu/ti7_gem_glow.vpcf_c diff --git a/effect/ti7_shengwu/ti7_gem_model.vpcf_c b/game/effect/ti7_shengwu/ti7_gem_model.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_gem_model.vpcf_c rename to game/effect/ti7_shengwu/ti7_gem_model.vpcf_c diff --git a/effect/ti7_shengwu/ti7_gem_ring.vpcf_c b/game/effect/ti7_shengwu/ti7_gem_ring.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_gem_ring.vpcf_c rename to game/effect/ti7_shengwu/ti7_gem_ring.vpcf_c diff --git a/effect/ti7_shengwu/ti7_gem_twinkle.vpcf_c b/game/effect/ti7_shengwu/ti7_gem_twinkle.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_gem_twinkle.vpcf_c rename to game/effect/ti7_shengwu/ti7_gem_twinkle.vpcf_c diff --git a/effect/ti7_shengwu/ti7_gems.vpcf_c b/game/effect/ti7_shengwu/ti7_gems.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_gems.vpcf_c rename to game/effect/ti7_shengwu/ti7_gems.vpcf_c diff --git a/effect/ti7_shengwu/ti7_ground_dark.vpcf_c b/game/effect/ti7_shengwu/ti7_ground_dark.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_ground_dark.vpcf_c rename to game/effect/ti7_shengwu/ti7_ground_dark.vpcf_c diff --git a/effect/ti7_shengwu/ti7_ground_detail.vpcf_c b/game/effect/ti7_shengwu/ti7_ground_detail.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_ground_detail.vpcf_c rename to game/effect/ti7_shengwu/ti7_ground_detail.vpcf_c diff --git a/effect/ti7_shengwu/ti7_light.vpcf_c b/game/effect/ti7_shengwu/ti7_light.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_light.vpcf_c rename to game/effect/ti7_shengwu/ti7_light.vpcf_c diff --git a/effect/ti7_shengwu/ti7_light_aura.vpcf_c b/game/effect/ti7_shengwu/ti7_light_aura.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_light_aura.vpcf_c rename to game/effect/ti7_shengwu/ti7_light_aura.vpcf_c diff --git a/effect/ti7_shengwu/ti7_magic.vpcf_c b/game/effect/ti7_shengwu/ti7_magic.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_magic.vpcf_c rename to game/effect/ti7_shengwu/ti7_magic.vpcf_c diff --git a/effect/ti7_shengwu/ti7_ring_puddle.vpcf_c b/game/effect/ti7_shengwu/ti7_ring_puddle.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_ring_puddle.vpcf_c rename to game/effect/ti7_shengwu/ti7_ring_puddle.vpcf_c diff --git a/effect/ti7_shengwu/ti7_ring_twinkle.vpcf_c b/game/effect/ti7_shengwu/ti7_ring_twinkle.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_ring_twinkle.vpcf_c rename to game/effect/ti7_shengwu/ti7_ring_twinkle.vpcf_c diff --git a/effect/ti7_shengwu/ti7_rings.vpcf_c b/game/effect/ti7_shengwu/ti7_rings.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_rings.vpcf_c rename to game/effect/ti7_shengwu/ti7_rings.vpcf_c diff --git a/effect/ti7_shengwu/ti7_smoke.vpcf_c b/game/effect/ti7_shengwu/ti7_smoke.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_smoke.vpcf_c rename to game/effect/ti7_shengwu/ti7_smoke.vpcf_c diff --git a/effect/ti7_shengwu/ti7_splash.vpcf_c b/game/effect/ti7_shengwu/ti7_splash.vpcf_c similarity index 100% rename from effect/ti7_shengwu/ti7_splash.vpcf_c rename to game/effect/ti7_shengwu/ti7_splash.vpcf_c diff --git a/effect/ti7donkey/effect.vpcf_c b/game/effect/ti7donkey/effect.vpcf_c similarity index 100% rename from effect/ti7donkey/effect.vpcf_c rename to game/effect/ti7donkey/effect.vpcf_c diff --git a/effect/ti7donkey/effect_angels.vpcf_c b/game/effect/ti7donkey/effect_angels.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_angels.vpcf_c rename to game/effect/ti7donkey/effect_angels.vpcf_c diff --git a/effect/ti7donkey/effect_angels_glow.vpcf_c b/game/effect/ti7donkey/effect_angels_glow.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_angels_glow.vpcf_c rename to game/effect/ti7donkey/effect_angels_glow.vpcf_c diff --git a/effect/ti7donkey/effect_cm.vpcf_c b/game/effect/ti7donkey/effect_cm.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_cm.vpcf_c rename to game/effect/ti7donkey/effect_cm.vpcf_c diff --git a/effect/ti7donkey/effect_ember.vpcf_c b/game/effect/ti7donkey/effect_ember.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_ember.vpcf_c rename to game/effect/ti7donkey/effect_ember.vpcf_c diff --git a/effect/ti7donkey/effect_flakes.vpcf_c b/game/effect/ti7donkey/effect_flakes.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_flakes.vpcf_c rename to game/effect/ti7donkey/effect_flakes.vpcf_c diff --git a/effect/ti7donkey/effect_flakes_b.vpcf_c b/game/effect/ti7donkey/effect_flakes_b.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_flakes_b.vpcf_c rename to game/effect/ti7donkey/effect_flakes_b.vpcf_c diff --git a/effect/ti7donkey/effect_flare.vpcf_c b/game/effect/ti7donkey/effect_flare.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_flare.vpcf_c rename to game/effect/ti7donkey/effect_flare.vpcf_c diff --git a/effect/ti7donkey/effect_frost.vpcf_c b/game/effect/ti7donkey/effect_frost.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_frost.vpcf_c rename to game/effect/ti7donkey/effect_frost.vpcf_c diff --git a/effect/ti7donkey/effect_glow.vpcf_c b/game/effect/ti7donkey/effect_glow.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_glow.vpcf_c rename to game/effect/ti7donkey/effect_glow.vpcf_c diff --git a/effect/ti7donkey/effect_ground_frost.vpcf_c b/game/effect/ti7donkey/effect_ground_frost.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_ground_frost.vpcf_c rename to game/effect/ti7donkey/effect_ground_frost.vpcf_c diff --git a/effect/ti7donkey/effect_ground_glint.vpcf_c b/game/effect/ti7donkey/effect_ground_glint.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_ground_glint.vpcf_c rename to game/effect/ti7donkey/effect_ground_glint.vpcf_c diff --git a/effect/ti7donkey/effect_ground_ice.vpcf_c b/game/effect/ti7donkey/effect_ground_ice.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_ground_ice.vpcf_c rename to game/effect/ti7donkey/effect_ground_ice.vpcf_c diff --git a/effect/ti7donkey/effect_ground_shard.vpcf_c b/game/effect/ti7donkey/effect_ground_shard.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_ground_shard.vpcf_c rename to game/effect/ti7donkey/effect_ground_shard.vpcf_c diff --git a/effect/ti7donkey/effect_halo.vpcf_c b/game/effect/ti7donkey/effect_halo.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_halo.vpcf_c rename to game/effect/ti7donkey/effect_halo.vpcf_c diff --git a/effect/ti7donkey/effect_poof.vpcf_c b/game/effect/ti7donkey/effect_poof.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_poof.vpcf_c rename to game/effect/ti7donkey/effect_poof.vpcf_c diff --git a/effect/ti7donkey/effect_trail.vpcf_c b/game/effect/ti7donkey/effect_trail.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_trail.vpcf_c rename to game/effect/ti7donkey/effect_trail.vpcf_c diff --git a/effect/ti7donkey/effect_trail_b.vpcf_c b/game/effect/ti7donkey/effect_trail_b.vpcf_c similarity index 100% rename from effect/ti7donkey/effect_trail_b.vpcf_c rename to game/effect/ti7donkey/effect_trail_b.vpcf_c diff --git a/effect/ti8roshan/1.vpcf_c b/game/effect/ti8roshan/1.vpcf_c similarity index 100% rename from effect/ti8roshan/1.vpcf_c rename to game/effect/ti8roshan/1.vpcf_c diff --git a/effect/ti8roshan/1_ember.vpcf_c b/game/effect/ti8roshan/1_ember.vpcf_c similarity index 100% rename from effect/ti8roshan/1_ember.vpcf_c rename to game/effect/ti8roshan/1_ember.vpcf_c diff --git a/effect/ti8roshan/1_eyes.vpcf_c b/game/effect/ti8roshan/1_eyes.vpcf_c similarity index 100% rename from effect/ti8roshan/1_eyes.vpcf_c rename to game/effect/ti8roshan/1_eyes.vpcf_c diff --git a/effect/ti8roshan/1_eyes_b.vpcf_c b/game/effect/ti8roshan/1_eyes_b.vpcf_c similarity index 100% rename from effect/ti8roshan/1_eyes_b.vpcf_c rename to game/effect/ti8roshan/1_eyes_b.vpcf_c diff --git a/effect/ti8roshan/1_eyes_c.vpcf_c b/game/effect/ti8roshan/1_eyes_c.vpcf_c similarity index 100% rename from effect/ti8roshan/1_eyes_c.vpcf_c rename to game/effect/ti8roshan/1_eyes_c.vpcf_c diff --git a/effect/ti8roshan/1_eyes_d.vpcf_c b/game/effect/ti8roshan/1_eyes_d.vpcf_c similarity index 100% rename from effect/ti8roshan/1_eyes_d.vpcf_c rename to game/effect/ti8roshan/1_eyes_d.vpcf_c diff --git a/effect/ti8roshan/1_fire.vpcf_c b/game/effect/ti8roshan/1_fire.vpcf_c similarity index 100% rename from effect/ti8roshan/1_fire.vpcf_c rename to game/effect/ti8roshan/1_fire.vpcf_c diff --git a/effect/ti8roshan/1_ground.vpcf_c b/game/effect/ti8roshan/1_ground.vpcf_c similarity index 100% rename from effect/ti8roshan/1_ground.vpcf_c rename to game/effect/ti8roshan/1_ground.vpcf_c diff --git a/effect/ti8roshan/1_ground_crystal.vpcf_c b/game/effect/ti8roshan/1_ground_crystal.vpcf_c similarity index 100% rename from effect/ti8roshan/1_ground_crystal.vpcf_c rename to game/effect/ti8roshan/1_ground_crystal.vpcf_c diff --git a/effect/ti8roshan/1_ground_dark.vpcf_c b/game/effect/ti8roshan/1_ground_dark.vpcf_c similarity index 100% rename from effect/ti8roshan/1_ground_dark.vpcf_c rename to game/effect/ti8roshan/1_ground_dark.vpcf_c diff --git a/effect/ti8roshan/1_halo.vpcf_c b/game/effect/ti8roshan/1_halo.vpcf_c similarity index 100% rename from effect/ti8roshan/1_halo.vpcf_c rename to game/effect/ti8roshan/1_halo.vpcf_c diff --git a/effect/ti8roshan/1_steam.vpcf_c b/game/effect/ti8roshan/1_steam.vpcf_c similarity index 100% rename from effect/ti8roshan/1_steam.vpcf_c rename to game/effect/ti8roshan/1_steam.vpcf_c diff --git a/effect/transform/t.vpcf_c b/game/effect/transform/t.vpcf_c similarity index 100% rename from effect/transform/t.vpcf_c rename to game/effect/transform/t.vpcf_c diff --git a/effect/transform/t_b.vpcf_c b/game/effect/transform/t_b.vpcf_c similarity index 100% rename from effect/transform/t_b.vpcf_c rename to game/effect/transform/t_b.vpcf_c diff --git a/effect/transform/t_c.vpcf_c b/game/effect/transform/t_c.vpcf_c similarity index 100% rename from effect/transform/t_c.vpcf_c rename to game/effect/transform/t_c.vpcf_c diff --git a/effect/transform/t_d.vpcf_c b/game/effect/transform/t_d.vpcf_c similarity index 100% rename from effect/transform/t_d.vpcf_c rename to game/effect/transform/t_d.vpcf_c diff --git a/effect/transform/t_e.vpcf_c b/game/effect/transform/t_e.vpcf_c similarity index 100% rename from effect/transform/t_e.vpcf_c rename to game/effect/transform/t_e.vpcf_c diff --git a/effect/u/u1.vpcf_c b/game/effect/u/u1.vpcf_c similarity index 100% rename from effect/u/u1.vpcf_c rename to game/effect/u/u1.vpcf_c diff --git a/effect/u/u1_beam.vpcf_c b/game/effect/u/u1_beam.vpcf_c similarity index 100% rename from effect/u/u1_beam.vpcf_c rename to game/effect/u/u1_beam.vpcf_c diff --git a/effect/u/u1_beam_2b.vpcf_c b/game/effect/u/u1_beam_2b.vpcf_c similarity index 100% rename from effect/u/u1_beam_2b.vpcf_c rename to game/effect/u/u1_beam_2b.vpcf_c diff --git a/effect/u/u1_beam_2c.vpcf_c b/game/effect/u/u1_beam_2c.vpcf_c similarity index 100% rename from effect/u/u1_beam_2c.vpcf_c rename to game/effect/u/u1_beam_2c.vpcf_c diff --git a/effect/u/u1_beam_2d.vpcf_c b/game/effect/u/u1_beam_2d.vpcf_c similarity index 100% rename from effect/u/u1_beam_2d.vpcf_c rename to game/effect/u/u1_beam_2d.vpcf_c diff --git a/effect/u/u1_hand.vpcf_c b/game/effect/u/u1_hand.vpcf_c similarity index 100% rename from effect/u/u1_hand.vpcf_c rename to game/effect/u/u1_hand.vpcf_c diff --git a/effect/u/u1_hand_b.vpcf_c b/game/effect/u/u1_hand_b.vpcf_c similarity index 100% rename from effect/u/u1_hand_b.vpcf_c rename to game/effect/u/u1_hand_b.vpcf_c diff --git a/effect/u/u1_light.vpcf_c b/game/effect/u/u1_light.vpcf_c similarity index 100% rename from effect/u/u1_light.vpcf_c rename to game/effect/u/u1_light.vpcf_c diff --git a/effect/u2/2.vpcf_c b/game/effect/u2/2.vpcf_c similarity index 100% rename from effect/u2/2.vpcf_c rename to game/effect/u2/2.vpcf_c diff --git a/effect/u2/2_beam.vpcf_c b/game/effect/u2/2_beam.vpcf_c similarity index 100% rename from effect/u2/2_beam.vpcf_c rename to game/effect/u2/2_beam.vpcf_c diff --git a/effect/u2/2_beam_2b.vpcf_c b/game/effect/u2/2_beam_2b.vpcf_c similarity index 100% rename from effect/u2/2_beam_2b.vpcf_c rename to game/effect/u2/2_beam_2b.vpcf_c diff --git a/effect/u2/2_beam_2c.vpcf_c b/game/effect/u2/2_beam_2c.vpcf_c similarity index 100% rename from effect/u2/2_beam_2c.vpcf_c rename to game/effect/u2/2_beam_2c.vpcf_c diff --git a/effect/u2/2_beam_2d.vpcf_c b/game/effect/u2/2_beam_2d.vpcf_c similarity index 100% rename from effect/u2/2_beam_2d.vpcf_c rename to game/effect/u2/2_beam_2d.vpcf_c diff --git a/effect/u2/2_hand.vpcf_c b/game/effect/u2/2_hand.vpcf_c similarity index 100% rename from effect/u2/2_hand.vpcf_c rename to game/effect/u2/2_hand.vpcf_c diff --git a/effect/u2/2_hand_b.vpcf_c b/game/effect/u2/2_hand_b.vpcf_c similarity index 100% rename from effect/u2/2_hand_b.vpcf_c rename to game/effect/u2/2_hand_b.vpcf_c diff --git a/effect/u2/2_light.vpcf_c b/game/effect/u2/2_light.vpcf_c similarity index 100% rename from effect/u2/2_light.vpcf_c rename to game/effect/u2/2_light.vpcf_c diff --git a/effect/wabbit/body_energy.vpcf_c b/game/effect/wabbit/body_energy.vpcf_c similarity index 100% rename from effect/wabbit/body_energy.vpcf_c rename to game/effect/wabbit/body_energy.vpcf_c diff --git a/effect/wabbit/body_lvl3_glow.vpcf_c b/game/effect/wabbit/body_lvl3_glow.vpcf_c similarity index 100% rename from effect/wabbit/body_lvl3_glow.vpcf_c rename to game/effect/wabbit/body_lvl3_glow.vpcf_c diff --git a/effect/wabbit/body_magic.vpcf_c b/game/effect/wabbit/body_magic.vpcf_c similarity index 100% rename from effect/wabbit/body_magic.vpcf_c rename to game/effect/wabbit/body_magic.vpcf_c diff --git a/effect/wabbit/ear_rope.vpcf_c b/game/effect/wabbit/ear_rope.vpcf_c similarity index 100% rename from effect/wabbit/ear_rope.vpcf_c rename to game/effect/wabbit/ear_rope.vpcf_c diff --git a/effect/wabbit/ears.vpcf_c b/game/effect/wabbit/ears.vpcf_c similarity index 100% rename from effect/wabbit/ears.vpcf_c rename to game/effect/wabbit/ears.vpcf_c diff --git a/effect/wabbit/lvl3.vpcf_c b/game/effect/wabbit/lvl3.vpcf_c similarity index 100% rename from effect/wabbit/lvl3.vpcf_c rename to game/effect/wabbit/lvl3.vpcf_c diff --git a/effect/wabbit/lvl3_tail_trail.vpcf_c b/game/effect/wabbit/lvl3_tail_trail.vpcf_c similarity index 100% rename from effect/wabbit/lvl3_tail_trail.vpcf_c rename to game/effect/wabbit/lvl3_tail_trail.vpcf_c diff --git a/effect/wabbit/pendant_glow.vpcf_c b/game/effect/wabbit/pendant_glow.vpcf_c similarity index 100% rename from effect/wabbit/pendant_glow.vpcf_c rename to game/effect/wabbit/pendant_glow.vpcf_c diff --git a/effect/wabbit/pendant_sparkle.vpcf_c b/game/effect/wabbit/pendant_sparkle.vpcf_c similarity index 100% rename from effect/wabbit/pendant_sparkle.vpcf_c rename to game/effect/wabbit/pendant_sparkle.vpcf_c diff --git a/effect/wabbit/salve_lvl3_glow.vpcf_c b/game/effect/wabbit/salve_lvl3_glow.vpcf_c similarity index 100% rename from effect/wabbit/salve_lvl3_glow.vpcf_c rename to game/effect/wabbit/salve_lvl3_glow.vpcf_c diff --git a/effect/wabbit/salve_lvl3_magic.vpcf_c b/game/effect/wabbit/salve_lvl3_magic.vpcf_c similarity index 100% rename from effect/wabbit/salve_lvl3_magic.vpcf_c rename to game/effect/wabbit/salve_lvl3_magic.vpcf_c diff --git a/effect/wabbit/salve_lvl3_magic_trail.vpcf_c b/game/effect/wabbit/salve_lvl3_magic_trail.vpcf_c similarity index 100% rename from effect/wabbit/salve_lvl3_magic_trail.vpcf_c rename to game/effect/wabbit/salve_lvl3_magic_trail.vpcf_c diff --git a/effect/wabbit/salve_lvl3_smoke.vpcf_c b/game/effect/wabbit/salve_lvl3_smoke.vpcf_c similarity index 100% rename from effect/wabbit/salve_lvl3_smoke.vpcf_c rename to game/effect/wabbit/salve_lvl3_smoke.vpcf_c diff --git a/effect/wabbit/scroll_lvl3_glow.vpcf_c b/game/effect/wabbit/scroll_lvl3_glow.vpcf_c similarity index 100% rename from effect/wabbit/scroll_lvl3_glow.vpcf_c rename to game/effect/wabbit/scroll_lvl3_glow.vpcf_c diff --git a/effect/wangyu/1.vpcf_c b/game/effect/wangyu/1.vpcf_c similarity index 100% rename from effect/wangyu/1.vpcf_c rename to game/effect/wangyu/1.vpcf_c diff --git a/effect/wuwuwu/1.vpcf_c b/game/effect/wuwuwu/1.vpcf_c similarity index 100% rename from effect/wuwuwu/1.vpcf_c rename to game/effect/wuwuwu/1.vpcf_c diff --git a/effect/x.vpcf_c b/game/effect/x.vpcf_c similarity index 100% rename from effect/x.vpcf_c rename to game/effect/x.vpcf_c diff --git a/effect/x/econ.vpcf_c b/game/effect/x/econ.vpcf_c similarity index 100% rename from effect/x/econ.vpcf_c rename to game/effect/x/econ.vpcf_c diff --git a/effect/x/line_econ.vpcf_c b/game/effect/x/line_econ.vpcf_c similarity index 100% rename from effect/x/line_econ.vpcf_c rename to game/effect/x/line_econ.vpcf_c diff --git a/effect/x/return_econ.vpcf_c b/game/effect/x/return_econ.vpcf_c similarity index 100% rename from effect/x/return_econ.vpcf_c rename to game/effect/x/return_econ.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_beams.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_beams.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_beams.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_beams.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_burst.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_burst.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_burst.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_burst.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_burst_b.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_burst_b.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_burst_b.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_burst_b.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_burst_c.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_burst_c.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_burst_c.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_burst_c.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_flakes.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_flakes.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_flakes.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_flakes.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_flash.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_flash.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_flash.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_flash.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_glint.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_glint.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_glint.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_glint.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_ground.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_ground.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_ground.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_ground.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_ground_crack.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_ground_crack.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_ground_crack.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_ground_crack.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_ground_crack_glow.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_ground_crack_glow.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_ground_crack_glow.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_ground_crack_glow.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_ground_darken.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_ground_darken.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_ground_darken.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_ground_darken.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_ground_ice.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_ground_ice.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_ground_ice.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_ground_ice.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_outline.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_outline.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_outline.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_outline.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_smoke.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_smoke.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_smoke.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_smoke.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7buff_warp.vpcf_c b/game/effect/xingguanglanbaoshi/ti7buff_warp.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7buff_warp.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7buff_warp.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7ground_ice.vpcf_c b/game/effect/xingguanglanbaoshi/ti7ground_ice.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7ground_ice.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7ground_ice.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7icicle.vpcf_c b/game/effect/xingguanglanbaoshi/ti7icicle.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7icicle.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7icicle.vpcf_c diff --git a/effect/xingguanglanbaoshi/ti7sphere.vpcf_c b/game/effect/xingguanglanbaoshi/ti7sphere.vpcf_c similarity index 100% rename from effect/xingguanglanbaoshi/ti7sphere.vpcf_c rename to game/effect/xingguanglanbaoshi/ti7sphere.vpcf_c diff --git a/effect/xuehua/xuehua.vpcf_c b/game/effect/xuehua/xuehua.vpcf_c similarity index 100% rename from effect/xuehua/xuehua.vpcf_c rename to game/effect/xuehua/xuehua.vpcf_c diff --git a/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c b/game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c similarity index 100% rename from effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c rename to game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok.vpcf_c diff --git a/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c b/game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c similarity index 100% rename from effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c rename to game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf_c diff --git a/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c b/game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c similarity index 100% rename from effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c rename to game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc_glow.vpcf_c diff --git a/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c b/game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c similarity index 100% rename from effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c rename to game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_drips.vpcf_c diff --git a/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c b/game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c similarity index 100% rename from effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c rename to game/effect/xuehuan/xuehuanecon/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_splatter.vpcf_c diff --git a/effect/xuehuan/xuehuanunits/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c b/game/effect/xuehuan/xuehuanunits/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c similarity index 100% rename from effect/xuehuan/xuehuanunits/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c rename to game/effect/xuehuan/xuehuanunits/heroes/hero_bloodseeker/bloodseeker_bloodbath_e_lv.vpcf_c diff --git a/effect/xukong/cour_rex_flying.vpcf_c b/game/effect/xukong/cour_rex_flying.vpcf_c similarity index 100% rename from effect/xukong/cour_rex_flying.vpcf_c rename to game/effect/xukong/cour_rex_flying.vpcf_c diff --git a/effect/xukong/cour_rex_flying_a.vpcf_c b/game/effect/xukong/cour_rex_flying_a.vpcf_c similarity index 100% rename from effect/xukong/cour_rex_flying_a.vpcf_c rename to game/effect/xukong/cour_rex_flying_a.vpcf_c diff --git a/effect/xukong/cour_rex_flying_b.vpcf_c b/game/effect/xukong/cour_rex_flying_b.vpcf_c similarity index 100% rename from effect/xukong/cour_rex_flying_b.vpcf_c rename to game/effect/xukong/cour_rex_flying_b.vpcf_c diff --git a/effect/xukong/cour_rex_flying_e.vpcf_c b/game/effect/xukong/cour_rex_flying_e.vpcf_c similarity index 100% rename from effect/xukong/cour_rex_flying_e.vpcf_c rename to game/effect/xukong/cour_rex_flying_e.vpcf_c diff --git a/effect/xukong/cour_rex_flying_f.vpcf_c b/game/effect/xukong/cour_rex_flying_f.vpcf_c similarity index 100% rename from effect/xukong/cour_rex_flying_f.vpcf_c rename to game/effect/xukong/cour_rex_flying_f.vpcf_c diff --git a/effect/xuwuzhiyan/blue/1.vpcf_c b/game/effect/xuwuzhiyan/blue/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/blue/1.vpcf_c rename to game/effect/xuwuzhiyan/blue/1.vpcf_c diff --git a/effect/xuwuzhiyan/blue/1b.vpcf_c b/game/effect/xuwuzhiyan/blue/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/blue/1b.vpcf_c rename to game/effect/xuwuzhiyan/blue/1b.vpcf_c diff --git a/effect/xuwuzhiyan/blue/1c.vpcf_c b/game/effect/xuwuzhiyan/blue/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/blue/1c.vpcf_c rename to game/effect/xuwuzhiyan/blue/1c.vpcf_c diff --git a/effect/xuwuzhiyan/blue/1d.vpcf_c b/game/effect/xuwuzhiyan/blue/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/blue/1d.vpcf_c rename to game/effect/xuwuzhiyan/blue/1d.vpcf_c diff --git a/effect/xuwuzhiyan/cyan/1.vpcf_c b/game/effect/xuwuzhiyan/cyan/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/cyan/1.vpcf_c rename to game/effect/xuwuzhiyan/cyan/1.vpcf_c diff --git a/effect/xuwuzhiyan/cyan/1b.vpcf_c b/game/effect/xuwuzhiyan/cyan/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/cyan/1b.vpcf_c rename to game/effect/xuwuzhiyan/cyan/1b.vpcf_c diff --git a/effect/xuwuzhiyan/cyan/1c.vpcf_c b/game/effect/xuwuzhiyan/cyan/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/cyan/1c.vpcf_c rename to game/effect/xuwuzhiyan/cyan/1c.vpcf_c diff --git a/effect/xuwuzhiyan/cyan/1d.vpcf_c b/game/effect/xuwuzhiyan/cyan/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/cyan/1d.vpcf_c rename to game/effect/xuwuzhiyan/cyan/1d.vpcf_c diff --git a/effect/xuwuzhiyan/green/1.vpcf_c b/game/effect/xuwuzhiyan/green/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/green/1.vpcf_c rename to game/effect/xuwuzhiyan/green/1.vpcf_c diff --git a/effect/xuwuzhiyan/green/1b.vpcf_c b/game/effect/xuwuzhiyan/green/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/green/1b.vpcf_c rename to game/effect/xuwuzhiyan/green/1b.vpcf_c diff --git a/effect/xuwuzhiyan/green/1c.vpcf_c b/game/effect/xuwuzhiyan/green/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/green/1c.vpcf_c rename to game/effect/xuwuzhiyan/green/1c.vpcf_c diff --git a/effect/xuwuzhiyan/green/1d.vpcf_c b/game/effect/xuwuzhiyan/green/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/green/1d.vpcf_c rename to game/effect/xuwuzhiyan/green/1d.vpcf_c diff --git a/effect/xuwuzhiyan/orange/1.vpcf_c b/game/effect/xuwuzhiyan/orange/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/orange/1.vpcf_c rename to game/effect/xuwuzhiyan/orange/1.vpcf_c diff --git a/effect/xuwuzhiyan/orange/1b.vpcf_c b/game/effect/xuwuzhiyan/orange/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/orange/1b.vpcf_c rename to game/effect/xuwuzhiyan/orange/1b.vpcf_c diff --git a/effect/xuwuzhiyan/orange/1c.vpcf_c b/game/effect/xuwuzhiyan/orange/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/orange/1c.vpcf_c rename to game/effect/xuwuzhiyan/orange/1c.vpcf_c diff --git a/effect/xuwuzhiyan/orange/1d.vpcf_c b/game/effect/xuwuzhiyan/orange/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/orange/1d.vpcf_c rename to game/effect/xuwuzhiyan/orange/1d.vpcf_c diff --git a/effect/xuwuzhiyan/pink/1.vpcf_c b/game/effect/xuwuzhiyan/pink/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/pink/1.vpcf_c rename to game/effect/xuwuzhiyan/pink/1.vpcf_c diff --git a/effect/xuwuzhiyan/pink/1b.vpcf_c b/game/effect/xuwuzhiyan/pink/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/pink/1b.vpcf_c rename to game/effect/xuwuzhiyan/pink/1b.vpcf_c diff --git a/effect/xuwuzhiyan/pink/1c.vpcf_c b/game/effect/xuwuzhiyan/pink/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/pink/1c.vpcf_c rename to game/effect/xuwuzhiyan/pink/1c.vpcf_c diff --git a/effect/xuwuzhiyan/pink/1d.vpcf_c b/game/effect/xuwuzhiyan/pink/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/pink/1d.vpcf_c rename to game/effect/xuwuzhiyan/pink/1d.vpcf_c diff --git a/effect/xuwuzhiyan/purple/1.vpcf_c b/game/effect/xuwuzhiyan/purple/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/purple/1.vpcf_c rename to game/effect/xuwuzhiyan/purple/1.vpcf_c diff --git a/effect/xuwuzhiyan/purple/1b.vpcf_c b/game/effect/xuwuzhiyan/purple/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/purple/1b.vpcf_c rename to game/effect/xuwuzhiyan/purple/1b.vpcf_c diff --git a/effect/xuwuzhiyan/purple/1c.vpcf_c b/game/effect/xuwuzhiyan/purple/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/purple/1c.vpcf_c rename to game/effect/xuwuzhiyan/purple/1c.vpcf_c diff --git a/effect/xuwuzhiyan/purple/1d.vpcf_c b/game/effect/xuwuzhiyan/purple/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/purple/1d.vpcf_c rename to game/effect/xuwuzhiyan/purple/1d.vpcf_c diff --git a/effect/xuwuzhiyan/red/1.vpcf_c b/game/effect/xuwuzhiyan/red/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/red/1.vpcf_c rename to game/effect/xuwuzhiyan/red/1.vpcf_c diff --git a/effect/xuwuzhiyan/red/1b.vpcf_c b/game/effect/xuwuzhiyan/red/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/red/1b.vpcf_c rename to game/effect/xuwuzhiyan/red/1b.vpcf_c diff --git a/effect/xuwuzhiyan/red/1c.vpcf_c b/game/effect/xuwuzhiyan/red/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/red/1c.vpcf_c rename to game/effect/xuwuzhiyan/red/1c.vpcf_c diff --git a/effect/xuwuzhiyan/red/1d.vpcf_c b/game/effect/xuwuzhiyan/red/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/red/1d.vpcf_c rename to game/effect/xuwuzhiyan/red/1d.vpcf_c diff --git a/effect/xuwuzhiyan/white/1.vpcf_c b/game/effect/xuwuzhiyan/white/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/white/1.vpcf_c rename to game/effect/xuwuzhiyan/white/1.vpcf_c diff --git a/effect/xuwuzhiyan/white/1b.vpcf_c b/game/effect/xuwuzhiyan/white/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/white/1b.vpcf_c rename to game/effect/xuwuzhiyan/white/1b.vpcf_c diff --git a/effect/xuwuzhiyan/white/1c.vpcf_c b/game/effect/xuwuzhiyan/white/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/white/1c.vpcf_c rename to game/effect/xuwuzhiyan/white/1c.vpcf_c diff --git a/effect/xuwuzhiyan/white/1d.vpcf_c b/game/effect/xuwuzhiyan/white/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/white/1d.vpcf_c rename to game/effect/xuwuzhiyan/white/1d.vpcf_c diff --git a/effect/xuwuzhiyan/yellow/1.vpcf_c b/game/effect/xuwuzhiyan/yellow/1.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/yellow/1.vpcf_c rename to game/effect/xuwuzhiyan/yellow/1.vpcf_c diff --git a/effect/xuwuzhiyan/yellow/1b.vpcf_c b/game/effect/xuwuzhiyan/yellow/1b.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/yellow/1b.vpcf_c rename to game/effect/xuwuzhiyan/yellow/1b.vpcf_c diff --git a/effect/xuwuzhiyan/yellow/1c.vpcf_c b/game/effect/xuwuzhiyan/yellow/1c.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/yellow/1c.vpcf_c rename to game/effect/xuwuzhiyan/yellow/1c.vpcf_c diff --git a/effect/xuwuzhiyan/yellow/1d.vpcf_c b/game/effect/xuwuzhiyan/yellow/1d.vpcf_c similarity index 100% rename from effect/xuwuzhiyan/yellow/1d.vpcf_c rename to game/effect/xuwuzhiyan/yellow/1d.vpcf_c diff --git a/effect/yuhuofenshen/1_2.vpcf_c b/game/effect/yuhuofenshen/1_2.vpcf_c similarity index 100% rename from effect/yuhuofenshen/1_2.vpcf_c rename to game/effect/yuhuofenshen/1_2.vpcf_c diff --git a/effect/yuhuofenshen/1_2_embers.vpcf_c b/game/effect/yuhuofenshen/1_2_embers.vpcf_c similarity index 100% rename from effect/yuhuofenshen/1_2_embers.vpcf_c rename to game/effect/yuhuofenshen/1_2_embers.vpcf_c diff --git a/effect/yuhuofenshen/1_2_smallflame.vpcf_c b/game/effect/yuhuofenshen/1_2_smallflame.vpcf_c similarity index 100% rename from effect/yuhuofenshen/1_2_smallflame.vpcf_c rename to game/effect/yuhuofenshen/1_2_smallflame.vpcf_c diff --git a/effect/yuhuofenshen/1_2_tallflame.vpcf_c b/game/effect/yuhuofenshen/1_2_tallflame.vpcf_c similarity index 100% rename from effect/yuhuofenshen/1_2_tallflame.vpcf_c rename to game/effect/yuhuofenshen/1_2_tallflame.vpcf_c diff --git a/effect/yuhuofenshen/1_2_tallflamedark.vpcf_c b/game/effect/yuhuofenshen/1_2_tallflamedark.vpcf_c similarity index 100% rename from effect/yuhuofenshen/1_2_tallflamedark.vpcf_c rename to game/effect/yuhuofenshen/1_2_tallflamedark.vpcf_c diff --git a/effect/yumao/1.vpcf_c b/game/effect/yumao/1.vpcf_c similarity index 100% rename from effect/yumao/1.vpcf_c rename to game/effect/yumao/1.vpcf_c diff --git a/effect/yumao/1_death.vpcf_c b/game/effect/yumao/1_death.vpcf_c similarity index 100% rename from effect/yumao/1_death.vpcf_c rename to game/effect/yumao/1_death.vpcf_c diff --git a/effect/yumao/1_death_b.vpcf_c b/game/effect/yumao/1_death_b.vpcf_c similarity index 100% rename from effect/yumao/1_death_b.vpcf_c rename to game/effect/yumao/1_death_b.vpcf_c diff --git a/effect/zeus/victory/victory.vpcf_c b/game/effect/zeus/victory/victory.vpcf_c similarity index 100% rename from effect/zeus/victory/victory.vpcf_c rename to game/effect/zeus/victory/victory.vpcf_c diff --git a/effect/zeus/victory/victory_burst.vpcf_c b/game/effect/zeus/victory/victory_burst.vpcf_c similarity index 100% rename from effect/zeus/victory/victory_burst.vpcf_c rename to game/effect/zeus/victory/victory_burst.vpcf_c diff --git a/effect/zeus/victory/victory_text.vpcf_c b/game/effect/zeus/victory/victory_text.vpcf_c similarity index 100% rename from effect/zeus/victory/victory_text.vpcf_c rename to game/effect/zeus/victory/victory_text.vpcf_c diff --git a/effect/zeus/victory/victory_text_glow.vpcf_c b/game/effect/zeus/victory/victory_text_glow.vpcf_c similarity index 100% rename from effect/zeus/victory/victory_text_glow.vpcf_c rename to game/effect/zeus/victory/victory_text_glow.vpcf_c diff --git a/effect/zeus/victory/winner_magic.vpcf_c b/game/effect/zeus/victory/winner_magic.vpcf_c similarity index 100% rename from effect/zeus/victory/winner_magic.vpcf_c rename to game/effect/zeus/victory/winner_magic.vpcf_c diff --git a/effect/zeus/victory/winner_rays.vpcf_c b/game/effect/zeus/victory/winner_rays.vpcf_c similarity index 100% rename from effect/zeus/victory/winner_rays.vpcf_c rename to game/effect/zeus/victory/winner_rays.vpcf_c diff --git a/effect/zeus/winner/dizuo/1.vpcf_c b/game/effect/zeus/winner/dizuo/1.vpcf_c similarity index 100% rename from effect/zeus/winner/dizuo/1.vpcf_c rename to game/effect/zeus/winner/dizuo/1.vpcf_c diff --git a/effect/zeus/winner/victory.vpcf_c b/game/effect/zeus/winner/victory.vpcf_c similarity index 100% rename from effect/zeus/winner/victory.vpcf_c rename to game/effect/zeus/winner/victory.vpcf_c diff --git a/effect/zeus/winner/victory_burst.vpcf_c b/game/effect/zeus/winner/victory_burst.vpcf_c similarity index 100% rename from effect/zeus/winner/victory_burst.vpcf_c rename to game/effect/zeus/winner/victory_burst.vpcf_c diff --git a/effect/zeus/winner/victory_text.vpcf_c b/game/effect/zeus/winner/victory_text.vpcf_c similarity index 100% rename from effect/zeus/winner/victory_text.vpcf_c rename to game/effect/zeus/winner/victory_text.vpcf_c diff --git a/effect/zeus/winner/victory_text_glow.vpcf_c b/game/effect/zeus/winner/victory_text_glow.vpcf_c similarity index 100% rename from effect/zeus/winner/victory_text_glow.vpcf_c rename to game/effect/zeus/winner/victory_text_glow.vpcf_c diff --git a/effect/zeus/winner/winner_magic.vpcf_c b/game/effect/zeus/winner/winner_magic.vpcf_c similarity index 100% rename from effect/zeus/winner/winner_magic.vpcf_c rename to game/effect/zeus/winner/winner_magic.vpcf_c diff --git a/effect/zeus/winner/winner_rays.vpcf_c b/game/effect/zeus/winner/winner_rays.vpcf_c similarity index 100% rename from effect/zeus/winner/winner_rays.vpcf_c rename to game/effect/zeus/winner/winner_rays.vpcf_c diff --git a/effect/zeus/winner/zhanshi/1_glow.vpcf_c b/game/effect/zeus/winner/zhanshi/1_glow.vpcf_c similarity index 100% rename from effect/zeus/winner/zhanshi/1_glow.vpcf_c rename to game/effect/zeus/winner/zhanshi/1_glow.vpcf_c diff --git a/effect/zhanshi/1.vpcf_c b/game/effect/zhanshi/1.vpcf_c similarity index 100% rename from effect/zhanshi/1.vpcf_c rename to game/effect/zhanshi/1.vpcf_c diff --git a/effect/zhanshi/1_glow.vpcf_c b/game/effect/zhanshi/1_glow.vpcf_c similarity index 100% rename from effect/zhanshi/1_glow.vpcf_c rename to game/effect/zhanshi/1_glow.vpcf_c diff --git a/effect/zisexingyun_2/ti7glow.vpcf_c b/game/effect/zisexingyun_2/ti7glow.vpcf_c similarity index 100% rename from effect/zisexingyun_2/ti7glow.vpcf_c rename to game/effect/zisexingyun_2/ti7glow.vpcf_c diff --git a/effect/zisexingyun_2/ti7rays.vpcf_c b/game/effect/zisexingyun_2/ti7rays.vpcf_c similarity index 100% rename from effect/zisexingyun_2/ti7rays.vpcf_c rename to game/effect/zisexingyun_2/ti7rays.vpcf_c diff --git a/effect/zisexingyun_2/ti7secondary.vpcf_c b/game/effect/zisexingyun_2/ti7secondary.vpcf_c similarity index 100% rename from effect/zisexingyun_2/ti7secondary.vpcf_c rename to game/effect/zisexingyun_2/ti7secondary.vpcf_c diff --git a/effect/zisexingyun_2/ti7secondary_flare.vpcf_c b/game/effect/zisexingyun_2/ti7secondary_flare.vpcf_c similarity index 100% rename from effect/zisexingyun_2/ti7secondary_flare.vpcf_c rename to game/effect/zisexingyun_2/ti7secondary_flare.vpcf_c diff --git a/effect/zisexingyun_2/ti7trail_secondary.vpcf_c b/game/effect/zisexingyun_2/ti7trail_secondary.vpcf_c similarity index 100% rename from effect/zisexingyun_2/ti7trail_secondary.vpcf_c rename to game/effect/zisexingyun_2/ti7trail_secondary.vpcf_c diff --git a/effects/bianpaobig_explosion.vpcf_c b/game/effects/bianpaobig_explosion.vpcf_c similarity index 100% rename from effects/bianpaobig_explosion.vpcf_c rename to game/effects/bianpaobig_explosion.vpcf_c diff --git a/effects/bianpaobig_explosion_trail.vpcf_c b/game/effects/bianpaobig_explosion_trail.vpcf_c similarity index 100% rename from effects/bianpaobig_explosion_trail.vpcf_c rename to game/effects/bianpaobig_explosion_trail.vpcf_c diff --git a/effects/bianpaofireworks.vpcf_c b/game/effects/bianpaofireworks.vpcf_c similarity index 100% rename from effects/bianpaofireworks.vpcf_c rename to game/effects/bianpaofireworks.vpcf_c diff --git a/effects/bianpaofireworks_b.vpcf_c b/game/effects/bianpaofireworks_b.vpcf_c similarity index 100% rename from effects/bianpaofireworks_b.vpcf_c rename to game/effects/bianpaofireworks_b.vpcf_c diff --git a/effects/bianpaofireworks_explosion_b.vpcf_c b/game/effects/bianpaofireworks_explosion_b.vpcf_c similarity index 100% rename from effects/bianpaofireworks_explosion_b.vpcf_c rename to game/effects/bianpaofireworks_explosion_b.vpcf_c diff --git a/effects/bianpaofireworks_explosion_c.vpcf_c b/game/effects/bianpaofireworks_explosion_c.vpcf_c similarity index 100% rename from effects/bianpaofireworks_explosion_c.vpcf_c rename to game/effects/bianpaofireworks_explosion_c.vpcf_c diff --git a/effects/bianpaofireworks_explosion_d.vpcf_c b/game/effects/bianpaofireworks_explosion_d.vpcf_c similarity index 100% rename from effects/bianpaofireworks_explosion_d.vpcf_c rename to game/effects/bianpaofireworks_explosion_d.vpcf_c diff --git a/effects/bianpaofireworks_fuse_sparks.vpcf_c b/game/effects/bianpaofireworks_fuse_sparks.vpcf_c similarity index 100% rename from effects/bianpaofireworks_fuse_sparks.vpcf_c rename to game/effects/bianpaofireworks_fuse_sparks.vpcf_c diff --git a/effects/bianpaofireworks_fuse_sparks_b.vpcf_c b/game/effects/bianpaofireworks_fuse_sparks_b.vpcf_c similarity index 100% rename from effects/bianpaofireworks_fuse_sparks_b.vpcf_c rename to game/effects/bianpaofireworks_fuse_sparks_b.vpcf_c diff --git a/effects/bianpaofireworks_fuse_sparks_c.vpcf_c b/game/effects/bianpaofireworks_fuse_sparks_c.vpcf_c similarity index 100% rename from effects/bianpaofireworks_fuse_sparks_c.vpcf_c rename to game/effects/bianpaofireworks_fuse_sparks_c.vpcf_c diff --git a/effects/bianpaofireworks_fuse_sparks_d.vpcf_c b/game/effects/bianpaofireworks_fuse_sparks_d.vpcf_c similarity index 100% rename from effects/bianpaofireworks_fuse_sparks_d.vpcf_c rename to game/effects/bianpaofireworks_fuse_sparks_d.vpcf_c diff --git a/effects/bianpaofireworks_special.vpcf_c b/game/effects/bianpaofireworks_special.vpcf_c similarity index 100% rename from effects/bianpaofireworks_special.vpcf_c rename to game/effects/bianpaofireworks_special.vpcf_c diff --git a/effects/damage.vpcf_c b/game/effects/damage.vpcf_c similarity index 100% rename from effects/damage.vpcf_c rename to game/effects/damage.vpcf_c diff --git a/effects/damage2.vpcf_c b/game/effects/damage2.vpcf_c similarity index 100% rename from effects/damage2.vpcf_c rename to game/effects/damage2.vpcf_c diff --git a/effects/damage3.vpcf_c b/game/effects/damage3.vpcf_c similarity index 100% rename from effects/damage3.vpcf_c rename to game/effects/damage3.vpcf_c diff --git a/effects/flag.vpcf_c b/game/effects/flag.vpcf_c similarity index 100% rename from effects/flag.vpcf_c rename to game/effects/flag.vpcf_c diff --git a/effects/hunluan/c.vpcf_c b/game/effects/hunluan/c.vpcf_c similarity index 100% rename from effects/hunluan/c.vpcf_c rename to game/effects/hunluan/c.vpcf_c diff --git a/effects/hunluan/old.vpcf_c b/game/effects/hunluan/old.vpcf_c similarity index 100% rename from effects/hunluan/old.vpcf_c rename to game/effects/hunluan/old.vpcf_c diff --git a/effects/x.vpcf_c b/game/effects/x.vpcf_c similarity index 100% rename from effects/x.vpcf_c rename to game/effects/x.vpcf_c diff --git a/maps/td/attacking_process.vpk b/game/maps/td/attacking_process.vpk similarity index 100% rename from maps/td/attacking_process.vpk rename to game/maps/td/attacking_process.vpk diff --git a/maps/td/card.vpk b/game/maps/td/card.vpk similarity index 100% rename from maps/td/card.vpk rename to game/maps/td/card.vpk diff --git a/maps/td/clicked_test.vpk b/game/maps/td/clicked_test.vpk similarity index 100% rename from maps/td/clicked_test.vpk rename to game/maps/td/clicked_test.vpk diff --git a/maps/td/draw_card.vpk b/game/maps/td/draw_card.vpk similarity index 100% rename from maps/td/draw_card.vpk rename to game/maps/td/draw_card.vpk diff --git a/maps/td/loading.vpk b/game/maps/td/loading.vpk similarity index 100% rename from maps/td/loading.vpk rename to game/maps/td/loading.vpk diff --git a/maps/td/selected_card.vpk b/game/maps/td/selected_card.vpk similarity index 100% rename from maps/td/selected_card.vpk rename to game/maps/td/selected_card.vpk diff --git a/maps/touhoutd.vpk b/game/maps/touhoutd.vpk similarity index 100% rename from maps/touhoutd.vpk rename to game/maps/touhoutd.vpk diff --git a/materials/asset/texture/brick/brick_01/brick_01.vmat_c b/game/materials/asset/texture/brick/brick_01/brick_01.vmat_c similarity index 100% rename from materials/asset/texture/brick/brick_01/brick_01.vmat_c rename to game/materials/asset/texture/brick/brick_01/brick_01.vmat_c diff --git a/materials/asset/texture/brick/brick_01/brick_01_tga_9c071719.vtex_c b/game/materials/asset/texture/brick/brick_01/brick_01_tga_9c071719.vtex_c similarity index 100% rename from materials/asset/texture/brick/brick_01/brick_01_tga_9c071719.vtex_c rename to game/materials/asset/texture/brick/brick_01/brick_01_tga_9c071719.vtex_c diff --git a/materials/asset/texture/wood/wood_02/wood_02.vmat_c b/game/materials/asset/texture/wood/wood_02/wood_02.vmat_c similarity index 100% rename from materials/asset/texture/wood/wood_02/wood_02.vmat_c rename to game/materials/asset/texture/wood/wood_02/wood_02.vmat_c diff --git a/materials/asset/texture/wood/wood_02/wood_02_color_tga_3c43b04.vtex_c b/game/materials/asset/texture/wood/wood_02/wood_02_color_tga_3c43b04.vtex_c similarity index 100% rename from materials/asset/texture/wood/wood_02/wood_02_color_tga_3c43b04.vtex_c rename to game/materials/asset/texture/wood/wood_02/wood_02_color_tga_3c43b04.vtex_c diff --git a/materials/asset/texture/wood/wood_02/wood_02_color_tga_acabbf62.vtex_c b/game/materials/asset/texture/wood/wood_02/wood_02_color_tga_acabbf62.vtex_c similarity index 100% rename from materials/asset/texture/wood/wood_02/wood_02_color_tga_acabbf62.vtex_c rename to game/materials/asset/texture/wood/wood_02/wood_02_color_tga_acabbf62.vtex_c diff --git a/materials/default/default_color_tga_41192599.vtex_c b/game/materials/default/default_color_tga_41192599.vtex_c similarity index 100% rename from materials/default/default_color_tga_41192599.vtex_c rename to game/materials/default/default_color_tga_41192599.vtex_c diff --git a/materials/default/default_colorwarp3d_z000_tga_8805a83f.vtex_c b/game/materials/default/default_colorwarp3d_z000_tga_8805a83f.vtex_c similarity index 100% rename from materials/default/default_colorwarp3d_z000_tga_8805a83f.vtex_c rename to game/materials/default/default_colorwarp3d_z000_tga_8805a83f.vtex_c diff --git a/materials/default/default_detail_tga_d55685d8.vtex_c b/game/materials/default/default_detail_tga_d55685d8.vtex_c similarity index 100% rename from materials/default/default_detail_tga_d55685d8.vtex_c rename to game/materials/default/default_detail_tga_d55685d8.vtex_c diff --git a/materials/default/default_detailmask_tga_4450da58.vtex_c b/game/materials/default/default_detailmask_tga_4450da58.vtex_c similarity index 100% rename from materials/default/default_detailmask_tga_4450da58.vtex_c rename to game/materials/default/default_detailmask_tga_4450da58.vtex_c diff --git a/materials/default/default_fresnelwarprim_tga_d9279d65.vtex_c b/game/materials/default/default_fresnelwarprim_tga_d9279d65.vtex_c similarity index 100% rename from materials/default/default_fresnelwarprim_tga_d9279d65.vtex_c rename to game/materials/default/default_fresnelwarprim_tga_d9279d65.vtex_c diff --git a/materials/default/default_normal_tga_7652cb.vtex_c b/game/materials/default/default_normal_tga_7652cb.vtex_c similarity index 100% rename from materials/default/default_normal_tga_7652cb.vtex_c rename to game/materials/default/default_normal_tga_7652cb.vtex_c diff --git a/materials/default/default_refl_tga_c1b9c83e.vtex_c b/game/materials/default/default_refl_tga_c1b9c83e.vtex_c similarity index 100% rename from materials/default/default_refl_tga_c1b9c83e.vtex_c rename to game/materials/default/default_refl_tga_c1b9c83e.vtex_c diff --git a/materials/default/default_specmask_tga_885e1d6b.vtex_c b/game/materials/default/default_specmask_tga_885e1d6b.vtex_c similarity index 100% rename from materials/default/default_specmask_tga_885e1d6b.vtex_c rename to game/materials/default/default_specmask_tga_885e1d6b.vtex_c diff --git a/materials/default/default_specwarp_tga_436583b9.vtex_c b/game/materials/default/default_specwarp_tga_436583b9.vtex_c similarity index 100% rename from materials/default/default_specwarp_tga_436583b9.vtex_c rename to game/materials/default/default_specwarp_tga_436583b9.vtex_c diff --git a/materials/default/default_tga_f335a1f7.vtex_c b/game/materials/default/default_tga_f335a1f7.vtex_c similarity index 100% rename from materials/default/default_tga_f335a1f7.vtex_c rename to game/materials/default/default_tga_f335a1f7.vtex_c diff --git a/materials/heroes/juggernaut/box.vmat_c b/game/materials/heroes/juggernaut/box.vmat_c similarity index 100% rename from materials/heroes/juggernaut/box.vmat_c rename to game/materials/heroes/juggernaut/box.vmat_c diff --git a/materials/heroes/juggernaut/box_tga_7717c9a9.vtex_c b/game/materials/heroes/juggernaut/box_tga_7717c9a9.vtex_c similarity index 100% rename from materials/heroes/juggernaut/box_tga_7717c9a9.vtex_c rename to game/materials/heroes/juggernaut/box_tga_7717c9a9.vtex_c diff --git a/materials/heroes/juggernaut/hg.vmat_c b/game/materials/heroes/juggernaut/hg.vmat_c similarity index 100% rename from materials/heroes/juggernaut/hg.vmat_c rename to game/materials/heroes/juggernaut/hg.vmat_c diff --git a/materials/heroes/juggernaut/hg_tga_5a3a1c0a.vtex_c b/game/materials/heroes/juggernaut/hg_tga_5a3a1c0a.vtex_c similarity index 100% rename from materials/heroes/juggernaut/hg_tga_5a3a1c0a.vtex_c rename to game/materials/heroes/juggernaut/hg_tga_5a3a1c0a.vtex_c diff --git a/materials/heroes/juggernaut/okita.vmat_c b/game/materials/heroes/juggernaut/okita.vmat_c similarity index 100% rename from materials/heroes/juggernaut/okita.vmat_c rename to game/materials/heroes/juggernaut/okita.vmat_c diff --git a/materials/heroes/juggernaut/okita_tga_bb36db39.vtex_c b/game/materials/heroes/juggernaut/okita_tga_bb36db39.vtex_c similarity index 100% rename from materials/heroes/juggernaut/okita_tga_bb36db39.vtex_c rename to game/materials/heroes/juggernaut/okita_tga_bb36db39.vtex_c diff --git a/materials/heroes/juggernaut/okitas.vmat_c b/game/materials/heroes/juggernaut/okitas.vmat_c similarity index 100% rename from materials/heroes/juggernaut/okitas.vmat_c rename to game/materials/heroes/juggernaut/okitas.vmat_c diff --git a/materials/heroes/juggernaut/okitas_tga_ee2bca57.vtex_c b/game/materials/heroes/juggernaut/okitas_tga_ee2bca57.vtex_c similarity index 100% rename from materials/heroes/juggernaut/okitas_tga_ee2bca57.vtex_c rename to game/materials/heroes/juggernaut/okitas_tga_ee2bca57.vtex_c diff --git a/materials/heroes/juggernaut/pink.vmat_c b/game/materials/heroes/juggernaut/pink.vmat_c similarity index 100% rename from materials/heroes/juggernaut/pink.vmat_c rename to game/materials/heroes/juggernaut/pink.vmat_c diff --git a/materials/heroes/juggernaut/pink_vmat_g_tcolor_4ba2bf51.vtex_c b/game/materials/heroes/juggernaut/pink_vmat_g_tcolor_4ba2bf51.vtex_c similarity index 100% rename from materials/heroes/juggernaut/pink_vmat_g_tcolor_4ba2bf51.vtex_c rename to game/materials/heroes/juggernaut/pink_vmat_g_tcolor_4ba2bf51.vtex_c diff --git a/materials/heroes/juggernaut/wings.vmat_c b/game/materials/heroes/juggernaut/wings.vmat_c similarity index 100% rename from materials/heroes/juggernaut/wings.vmat_c rename to game/materials/heroes/juggernaut/wings.vmat_c diff --git a/materials/heroes/juggernaut/wings_tga_3850a93a.vtex_c b/game/materials/heroes/juggernaut/wings_tga_3850a93a.vtex_c similarity index 100% rename from materials/heroes/juggernaut/wings_tga_3850a93a.vtex_c rename to game/materials/heroes/juggernaut/wings_tga_3850a93a.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01.vmat_c b/game/materials/imagine_assets/props/chest/chest_01.vmat_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01.vmat_c rename to game/materials/imagine_assets/props/chest/chest_01.vmat_c diff --git a/materials/imagine_assets/props/chest/chest_01_bronze.vmat_c b/game/materials/imagine_assets/props/chest/chest_01_bronze.vmat_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_bronze.vmat_c rename to game/materials/imagine_assets/props/chest/chest_01_bronze.vmat_c diff --git a/materials/imagine_assets/props/chest/chest_01_bronze_color_tga_31da0981.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_bronze_color_tga_31da0981.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_bronze_color_tga_31da0981.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_bronze_color_tga_31da0981.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_bronze_vmat_g_tmasks1_45a958f.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_bronze_vmat_g_tmasks1_45a958f.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_bronze_vmat_g_tmasks1_45a958f.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_bronze_vmat_g_tmasks1_45a958f.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_color_tga_fc14bd8c.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_color_tga_fc14bd8c.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_color_tga_fc14bd8c.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_color_tga_fc14bd8c.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_gold.vmat_c b/game/materials/imagine_assets/props/chest/chest_01_gold.vmat_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_gold.vmat_c rename to game/materials/imagine_assets/props/chest/chest_01_gold.vmat_c diff --git a/materials/imagine_assets/props/chest/chest_01_gold_color_tga_34becef5.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_gold_color_tga_34becef5.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_gold_color_tga_34becef5.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_gold_color_tga_34becef5.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_gold_normal_tga_d938e704.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_gold_normal_tga_d938e704.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_gold_normal_tga_d938e704.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_gold_normal_tga_d938e704.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_gold_vmat_g_tmasks1_45a958f.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_gold_vmat_g_tmasks1_45a958f.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_gold_vmat_g_tmasks1_45a958f.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_gold_vmat_g_tmasks1_45a958f.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_183eb1a1.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_183eb1a1.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_183eb1a1.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_183eb1a1.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_62c04ebc.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_62c04ebc.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_62c04ebc.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_62c04ebc.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_7e500845.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_7e500845.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_7e500845.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_7e500845.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_cfe904d7.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_cfe904d7.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_cfe904d7.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_metal_specmask_tga_cfe904d7.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_sliver_vmat_g_tmasks1_45a958f.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_sliver_vmat_g_tmasks1_45a958f.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_sliver_vmat_g_tmasks1_45a958f.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_sliver_vmat_g_tmasks1_45a958f.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_vmat_g_tmasks1_45a958f.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_vmat_g_tmasks1_45a958f.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_vmat_g_tmasks1_45a958f.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_vmat_g_tmasks1_45a958f.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_01_wood_vmat_g_tmasks1_45a958f.vtex_c b/game/materials/imagine_assets/props/chest/chest_01_wood_vmat_g_tmasks1_45a958f.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_01_wood_vmat_g_tmasks1_45a958f.vtex_c rename to game/materials/imagine_assets/props/chest/chest_01_wood_vmat_g_tmasks1_45a958f.vtex_c diff --git a/materials/imagine_assets/props/chest/chest_key_01.vmat_c b/game/materials/imagine_assets/props/chest/chest_key_01.vmat_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_key_01.vmat_c rename to game/materials/imagine_assets/props/chest/chest_key_01.vmat_c diff --git a/materials/imagine_assets/props/chest/chest_key_01_color_tga_2aeff4bf.vtex_c b/game/materials/imagine_assets/props/chest/chest_key_01_color_tga_2aeff4bf.vtex_c similarity index 100% rename from materials/imagine_assets/props/chest/chest_key_01_color_tga_2aeff4bf.vtex_c rename to game/materials/imagine_assets/props/chest/chest_key_01_color_tga_2aeff4bf.vtex_c diff --git a/materials/masterspark.vmat_c b/game/materials/masterspark.vmat_c similarity index 100% rename from materials/masterspark.vmat_c rename to game/materials/masterspark.vmat_c diff --git a/materials/masterspark_tga_17e3888e.vtex_c b/game/materials/masterspark_tga_17e3888e.vtex_c similarity index 100% rename from materials/masterspark_tga_17e3888e.vtex_c rename to game/materials/masterspark_tga_17e3888e.vtex_c diff --git a/materials/masterspark_tga_5fc9d3e6.vtex_c b/game/materials/masterspark_tga_5fc9d3e6.vtex_c similarity index 100% rename from materials/masterspark_tga_5fc9d3e6.vtex_c rename to game/materials/masterspark_tga_5fc9d3e6.vtex_c diff --git a/materials/masterspark_tga_6e064aa7.vtex_c b/game/materials/masterspark_tga_6e064aa7.vtex_c similarity index 100% rename from materials/masterspark_tga_6e064aa7.vtex_c rename to game/materials/masterspark_tga_6e064aa7.vtex_c diff --git a/materials/masterspark_tga_eaa038d1.vtex_c b/game/materials/masterspark_tga_eaa038d1.vtex_c similarity index 100% rename from materials/masterspark_tga_eaa038d1.vtex_c rename to game/materials/masterspark_tga_eaa038d1.vtex_c diff --git a/materials/masterspark_tga_f50cfc42.vtex_c b/game/materials/masterspark_tga_f50cfc42.vtex_c similarity index 100% rename from materials/masterspark_tga_f50cfc42.vtex_c rename to game/materials/masterspark_tga_f50cfc42.vtex_c diff --git a/materials/models/blsss.vmat_c b/game/materials/models/blsss.vmat_c similarity index 100% rename from materials/models/blsss.vmat_c rename to game/materials/models/blsss.vmat_c diff --git a/materials/models/blsss_01.vmat_c b/game/materials/models/blsss_01.vmat_c similarity index 100% rename from materials/models/blsss_01.vmat_c rename to game/materials/models/blsss_01.vmat_c diff --git a/materials/models/blsss_tga_314c9efd.vtex_c b/game/materials/models/blsss_tga_314c9efd.vtex_c similarity index 100% rename from materials/models/blsss_tga_314c9efd.vtex_c rename to game/materials/models/blsss_tga_314c9efd.vtex_c diff --git a/materials/models/blsss_tga_de8c6b76.vtex_c b/game/materials/models/blsss_tga_de8c6b76.vtex_c similarity index 100% rename from materials/models/blsss_tga_de8c6b76.vtex_c rename to game/materials/models/blsss_tga_de8c6b76.vtex_c diff --git a/materials/models/cages/cages.vmat_c b/game/materials/models/cages/cages.vmat_c similarity index 100% rename from materials/models/cages/cages.vmat_c rename to game/materials/models/cages/cages.vmat_c diff --git a/materials/models/cages/cages_n_tga_d714a642.vtex_c b/game/materials/models/cages/cages_n_tga_d714a642.vtex_c similarity index 100% rename from materials/models/cages/cages_n_tga_d714a642.vtex_c rename to game/materials/models/cages/cages_n_tga_d714a642.vtex_c diff --git a/materials/models/cages/cages_tga_f28a30e2.vtex_c b/game/materials/models/cages/cages_tga_f28a30e2.vtex_c similarity index 100% rename from materials/models/cages/cages_tga_f28a30e2.vtex_c rename to game/materials/models/cages/cages_tga_f28a30e2.vtex_c diff --git a/materials/models/cubemaps/crimson_pique_glass_cube_psd_40e56d80.vtex_c b/game/materials/models/cubemaps/crimson_pique_glass_cube_psd_40e56d80.vtex_c similarity index 100% rename from materials/models/cubemaps/crimson_pique_glass_cube_psd_40e56d80.vtex_c rename to game/materials/models/cubemaps/crimson_pique_glass_cube_psd_40e56d80.vtex_c diff --git a/materials/models/cubemaps/cube_legion_commander_cube_tga_3cd63b2e.vtex_c b/game/materials/models/cubemaps/cube_legion_commander_cube_tga_3cd63b2e.vtex_c similarity index 100% rename from materials/models/cubemaps/cube_legion_commander_cube_tga_3cd63b2e.vtex_c rename to game/materials/models/cubemaps/cube_legion_commander_cube_tga_3cd63b2e.vtex_c diff --git a/materials/models/cubemaps/glossy_blue_cube_tga_bee8895f.vtex_c b/game/materials/models/cubemaps/glossy_blue_cube_tga_bee8895f.vtex_c similarity index 100% rename from materials/models/cubemaps/glossy_blue_cube_tga_bee8895f.vtex_c rename to game/materials/models/cubemaps/glossy_blue_cube_tga_bee8895f.vtex_c diff --git a/materials/models/cubemaps/glossy_orange_cube_tga_77c22107.vtex_c b/game/materials/models/cubemaps/glossy_orange_cube_tga_77c22107.vtex_c similarity index 100% rename from materials/models/cubemaps/glossy_orange_cube_tga_77c22107.vtex_c rename to game/materials/models/cubemaps/glossy_orange_cube_tga_77c22107.vtex_c diff --git a/materials/models/drill_tga_56ca9ca9.vtex_c b/game/materials/models/drill_tga_56ca9ca9.vtex_c similarity index 100% rename from materials/models/drill_tga_56ca9ca9.vtex_c rename to game/materials/models/drill_tga_56ca9ca9.vtex_c diff --git a/materials/models/heroes/bane/body.vmat_c b/game/materials/models/heroes/bane/body.vmat_c similarity index 100% rename from materials/models/heroes/bane/body.vmat_c rename to game/materials/models/heroes/bane/body.vmat_c diff --git a/materials/models/heroes/bane/body_tga_24e274b4.vtex_c b/game/materials/models/heroes/bane/body_tga_24e274b4.vtex_c similarity index 100% rename from materials/models/heroes/bane/body_tga_24e274b4.vtex_c rename to game/materials/models/heroes/bane/body_tga_24e274b4.vtex_c diff --git a/materials/models/heroes/bane/body_tga_af8b0fa5.vtex_c b/game/materials/models/heroes/bane/body_tga_af8b0fa5.vtex_c similarity index 100% rename from materials/models/heroes/bane/body_tga_af8b0fa5.vtex_c rename to game/materials/models/heroes/bane/body_tga_af8b0fa5.vtex_c diff --git a/materials/models/heroes/bane/eye.vmat_c b/game/materials/models/heroes/bane/eye.vmat_c similarity index 100% rename from materials/models/heroes/bane/eye.vmat_c rename to game/materials/models/heroes/bane/eye.vmat_c diff --git a/materials/models/heroes/bane/eye_tga_3e583d56.vtex_c b/game/materials/models/heroes/bane/eye_tga_3e583d56.vtex_c similarity index 100% rename from materials/models/heroes/bane/eye_tga_3e583d56.vtex_c rename to game/materials/models/heroes/bane/eye_tga_3e583d56.vtex_c diff --git a/materials/models/heroes/bane/eye_tga_bf02ab48.vtex_c b/game/materials/models/heroes/bane/eye_tga_bf02ab48.vtex_c similarity index 100% rename from materials/models/heroes/bane/eye_tga_bf02ab48.vtex_c rename to game/materials/models/heroes/bane/eye_tga_bf02ab48.vtex_c diff --git a/materials/models/heroes/bane/face.vmat_c b/game/materials/models/heroes/bane/face.vmat_c similarity index 100% rename from materials/models/heroes/bane/face.vmat_c rename to game/materials/models/heroes/bane/face.vmat_c diff --git a/materials/models/heroes/bane/face_tga_a43bddd9.vtex_c b/game/materials/models/heroes/bane/face_tga_a43bddd9.vtex_c similarity index 100% rename from materials/models/heroes/bane/face_tga_a43bddd9.vtex_c rename to game/materials/models/heroes/bane/face_tga_a43bddd9.vtex_c diff --git a/materials/models/heroes/bane/face_tga_d3376eba.vtex_c b/game/materials/models/heroes/bane/face_tga_d3376eba.vtex_c similarity index 100% rename from materials/models/heroes/bane/face_tga_d3376eba.vtex_c rename to game/materials/models/heroes/bane/face_tga_d3376eba.vtex_c diff --git a/materials/models/heroes/bane/hair.vmat_c b/game/materials/models/heroes/bane/hair.vmat_c similarity index 100% rename from materials/models/heroes/bane/hair.vmat_c rename to game/materials/models/heroes/bane/hair.vmat_c diff --git a/materials/models/heroes/bane/hair_tga_d9f07610.vtex_c b/game/materials/models/heroes/bane/hair_tga_d9f07610.vtex_c similarity index 100% rename from materials/models/heroes/bane/hair_tga_d9f07610.vtex_c rename to game/materials/models/heroes/bane/hair_tga_d9f07610.vtex_c diff --git a/materials/models/heroes/bane/hair_tga_f54a1639.vtex_c b/game/materials/models/heroes/bane/hair_tga_f54a1639.vtex_c similarity index 100% rename from materials/models/heroes/bane/hair_tga_f54a1639.vtex_c rename to game/materials/models/heroes/bane/hair_tga_f54a1639.vtex_c diff --git a/materials/models/heroes/bane/mary.vmat_c b/game/materials/models/heroes/bane/mary.vmat_c similarity index 100% rename from materials/models/heroes/bane/mary.vmat_c rename to game/materials/models/heroes/bane/mary.vmat_c diff --git a/materials/models/heroes/bane/mary_tga_27f95543.vtex_c b/game/materials/models/heroes/bane/mary_tga_27f95543.vtex_c similarity index 100% rename from materials/models/heroes/bane/mary_tga_27f95543.vtex_c rename to game/materials/models/heroes/bane/mary_tga_27f95543.vtex_c diff --git a/materials/models/heroes/bane/mary_tga_6b349491.vtex_c b/game/materials/models/heroes/bane/mary_tga_6b349491.vtex_c similarity index 100% rename from materials/models/heroes/bane/mary_tga_6b349491.vtex_c rename to game/materials/models/heroes/bane/mary_tga_6b349491.vtex_c diff --git a/materials/models/heroes/bane/swim.vmat_c b/game/materials/models/heroes/bane/swim.vmat_c similarity index 100% rename from materials/models/heroes/bane/swim.vmat_c rename to game/materials/models/heroes/bane/swim.vmat_c diff --git a/materials/models/heroes/bane/swim_tga_146e2248.vtex_c b/game/materials/models/heroes/bane/swim_tga_146e2248.vtex_c similarity index 100% rename from materials/models/heroes/bane/swim_tga_146e2248.vtex_c rename to game/materials/models/heroes/bane/swim_tga_146e2248.vtex_c diff --git a/materials/models/heroes/bane/swim_tga_e60c2e17.vtex_c b/game/materials/models/heroes/bane/swim_tga_e60c2e17.vtex_c similarity index 100% rename from materials/models/heroes/bane/swim_tga_e60c2e17.vtex_c rename to game/materials/models/heroes/bane/swim_tga_e60c2e17.vtex_c diff --git a/materials/models/heroes/bane/wear.vmat_c b/game/materials/models/heroes/bane/wear.vmat_c similarity index 100% rename from materials/models/heroes/bane/wear.vmat_c rename to game/materials/models/heroes/bane/wear.vmat_c diff --git a/materials/models/heroes/bane/wear_tga_7358175e.vtex_c b/game/materials/models/heroes/bane/wear_tga_7358175e.vtex_c similarity index 100% rename from materials/models/heroes/bane/wear_tga_7358175e.vtex_c rename to game/materials/models/heroes/bane/wear_tga_7358175e.vtex_c diff --git a/materials/models/heroes/bane/wear_tga_eeac87a7.vtex_c b/game/materials/models/heroes/bane/wear_tga_eeac87a7.vtex_c similarity index 100% rename from materials/models/heroes/bane/wear_tga_eeac87a7.vtex_c rename to game/materials/models/heroes/bane/wear_tga_eeac87a7.vtex_c diff --git a/materials/models/heroes/slardar/slardar_fresnelwarprim_tga_b77d0609.vtex_c b/game/materials/models/heroes/slardar/slardar_fresnelwarprim_tga_b77d0609.vtex_c similarity index 100% rename from materials/models/heroes/slardar/slardar_fresnelwarprim_tga_b77d0609.vtex_c rename to game/materials/models/heroes/slardar/slardar_fresnelwarprim_tga_b77d0609.vtex_c diff --git a/materials/models/iku_lightning_drill_1.vmat_c b/game/materials/models/iku_lightning_drill_1.vmat_c similarity index 100% rename from materials/models/iku_lightning_drill_1.vmat_c rename to game/materials/models/iku_lightning_drill_1.vmat_c diff --git a/materials/models/iku_lightning_drill_1_tga_a1091f6.vtex_c b/game/materials/models/iku_lightning_drill_1_tga_a1091f6.vtex_c similarity index 100% rename from materials/models/iku_lightning_drill_1_tga_a1091f6.vtex_c rename to game/materials/models/iku_lightning_drill_1_tga_a1091f6.vtex_c diff --git a/materials/models/iku_lightning_drill_1_tga_ebec94e0.vtex_c b/game/materials/models/iku_lightning_drill_1_tga_ebec94e0.vtex_c similarity index 100% rename from materials/models/iku_lightning_drill_1_tga_ebec94e0.vtex_c rename to game/materials/models/iku_lightning_drill_1_tga_ebec94e0.vtex_c diff --git a/materials/models/iku_lightning_drill_2.vmat_c b/game/materials/models/iku_lightning_drill_2.vmat_c similarity index 100% rename from materials/models/iku_lightning_drill_2.vmat_c rename to game/materials/models/iku_lightning_drill_2.vmat_c diff --git a/materials/models/iku_lightning_drill_2_tga_d8e532f0.vtex_c b/game/materials/models/iku_lightning_drill_2_tga_d8e532f0.vtex_c similarity index 100% rename from materials/models/iku_lightning_drill_2_tga_d8e532f0.vtex_c rename to game/materials/models/iku_lightning_drill_2_tga_d8e532f0.vtex_c diff --git a/materials/models/iku_lightning_drill_3.vmat_c b/game/materials/models/iku_lightning_drill_3.vmat_c similarity index 100% rename from materials/models/iku_lightning_drill_3.vmat_c rename to game/materials/models/iku_lightning_drill_3.vmat_c diff --git a/materials/models/iku_lightning_drill_4.vmat_c b/game/materials/models/iku_lightning_drill_4.vmat_c similarity index 100% rename from materials/models/iku_lightning_drill_4.vmat_c rename to game/materials/models/iku_lightning_drill_4.vmat_c diff --git a/materials/models/komachi/body2ba_k.vmat_c b/game/materials/models/komachi/body2ba_k.vmat_c similarity index 100% rename from materials/models/komachi/body2ba_k.vmat_c rename to game/materials/models/komachi/body2ba_k.vmat_c diff --git a/materials/models/komachi/body2ba_k_normal_png_7915fc69.vtex_c b/game/materials/models/komachi/body2ba_k_normal_png_7915fc69.vtex_c similarity index 100% rename from materials/models/komachi/body2ba_k_normal_png_7915fc69.vtex_c rename to game/materials/models/komachi/body2ba_k_normal_png_7915fc69.vtex_c diff --git a/materials/models/komachi/body2ba_k_png_762b37c5.vtex_c b/game/materials/models/komachi/body2ba_k_png_762b37c5.vtex_c similarity index 100% rename from materials/models/komachi/body2ba_k_png_762b37c5.vtex_c rename to game/materials/models/komachi/body2ba_k_png_762b37c5.vtex_c diff --git a/materials/models/komachi/body2ba_k_vmat_g_tmasks1_7e19ce0.vtex_c b/game/materials/models/komachi/body2ba_k_vmat_g_tmasks1_7e19ce0.vtex_c similarity index 100% rename from materials/models/komachi/body2ba_k_vmat_g_tmasks1_7e19ce0.vtex_c rename to game/materials/models/komachi/body2ba_k_vmat_g_tmasks1_7e19ce0.vtex_c diff --git a/materials/models/komachi/eff.vmat_c b/game/materials/models/komachi/eff.vmat_c similarity index 100% rename from materials/models/komachi/eff.vmat_c rename to game/materials/models/komachi/eff.vmat_c diff --git a/materials/models/komachi/eff_png_d71be9c6.vtex_c b/game/materials/models/komachi/eff_png_d71be9c6.vtex_c similarity index 100% rename from materials/models/komachi/eff_png_d71be9c6.vtex_c rename to game/materials/models/komachi/eff_png_d71be9c6.vtex_c diff --git a/materials/models/komachi/eye_k.vmat_c b/game/materials/models/komachi/eye_k.vmat_c similarity index 100% rename from materials/models/komachi/eye_k.vmat_c rename to game/materials/models/komachi/eye_k.vmat_c diff --git a/materials/models/komachi/eye_k_png_b95b82eb.vtex_c b/game/materials/models/komachi/eye_k_png_b95b82eb.vtex_c similarity index 100% rename from materials/models/komachi/eye_k_png_b95b82eb.vtex_c rename to game/materials/models/komachi/eye_k_png_b95b82eb.vtex_c diff --git a/materials/models/komachi/face_k.vmat_c b/game/materials/models/komachi/face_k.vmat_c similarity index 100% rename from materials/models/komachi/face_k.vmat_c rename to game/materials/models/komachi/face_k.vmat_c diff --git a/materials/models/komachi/face_k_normal_png_b56752a8.vtex_c b/game/materials/models/komachi/face_k_normal_png_b56752a8.vtex_c similarity index 100% rename from materials/models/komachi/face_k_normal_png_b56752a8.vtex_c rename to game/materials/models/komachi/face_k_normal_png_b56752a8.vtex_c diff --git a/materials/models/komachi/face_k_png_4ddee4b8.vtex_c b/game/materials/models/komachi/face_k_png_4ddee4b8.vtex_c similarity index 100% rename from materials/models/komachi/face_k_png_4ddee4b8.vtex_c rename to game/materials/models/komachi/face_k_png_4ddee4b8.vtex_c diff --git a/materials/models/komachi/face_k_vmat_g_tmasks1_b254f9a.vtex_c b/game/materials/models/komachi/face_k_vmat_g_tmasks1_b254f9a.vtex_c similarity index 100% rename from materials/models/komachi/face_k_vmat_g_tmasks1_b254f9a.vtex_c rename to game/materials/models/komachi/face_k_vmat_g_tmasks1_b254f9a.vtex_c diff --git a/materials/models/komachi/hair.vmat_c b/game/materials/models/komachi/hair.vmat_c similarity index 100% rename from materials/models/komachi/hair.vmat_c rename to game/materials/models/komachi/hair.vmat_c diff --git a/materials/models/komachi/hair_normal_png_2182856a.vtex_c b/game/materials/models/komachi/hair_normal_png_2182856a.vtex_c similarity index 100% rename from materials/models/komachi/hair_normal_png_2182856a.vtex_c rename to game/materials/models/komachi/hair_normal_png_2182856a.vtex_c diff --git a/materials/models/komachi/hair_tga_60f9b31a.vtex_c b/game/materials/models/komachi/hair_tga_60f9b31a.vtex_c similarity index 100% rename from materials/models/komachi/hair_tga_60f9b31a.vtex_c rename to game/materials/models/komachi/hair_tga_60f9b31a.vtex_c diff --git a/materials/models/komachi/hair_vmat_g_tmasks1_b386dc9.vtex_c b/game/materials/models/komachi/hair_vmat_g_tmasks1_b386dc9.vtex_c similarity index 100% rename from materials/models/komachi/hair_vmat_g_tmasks1_b386dc9.vtex_c rename to game/materials/models/komachi/hair_vmat_g_tmasks1_b386dc9.vtex_c diff --git a/materials/models/komachi/kama.vmat_c b/game/materials/models/komachi/kama.vmat_c similarity index 100% rename from materials/models/komachi/kama.vmat_c rename to game/materials/models/komachi/kama.vmat_c diff --git a/materials/models/komachi/kama_png_e02c2e8e.vtex_c b/game/materials/models/komachi/kama_png_e02c2e8e.vtex_c similarity index 100% rename from materials/models/komachi/kama_png_e02c2e8e.vtex_c rename to game/materials/models/komachi/kama_png_e02c2e8e.vtex_c diff --git a/materials/models/komachi/kama_vmat_g_tmasks1_dffd5697.vtex_c b/game/materials/models/komachi/kama_vmat_g_tmasks1_dffd5697.vtex_c similarity index 100% rename from materials/models/komachi/kama_vmat_g_tmasks1_dffd5697.vtex_c rename to game/materials/models/komachi/kama_vmat_g_tmasks1_dffd5697.vtex_c diff --git a/materials/models/komachi/koha.vmat_c b/game/materials/models/komachi/koha.vmat_c similarity index 100% rename from materials/models/komachi/koha.vmat_c rename to game/materials/models/komachi/koha.vmat_c diff --git a/materials/models/komachi/koha_normal_png_76171701.vtex_c b/game/materials/models/komachi/koha_normal_png_76171701.vtex_c similarity index 100% rename from materials/models/komachi/koha_normal_png_76171701.vtex_c rename to game/materials/models/komachi/koha_normal_png_76171701.vtex_c diff --git a/materials/models/komachi/koha_png_c93b2c54.vtex_c b/game/materials/models/komachi/koha_png_c93b2c54.vtex_c similarity index 100% rename from materials/models/komachi/koha_png_c93b2c54.vtex_c rename to game/materials/models/komachi/koha_png_c93b2c54.vtex_c diff --git a/materials/models/komachi/koha_vmat_g_tmasks1_a33beb27.vtex_c b/game/materials/models/komachi/koha_vmat_g_tmasks1_a33beb27.vtex_c similarity index 100% rename from materials/models/komachi/koha_vmat_g_tmasks1_a33beb27.vtex_c rename to game/materials/models/komachi/koha_vmat_g_tmasks1_a33beb27.vtex_c diff --git a/materials/models/komachi/kohu.vmat_c b/game/materials/models/komachi/kohu.vmat_c similarity index 100% rename from materials/models/komachi/kohu.vmat_c rename to game/materials/models/komachi/kohu.vmat_c diff --git a/materials/models/komachi/kohu_normal_png_989c90b6.vtex_c b/game/materials/models/komachi/kohu_normal_png_989c90b6.vtex_c similarity index 100% rename from materials/models/komachi/kohu_normal_png_989c90b6.vtex_c rename to game/materials/models/komachi/kohu_normal_png_989c90b6.vtex_c diff --git a/materials/models/komachi/kohu_png_c112dc6c.vtex_c b/game/materials/models/komachi/kohu_png_c112dc6c.vtex_c similarity index 100% rename from materials/models/komachi/kohu_png_c112dc6c.vtex_c rename to game/materials/models/komachi/kohu_png_c112dc6c.vtex_c diff --git a/materials/models/komachi/kohu_vmat_g_tmasks1_cee6b86c.vtex_c b/game/materials/models/komachi/kohu_vmat_g_tmasks1_cee6b86c.vtex_c similarity index 100% rename from materials/models/komachi/kohu_vmat_g_tmasks1_cee6b86c.vtex_c rename to game/materials/models/komachi/kohu_vmat_g_tmasks1_cee6b86c.vtex_c diff --git a/materials/models/komachi/kohum.vmat_c b/game/materials/models/komachi/kohum.vmat_c similarity index 100% rename from materials/models/komachi/kohum.vmat_c rename to game/materials/models/komachi/kohum.vmat_c diff --git a/materials/models/komachi/kohum_normal_png_cc6beaec.vtex_c b/game/materials/models/komachi/kohum_normal_png_cc6beaec.vtex_c similarity index 100% rename from materials/models/komachi/kohum_normal_png_cc6beaec.vtex_c rename to game/materials/models/komachi/kohum_normal_png_cc6beaec.vtex_c diff --git a/materials/models/komachi/kohum_png_2f290297.vtex_c b/game/materials/models/komachi/kohum_png_2f290297.vtex_c similarity index 100% rename from materials/models/komachi/kohum_png_2f290297.vtex_c rename to game/materials/models/komachi/kohum_png_2f290297.vtex_c diff --git a/materials/models/komachi/kohum_vmat_g_tmasks1_f065b829.vtex_c b/game/materials/models/komachi/kohum_vmat_g_tmasks1_f065b829.vtex_c similarity index 100% rename from materials/models/komachi/kohum_vmat_g_tmasks1_f065b829.vtex_c rename to game/materials/models/komachi/kohum_vmat_g_tmasks1_f065b829.vtex_c diff --git a/materials/models/komachi/kosu.vmat_c b/game/materials/models/komachi/kosu.vmat_c similarity index 100% rename from materials/models/komachi/kosu.vmat_c rename to game/materials/models/komachi/kosu.vmat_c diff --git a/materials/models/komachi/kosu_normal_png_9f2aab5a.vtex_c b/game/materials/models/komachi/kosu_normal_png_9f2aab5a.vtex_c similarity index 100% rename from materials/models/komachi/kosu_normal_png_9f2aab5a.vtex_c rename to game/materials/models/komachi/kosu_normal_png_9f2aab5a.vtex_c diff --git a/materials/models/komachi/kosu_png_7cbea97c.vtex_c b/game/materials/models/komachi/kosu_png_7cbea97c.vtex_c similarity index 100% rename from materials/models/komachi/kosu_png_7cbea97c.vtex_c rename to game/materials/models/komachi/kosu_png_7cbea97c.vtex_c diff --git a/materials/models/komachi/kosu_vmat_g_tmasks1_dae1a518.vtex_c b/game/materials/models/komachi/kosu_vmat_g_tmasks1_dae1a518.vtex_c similarity index 100% rename from materials/models/komachi/kosu_vmat_g_tmasks1_dae1a518.vtex_c rename to game/materials/models/komachi/kosu_vmat_g_tmasks1_dae1a518.vtex_c diff --git a/materials/models/komachi/kosu_vmat_g_tmasks2_a76d9cb6.vtex_c b/game/materials/models/komachi/kosu_vmat_g_tmasks2_a76d9cb6.vtex_c similarity index 100% rename from materials/models/komachi/kosu_vmat_g_tmasks2_a76d9cb6.vtex_c rename to game/materials/models/komachi/kosu_vmat_g_tmasks2_a76d9cb6.vtex_c diff --git a/materials/models/komachi/shadow.vmat_c b/game/materials/models/komachi/shadow.vmat_c similarity index 100% rename from materials/models/komachi/shadow.vmat_c rename to game/materials/models/komachi/shadow.vmat_c diff --git a/materials/models/komachi/shadow_png_6de619af.vtex_c b/game/materials/models/komachi/shadow_png_6de619af.vtex_c similarity index 100% rename from materials/models/komachi/shadow_png_6de619af.vtex_c rename to game/materials/models/komachi/shadow_png_6de619af.vtex_c diff --git a/materials/models/thd2/2df_skill_09_5.vmat_c b/game/materials/models/thd2/2df_skill_09_5.vmat_c similarity index 100% rename from materials/models/thd2/2df_skill_09_5.vmat_c rename to game/materials/models/thd2/2df_skill_09_5.vmat_c diff --git a/materials/models/thd2/2df_skill_09_5_tga_cfcccd4f.vtex_c b/game/materials/models/thd2/2df_skill_09_5_tga_cfcccd4f.vtex_c similarity index 100% rename from materials/models/thd2/2df_skill_09_5_tga_cfcccd4f.vtex_c rename to game/materials/models/thd2/2df_skill_09_5_tga_cfcccd4f.vtex_c diff --git a/materials/models/thd2/alice/alice/accea1.vmat_c b/game/materials/models/thd2/alice/alice/accea1.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/accea1.vmat_c rename to game/materials/models/thd2/alice/alice/accea1.vmat_c diff --git a/materials/models/thd2/alice/alice/accea1_normal_png_60250a9f.vtex_c b/game/materials/models/thd2/alice/alice/accea1_normal_png_60250a9f.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/accea1_normal_png_60250a9f.vtex_c rename to game/materials/models/thd2/alice/alice/accea1_normal_png_60250a9f.vtex_c diff --git a/materials/models/thd2/alice/alice/accea1_png_10953575.vtex_c b/game/materials/models/thd2/alice/alice/accea1_png_10953575.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/accea1_png_10953575.vtex_c rename to game/materials/models/thd2/alice/alice/accea1_png_10953575.vtex_c diff --git a/materials/models/thd2/alice/alice/accea1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/accea1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/accea1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/accea1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/blousea1.vmat_c b/game/materials/models/thd2/alice/alice/blousea1.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/blousea1.vmat_c rename to game/materials/models/thd2/alice/alice/blousea1.vmat_c diff --git a/materials/models/thd2/alice/alice/blousea1_normal_png_b148e0da.vtex_c b/game/materials/models/thd2/alice/alice/blousea1_normal_png_b148e0da.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/blousea1_normal_png_b148e0da.vtex_c rename to game/materials/models/thd2/alice/alice/blousea1_normal_png_b148e0da.vtex_c diff --git a/materials/models/thd2/alice/alice/blousea1_png_94a4b57b.vtex_c b/game/materials/models/thd2/alice/alice/blousea1_png_94a4b57b.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/blousea1_png_94a4b57b.vtex_c rename to game/materials/models/thd2/alice/alice/blousea1_png_94a4b57b.vtex_c diff --git a/materials/models/thd2/alice/alice/blousea1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/blousea1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/blousea1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/blousea1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/body2b_m.vmat_c b/game/materials/models/thd2/alice/alice/body2b_m.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/body2b_m.vmat_c rename to game/materials/models/thd2/alice/alice/body2b_m.vmat_c diff --git a/materials/models/thd2/alice/alice/body2b_m_normal_png_733b90ef.vtex_c b/game/materials/models/thd2/alice/alice/body2b_m_normal_png_733b90ef.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/body2b_m_normal_png_733b90ef.vtex_c rename to game/materials/models/thd2/alice/alice/body2b_m_normal_png_733b90ef.vtex_c diff --git a/materials/models/thd2/alice/alice/body2b_m_png_10a749aa.vtex_c b/game/materials/models/thd2/alice/alice/body2b_m_png_10a749aa.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/body2b_m_png_10a749aa.vtex_c rename to game/materials/models/thd2/alice/alice/body2b_m_png_10a749aa.vtex_c diff --git a/materials/models/thd2/alice/alice/body2b_m_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/body2b_m_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/body2b_m_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/body2b_m_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/bootsd1.vmat_c b/game/materials/models/thd2/alice/alice/bootsd1.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/bootsd1.vmat_c rename to game/materials/models/thd2/alice/alice/bootsd1.vmat_c diff --git a/materials/models/thd2/alice/alice/bootsd1_normal_png_aa66563c.vtex_c b/game/materials/models/thd2/alice/alice/bootsd1_normal_png_aa66563c.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/bootsd1_normal_png_aa66563c.vtex_c rename to game/materials/models/thd2/alice/alice/bootsd1_normal_png_aa66563c.vtex_c diff --git a/materials/models/thd2/alice/alice/bootsd1_png_f12d59db.vtex_c b/game/materials/models/thd2/alice/alice/bootsd1_png_f12d59db.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/bootsd1_png_f12d59db.vtex_c rename to game/materials/models/thd2/alice/alice/bootsd1_png_f12d59db.vtex_c diff --git a/materials/models/thd2/alice/alice/bootsd1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/bootsd1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/bootsd1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/bootsd1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/eff.vmat_c b/game/materials/models/thd2/alice/alice/eff.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/eff.vmat_c rename to game/materials/models/thd2/alice/alice/eff.vmat_c diff --git a/materials/models/thd2/alice/alice/eff_png_55e7975c.vtex_c b/game/materials/models/thd2/alice/alice/eff_png_55e7975c.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/eff_png_55e7975c.vtex_c rename to game/materials/models/thd2/alice/alice/eff_png_55e7975c.vtex_c diff --git a/materials/models/thd2/alice/alice/eff_png_5de22e21.vtex_c b/game/materials/models/thd2/alice/alice/eff_png_5de22e21.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/eff_png_5de22e21.vtex_c rename to game/materials/models/thd2/alice/alice/eff_png_5de22e21.vtex_c diff --git a/materials/models/thd2/alice/alice/eff_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/eff_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/eff_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/eff_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/eye.vmat_c b/game/materials/models/thd2/alice/alice/eye.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/eye.vmat_c rename to game/materials/models/thd2/alice/alice/eye.vmat_c diff --git a/materials/models/thd2/alice/alice/eye_png_4a7be721.vtex_c b/game/materials/models/thd2/alice/alice/eye_png_4a7be721.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/eye_png_4a7be721.vtex_c rename to game/materials/models/thd2/alice/alice/eye_png_4a7be721.vtex_c diff --git a/materials/models/thd2/alice/alice/eye_png_ec4b6ab.vtex_c b/game/materials/models/thd2/alice/alice/eye_png_ec4b6ab.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/eye_png_ec4b6ab.vtex_c rename to game/materials/models/thd2/alice/alice/eye_png_ec4b6ab.vtex_c diff --git a/materials/models/thd2/alice/alice/eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/face.vmat_c b/game/materials/models/thd2/alice/alice/face.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/face.vmat_c rename to game/materials/models/thd2/alice/alice/face.vmat_c diff --git a/materials/models/thd2/alice/alice/face_normal_png_366d369e.vtex_c b/game/materials/models/thd2/alice/alice/face_normal_png_366d369e.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/face_normal_png_366d369e.vtex_c rename to game/materials/models/thd2/alice/alice/face_normal_png_366d369e.vtex_c diff --git a/materials/models/thd2/alice/alice/face_png_986b7f5d.vtex_c b/game/materials/models/thd2/alice/alice/face_png_986b7f5d.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/face_png_986b7f5d.vtex_c rename to game/materials/models/thd2/alice/alice/face_png_986b7f5d.vtex_c diff --git a/materials/models/thd2/alice/alice/face_png_fc52c9b1.vtex_c b/game/materials/models/thd2/alice/alice/face_png_fc52c9b1.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/face_png_fc52c9b1.vtex_c rename to game/materials/models/thd2/alice/alice/face_png_fc52c9b1.vtex_c diff --git a/materials/models/thd2/alice/alice/face_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/face_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/face_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/face_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/frill.vmat_c b/game/materials/models/thd2/alice/alice/frill.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/frill.vmat_c rename to game/materials/models/thd2/alice/alice/frill.vmat_c diff --git a/materials/models/thd2/alice/alice/frill_normal_png_3dafce19.vtex_c b/game/materials/models/thd2/alice/alice/frill_normal_png_3dafce19.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/frill_normal_png_3dafce19.vtex_c rename to game/materials/models/thd2/alice/alice/frill_normal_png_3dafce19.vtex_c diff --git a/materials/models/thd2/alice/alice/frill_png_587e4bb4.vtex_c b/game/materials/models/thd2/alice/alice/frill_png_587e4bb4.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/frill_png_587e4bb4.vtex_c rename to game/materials/models/thd2/alice/alice/frill_png_587e4bb4.vtex_c diff --git a/materials/models/thd2/alice/alice/frill_png_89b90578.vtex_c b/game/materials/models/thd2/alice/alice/frill_png_89b90578.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/frill_png_89b90578.vtex_c rename to game/materials/models/thd2/alice/alice/frill_png_89b90578.vtex_c diff --git a/materials/models/thd2/alice/alice/frill_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/frill_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/frill_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/frill_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/hair.vmat_c b/game/materials/models/thd2/alice/alice/hair.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/hair.vmat_c rename to game/materials/models/thd2/alice/alice/hair.vmat_c diff --git a/materials/models/thd2/alice/alice/hair_normal_png_6733150.vtex_c b/game/materials/models/thd2/alice/alice/hair_normal_png_6733150.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/hair_normal_png_6733150.vtex_c rename to game/materials/models/thd2/alice/alice/hair_normal_png_6733150.vtex_c diff --git a/materials/models/thd2/alice/alice/hair_png_76a1ae17.vtex_c b/game/materials/models/thd2/alice/alice/hair_png_76a1ae17.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/hair_png_76a1ae17.vtex_c rename to game/materials/models/thd2/alice/alice/hair_png_76a1ae17.vtex_c diff --git a/materials/models/thd2/alice/alice/hair_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/hair_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/hair_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/hair_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/headbanda1.vmat_c b/game/materials/models/thd2/alice/alice/headbanda1.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/headbanda1.vmat_c rename to game/materials/models/thd2/alice/alice/headbanda1.vmat_c diff --git a/materials/models/thd2/alice/alice/headbanda1_normal_png_a1e1b66d.vtex_c b/game/materials/models/thd2/alice/alice/headbanda1_normal_png_a1e1b66d.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/headbanda1_normal_png_a1e1b66d.vtex_c rename to game/materials/models/thd2/alice/alice/headbanda1_normal_png_a1e1b66d.vtex_c diff --git a/materials/models/thd2/alice/alice/headbanda1_png_b9332b4d.vtex_c b/game/materials/models/thd2/alice/alice/headbanda1_png_b9332b4d.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/headbanda1_png_b9332b4d.vtex_c rename to game/materials/models/thd2/alice/alice/headbanda1_png_b9332b4d.vtex_c diff --git a/materials/models/thd2/alice/alice/headbanda1_png_d287c96a.vtex_c b/game/materials/models/thd2/alice/alice/headbanda1_png_d287c96a.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/headbanda1_png_d287c96a.vtex_c rename to game/materials/models/thd2/alice/alice/headbanda1_png_d287c96a.vtex_c diff --git a/materials/models/thd2/alice/alice/headbanda1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/headbanda1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/headbanda1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/headbanda1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/pantsc4.vmat_c b/game/materials/models/thd2/alice/alice/pantsc4.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/pantsc4.vmat_c rename to game/materials/models/thd2/alice/alice/pantsc4.vmat_c diff --git a/materials/models/thd2/alice/alice/pantsc4_normal_png_15774803.vtex_c b/game/materials/models/thd2/alice/alice/pantsc4_normal_png_15774803.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/pantsc4_normal_png_15774803.vtex_c rename to game/materials/models/thd2/alice/alice/pantsc4_normal_png_15774803.vtex_c diff --git a/materials/models/thd2/alice/alice/pantsc4_png_2071fe0.vtex_c b/game/materials/models/thd2/alice/alice/pantsc4_png_2071fe0.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/pantsc4_png_2071fe0.vtex_c rename to game/materials/models/thd2/alice/alice/pantsc4_png_2071fe0.vtex_c diff --git a/materials/models/thd2/alice/alice/pantsc4_png_f450d891.vtex_c b/game/materials/models/thd2/alice/alice/pantsc4_png_f450d891.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/pantsc4_png_f450d891.vtex_c rename to game/materials/models/thd2/alice/alice/pantsc4_png_f450d891.vtex_c diff --git a/materials/models/thd2/alice/alice/pantsc4_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/pantsc4_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/pantsc4_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/pantsc4_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/shadow.vmat_c b/game/materials/models/thd2/alice/alice/shadow.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/shadow.vmat_c rename to game/materials/models/thd2/alice/alice/shadow.vmat_c diff --git a/materials/models/thd2/alice/alice/shadow_png_24f4dbab.vtex_c b/game/materials/models/thd2/alice/alice/shadow_png_24f4dbab.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/shadow_png_24f4dbab.vtex_c rename to game/materials/models/thd2/alice/alice/shadow_png_24f4dbab.vtex_c diff --git a/materials/models/thd2/alice/alice/shadow_png_277a5124.vtex_c b/game/materials/models/thd2/alice/alice/shadow_png_277a5124.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/shadow_png_277a5124.vtex_c rename to game/materials/models/thd2/alice/alice/shadow_png_277a5124.vtex_c diff --git a/materials/models/thd2/alice/alice/shadow_png_4177c597.vtex_c b/game/materials/models/thd2/alice/alice/shadow_png_4177c597.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/shadow_png_4177c597.vtex_c rename to game/materials/models/thd2/alice/alice/shadow_png_4177c597.vtex_c diff --git a/materials/models/thd2/alice/alice/shadow_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/shadow_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/shadow_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/shadow_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/skirta2.vmat_c b/game/materials/models/thd2/alice/alice/skirta2.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta2.vmat_c rename to game/materials/models/thd2/alice/alice/skirta2.vmat_c diff --git a/materials/models/thd2/alice/alice/skirta2_normal_png_dac5b9d6.vtex_c b/game/materials/models/thd2/alice/alice/skirta2_normal_png_dac5b9d6.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta2_normal_png_dac5b9d6.vtex_c rename to game/materials/models/thd2/alice/alice/skirta2_normal_png_dac5b9d6.vtex_c diff --git a/materials/models/thd2/alice/alice/skirta2_png_f4b5d905.vtex_c b/game/materials/models/thd2/alice/alice/skirta2_png_f4b5d905.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta2_png_f4b5d905.vtex_c rename to game/materials/models/thd2/alice/alice/skirta2_png_f4b5d905.vtex_c diff --git a/materials/models/thd2/alice/alice/skirta2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/skirta2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/skirta2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/alice/skirta3.vmat_c b/game/materials/models/thd2/alice/alice/skirta3.vmat_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta3.vmat_c rename to game/materials/models/thd2/alice/alice/skirta3.vmat_c diff --git a/materials/models/thd2/alice/alice/skirta3_normal_png_da60f1f6.vtex_c b/game/materials/models/thd2/alice/alice/skirta3_normal_png_da60f1f6.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta3_normal_png_da60f1f6.vtex_c rename to game/materials/models/thd2/alice/alice/skirta3_normal_png_da60f1f6.vtex_c diff --git a/materials/models/thd2/alice/alice/skirta3_png_3b106718.vtex_c b/game/materials/models/thd2/alice/alice/skirta3_png_3b106718.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta3_png_3b106718.vtex_c rename to game/materials/models/thd2/alice/alice/skirta3_png_3b106718.vtex_c diff --git a/materials/models/thd2/alice/alice/skirta3_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/alice/alice/skirta3_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/alice/alice/skirta3_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/alice/alice/skirta3_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/alice/falanxi/0.vmat_c b/game/materials/models/thd2/alice/falanxi/0.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/0.vmat_c rename to game/materials/models/thd2/alice/falanxi/0.vmat_c diff --git a/materials/models/thd2/alice/falanxi/0_tga_26f51b7f.vtex_c b/game/materials/models/thd2/alice/falanxi/0_tga_26f51b7f.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/0_tga_26f51b7f.vtex_c rename to game/materials/models/thd2/alice/falanxi/0_tga_26f51b7f.vtex_c diff --git a/materials/models/thd2/alice/falanxi/1.vmat_c b/game/materials/models/thd2/alice/falanxi/1.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/1.vmat_c rename to game/materials/models/thd2/alice/falanxi/1.vmat_c diff --git a/materials/models/thd2/alice/falanxi/10.vmat_c b/game/materials/models/thd2/alice/falanxi/10.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/10.vmat_c rename to game/materials/models/thd2/alice/falanxi/10.vmat_c diff --git a/materials/models/thd2/alice/falanxi/10_tga_1717050f.vtex_c b/game/materials/models/thd2/alice/falanxi/10_tga_1717050f.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/10_tga_1717050f.vtex_c rename to game/materials/models/thd2/alice/falanxi/10_tga_1717050f.vtex_c diff --git a/materials/models/thd2/alice/falanxi/11.vmat_c b/game/materials/models/thd2/alice/falanxi/11.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/11.vmat_c rename to game/materials/models/thd2/alice/falanxi/11.vmat_c diff --git a/materials/models/thd2/alice/falanxi/11_tga_42fe9e06.vtex_c b/game/materials/models/thd2/alice/falanxi/11_tga_42fe9e06.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/11_tga_42fe9e06.vtex_c rename to game/materials/models/thd2/alice/falanxi/11_tga_42fe9e06.vtex_c diff --git a/materials/models/thd2/alice/falanxi/12.vmat_c b/game/materials/models/thd2/alice/falanxi/12.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/12.vmat_c rename to game/materials/models/thd2/alice/falanxi/12.vmat_c diff --git a/materials/models/thd2/alice/falanxi/13.vmat_c b/game/materials/models/thd2/alice/falanxi/13.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/13.vmat_c rename to game/materials/models/thd2/alice/falanxi/13.vmat_c diff --git a/materials/models/thd2/alice/falanxi/13_tga_1731d44f.vtex_c b/game/materials/models/thd2/alice/falanxi/13_tga_1731d44f.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/13_tga_1731d44f.vtex_c rename to game/materials/models/thd2/alice/falanxi/13_tga_1731d44f.vtex_c diff --git a/materials/models/thd2/alice/falanxi/13_tga_bab8cb32.vtex_c b/game/materials/models/thd2/alice/falanxi/13_tga_bab8cb32.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/13_tga_bab8cb32.vtex_c rename to game/materials/models/thd2/alice/falanxi/13_tga_bab8cb32.vtex_c diff --git a/materials/models/thd2/alice/falanxi/14.vmat_c b/game/materials/models/thd2/alice/falanxi/14.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/14.vmat_c rename to game/materials/models/thd2/alice/falanxi/14.vmat_c diff --git a/materials/models/thd2/alice/falanxi/14_tga_b483ff2e.vtex_c b/game/materials/models/thd2/alice/falanxi/14_tga_b483ff2e.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/14_tga_b483ff2e.vtex_c rename to game/materials/models/thd2/alice/falanxi/14_tga_b483ff2e.vtex_c diff --git a/materials/models/thd2/alice/falanxi/15.vmat_c b/game/materials/models/thd2/alice/falanxi/15.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/15.vmat_c rename to game/materials/models/thd2/alice/falanxi/15.vmat_c diff --git a/materials/models/thd2/alice/falanxi/15_tga_781abcf0.vtex_c b/game/materials/models/thd2/alice/falanxi/15_tga_781abcf0.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/15_tga_781abcf0.vtex_c rename to game/materials/models/thd2/alice/falanxi/15_tga_781abcf0.vtex_c diff --git a/materials/models/thd2/alice/falanxi/16.vmat_c b/game/materials/models/thd2/alice/falanxi/16.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/16.vmat_c rename to game/materials/models/thd2/alice/falanxi/16.vmat_c diff --git a/materials/models/thd2/alice/falanxi/16_tga_d83d5793.vtex_c b/game/materials/models/thd2/alice/falanxi/16_tga_d83d5793.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/16_tga_d83d5793.vtex_c rename to game/materials/models/thd2/alice/falanxi/16_tga_d83d5793.vtex_c diff --git a/materials/models/thd2/alice/falanxi/17.vmat_c b/game/materials/models/thd2/alice/falanxi/17.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/17.vmat_c rename to game/materials/models/thd2/alice/falanxi/17.vmat_c diff --git a/materials/models/thd2/alice/falanxi/17_tga_6f0e807c.vtex_c b/game/materials/models/thd2/alice/falanxi/17_tga_6f0e807c.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/17_tga_6f0e807c.vtex_c rename to game/materials/models/thd2/alice/falanxi/17_tga_6f0e807c.vtex_c diff --git a/materials/models/thd2/alice/falanxi/18.vmat_c b/game/materials/models/thd2/alice/falanxi/18.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/18.vmat_c rename to game/materials/models/thd2/alice/falanxi/18.vmat_c diff --git a/materials/models/thd2/alice/falanxi/18_tga_bdf8d241.vtex_c b/game/materials/models/thd2/alice/falanxi/18_tga_bdf8d241.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/18_tga_bdf8d241.vtex_c rename to game/materials/models/thd2/alice/falanxi/18_tga_bdf8d241.vtex_c diff --git a/materials/models/thd2/alice/falanxi/19.vmat_c b/game/materials/models/thd2/alice/falanxi/19.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/19.vmat_c rename to game/materials/models/thd2/alice/falanxi/19.vmat_c diff --git a/materials/models/thd2/alice/falanxi/19_tga_cefc78f1.vtex_c b/game/materials/models/thd2/alice/falanxi/19_tga_cefc78f1.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/19_tga_cefc78f1.vtex_c rename to game/materials/models/thd2/alice/falanxi/19_tga_cefc78f1.vtex_c diff --git a/materials/models/thd2/alice/falanxi/1_tga_7e50f05d.vtex_c b/game/materials/models/thd2/alice/falanxi/1_tga_7e50f05d.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/1_tga_7e50f05d.vtex_c rename to game/materials/models/thd2/alice/falanxi/1_tga_7e50f05d.vtex_c diff --git a/materials/models/thd2/alice/falanxi/2.vmat_c b/game/materials/models/thd2/alice/falanxi/2.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/2.vmat_c rename to game/materials/models/thd2/alice/falanxi/2.vmat_c diff --git a/materials/models/thd2/alice/falanxi/20.vmat_c b/game/materials/models/thd2/alice/falanxi/20.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/20.vmat_c rename to game/materials/models/thd2/alice/falanxi/20.vmat_c diff --git a/materials/models/thd2/alice/falanxi/20_png_79f2b942.vtex_c b/game/materials/models/thd2/alice/falanxi/20_png_79f2b942.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/20_png_79f2b942.vtex_c rename to game/materials/models/thd2/alice/falanxi/20_png_79f2b942.vtex_c diff --git a/materials/models/thd2/alice/falanxi/21.vmat_c b/game/materials/models/thd2/alice/falanxi/21.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/21.vmat_c rename to game/materials/models/thd2/alice/falanxi/21.vmat_c diff --git a/materials/models/thd2/alice/falanxi/21_png_b466af37.vtex_c b/game/materials/models/thd2/alice/falanxi/21_png_b466af37.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/21_png_b466af37.vtex_c rename to game/materials/models/thd2/alice/falanxi/21_png_b466af37.vtex_c diff --git a/materials/models/thd2/alice/falanxi/22.vmat_c b/game/materials/models/thd2/alice/falanxi/22.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/22.vmat_c rename to game/materials/models/thd2/alice/falanxi/22.vmat_c diff --git a/materials/models/thd2/alice/falanxi/23.vmat_c b/game/materials/models/thd2/alice/falanxi/23.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/23.vmat_c rename to game/materials/models/thd2/alice/falanxi/23.vmat_c diff --git a/materials/models/thd2/alice/falanxi/23_tga_93bf2c7a.vtex_c b/game/materials/models/thd2/alice/falanxi/23_tga_93bf2c7a.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/23_tga_93bf2c7a.vtex_c rename to game/materials/models/thd2/alice/falanxi/23_tga_93bf2c7a.vtex_c diff --git a/materials/models/thd2/alice/falanxi/24.vmat_c b/game/materials/models/thd2/alice/falanxi/24.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/24.vmat_c rename to game/materials/models/thd2/alice/falanxi/24.vmat_c diff --git a/materials/models/thd2/alice/falanxi/24_tga_7e13b1a3.vtex_c b/game/materials/models/thd2/alice/falanxi/24_tga_7e13b1a3.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/24_tga_7e13b1a3.vtex_c rename to game/materials/models/thd2/alice/falanxi/24_tga_7e13b1a3.vtex_c diff --git a/materials/models/thd2/alice/falanxi/25.vmat_c b/game/materials/models/thd2/alice/falanxi/25.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/25.vmat_c rename to game/materials/models/thd2/alice/falanxi/25.vmat_c diff --git a/materials/models/thd2/alice/falanxi/25_tga_ceeb04e4.vtex_c b/game/materials/models/thd2/alice/falanxi/25_tga_ceeb04e4.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/25_tga_ceeb04e4.vtex_c rename to game/materials/models/thd2/alice/falanxi/25_tga_ceeb04e4.vtex_c diff --git a/materials/models/thd2/alice/falanxi/26.vmat_c b/game/materials/models/thd2/alice/falanxi/26.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/26.vmat_c rename to game/materials/models/thd2/alice/falanxi/26.vmat_c diff --git a/materials/models/thd2/alice/falanxi/27.vmat_c b/game/materials/models/thd2/alice/falanxi/27.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/27.vmat_c rename to game/materials/models/thd2/alice/falanxi/27.vmat_c diff --git a/materials/models/thd2/alice/falanxi/27_png_2a98a271.vtex_c b/game/materials/models/thd2/alice/falanxi/27_png_2a98a271.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/27_png_2a98a271.vtex_c rename to game/materials/models/thd2/alice/falanxi/27_png_2a98a271.vtex_c diff --git a/materials/models/thd2/alice/falanxi/28.vmat_c b/game/materials/models/thd2/alice/falanxi/28.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/28.vmat_c rename to game/materials/models/thd2/alice/falanxi/28.vmat_c diff --git a/materials/models/thd2/alice/falanxi/29.vmat_c b/game/materials/models/thd2/alice/falanxi/29.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/29.vmat_c rename to game/materials/models/thd2/alice/falanxi/29.vmat_c diff --git a/materials/models/thd2/alice/falanxi/29_tga_c597fd22.vtex_c b/game/materials/models/thd2/alice/falanxi/29_tga_c597fd22.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/29_tga_c597fd22.vtex_c rename to game/materials/models/thd2/alice/falanxi/29_tga_c597fd22.vtex_c diff --git a/materials/models/thd2/alice/falanxi/2_tga_468f64e0.vtex_c b/game/materials/models/thd2/alice/falanxi/2_tga_468f64e0.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/2_tga_468f64e0.vtex_c rename to game/materials/models/thd2/alice/falanxi/2_tga_468f64e0.vtex_c diff --git a/materials/models/thd2/alice/falanxi/3.vmat_c b/game/materials/models/thd2/alice/falanxi/3.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/3.vmat_c rename to game/materials/models/thd2/alice/falanxi/3.vmat_c diff --git a/materials/models/thd2/alice/falanxi/30.vmat_c b/game/materials/models/thd2/alice/falanxi/30.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/30.vmat_c rename to game/materials/models/thd2/alice/falanxi/30.vmat_c diff --git a/materials/models/thd2/alice/falanxi/30_png_7f4a9ba1.vtex_c b/game/materials/models/thd2/alice/falanxi/30_png_7f4a9ba1.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/30_png_7f4a9ba1.vtex_c rename to game/materials/models/thd2/alice/falanxi/30_png_7f4a9ba1.vtex_c diff --git a/materials/models/thd2/alice/falanxi/31.vmat_c b/game/materials/models/thd2/alice/falanxi/31.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/31.vmat_c rename to game/materials/models/thd2/alice/falanxi/31.vmat_c diff --git a/materials/models/thd2/alice/falanxi/32.vmat_c b/game/materials/models/thd2/alice/falanxi/32.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/32.vmat_c rename to game/materials/models/thd2/alice/falanxi/32.vmat_c diff --git a/materials/models/thd2/alice/falanxi/32_tga_8875fe8b.vtex_c b/game/materials/models/thd2/alice/falanxi/32_tga_8875fe8b.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/32_tga_8875fe8b.vtex_c rename to game/materials/models/thd2/alice/falanxi/32_tga_8875fe8b.vtex_c diff --git a/materials/models/thd2/alice/falanxi/33.vmat_c b/game/materials/models/thd2/alice/falanxi/33.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/33.vmat_c rename to game/materials/models/thd2/alice/falanxi/33.vmat_c diff --git a/materials/models/thd2/alice/falanxi/33_tga_137c132b.vtex_c b/game/materials/models/thd2/alice/falanxi/33_tga_137c132b.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/33_tga_137c132b.vtex_c rename to game/materials/models/thd2/alice/falanxi/33_tga_137c132b.vtex_c diff --git a/materials/models/thd2/alice/falanxi/34.vmat_c b/game/materials/models/thd2/alice/falanxi/34.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/34.vmat_c rename to game/materials/models/thd2/alice/falanxi/34.vmat_c diff --git a/materials/models/thd2/alice/falanxi/35.vmat_c b/game/materials/models/thd2/alice/falanxi/35.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/35.vmat_c rename to game/materials/models/thd2/alice/falanxi/35.vmat_c diff --git a/materials/models/thd2/alice/falanxi/36.vmat_c b/game/materials/models/thd2/alice/falanxi/36.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/36.vmat_c rename to game/materials/models/thd2/alice/falanxi/36.vmat_c diff --git a/materials/models/thd2/alice/falanxi/37.vmat_c b/game/materials/models/thd2/alice/falanxi/37.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/37.vmat_c rename to game/materials/models/thd2/alice/falanxi/37.vmat_c diff --git a/materials/models/thd2/alice/falanxi/38.vmat_c b/game/materials/models/thd2/alice/falanxi/38.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/38.vmat_c rename to game/materials/models/thd2/alice/falanxi/38.vmat_c diff --git a/materials/models/thd2/alice/falanxi/39.vmat_c b/game/materials/models/thd2/alice/falanxi/39.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/39.vmat_c rename to game/materials/models/thd2/alice/falanxi/39.vmat_c diff --git a/materials/models/thd2/alice/falanxi/3_png_9e7e2eff.vtex_c b/game/materials/models/thd2/alice/falanxi/3_png_9e7e2eff.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/3_png_9e7e2eff.vtex_c rename to game/materials/models/thd2/alice/falanxi/3_png_9e7e2eff.vtex_c diff --git a/materials/models/thd2/alice/falanxi/4.vmat_c b/game/materials/models/thd2/alice/falanxi/4.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/4.vmat_c rename to game/materials/models/thd2/alice/falanxi/4.vmat_c diff --git a/materials/models/thd2/alice/falanxi/40.vmat_c b/game/materials/models/thd2/alice/falanxi/40.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/40.vmat_c rename to game/materials/models/thd2/alice/falanxi/40.vmat_c diff --git a/materials/models/thd2/alice/falanxi/41.vmat_c b/game/materials/models/thd2/alice/falanxi/41.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/41.vmat_c rename to game/materials/models/thd2/alice/falanxi/41.vmat_c diff --git a/materials/models/thd2/alice/falanxi/42.vmat_c b/game/materials/models/thd2/alice/falanxi/42.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/42.vmat_c rename to game/materials/models/thd2/alice/falanxi/42.vmat_c diff --git a/materials/models/thd2/alice/falanxi/43.vmat_c b/game/materials/models/thd2/alice/falanxi/43.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/43.vmat_c rename to game/materials/models/thd2/alice/falanxi/43.vmat_c diff --git a/materials/models/thd2/alice/falanxi/44.vmat_c b/game/materials/models/thd2/alice/falanxi/44.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/44.vmat_c rename to game/materials/models/thd2/alice/falanxi/44.vmat_c diff --git a/materials/models/thd2/alice/falanxi/44_tga_44e6767d.vtex_c b/game/materials/models/thd2/alice/falanxi/44_tga_44e6767d.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/44_tga_44e6767d.vtex_c rename to game/materials/models/thd2/alice/falanxi/44_tga_44e6767d.vtex_c diff --git a/materials/models/thd2/alice/falanxi/45.vmat_c b/game/materials/models/thd2/alice/falanxi/45.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/45.vmat_c rename to game/materials/models/thd2/alice/falanxi/45.vmat_c diff --git a/materials/models/thd2/alice/falanxi/45_tga_71090e84.vtex_c b/game/materials/models/thd2/alice/falanxi/45_tga_71090e84.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/45_tga_71090e84.vtex_c rename to game/materials/models/thd2/alice/falanxi/45_tga_71090e84.vtex_c diff --git a/materials/models/thd2/alice/falanxi/46.vmat_c b/game/materials/models/thd2/alice/falanxi/46.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/46.vmat_c rename to game/materials/models/thd2/alice/falanxi/46.vmat_c diff --git a/materials/models/thd2/alice/falanxi/46_tga_86728fc4.vtex_c b/game/materials/models/thd2/alice/falanxi/46_tga_86728fc4.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/46_tga_86728fc4.vtex_c rename to game/materials/models/thd2/alice/falanxi/46_tga_86728fc4.vtex_c diff --git a/materials/models/thd2/alice/falanxi/47.vmat_c b/game/materials/models/thd2/alice/falanxi/47.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/47.vmat_c rename to game/materials/models/thd2/alice/falanxi/47.vmat_c diff --git a/materials/models/thd2/alice/falanxi/47_tga_28e81284.vtex_c b/game/materials/models/thd2/alice/falanxi/47_tga_28e81284.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/47_tga_28e81284.vtex_c rename to game/materials/models/thd2/alice/falanxi/47_tga_28e81284.vtex_c diff --git a/materials/models/thd2/alice/falanxi/48.vmat_c b/game/materials/models/thd2/alice/falanxi/48.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/48.vmat_c rename to game/materials/models/thd2/alice/falanxi/48.vmat_c diff --git a/materials/models/thd2/alice/falanxi/48_tga_bce58b87.vtex_c b/game/materials/models/thd2/alice/falanxi/48_tga_bce58b87.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/48_tga_bce58b87.vtex_c rename to game/materials/models/thd2/alice/falanxi/48_tga_bce58b87.vtex_c diff --git a/materials/models/thd2/alice/falanxi/49.vmat_c b/game/materials/models/thd2/alice/falanxi/49.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/49.vmat_c rename to game/materials/models/thd2/alice/falanxi/49.vmat_c diff --git a/materials/models/thd2/alice/falanxi/49_tga_99319dd4.vtex_c b/game/materials/models/thd2/alice/falanxi/49_tga_99319dd4.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/49_tga_99319dd4.vtex_c rename to game/materials/models/thd2/alice/falanxi/49_tga_99319dd4.vtex_c diff --git a/materials/models/thd2/alice/falanxi/4_tga_d0af0267.vtex_c b/game/materials/models/thd2/alice/falanxi/4_tga_d0af0267.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/4_tga_d0af0267.vtex_c rename to game/materials/models/thd2/alice/falanxi/4_tga_d0af0267.vtex_c diff --git a/materials/models/thd2/alice/falanxi/5.vmat_c b/game/materials/models/thd2/alice/falanxi/5.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/5.vmat_c rename to game/materials/models/thd2/alice/falanxi/5.vmat_c diff --git a/materials/models/thd2/alice/falanxi/50.vmat_c b/game/materials/models/thd2/alice/falanxi/50.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/50.vmat_c rename to game/materials/models/thd2/alice/falanxi/50.vmat_c diff --git a/materials/models/thd2/alice/falanxi/50_tga_93cc73f5.vtex_c b/game/materials/models/thd2/alice/falanxi/50_tga_93cc73f5.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/50_tga_93cc73f5.vtex_c rename to game/materials/models/thd2/alice/falanxi/50_tga_93cc73f5.vtex_c diff --git a/materials/models/thd2/alice/falanxi/51.vmat_c b/game/materials/models/thd2/alice/falanxi/51.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/51.vmat_c rename to game/materials/models/thd2/alice/falanxi/51.vmat_c diff --git a/materials/models/thd2/alice/falanxi/51_tga_a3d2305d.vtex_c b/game/materials/models/thd2/alice/falanxi/51_tga_a3d2305d.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/51_tga_a3d2305d.vtex_c rename to game/materials/models/thd2/alice/falanxi/51_tga_a3d2305d.vtex_c diff --git a/materials/models/thd2/alice/falanxi/52.vmat_c b/game/materials/models/thd2/alice/falanxi/52.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/52.vmat_c rename to game/materials/models/thd2/alice/falanxi/52.vmat_c diff --git a/materials/models/thd2/alice/falanxi/52_tga_e1162ff3.vtex_c b/game/materials/models/thd2/alice/falanxi/52_tga_e1162ff3.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/52_tga_e1162ff3.vtex_c rename to game/materials/models/thd2/alice/falanxi/52_tga_e1162ff3.vtex_c diff --git a/materials/models/thd2/alice/falanxi/53.vmat_c b/game/materials/models/thd2/alice/falanxi/53.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/53.vmat_c rename to game/materials/models/thd2/alice/falanxi/53.vmat_c diff --git a/materials/models/thd2/alice/falanxi/54.vmat_c b/game/materials/models/thd2/alice/falanxi/54.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/54.vmat_c rename to game/materials/models/thd2/alice/falanxi/54.vmat_c diff --git a/materials/models/thd2/alice/falanxi/54_tga_5c9bf740.vtex_c b/game/materials/models/thd2/alice/falanxi/54_tga_5c9bf740.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/54_tga_5c9bf740.vtex_c rename to game/materials/models/thd2/alice/falanxi/54_tga_5c9bf740.vtex_c diff --git a/materials/models/thd2/alice/falanxi/55.vmat_c b/game/materials/models/thd2/alice/falanxi/55.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/55.vmat_c rename to game/materials/models/thd2/alice/falanxi/55.vmat_c diff --git a/materials/models/thd2/alice/falanxi/56.vmat_c b/game/materials/models/thd2/alice/falanxi/56.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/56.vmat_c rename to game/materials/models/thd2/alice/falanxi/56.vmat_c diff --git a/materials/models/thd2/alice/falanxi/56_tga_d8ffd0af.vtex_c b/game/materials/models/thd2/alice/falanxi/56_tga_d8ffd0af.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/56_tga_d8ffd0af.vtex_c rename to game/materials/models/thd2/alice/falanxi/56_tga_d8ffd0af.vtex_c diff --git a/materials/models/thd2/alice/falanxi/57.vmat_c b/game/materials/models/thd2/alice/falanxi/57.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/57.vmat_c rename to game/materials/models/thd2/alice/falanxi/57.vmat_c diff --git a/materials/models/thd2/alice/falanxi/58.vmat_c b/game/materials/models/thd2/alice/falanxi/58.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/58.vmat_c rename to game/materials/models/thd2/alice/falanxi/58.vmat_c diff --git a/materials/models/thd2/alice/falanxi/58_tga_1bad8ab5.vtex_c b/game/materials/models/thd2/alice/falanxi/58_tga_1bad8ab5.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/58_tga_1bad8ab5.vtex_c rename to game/materials/models/thd2/alice/falanxi/58_tga_1bad8ab5.vtex_c diff --git a/materials/models/thd2/alice/falanxi/59.vmat_c b/game/materials/models/thd2/alice/falanxi/59.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/59.vmat_c rename to game/materials/models/thd2/alice/falanxi/59.vmat_c diff --git a/materials/models/thd2/alice/falanxi/59_tga_343a5390.vtex_c b/game/materials/models/thd2/alice/falanxi/59_tga_343a5390.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/59_tga_343a5390.vtex_c rename to game/materials/models/thd2/alice/falanxi/59_tga_343a5390.vtex_c diff --git a/materials/models/thd2/alice/falanxi/6.vmat_c b/game/materials/models/thd2/alice/falanxi/6.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/6.vmat_c rename to game/materials/models/thd2/alice/falanxi/6.vmat_c diff --git a/materials/models/thd2/alice/falanxi/60.vmat_c b/game/materials/models/thd2/alice/falanxi/60.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/60.vmat_c rename to game/materials/models/thd2/alice/falanxi/60.vmat_c diff --git a/materials/models/thd2/alice/falanxi/61.vmat_c b/game/materials/models/thd2/alice/falanxi/61.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/61.vmat_c rename to game/materials/models/thd2/alice/falanxi/61.vmat_c diff --git a/materials/models/thd2/alice/falanxi/62.vmat_c b/game/materials/models/thd2/alice/falanxi/62.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/62.vmat_c rename to game/materials/models/thd2/alice/falanxi/62.vmat_c diff --git a/materials/models/thd2/alice/falanxi/62_tga_b60383f5.vtex_c b/game/materials/models/thd2/alice/falanxi/62_tga_b60383f5.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/62_tga_b60383f5.vtex_c rename to game/materials/models/thd2/alice/falanxi/62_tga_b60383f5.vtex_c diff --git a/materials/models/thd2/alice/falanxi/63.vmat_c b/game/materials/models/thd2/alice/falanxi/63.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/63.vmat_c rename to game/materials/models/thd2/alice/falanxi/63.vmat_c diff --git a/materials/models/thd2/alice/falanxi/63_tga_ae79875.vtex_c b/game/materials/models/thd2/alice/falanxi/63_tga_ae79875.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/63_tga_ae79875.vtex_c rename to game/materials/models/thd2/alice/falanxi/63_tga_ae79875.vtex_c diff --git a/materials/models/thd2/alice/falanxi/64.vmat_c b/game/materials/models/thd2/alice/falanxi/64.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/64.vmat_c rename to game/materials/models/thd2/alice/falanxi/64.vmat_c diff --git a/materials/models/thd2/alice/falanxi/64_tga_9b70d095.vtex_c b/game/materials/models/thd2/alice/falanxi/64_tga_9b70d095.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/64_tga_9b70d095.vtex_c rename to game/materials/models/thd2/alice/falanxi/64_tga_9b70d095.vtex_c diff --git a/materials/models/thd2/alice/falanxi/65.vmat_c b/game/materials/models/thd2/alice/falanxi/65.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/65.vmat_c rename to game/materials/models/thd2/alice/falanxi/65.vmat_c diff --git a/materials/models/thd2/alice/falanxi/65_tga_5513e65b.vtex_c b/game/materials/models/thd2/alice/falanxi/65_tga_5513e65b.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/65_tga_5513e65b.vtex_c rename to game/materials/models/thd2/alice/falanxi/65_tga_5513e65b.vtex_c diff --git a/materials/models/thd2/alice/falanxi/66.vmat_c b/game/materials/models/thd2/alice/falanxi/66.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/66.vmat_c rename to game/materials/models/thd2/alice/falanxi/66.vmat_c diff --git a/materials/models/thd2/alice/falanxi/66_tga_8c3359d9.vtex_c b/game/materials/models/thd2/alice/falanxi/66_tga_8c3359d9.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/66_tga_8c3359d9.vtex_c rename to game/materials/models/thd2/alice/falanxi/66_tga_8c3359d9.vtex_c diff --git a/materials/models/thd2/alice/falanxi/67.vmat_c b/game/materials/models/thd2/alice/falanxi/67.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/67.vmat_c rename to game/materials/models/thd2/alice/falanxi/67.vmat_c diff --git a/materials/models/thd2/alice/falanxi/67_tga_e6e7921c.vtex_c b/game/materials/models/thd2/alice/falanxi/67_tga_e6e7921c.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/67_tga_e6e7921c.vtex_c rename to game/materials/models/thd2/alice/falanxi/67_tga_e6e7921c.vtex_c diff --git a/materials/models/thd2/alice/falanxi/68.vmat_c b/game/materials/models/thd2/alice/falanxi/68.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/68.vmat_c rename to game/materials/models/thd2/alice/falanxi/68.vmat_c diff --git a/materials/models/thd2/alice/falanxi/68_tga_86d31a08.vtex_c b/game/materials/models/thd2/alice/falanxi/68_tga_86d31a08.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/68_tga_86d31a08.vtex_c rename to game/materials/models/thd2/alice/falanxi/68_tga_86d31a08.vtex_c diff --git a/materials/models/thd2/alice/falanxi/69.vmat_c b/game/materials/models/thd2/alice/falanxi/69.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/69.vmat_c rename to game/materials/models/thd2/alice/falanxi/69.vmat_c diff --git a/materials/models/thd2/alice/falanxi/69_tga_40fe6347.vtex_c b/game/materials/models/thd2/alice/falanxi/69_tga_40fe6347.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/69_tga_40fe6347.vtex_c rename to game/materials/models/thd2/alice/falanxi/69_tga_40fe6347.vtex_c diff --git a/materials/models/thd2/alice/falanxi/6_tga_7d92bcce.vtex_c b/game/materials/models/thd2/alice/falanxi/6_tga_7d92bcce.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/6_tga_7d92bcce.vtex_c rename to game/materials/models/thd2/alice/falanxi/6_tga_7d92bcce.vtex_c diff --git a/materials/models/thd2/alice/falanxi/7.vmat_c b/game/materials/models/thd2/alice/falanxi/7.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/7.vmat_c rename to game/materials/models/thd2/alice/falanxi/7.vmat_c diff --git a/materials/models/thd2/alice/falanxi/70.vmat_c b/game/materials/models/thd2/alice/falanxi/70.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/70.vmat_c rename to game/materials/models/thd2/alice/falanxi/70.vmat_c diff --git a/materials/models/thd2/alice/falanxi/71.vmat_c b/game/materials/models/thd2/alice/falanxi/71.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/71.vmat_c rename to game/materials/models/thd2/alice/falanxi/71.vmat_c diff --git a/materials/models/thd2/alice/falanxi/71_tga_c8a1a265.vtex_c b/game/materials/models/thd2/alice/falanxi/71_tga_c8a1a265.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/71_tga_c8a1a265.vtex_c rename to game/materials/models/thd2/alice/falanxi/71_tga_c8a1a265.vtex_c diff --git a/materials/models/thd2/alice/falanxi/72.vmat_c b/game/materials/models/thd2/alice/falanxi/72.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/72.vmat_c rename to game/materials/models/thd2/alice/falanxi/72.vmat_c diff --git a/materials/models/thd2/alice/falanxi/72_tga_7e72ca2c.vtex_c b/game/materials/models/thd2/alice/falanxi/72_tga_7e72ca2c.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/72_tga_7e72ca2c.vtex_c rename to game/materials/models/thd2/alice/falanxi/72_tga_7e72ca2c.vtex_c diff --git a/materials/models/thd2/alice/falanxi/73.vmat_c b/game/materials/models/thd2/alice/falanxi/73.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/73.vmat_c rename to game/materials/models/thd2/alice/falanxi/73.vmat_c diff --git a/materials/models/thd2/alice/falanxi/74.vmat_c b/game/materials/models/thd2/alice/falanxi/74.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/74.vmat_c rename to game/materials/models/thd2/alice/falanxi/74.vmat_c diff --git a/materials/models/thd2/alice/falanxi/74_tga_f06dad1a.vtex_c b/game/materials/models/thd2/alice/falanxi/74_tga_f06dad1a.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/74_tga_f06dad1a.vtex_c rename to game/materials/models/thd2/alice/falanxi/74_tga_f06dad1a.vtex_c diff --git a/materials/models/thd2/alice/falanxi/75.vmat_c b/game/materials/models/thd2/alice/falanxi/75.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/75.vmat_c rename to game/materials/models/thd2/alice/falanxi/75.vmat_c diff --git a/materials/models/thd2/alice/falanxi/76.vmat_c b/game/materials/models/thd2/alice/falanxi/76.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/76.vmat_c rename to game/materials/models/thd2/alice/falanxi/76.vmat_c diff --git a/materials/models/thd2/alice/falanxi/76_tga_68f2f2e7.vtex_c b/game/materials/models/thd2/alice/falanxi/76_tga_68f2f2e7.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/76_tga_68f2f2e7.vtex_c rename to game/materials/models/thd2/alice/falanxi/76_tga_68f2f2e7.vtex_c diff --git a/materials/models/thd2/alice/falanxi/77.vmat_c b/game/materials/models/thd2/alice/falanxi/77.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/77.vmat_c rename to game/materials/models/thd2/alice/falanxi/77.vmat_c diff --git a/materials/models/thd2/alice/falanxi/78.vmat_c b/game/materials/models/thd2/alice/falanxi/78.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/78.vmat_c rename to game/materials/models/thd2/alice/falanxi/78.vmat_c diff --git a/materials/models/thd2/alice/falanxi/78_tga_cc245f80.vtex_c b/game/materials/models/thd2/alice/falanxi/78_tga_cc245f80.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/78_tga_cc245f80.vtex_c rename to game/materials/models/thd2/alice/falanxi/78_tga_cc245f80.vtex_c diff --git a/materials/models/thd2/alice/falanxi/79.vmat_c b/game/materials/models/thd2/alice/falanxi/79.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/79.vmat_c rename to game/materials/models/thd2/alice/falanxi/79.vmat_c diff --git a/materials/models/thd2/alice/falanxi/79_png_9afa52dc.vtex_c b/game/materials/models/thd2/alice/falanxi/79_png_9afa52dc.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/79_png_9afa52dc.vtex_c rename to game/materials/models/thd2/alice/falanxi/79_png_9afa52dc.vtex_c diff --git a/materials/models/thd2/alice/falanxi/7_tga_3d5f4721.vtex_c b/game/materials/models/thd2/alice/falanxi/7_tga_3d5f4721.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/7_tga_3d5f4721.vtex_c rename to game/materials/models/thd2/alice/falanxi/7_tga_3d5f4721.vtex_c diff --git a/materials/models/thd2/alice/falanxi/8.vmat_c b/game/materials/models/thd2/alice/falanxi/8.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/8.vmat_c rename to game/materials/models/thd2/alice/falanxi/8.vmat_c diff --git a/materials/models/thd2/alice/falanxi/80.vmat_c b/game/materials/models/thd2/alice/falanxi/80.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/80.vmat_c rename to game/materials/models/thd2/alice/falanxi/80.vmat_c diff --git a/materials/models/thd2/alice/falanxi/80_normal_tga_1afc17b7.vtex_c b/game/materials/models/thd2/alice/falanxi/80_normal_tga_1afc17b7.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/80_normal_tga_1afc17b7.vtex_c rename to game/materials/models/thd2/alice/falanxi/80_normal_tga_1afc17b7.vtex_c diff --git a/materials/models/thd2/alice/falanxi/80_normal_tga_9b1ab7af.vtex_c b/game/materials/models/thd2/alice/falanxi/80_normal_tga_9b1ab7af.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/80_normal_tga_9b1ab7af.vtex_c rename to game/materials/models/thd2/alice/falanxi/80_normal_tga_9b1ab7af.vtex_c diff --git a/materials/models/thd2/alice/falanxi/80_png_5a80bda0.vtex_c b/game/materials/models/thd2/alice/falanxi/80_png_5a80bda0.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/80_png_5a80bda0.vtex_c rename to game/materials/models/thd2/alice/falanxi/80_png_5a80bda0.vtex_c diff --git a/materials/models/thd2/alice/falanxi/81.vmat_c b/game/materials/models/thd2/alice/falanxi/81.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/81.vmat_c rename to game/materials/models/thd2/alice/falanxi/81.vmat_c diff --git a/materials/models/thd2/alice/falanxi/81_png_4e2c184f.vtex_c b/game/materials/models/thd2/alice/falanxi/81_png_4e2c184f.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/81_png_4e2c184f.vtex_c rename to game/materials/models/thd2/alice/falanxi/81_png_4e2c184f.vtex_c diff --git a/materials/models/thd2/alice/falanxi/82.vmat_c b/game/materials/models/thd2/alice/falanxi/82.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/82.vmat_c rename to game/materials/models/thd2/alice/falanxi/82.vmat_c diff --git a/materials/models/thd2/alice/falanxi/82_png_20f0ba17.vtex_c b/game/materials/models/thd2/alice/falanxi/82_png_20f0ba17.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/82_png_20f0ba17.vtex_c rename to game/materials/models/thd2/alice/falanxi/82_png_20f0ba17.vtex_c diff --git a/materials/models/thd2/alice/falanxi/83.vmat_c b/game/materials/models/thd2/alice/falanxi/83.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/83.vmat_c rename to game/materials/models/thd2/alice/falanxi/83.vmat_c diff --git a/materials/models/thd2/alice/falanxi/83_png_c8ea82c9.vtex_c b/game/materials/models/thd2/alice/falanxi/83_png_c8ea82c9.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/83_png_c8ea82c9.vtex_c rename to game/materials/models/thd2/alice/falanxi/83_png_c8ea82c9.vtex_c diff --git a/materials/models/thd2/alice/falanxi/84.vmat_c b/game/materials/models/thd2/alice/falanxi/84.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/84.vmat_c rename to game/materials/models/thd2/alice/falanxi/84.vmat_c diff --git a/materials/models/thd2/alice/falanxi/84_alpha.vmat_c b/game/materials/models/thd2/alice/falanxi/84_alpha.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/84_alpha.vmat_c rename to game/materials/models/thd2/alice/falanxi/84_alpha.vmat_c diff --git a/materials/models/thd2/alice/falanxi/84_alpha_tga_91386a5b.vtex_c b/game/materials/models/thd2/alice/falanxi/84_alpha_tga_91386a5b.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/84_alpha_tga_91386a5b.vtex_c rename to game/materials/models/thd2/alice/falanxi/84_alpha_tga_91386a5b.vtex_c diff --git a/materials/models/thd2/alice/falanxi/84_png_a36169b7.vtex_c b/game/materials/models/thd2/alice/falanxi/84_png_a36169b7.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/84_png_a36169b7.vtex_c rename to game/materials/models/thd2/alice/falanxi/84_png_a36169b7.vtex_c diff --git a/materials/models/thd2/alice/falanxi/85.vmat_c b/game/materials/models/thd2/alice/falanxi/85.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/85.vmat_c rename to game/materials/models/thd2/alice/falanxi/85.vmat_c diff --git a/materials/models/thd2/alice/falanxi/85_alpha.vmat_c b/game/materials/models/thd2/alice/falanxi/85_alpha.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/85_alpha.vmat_c rename to game/materials/models/thd2/alice/falanxi/85_alpha.vmat_c diff --git a/materials/models/thd2/alice/falanxi/85_alpha_tga_eae88f3.vtex_c b/game/materials/models/thd2/alice/falanxi/85_alpha_tga_eae88f3.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/85_alpha_tga_eae88f3.vtex_c rename to game/materials/models/thd2/alice/falanxi/85_alpha_tga_eae88f3.vtex_c diff --git a/materials/models/thd2/alice/falanxi/85_png_ba1d6d2f.vtex_c b/game/materials/models/thd2/alice/falanxi/85_png_ba1d6d2f.vtex_c similarity index 100% rename from materials/models/thd2/alice/falanxi/85_png_ba1d6d2f.vtex_c rename to game/materials/models/thd2/alice/falanxi/85_png_ba1d6d2f.vtex_c diff --git a/materials/models/thd2/alice/falanxi/9.vmat_c b/game/materials/models/thd2/alice/falanxi/9.vmat_c similarity index 100% rename from materials/models/thd2/alice/falanxi/9.vmat_c rename to game/materials/models/thd2/alice/falanxi/9.vmat_c diff --git a/materials/models/thd2/alice/shanghai/10_png_274d65d9.vtex_c b/game/materials/models/thd2/alice/shanghai/10_png_274d65d9.vtex_c similarity index 100% rename from materials/models/thd2/alice/shanghai/10_png_274d65d9.vtex_c rename to game/materials/models/thd2/alice/shanghai/10_png_274d65d9.vtex_c diff --git a/materials/models/thd2/alpha/2df_skill_09_5_alpha_tga_f3713299.vtex_c b/game/materials/models/thd2/alpha/2df_skill_09_5_alpha_tga_f3713299.vtex_c similarity index 100% rename from materials/models/thd2/alpha/2df_skill_09_5_alpha_tga_f3713299.vtex_c rename to game/materials/models/thd2/alpha/2df_skill_09_5_alpha_tga_f3713299.vtex_c diff --git a/materials/models/thd2/citystructures_tga_3c1f28f1.vtex_c b/game/materials/models/thd2/citystructures_tga_3c1f28f1.vtex_c similarity index 100% rename from materials/models/thd2/citystructures_tga_3c1f28f1.vtex_c rename to game/materials/models/thd2/citystructures_tga_3c1f28f1.vtex_c diff --git a/materials/models/thd2/citystructures_tga_5fa2f88c.vtex_c b/game/materials/models/thd2/citystructures_tga_5fa2f88c.vtex_c similarity index 100% rename from materials/models/thd2/citystructures_tga_5fa2f88c.vtex_c rename to game/materials/models/thd2/citystructures_tga_5fa2f88c.vtex_c diff --git a/materials/models/thd2/doodads0_tga_fd5b8edf.vtex_c b/game/materials/models/thd2/doodads0_tga_fd5b8edf.vtex_c similarity index 100% rename from materials/models/thd2/doodads0_tga_fd5b8edf.vtex_c rename to game/materials/models/thd2/doodads0_tga_fd5b8edf.vtex_c diff --git a/materials/models/thd2/firewing.vmat_c b/game/materials/models/thd2/firewing.vmat_c similarity index 100% rename from materials/models/thd2/firewing.vmat_c rename to game/materials/models/thd2/firewing.vmat_c diff --git a/materials/models/thd2/gate.vmat_c b/game/materials/models/thd2/gate.vmat_c similarity index 100% rename from materials/models/thd2/gate.vmat_c rename to game/materials/models/thd2/gate.vmat_c diff --git a/materials/models/thd2/gate_tga_684e0455.vtex_c b/game/materials/models/thd2/gate_tga_684e0455.vtex_c similarity index 100% rename from materials/models/thd2/gate_tga_684e0455.vtex_c rename to game/materials/models/thd2/gate_tga_684e0455.vtex_c diff --git a/materials/models/thd2/kaguya/kaguya.vmat_c b/game/materials/models/thd2/kaguya/kaguya.vmat_c similarity index 100% rename from materials/models/thd2/kaguya/kaguya.vmat_c rename to game/materials/models/thd2/kaguya/kaguya.vmat_c diff --git a/materials/models/thd2/kaguya/kaguya2.vmat_c b/game/materials/models/thd2/kaguya/kaguya2.vmat_c similarity index 100% rename from materials/models/thd2/kaguya/kaguya2.vmat_c rename to game/materials/models/thd2/kaguya/kaguya2.vmat_c diff --git a/materials/models/thd2/kaguya/kaguya_mmd_tga_2db73dfe.vtex_c b/game/materials/models/thd2/kaguya/kaguya_mmd_tga_2db73dfe.vtex_c similarity index 100% rename from materials/models/thd2/kaguya/kaguya_mmd_tga_2db73dfe.vtex_c rename to game/materials/models/thd2/kaguya/kaguya_mmd_tga_2db73dfe.vtex_c diff --git a/materials/models/thd2/kaguya/kaguya_mmd_tga_6954e03d.vtex_c b/game/materials/models/thd2/kaguya/kaguya_mmd_tga_6954e03d.vtex_c similarity index 100% rename from materials/models/thd2/kaguya/kaguya_mmd_tga_6954e03d.vtex_c rename to game/materials/models/thd2/kaguya/kaguya_mmd_tga_6954e03d.vtex_c diff --git a/materials/models/thd2/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/kanako/kanako_mmd.vmat_c b/game/materials/models/thd2/kanako/kanako_mmd.vmat_c similarity index 100% rename from materials/models/thd2/kanako/kanako_mmd.vmat_c rename to game/materials/models/thd2/kanako/kanako_mmd.vmat_c diff --git a/materials/models/thd2/kanako/kanako_mmd_tga_499b0043.vtex_c b/game/materials/models/thd2/kanako/kanako_mmd_tga_499b0043.vtex_c similarity index 100% rename from materials/models/thd2/kanako/kanako_mmd_tga_499b0043.vtex_c rename to game/materials/models/thd2/kanako/kanako_mmd_tga_499b0043.vtex_c diff --git a/materials/models/thd2/kanako/kanako_mmd_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/kanako/kanako_mmd_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/kanako/kanako_mmd_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/kanako/kanako_mmd_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/masterspark.vmat_c b/game/materials/models/thd2/masterspark.vmat_c similarity index 100% rename from materials/models/thd2/masterspark.vmat_c rename to game/materials/models/thd2/masterspark.vmat_c diff --git a/materials/models/thd2/medicine/a1.vmat_c b/game/materials/models/thd2/medicine/a1.vmat_c similarity index 100% rename from materials/models/thd2/medicine/a1.vmat_c rename to game/materials/models/thd2/medicine/a1.vmat_c diff --git a/materials/models/thd2/medicine/a1_normal_png_e3674d4e.vtex_c b/game/materials/models/thd2/medicine/a1_normal_png_e3674d4e.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a1_normal_png_e3674d4e.vtex_c rename to game/materials/models/thd2/medicine/a1_normal_png_e3674d4e.vtex_c diff --git a/materials/models/thd2/medicine/a1_png_ff700117.vtex_c b/game/materials/models/thd2/medicine/a1_png_ff700117.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a1_png_ff700117.vtex_c rename to game/materials/models/thd2/medicine/a1_png_ff700117.vtex_c diff --git a/materials/models/thd2/medicine/a1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/a1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/a1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/a2.vmat_c b/game/materials/models/thd2/medicine/a2.vmat_c similarity index 100% rename from materials/models/thd2/medicine/a2.vmat_c rename to game/materials/models/thd2/medicine/a2.vmat_c diff --git a/materials/models/thd2/medicine/a2_normal_png_d7c93554.vtex_c b/game/materials/models/thd2/medicine/a2_normal_png_d7c93554.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a2_normal_png_d7c93554.vtex_c rename to game/materials/models/thd2/medicine/a2_normal_png_d7c93554.vtex_c diff --git a/materials/models/thd2/medicine/a2_png_52bec9e3.vtex_c b/game/materials/models/thd2/medicine/a2_png_52bec9e3.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a2_png_52bec9e3.vtex_c rename to game/materials/models/thd2/medicine/a2_png_52bec9e3.vtex_c diff --git a/materials/models/thd2/medicine/a2_png_8ee75f6.vtex_c b/game/materials/models/thd2/medicine/a2_png_8ee75f6.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a2_png_8ee75f6.vtex_c rename to game/materials/models/thd2/medicine/a2_png_8ee75f6.vtex_c diff --git a/materials/models/thd2/medicine/a2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/a2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/a2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/a3.vmat_c b/game/materials/models/thd2/medicine/a3.vmat_c similarity index 100% rename from materials/models/thd2/medicine/a3.vmat_c rename to game/materials/models/thd2/medicine/a3.vmat_c diff --git a/materials/models/thd2/medicine/a3_normal_png_8cc10c36.vtex_c b/game/materials/models/thd2/medicine/a3_normal_png_8cc10c36.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a3_normal_png_8cc10c36.vtex_c rename to game/materials/models/thd2/medicine/a3_normal_png_8cc10c36.vtex_c diff --git a/materials/models/thd2/medicine/a3_png_b6210c66.vtex_c b/game/materials/models/thd2/medicine/a3_png_b6210c66.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a3_png_b6210c66.vtex_c rename to game/materials/models/thd2/medicine/a3_png_b6210c66.vtex_c diff --git a/materials/models/thd2/medicine/a3_png_f41c873f.vtex_c b/game/materials/models/thd2/medicine/a3_png_f41c873f.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a3_png_f41c873f.vtex_c rename to game/materials/models/thd2/medicine/a3_png_f41c873f.vtex_c diff --git a/materials/models/thd2/medicine/a3_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/a3_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/a3_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/a3_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/fa.vmat_c b/game/materials/models/thd2/medicine/fa.vmat_c similarity index 100% rename from materials/models/thd2/medicine/fa.vmat_c rename to game/materials/models/thd2/medicine/fa.vmat_c diff --git a/materials/models/thd2/medicine/fa_normal_png_b76ae0cc.vtex_c b/game/materials/models/thd2/medicine/fa_normal_png_b76ae0cc.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fa_normal_png_b76ae0cc.vtex_c rename to game/materials/models/thd2/medicine/fa_normal_png_b76ae0cc.vtex_c diff --git a/materials/models/thd2/medicine/fa_png_170a849f.vtex_c b/game/materials/models/thd2/medicine/fa_png_170a849f.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fa_png_170a849f.vtex_c rename to game/materials/models/thd2/medicine/fa_png_170a849f.vtex_c diff --git a/materials/models/thd2/medicine/fa_png_b54a489e.vtex_c b/game/materials/models/thd2/medicine/fa_png_b54a489e.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fa_png_b54a489e.vtex_c rename to game/materials/models/thd2/medicine/fa_png_b54a489e.vtex_c diff --git a/materials/models/thd2/medicine/fa_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/fa_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fa_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/fa_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/fu.vmat_c b/game/materials/models/thd2/medicine/fu.vmat_c similarity index 100% rename from materials/models/thd2/medicine/fu.vmat_c rename to game/materials/models/thd2/medicine/fu.vmat_c diff --git a/materials/models/thd2/medicine/fu_normal_png_a8fd4bbb.vtex_c b/game/materials/models/thd2/medicine/fu_normal_png_a8fd4bbb.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fu_normal_png_a8fd4bbb.vtex_c rename to game/materials/models/thd2/medicine/fu_normal_png_a8fd4bbb.vtex_c diff --git a/materials/models/thd2/medicine/fu_png_cf73838.vtex_c b/game/materials/models/thd2/medicine/fu_png_cf73838.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fu_png_cf73838.vtex_c rename to game/materials/models/thd2/medicine/fu_png_cf73838.vtex_c diff --git a/materials/models/thd2/medicine/fu_png_d3f073aa.vtex_c b/game/materials/models/thd2/medicine/fu_png_d3f073aa.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fu_png_d3f073aa.vtex_c rename to game/materials/models/thd2/medicine/fu_png_d3f073aa.vtex_c diff --git a/materials/models/thd2/medicine/fu_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/fu_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/fu_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/fu_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/ji.vmat_c b/game/materials/models/thd2/medicine/ji.vmat_c similarity index 100% rename from materials/models/thd2/medicine/ji.vmat_c rename to game/materials/models/thd2/medicine/ji.vmat_c diff --git a/materials/models/thd2/medicine/ji_normal_png_316e7ac9.vtex_c b/game/materials/models/thd2/medicine/ji_normal_png_316e7ac9.vtex_c similarity index 100% rename from materials/models/thd2/medicine/ji_normal_png_316e7ac9.vtex_c rename to game/materials/models/thd2/medicine/ji_normal_png_316e7ac9.vtex_c diff --git a/materials/models/thd2/medicine/ji_png_a43c75bb.vtex_c b/game/materials/models/thd2/medicine/ji_png_a43c75bb.vtex_c similarity index 100% rename from materials/models/thd2/medicine/ji_png_a43c75bb.vtex_c rename to game/materials/models/thd2/medicine/ji_png_a43c75bb.vtex_c diff --git a/materials/models/thd2/medicine/ji_png_b871fdd.vtex_c b/game/materials/models/thd2/medicine/ji_png_b871fdd.vtex_c similarity index 100% rename from materials/models/thd2/medicine/ji_png_b871fdd.vtex_c rename to game/materials/models/thd2/medicine/ji_png_b871fdd.vtex_c diff --git a/materials/models/thd2/medicine/ji_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/ji_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/ji_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/ji_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/31.vmat_c b/game/materials/models/thd2/medicine/linglanrenou/31.vmat_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/31.vmat_c rename to game/materials/models/thd2/medicine/linglanrenou/31.vmat_c diff --git a/materials/models/thd2/medicine/linglanrenou/31_vmat_g_tcolor_ca81bb54.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/31_vmat_g_tcolor_ca81bb54.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/31_vmat_g_tcolor_ca81bb54.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/31_vmat_g_tcolor_ca81bb54.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/31_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/31_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/31_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/31_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b2.vmat_c b/game/materials/models/thd2/medicine/linglanrenou/b2.vmat_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b2.vmat_c rename to game/materials/models/thd2/medicine/linglanrenou/b2.vmat_c diff --git a/materials/models/thd2/medicine/linglanrenou/b2_normal_png_f6f42ab0.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b2_normal_png_f6f42ab0.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b2_normal_png_f6f42ab0.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b2_normal_png_f6f42ab0.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b2_png_54416b7c.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b2_png_54416b7c.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b2_png_54416b7c.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b2_png_54416b7c.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b2_png_c72b61ec.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b2_png_c72b61ec.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b2_png_c72b61ec.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b2_png_c72b61ec.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b3.vmat_c b/game/materials/models/thd2/medicine/linglanrenou/b3.vmat_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b3.vmat_c rename to game/materials/models/thd2/medicine/linglanrenou/b3.vmat_c diff --git a/materials/models/thd2/medicine/linglanrenou/b3_normal_png_5d928bb4.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b3_normal_png_5d928bb4.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b3_normal_png_5d928bb4.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b3_normal_png_5d928bb4.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b3_png_17ebf3df.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b3_png_17ebf3df.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b3_png_17ebf3df.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b3_png_17ebf3df.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b3_png_47d48abc.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b3_png_47d48abc.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b3_png_47d48abc.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b3_png_47d48abc.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b3_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b3_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b3_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b3_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b4.vmat_c b/game/materials/models/thd2/medicine/linglanrenou/b4.vmat_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b4.vmat_c rename to game/materials/models/thd2/medicine/linglanrenou/b4.vmat_c diff --git a/materials/models/thd2/medicine/linglanrenou/b4_normal_png_69a0b31f.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b4_normal_png_69a0b31f.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b4_normal_png_69a0b31f.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b4_normal_png_69a0b31f.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b4_png_8c815054.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b4_png_8c815054.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b4_png_8c815054.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b4_png_8c815054.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b4_png_c0f631a3.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b4_png_c0f631a3.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b4_png_c0f631a3.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b4_png_c0f631a3.vtex_c diff --git a/materials/models/thd2/medicine/linglanrenou/b4_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/linglanrenou/b4_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/linglanrenou/b4_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/linglanrenou/b4_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/mu.vmat_c b/game/materials/models/thd2/medicine/mu.vmat_c similarity index 100% rename from materials/models/thd2/medicine/mu.vmat_c rename to game/materials/models/thd2/medicine/mu.vmat_c diff --git a/materials/models/thd2/medicine/mu_png_59d21f6a.vtex_c b/game/materials/models/thd2/medicine/mu_png_59d21f6a.vtex_c similarity index 100% rename from materials/models/thd2/medicine/mu_png_59d21f6a.vtex_c rename to game/materials/models/thd2/medicine/mu_png_59d21f6a.vtex_c diff --git a/materials/models/thd2/medicine/mu_png_d1505766.vtex_c b/game/materials/models/thd2/medicine/mu_png_d1505766.vtex_c similarity index 100% rename from materials/models/thd2/medicine/mu_png_d1505766.vtex_c rename to game/materials/models/thd2/medicine/mu_png_d1505766.vtex_c diff --git a/materials/models/thd2/medicine/mu_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/mu_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/mu_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/mu_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/medicine/xiazhe.vmat_c b/game/materials/models/thd2/medicine/xiazhe.vmat_c similarity index 100% rename from materials/models/thd2/medicine/xiazhe.vmat_c rename to game/materials/models/thd2/medicine/xiazhe.vmat_c diff --git a/materials/models/thd2/medicine/xiazhe_png_6b4c2663.vtex_c b/game/materials/models/thd2/medicine/xiazhe_png_6b4c2663.vtex_c similarity index 100% rename from materials/models/thd2/medicine/xiazhe_png_6b4c2663.vtex_c rename to game/materials/models/thd2/medicine/xiazhe_png_6b4c2663.vtex_c diff --git a/materials/models/thd2/medicine/xiazhe_png_89bdad7.vtex_c b/game/materials/models/thd2/medicine/xiazhe_png_89bdad7.vtex_c similarity index 100% rename from materials/models/thd2/medicine/xiazhe_png_89bdad7.vtex_c rename to game/materials/models/thd2/medicine/xiazhe_png_89bdad7.vtex_c diff --git a/materials/models/thd2/medicine/xiazhe_png_8b10f0ef.vtex_c b/game/materials/models/thd2/medicine/xiazhe_png_8b10f0ef.vtex_c similarity index 100% rename from materials/models/thd2/medicine/xiazhe_png_8b10f0ef.vtex_c rename to game/materials/models/thd2/medicine/xiazhe_png_8b10f0ef.vtex_c diff --git a/materials/models/thd2/medicine/xiazhe_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/medicine/xiazhe_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/medicine/xiazhe_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/medicine/xiazhe_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/rangzi/t_skin_tga_47282454.vtex_c b/game/materials/models/thd2/rangzi/t_skin_tga_47282454.vtex_c similarity index 100% rename from materials/models/thd2/rangzi/t_skin_tga_47282454.vtex_c rename to game/materials/models/thd2/rangzi/t_skin_tga_47282454.vtex_c diff --git a/materials/models/thd2/reimu/as1_png_4efd5b91.vtex_c b/game/materials/models/thd2/reimu/as1_png_4efd5b91.vtex_c similarity index 100% rename from materials/models/thd2/reimu/as1_png_4efd5b91.vtex_c rename to game/materials/models/thd2/reimu/as1_png_4efd5b91.vtex_c diff --git a/materials/models/thd2/reimu/rm_wp_light_tga_8f274dba.vtex_c b/game/materials/models/thd2/reimu/rm_wp_light_tga_8f274dba.vtex_c similarity index 100% rename from materials/models/thd2/reimu/rm_wp_light_tga_8f274dba.vtex_c rename to game/materials/models/thd2/reimu/rm_wp_light_tga_8f274dba.vtex_c diff --git a/materials/models/thd2/remilia/remilia_gungnir.vmat_c b/game/materials/models/thd2/remilia/remilia_gungnir.vmat_c similarity index 100% rename from materials/models/thd2/remilia/remilia_gungnir.vmat_c rename to game/materials/models/thd2/remilia/remilia_gungnir.vmat_c diff --git a/materials/models/thd2/remilia/remilia_gungnir_tga_d7900e73.vtex_c b/game/materials/models/thd2/remilia/remilia_gungnir_tga_d7900e73.vtex_c similarity index 100% rename from materials/models/thd2/remilia/remilia_gungnir_tga_d7900e73.vtex_c rename to game/materials/models/thd2/remilia/remilia_gungnir_tga_d7900e73.vtex_c diff --git a/materials/models/thd2/rumia_ex_1.vmat_c b/game/materials/models/thd2/rumia_ex_1.vmat_c similarity index 100% rename from materials/models/thd2/rumia_ex_1.vmat_c rename to game/materials/models/thd2/rumia_ex_1.vmat_c diff --git a/materials/models/thd2/rumia_ex_1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/rumia_ex_1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/rumia_ex_1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/rumia_ex_1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/rumia_ex_2.vmat_c b/game/materials/models/thd2/rumia_ex_2.vmat_c similarity index 100% rename from materials/models/thd2/rumia_ex_2.vmat_c rename to game/materials/models/thd2/rumia_ex_2.vmat_c diff --git a/materials/models/thd2/rumia_ex_3.vmat_c b/game/materials/models/thd2/rumia_ex_3.vmat_c similarity index 100% rename from materials/models/thd2/rumia_ex_3.vmat_c rename to game/materials/models/thd2/rumia_ex_3.vmat_c diff --git a/materials/models/thd2/rumia_ex_3_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/rumia_ex_3_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/rumia_ex_3_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/rumia_ex_3_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/rumia_ex_4.vmat_c b/game/materials/models/thd2/rumia_ex_4.vmat_c similarity index 100% rename from materials/models/thd2/rumia_ex_4.vmat_c rename to game/materials/models/thd2/rumia_ex_4.vmat_c diff --git a/materials/models/thd2/rumia_ex_5.vmat_c b/game/materials/models/thd2/rumia_ex_5.vmat_c similarity index 100% rename from materials/models/thd2/rumia_ex_5.vmat_c rename to game/materials/models/thd2/rumia_ex_5.vmat_c diff --git a/materials/models/thd2/rumia_ex_tga_26604d8d.vtex_c b/game/materials/models/thd2/rumia_ex_tga_26604d8d.vtex_c similarity index 100% rename from materials/models/thd2/rumia_ex_tga_26604d8d.vtex_c rename to game/materials/models/thd2/rumia_ex_tga_26604d8d.vtex_c diff --git a/materials/models/thd2/rumia_ex_tga_766b4c8.vtex_c b/game/materials/models/thd2/rumia_ex_tga_766b4c8.vtex_c similarity index 100% rename from materials/models/thd2/rumia_ex_tga_766b4c8.vtex_c rename to game/materials/models/thd2/rumia_ex_tga_766b4c8.vtex_c diff --git a/materials/models/thd2/shade_tga_177d4a4f.vtex_c b/game/materials/models/thd2/shade_tga_177d4a4f.vtex_c similarity index 100% rename from materials/models/thd2/shade_tga_177d4a4f.vtex_c rename to game/materials/models/thd2/shade_tga_177d4a4f.vtex_c diff --git a/materials/models/thd2/shikieiki/shiki_mmd_tga_99a41376.vtex_c b/game/materials/models/thd2/shikieiki/shiki_mmd_tga_99a41376.vtex_c similarity index 100% rename from materials/models/thd2/shikieiki/shiki_mmd_tga_99a41376.vtex_c rename to game/materials/models/thd2/shikieiki/shiki_mmd_tga_99a41376.vtex_c diff --git a/materials/models/thd2/shikieiki/shikieiki_mmd.vmat_c b/game/materials/models/thd2/shikieiki/shikieiki_mmd.vmat_c similarity index 100% rename from materials/models/thd2/shikieiki/shikieiki_mmd.vmat_c rename to game/materials/models/thd2/shikieiki/shikieiki_mmd.vmat_c diff --git a/materials/models/thd2/shikieiki/shikieiki_mmd_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/shikieiki/shikieiki_mmd_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/shikieiki/shikieiki_mmd_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/shikieiki/shikieiki_mmd_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/wriggle/wriggle_mmd_2.vmat_c b/game/materials/models/thd2/wriggle/wriggle_mmd_2.vmat_c similarity index 100% rename from materials/models/thd2/wriggle/wriggle_mmd_2.vmat_c rename to game/materials/models/thd2/wriggle/wriggle_mmd_2.vmat_c diff --git a/materials/models/thd2/wriggle/wriggle_mmd_2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/wriggle/wriggle_mmd_2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/wriggle/wriggle_mmd_2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/wriggle/wriggle_mmd_2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/wriggle/wriggle_mmd_tga_1aab12e5.vtex_c b/game/materials/models/thd2/wriggle/wriggle_mmd_tga_1aab12e5.vtex_c similarity index 100% rename from materials/models/thd2/wriggle/wriggle_mmd_tga_1aab12e5.vtex_c rename to game/materials/models/thd2/wriggle/wriggle_mmd_tga_1aab12e5.vtex_c diff --git a/materials/models/thd2/yukari/yukari_mmd_02.vmat_c b/game/materials/models/thd2/yukari/yukari_mmd_02.vmat_c similarity index 100% rename from materials/models/thd2/yukari/yukari_mmd_02.vmat_c rename to game/materials/models/thd2/yukari/yukari_mmd_02.vmat_c diff --git a/materials/models/thd2/yukari/yukari_mmd_02_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/yukari/yukari_mmd_02_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/yukari/yukari_mmd_02_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/yukari/yukari_mmd_02_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/yukari/yukari_mmd_2_tga_2f4d2a1a.vtex_c b/game/materials/models/thd2/yukari/yukari_mmd_2_tga_2f4d2a1a.vtex_c similarity index 100% rename from materials/models/thd2/yukari/yukari_mmd_2_tga_2f4d2a1a.vtex_c rename to game/materials/models/thd2/yukari/yukari_mmd_2_tga_2f4d2a1a.vtex_c diff --git a/materials/models/thd2/yukari/yukari_mmd_d.vmat_c b/game/materials/models/thd2/yukari/yukari_mmd_d.vmat_c similarity index 100% rename from materials/models/thd2/yukari/yukari_mmd_d.vmat_c rename to game/materials/models/thd2/yukari/yukari_mmd_d.vmat_c diff --git a/materials/models/thd2/yukari/yukari_mmd_d_tga_7bc475c9.vtex_c b/game/materials/models/thd2/yukari/yukari_mmd_d_tga_7bc475c9.vtex_c similarity index 100% rename from materials/models/thd2/yukari/yukari_mmd_d_tga_7bc475c9.vtex_c rename to game/materials/models/thd2/yukari/yukari_mmd_d_tga_7bc475c9.vtex_c diff --git a/materials/models/thd2/yukari/yukari_mmd_q.vmat_c b/game/materials/models/thd2/yukari/yukari_mmd_q.vmat_c similarity index 100% rename from materials/models/thd2/yukari/yukari_mmd_q.vmat_c rename to game/materials/models/thd2/yukari/yukari_mmd_q.vmat_c diff --git a/materials/models/thd2/yukari/yukari_mmd_q_tga_6337ffe0.vtex_c b/game/materials/models/thd2/yukari/yukari_mmd_q_tga_6337ffe0.vtex_c similarity index 100% rename from materials/models/thd2/yukari/yukari_mmd_q_tga_6337ffe0.vtex_c rename to game/materials/models/thd2/yukari/yukari_mmd_q_tga_6337ffe0.vtex_c diff --git a/materials/models/thd2/yukkuri.vmat_c b/game/materials/models/thd2/yukkuri.vmat_c similarity index 100% rename from materials/models/thd2/yukkuri.vmat_c rename to game/materials/models/thd2/yukkuri.vmat_c diff --git a/materials/models/thd2/yukkuri_face.vmat_c b/game/materials/models/thd2/yukkuri_face.vmat_c similarity index 100% rename from materials/models/thd2/yukkuri_face.vmat_c rename to game/materials/models/thd2/yukkuri_face.vmat_c diff --git a/materials/models/thd2/yukkuri_face_tga_ae56b93c.vtex_c b/game/materials/models/thd2/yukkuri_face_tga_ae56b93c.vtex_c similarity index 100% rename from materials/models/thd2/yukkuri_face_tga_ae56b93c.vtex_c rename to game/materials/models/thd2/yukkuri_face_tga_ae56b93c.vtex_c diff --git a/materials/models/thd2/yukkuri_tga_527d89f.vtex_c b/game/materials/models/thd2/yukkuri_tga_527d89f.vtex_c similarity index 100% rename from materials/models/thd2/yukkuri_tga_527d89f.vtex_c rename to game/materials/models/thd2/yukkuri_tga_527d89f.vtex_c diff --git a/materials/models/thd2/yukkuri_tga_c9cc7be4.vtex_c b/game/materials/models/thd2/yukkuri_tga_c9cc7be4.vtex_c similarity index 100% rename from materials/models/thd2/yukkuri_tga_c9cc7be4.vtex_c rename to game/materials/models/thd2/yukkuri_tga_c9cc7be4.vtex_c diff --git a/materials/models/thd2/yukkuri_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/models/thd2/yukkuri_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/models/thd2/yukkuri_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/models/thd2/yukkuri_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/models/thd2/yuukaspark.vmat_c b/game/materials/models/thd2/yuukaspark.vmat_c similarity index 100% rename from materials/models/thd2/yuukaspark.vmat_c rename to game/materials/models/thd2/yuukaspark.vmat_c diff --git a/materials/models/thd2/yuyuko_fan.vmat_c b/game/materials/models/thd2/yuyuko_fan.vmat_c similarity index 100% rename from materials/models/thd2/yuyuko_fan.vmat_c rename to game/materials/models/thd2/yuyuko_fan.vmat_c diff --git a/materials/models/zap1_red_tga_33d11c98.vtex_c b/game/materials/models/zap1_red_tga_33d11c98.vtex_c similarity index 100% rename from materials/models/zap1_red_tga_33d11c98.vtex_c rename to game/materials/models/zap1_red_tga_33d11c98.vtex_c diff --git a/materials/new_touhou_model/aya/aya_cloth.vmat_c b/game/materials/new_touhou_model/aya/aya_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_cloth.vmat_c rename to game/materials/new_touhou_model/aya/aya_cloth.vmat_c diff --git a/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_eye.vmat_c b/game/materials/new_touhou_model/aya/aya_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_eye.vmat_c rename to game/materials/new_touhou_model/aya/aya_eye.vmat_c diff --git a/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks2_89c92044.vtex_c b/game/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks2_89c92044.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks2_89c92044.vtex_c rename to game/materials/new_touhou_model/aya/aya_eye_vmat_g_tmasks2_89c92044.vtex_c diff --git a/materials/new_touhou_model/aya/aya_hair1.vmat_c b/game/materials/new_touhou_model/aya/aya_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_hair1.vmat_c rename to game/materials/new_touhou_model/aya/aya_hair1.vmat_c diff --git a/materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_hair2.vmat_c b/game/materials/new_touhou_model/aya/aya_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_hair2.vmat_c rename to game/materials/new_touhou_model/aya/aya_hair2.vmat_c diff --git a/materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_leather.vmat_c b/game/materials/new_touhou_model/aya/aya_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_leather.vmat_c rename to game/materials/new_touhou_model/aya/aya_leather.vmat_c diff --git a/materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_met.vmat_c b/game/materials/new_touhou_model/aya/aya_met.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_met.vmat_c rename to game/materials/new_touhou_model/aya/aya_met.vmat_c diff --git a/materials/new_touhou_model/aya/aya_met_normal_png_6be8c3ec.vtex_c b/game/materials/new_touhou_model/aya/aya_met_normal_png_6be8c3ec.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_met_normal_png_6be8c3ec.vtex_c rename to game/materials/new_touhou_model/aya/aya_met_normal_png_6be8c3ec.vtex_c diff --git a/materials/new_touhou_model/aya/aya_met_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_met_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_met_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_met_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_met_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/aya/aya_met_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_met_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/aya/aya_met_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/aya/aya_met_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/aya/aya_met_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_met_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/aya/aya_met_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/aya/aya_plush.vmat_c b/game/materials/new_touhou_model/aya/aya_plush.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_plush.vmat_c rename to game/materials/new_touhou_model/aya/aya_plush.vmat_c diff --git a/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_473f24f9.vtex_c b/game/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_473f24f9.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_473f24f9.vtex_c rename to game/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_473f24f9.vtex_c diff --git a/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_plush_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_skin.vmat_c b/game/materials/new_touhou_model/aya/aya_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_skin.vmat_c rename to game/materials/new_touhou_model/aya/aya_skin.vmat_c diff --git a/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/aya/aya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/aya/aya_tga_659586e2.vtex_c b/game/materials/new_touhou_model/aya/aya_tga_659586e2.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_tga_659586e2.vtex_c rename to game/materials/new_touhou_model/aya/aya_tga_659586e2.vtex_c diff --git a/materials/new_touhou_model/aya/aya_wing.vmat_c b/game/materials/new_touhou_model/aya/aya_wing.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wing.vmat_c rename to game/materials/new_touhou_model/aya/aya_wing.vmat_c diff --git a/materials/new_touhou_model/aya/aya_wing_normal_png_50903d9d.vtex_c b/game/materials/new_touhou_model/aya/aya_wing_normal_png_50903d9d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wing_normal_png_50903d9d.vtex_c rename to game/materials/new_touhou_model/aya/aya_wing_normal_png_50903d9d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_wing_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/aya/aya_wood.vmat_c b/game/materials/new_touhou_model/aya/aya_wood.vmat_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wood.vmat_c rename to game/materials/new_touhou_model/aya/aya_wood.vmat_c diff --git a/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_a1377df4.vtex_c b/game/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_a1377df4.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_a1377df4.vtex_c rename to game/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_a1377df4.vtex_c diff --git a/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/aya/aya_wood_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_cloth.vmat_c b/game/materials/new_touhou_model/cirno/cirno_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_cloth.vmat_c rename to game/materials/new_touhou_model/cirno/cirno_cloth.vmat_c diff --git a/materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_eye.vmat_c b/game/materials/new_touhou_model/cirno/cirno_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_eye.vmat_c rename to game/materials/new_touhou_model/cirno/cirno_eye.vmat_c diff --git a/materials/new_touhou_model/cirno/cirno_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/cirno/cirno_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_hair1.vmat_c b/game/materials/new_touhou_model/cirno/cirno_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_hair1.vmat_c rename to game/materials/new_touhou_model/cirno/cirno_hair1.vmat_c diff --git a/materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_hair2.vmat_c b/game/materials/new_touhou_model/cirno/cirno_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_hair2.vmat_c rename to game/materials/new_touhou_model/cirno/cirno_hair2.vmat_c diff --git a/materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_leather.vmat_c b/game/materials/new_touhou_model/cirno/cirno_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_leather.vmat_c rename to game/materials/new_touhou_model/cirno/cirno_leather.vmat_c diff --git a/materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_metal.vmat_c b/game/materials/new_touhou_model/cirno/cirno_metal.vmat_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_metal.vmat_c rename to game/materials/new_touhou_model/cirno/cirno_metal.vmat_c diff --git a/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_833dba4f.vtex_c b/game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_833dba4f.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_833dba4f.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_833dba4f.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_metal_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_metal_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_skin.vmat_c b/game/materials/new_touhou_model/cirno/cirno_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_skin.vmat_c rename to game/materials/new_touhou_model/cirno/cirno_skin.vmat_c diff --git a/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks1_fa11df49.vtex_c b/game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks1_fa11df49.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks1_fa11df49.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks1_fa11df49.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_813a544c.vtex_c b/game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_813a544c.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_813a544c.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_813a544c.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_c50af51b.vtex_c b/game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_c50af51b.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_c50af51b.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_c50af51b.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/cirno/cirno_tga_d66bdc9.vtex_c b/game/materials/new_touhou_model/cirno/cirno_tga_d66bdc9.vtex_c similarity index 100% rename from materials/new_touhou_model/cirno/cirno_tga_d66bdc9.vtex_c rename to game/materials/new_touhou_model/cirno/cirno_tga_d66bdc9.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_cloth.vmat_c b/game/materials/new_touhou_model/clownpiece/clownpiece_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_cloth.vmat_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_cloth.vmat_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_eye.vmat_c b/game/materials/new_touhou_model/clownpiece/clownpiece_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_eye.vmat_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_eye.vmat_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_hair1.vmat_c b/game/materials/new_touhou_model/clownpiece/clownpiece_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_hair1.vmat_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_hair1.vmat_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_hair2.vmat_c b/game/materials/new_touhou_model/clownpiece/clownpiece_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_hair2.vmat_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_hair2.vmat_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_skin.vmat_c b/game/materials/new_touhou_model/clownpiece/clownpiece_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_skin.vmat_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_skin.vmat_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_tga_654f2558.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_tga_654f2558.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_tga_654f2558.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_tga_654f2558.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_tga_7d06ad43.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_tga_7d06ad43.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_tga_7d06ad43.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_tga_7d06ad43.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_weapon.vmat_c b/game/materials/new_touhou_model/clownpiece/clownpiece_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_weapon.vmat_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_weapon.vmat_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_wing.vmat_c b/game/materials/new_touhou_model/clownpiece/clownpiece_wing.vmat_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_wing.vmat_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_wing.vmat_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/clownpiece/clownpiece_wing_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_cloth.vmat_c b/game/materials/new_touhou_model/flandre/flandre_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_cloth.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_cloth.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_eye.vmat_c b/game/materials/new_touhou_model/flandre/flandre_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_eye.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_eye.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_eye_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_hair1.vmat_c b/game/materials/new_touhou_model/flandre/flandre_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair1.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_hair1.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_hair2.vmat_c b/game/materials/new_touhou_model/flandre/flandre_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair2.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_hair2.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_leather.vmat_c b/game/materials/new_touhou_model/flandre/flandre_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_leather.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_leather.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_met_png_c6fcbcac.vtex_c b/game/materials/new_touhou_model/flandre/flandre_met_png_c6fcbcac.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_met_png_c6fcbcac.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_met_png_c6fcbcac.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_metal.vmat_c b/game/materials/new_touhou_model/flandre/flandre_metal.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_metal.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_eb28111d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_eb28111d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_eb28111d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_eb28111d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_fd46aca1.vtex_c b/game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_fd46aca1.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_fd46aca1.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tmasks2_fd46aca1.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_metal_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_metal_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_skin.vmat_c b/game/materials/new_touhou_model/flandre/flandre_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_skin.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_a4454a16.vtex_c b/game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_a4454a16.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_a4454a16.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_a4454a16.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_bc824215.vtex_c b/game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_bc824215.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_bc824215.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_bc824215.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_fa11df49.vtex_c b/game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_fa11df49.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_fa11df49.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_fa11df49.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_tga_512d33d9.vtex_c b/game/materials/new_touhou_model/flandre/flandre_tga_512d33d9.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_tga_512d33d9.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_tga_512d33d9.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_tga_9517a057.vtex_c b/game/materials/new_touhou_model/flandre/flandre_tga_9517a057.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_tga_9517a057.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_tga_9517a057.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_weapon.vmat_c b/game/materials/new_touhou_model/flandre/flandre_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_weapon.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_weapon.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_weapon_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_wing.vmat_c b/game/materials/new_touhou_model/flandre/flandre_wing.vmat_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_wing.vmat_c rename to game/materials/new_touhou_model/flandre/flandre_wing.vmat_c diff --git a/materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/flandre/flandre_wing_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_ball.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_blue.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_blue.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_blue.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_blue.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_blue_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_red.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_red.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_red.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_red.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_red_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_yellow.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_yellow.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_yellow.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_yellow.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_ball_yellow_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_cloth.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_cloth.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_cloth.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_cloth.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_cloth.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_cloth.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_eye.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_eye.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_eye.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_hair2.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_hair2.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_hair2.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_earth_tga_cd66d6fe.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_earth_tga_cd66d6fe.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_earth_tga_cd66d6fe.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_earth_tga_cd66d6fe.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_eye.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_eye.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_eye.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_hair1.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_hair1.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_hair1.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_hair2.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_hair2.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_hair2.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_leather.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_leather.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_leather.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_metal.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_metal.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_metal.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_metal.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_metal_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_cloth.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_cloth.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_cloth.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_eye.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_eye.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_eye.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_hair2.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_hair2.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_hair2.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_moon_tga_14bb1e1c.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_moon_tga_14bb1e1c.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_moon_tga_14bb1e1c.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_moon_tga_14bb1e1c.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_skin.vmat_c b/game/materials/new_touhou_model/hecatia/hecatia_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_skin.vmat_c rename to game/materials/new_touhou_model/hecatia/hecatia_skin.vmat_c diff --git a/materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_tga_5854310d.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_tga_5854310d.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_tga_5854310d.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_tga_5854310d.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_tga_6304a201.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_tga_6304a201.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_tga_6304a201.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_tga_6304a201.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_tga_7c66f6ae.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_tga_7c66f6ae.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_tga_7c66f6ae.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_tga_7c66f6ae.vtex_c diff --git a/materials/new_touhou_model/hecatia/hecatia_tga_c8ace0df.vtex_c b/game/materials/new_touhou_model/hecatia/hecatia_tga_c8ace0df.vtex_c similarity index 100% rename from materials/new_touhou_model/hecatia/hecatia_tga_c8ace0df.vtex_c rename to game/materials/new_touhou_model/hecatia/hecatia_tga_c8ace0df.vtex_c diff --git a/materials/new_touhou_model/junko/junko_cloth.vmat_c b/game/materials/new_touhou_model/junko/junko_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/junko/junko_cloth.vmat_c rename to game/materials/new_touhou_model/junko/junko_cloth.vmat_c diff --git a/materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/junko/junko_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/junko/junko_eye.vmat_c b/game/materials/new_touhou_model/junko/junko_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/junko/junko_eye.vmat_c rename to game/materials/new_touhou_model/junko/junko_eye.vmat_c diff --git a/materials/new_touhou_model/junko/junko_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/junko/junko_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/junko/junko_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/junko/junko_hair1.vmat_c b/game/materials/new_touhou_model/junko/junko_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/junko/junko_hair1.vmat_c rename to game/materials/new_touhou_model/junko/junko_hair1.vmat_c diff --git a/materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/junko/junko_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/junko/junko_hair2.vmat_c b/game/materials/new_touhou_model/junko/junko_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/junko/junko_hair2.vmat_c rename to game/materials/new_touhou_model/junko/junko_hair2.vmat_c diff --git a/materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/junko/junko_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/junko/junko_leather.vmat_c b/game/materials/new_touhou_model/junko/junko_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/junko/junko_leather.vmat_c rename to game/materials/new_touhou_model/junko/junko_leather.vmat_c diff --git a/materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/junko/junko_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/junko/junko_skin.vmat_c b/game/materials/new_touhou_model/junko/junko_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/junko/junko_skin.vmat_c rename to game/materials/new_touhou_model/junko/junko_skin.vmat_c diff --git a/materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/junko/junko_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/junko/junko_tga_a90f3716.vtex_c b/game/materials/new_touhou_model/junko/junko_tga_a90f3716.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_tga_a90f3716.vtex_c rename to game/materials/new_touhou_model/junko/junko_tga_a90f3716.vtex_c diff --git a/materials/new_touhou_model/junko/junko_wail.vmat_c b/game/materials/new_touhou_model/junko/junko_wail.vmat_c similarity index 100% rename from materials/new_touhou_model/junko/junko_wail.vmat_c rename to game/materials/new_touhou_model/junko/junko_wail.vmat_c diff --git a/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_6d020679.vtex_c b/game/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_6d020679.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_6d020679.vtex_c rename to game/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_6d020679.vtex_c diff --git a/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/junko/junko_wail_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/junko/junko_wail_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/junko/junko_wail_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/junko/junko_wail_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/junko/junko_wail_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_cloth.vmat_c b/game/materials/new_touhou_model/marisa/marisa_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_cloth.vmat_c rename to game/materials/new_touhou_model/marisa/marisa_cloth.vmat_c diff --git a/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_eye.vmat_c b/game/materials/new_touhou_model/marisa/marisa_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_eye.vmat_c rename to game/materials/new_touhou_model/marisa/marisa_eye.vmat_c diff --git a/materials/new_touhou_model/marisa/marisa_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/marisa/marisa_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_hair1.vmat_c b/game/materials/new_touhou_model/marisa/marisa_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_hair1.vmat_c rename to game/materials/new_touhou_model/marisa/marisa_hair1.vmat_c diff --git a/materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_hair2.vmat_c b/game/materials/new_touhou_model/marisa/marisa_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_hair2.vmat_c rename to game/materials/new_touhou_model/marisa/marisa_hair2.vmat_c diff --git a/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_leather.vmat_c b/game/materials/new_touhou_model/marisa/marisa_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_leather.vmat_c rename to game/materials/new_touhou_model/marisa/marisa_leather.vmat_c diff --git a/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_560eceba.vtex_c b/game/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_560eceba.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_560eceba.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_560eceba.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_skin.vmat_c b/game/materials/new_touhou_model/marisa/marisa_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_skin.vmat_c rename to game/materials/new_touhou_model/marisa/marisa_skin.vmat_c diff --git a/materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_tga_daf7ac0e.vtex_c b/game/materials/new_touhou_model/marisa/marisa_tga_daf7ac0e.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_tga_daf7ac0e.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_tga_daf7ac0e.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_wood.vmat_c b/game/materials/new_touhou_model/marisa/marisa_wood.vmat_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_wood.vmat_c rename to game/materials/new_touhou_model/marisa/marisa_wood.vmat_c diff --git a/materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/marisa/marisa_wood_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_cloth.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_cloth.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_cloth.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_eye.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_eye.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_eye.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_hair1.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_hair1.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_hair1.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_hair2.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_hair2.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_hair2.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_metal.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal2.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_metal2.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal2.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal2.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal2_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_metal_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_skin.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_skin.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_skin.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_tga_507f131d.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_tga_507f131d.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_tga_507f131d.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_tga_507f131d.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_tga_fbd5c8cb.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_tga_fbd5c8cb.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_tga_fbd5c8cb.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_tga_fbd5c8cb.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_weapon.vmat_c b/game/materials/new_touhou_model/patchouli/patchouli_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_weapon.vmat_c rename to game/materials/new_touhou_model/patchouli/patchouli_weapon.vmat_c diff --git a/materials/new_touhou_model/patchouli/patchouli_weapon_normal_png_56587567.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_weapon_normal_png_56587567.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_weapon_normal_png_56587567.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_weapon_normal_png_56587567.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_473f24f9.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_473f24f9.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_473f24f9.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_473f24f9.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/patchouli/patchouli_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku.vmat_c b/game/materials/new_touhou_model/reimu/onmyougyoku.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku.vmat_c rename to game/materials/new_touhou_model/reimu/onmyougyoku.vmat_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku_tga_69ae9798.vtex_c b/game/materials/new_touhou_model/reimu/onmyougyoku_tga_69ae9798.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku_tga_69ae9798.vtex_c rename to game/materials/new_touhou_model/reimu/onmyougyoku_tga_69ae9798.vtex_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_74224468.vtex_c b/game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_74224468.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_74224468.vtex_c rename to game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_74224468.vtex_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_b7e80b83.vtex_c b/game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_b7e80b83.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_b7e80b83.vtex_c rename to game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_b7e80b83.vtex_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_bb33221d.vtex_c b/game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_bb33221d.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_bb33221d.vtex_c rename to game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_bb33221d.vtex_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_d078c2d0.vtex_c b/game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_d078c2d0.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_d078c2d0.vtex_c rename to game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tmasks2_d078c2d0.vtex_c diff --git a/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/reimu/onmyougyoku_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_cloth.vmat_c b/game/materials/new_touhou_model/reimu/reimu_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_cloth.vmat_c rename to game/materials/new_touhou_model/reimu/reimu_cloth.vmat_c diff --git a/materials/new_touhou_model/reimu/reimu_eye.vmat_c b/game/materials/new_touhou_model/reimu/reimu_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_eye.vmat_c rename to game/materials/new_touhou_model/reimu/reimu_eye.vmat_c diff --git a/materials/new_touhou_model/reimu/reimu_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/reimu/reimu_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_hair1.vmat_c b/game/materials/new_touhou_model/reimu/reimu_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_hair1.vmat_c rename to game/materials/new_touhou_model/reimu/reimu_hair1.vmat_c diff --git a/materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_hair2.vmat_c b/game/materials/new_touhou_model/reimu/reimu_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_hair2.vmat_c rename to game/materials/new_touhou_model/reimu/reimu_hair2.vmat_c diff --git a/materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_1dc4372b.vtex_c b/game/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_1dc4372b.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_matalness_mask_tga_1dc4372b.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_1dc4372b.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_242d1b9f.vtex_c b/game/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_242d1b9f.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_matalness_mask_tga_242d1b9f.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_242d1b9f.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_ddb26711.vtex_c b/game/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_ddb26711.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_matalness_mask_tga_ddb26711.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_matalness_mask_tga_ddb26711.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_skin.vmat_c b/game/materials/new_touhou_model/reimu/reimu_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_skin.vmat_c rename to game/materials/new_touhou_model/reimu/reimu_skin.vmat_c diff --git a/materials/new_touhou_model/reimu/reimu_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/reimu/reimu_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_specular_mask_tga_173ed025.vtex_c b/game/materials/new_touhou_model/reimu/reimu_specular_mask_tga_173ed025.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_specular_mask_tga_173ed025.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_specular_mask_tga_173ed025.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_specular_mask_tga_8f5d6523.vtex_c b/game/materials/new_touhou_model/reimu/reimu_specular_mask_tga_8f5d6523.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_specular_mask_tga_8f5d6523.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_specular_mask_tga_8f5d6523.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_specular_mask_tga_b9f4b6eb.vtex_c b/game/materials/new_touhou_model/reimu/reimu_specular_mask_tga_b9f4b6eb.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_specular_mask_tga_b9f4b6eb.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_specular_mask_tga_b9f4b6eb.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_tga_754ae0f4.vtex_c b/game/materials/new_touhou_model/reimu/reimu_tga_754ae0f4.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_tga_754ae0f4.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_tga_754ae0f4.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_weapon.vmat_c b/game/materials/new_touhou_model/reimu/reimu_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_weapon.vmat_c rename to game/materials/new_touhou_model/reimu/reimu_weapon.vmat_c diff --git a/materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/reimu/reimu_weapon_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/reimu/reimu_wood.vmat_c b/game/materials/new_touhou_model/reimu/reimu_wood.vmat_c similarity index 100% rename from materials/new_touhou_model/reimu/reimu_wood.vmat_c rename to game/materials/new_touhou_model/reimu/reimu_wood.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_cloth.vmat_c b/game/materials/new_touhou_model/remilia/remilia_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_cloth.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_cloth.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_eye.vmat_c b/game/materials/new_touhou_model/remilia/remilia_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_eye.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_eye.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/remilia/remilia_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_hair1.vmat_c b/game/materials/new_touhou_model/remilia/remilia_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_hair1.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_hair1.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_hair2.vmat_c b/game/materials/new_touhou_model/remilia/remilia_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_hair2.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_hair2.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_metal.vmat_c b/game/materials/new_touhou_model/remilia/remilia_metal.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_metal.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_metal.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_metal_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_metal_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_skin.vmat_c b/game/materials/new_touhou_model/remilia/remilia_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_skin.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_skin.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_tga_823b3730.vtex_c b/game/materials/new_touhou_model/remilia/remilia_tga_823b3730.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_tga_823b3730.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_tga_823b3730.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_weapon.vmat_c b/game/materials/new_touhou_model/remilia/remilia_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_weapon.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_weapon.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_weapon_normal_png_1ce7764e.vtex_c b/game/materials/new_touhou_model/remilia/remilia_weapon_normal_png_1ce7764e.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_weapon_normal_png_1ce7764e.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_weapon_normal_png_1ce7764e.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_wing.vmat_c b/game/materials/new_touhou_model/remilia/remilia_wing.vmat_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_wing.vmat_c rename to game/materials/new_touhou_model/remilia/remilia_wing.vmat_c diff --git a/materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/remilia/remilia_wing_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_cloth.vmat_c b/game/materials/new_touhou_model/sakuya/sakuya_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_cloth.vmat_c rename to game/materials/new_touhou_model/sakuya/sakuya_cloth.vmat_c diff --git a/materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_eye.vmat_c b/game/materials/new_touhou_model/sakuya/sakuya_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_eye.vmat_c rename to game/materials/new_touhou_model/sakuya/sakuya_eye.vmat_c diff --git a/materials/new_touhou_model/sakuya/sakuya_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_hair1.vmat_c b/game/materials/new_touhou_model/sakuya/sakuya_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_hair1.vmat_c rename to game/materials/new_touhou_model/sakuya/sakuya_hair1.vmat_c diff --git a/materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_hair2.vmat_c b/game/materials/new_touhou_model/sakuya/sakuya_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_hair2.vmat_c rename to game/materials/new_touhou_model/sakuya/sakuya_hair2.vmat_c diff --git a/materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_leather.vmat_c b/game/materials/new_touhou_model/sakuya/sakuya_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_leather.vmat_c rename to game/materials/new_touhou_model/sakuya/sakuya_leather.vmat_c diff --git a/materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_skin.vmat_c b/game/materials/new_touhou_model/sakuya/sakuya_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_skin.vmat_c rename to game/materials/new_touhou_model/sakuya/sakuya_skin.vmat_c diff --git a/materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks1_fa11df49.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks1_fa11df49.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks1_fa11df49.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks1_fa11df49.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_tga_87f9ab44.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_tga_87f9ab44.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_tga_87f9ab44.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_tga_87f9ab44.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_weapon.vmat_c b/game/materials/new_touhou_model/sakuya/sakuya_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_weapon.vmat_c rename to game/materials/new_touhou_model/sakuya/sakuya_weapon.vmat_c diff --git a/materials/new_touhou_model/sakuya/sakuya_weapon_normal_png_c3cc1fb.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_weapon_normal_png_c3cc1fb.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_weapon_normal_png_c3cc1fb.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_weapon_normal_png_c3cc1fb.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/sakuya/sakuya_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/satori/satori_cloth.vmat_c b/game/materials/new_touhou_model/satori/satori_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/satori/satori_cloth.vmat_c rename to game/materials/new_touhou_model/satori/satori_cloth.vmat_c diff --git a/materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/satori/satori_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/satori/satori_eye.vmat_c b/game/materials/new_touhou_model/satori/satori_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/satori/satori_eye.vmat_c rename to game/materials/new_touhou_model/satori/satori_eye.vmat_c diff --git a/materials/new_touhou_model/satori/satori_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/satori/satori_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/satori/satori_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/satori/satori_hair1.vmat_c b/game/materials/new_touhou_model/satori/satori_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/satori/satori_hair1.vmat_c rename to game/materials/new_touhou_model/satori/satori_hair1.vmat_c diff --git a/materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/satori/satori_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/satori/satori_hair2.vmat_c b/game/materials/new_touhou_model/satori/satori_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/satori/satori_hair2.vmat_c rename to game/materials/new_touhou_model/satori/satori_hair2.vmat_c diff --git a/materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/satori/satori_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/satori/satori_leather.vmat_c b/game/materials/new_touhou_model/satori/satori_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/satori/satori_leather.vmat_c rename to game/materials/new_touhou_model/satori/satori_leather.vmat_c diff --git a/materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/satori/satori_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/satori/satori_skin.vmat_c b/game/materials/new_touhou_model/satori/satori_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/satori/satori_skin.vmat_c rename to game/materials/new_touhou_model/satori/satori_skin.vmat_c diff --git a/materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/satori/satori_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/satori/satori_tga_218197ee.vtex_c b/game/materials/new_touhou_model/satori/satori_tga_218197ee.vtex_c similarity index 100% rename from materials/new_touhou_model/satori/satori_tga_218197ee.vtex_c rename to game/materials/new_touhou_model/satori/satori_tga_218197ee.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_cloth.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_cloth.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_cloth.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_eye.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_eye.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_eye.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_eye_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_eye_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_eye_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_eye_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_hair1.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_hair1.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_hair1.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_hair2.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_hair2.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_hair2.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_leather.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_leather.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_leather.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_metal.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_metal.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_metal.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_metal.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks2_c2816ebb.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks2_c2816ebb.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks2_c2816ebb.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tmasks2_c2816ebb.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_metal_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_shekpik.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_shekpik.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_shekpik.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_shekpik.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_shekpik_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_skin.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_skin.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_skin.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_tga_b6a99ed9.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_tga_b6a99ed9.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_tga_b6a99ed9.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_tga_b6a99ed9.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_weapon.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_weapon.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_weapon.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_weapon2.vmat_c b/game/materials/new_touhou_model/tenshi/tenshi_weapon2.vmat_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_weapon2.vmat_c rename to game/materials/new_touhou_model/tenshi/tenshi_weapon2.vmat_c diff --git a/materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/tenshi/tenshi_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_cloth.vmat_c b/game/materials/new_touhou_model/youmu/youmu_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_cloth.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_cloth.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_eye.vmat_c b/game/materials/new_touhou_model/youmu/youmu_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_eye.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_eye.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/youmu/youmu_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_ghost.vmat_c b/game/materials/new_touhou_model/youmu/youmu_ghost.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_ghost.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_ghost.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks2_89c92044.vtex_c b/game/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks2_89c92044.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks2_89c92044.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_ghost_vmat_g_tmasks2_89c92044.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair1.vmat_c b/game/materials/new_touhou_model/youmu/youmu_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair1.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_hair1.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_hair1_normal_png_f4cd067d.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair1_normal_png_f4cd067d.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair1_normal_png_f4cd067d.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair1_normal_png_f4cd067d.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair2.vmat_c b/game/materials/new_touhou_model/youmu/youmu_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair2.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_hair2.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_813a544c.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_813a544c.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_813a544c.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_813a544c.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_hair2_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_leather.vmat_c b/game/materials/new_touhou_model/youmu/youmu_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_leather.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_leather.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_metal.vmat_c b/game/materials/new_touhou_model/youmu/youmu_metal.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_metal.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_metal.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks2_833dba4f.vtex_c b/game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks2_833dba4f.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks2_833dba4f.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tmasks2_833dba4f.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tnormal_5a28bd86.vtex_c b/game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tnormal_5a28bd86.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_metal_vmat_g_tnormal_5a28bd86.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_metal_vmat_g_tnormal_5a28bd86.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_skin.vmat_c b/game/materials/new_touhou_model/youmu/youmu_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_skin.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_skin.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks1_fa11df49.vtex_c b/game/materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks1_fa11df49.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks1_fa11df49.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks1_fa11df49.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks2_df9a0b9e.vtex_c b/game/materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks2_df9a0b9e.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks2_df9a0b9e.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_skin_vmat_g_tmasks2_df9a0b9e.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_tga_7eea9489.vtex_c b/game/materials/new_touhou_model/youmu/youmu_tga_7eea9489.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_tga_7eea9489.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_tga_7eea9489.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_tga_f86ff334.vtex_c b/game/materials/new_touhou_model/youmu/youmu_tga_f86ff334.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_tga_f86ff334.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_tga_f86ff334.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_weapon.vmat_c b/game/materials/new_touhou_model/youmu/youmu_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_weapon.vmat_c rename to game/materials/new_touhou_model/youmu/youmu_weapon.vmat_c diff --git a/materials/new_touhou_model/youmu/youmu_weapon_normal_png_be6e81f9.vtex_c b/game/materials/new_touhou_model/youmu/youmu_weapon_normal_png_be6e81f9.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_weapon_normal_png_be6e81f9.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_weapon_normal_png_be6e81f9.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/youmu/youmu_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_cloth.vmat_c b/game/materials/new_touhou_model/yukari/yukari_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_cloth.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_cloth.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_eye.vmat_c b/game/materials/new_touhou_model/yukari/yukari_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_eye.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_eye.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yukari/yukari_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_hair1.vmat_c b/game/materials/new_touhou_model/yukari/yukari_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_hair1.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_hair1.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_hair2.vmat_c b/game/materials/new_touhou_model/yukari/yukari_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_hair2.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_hair2.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_leather.vmat_c b/game/materials/new_touhou_model/yukari/yukari_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_leather.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_leather.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_skin.vmat_c b/game/materials/new_touhou_model/yukari/yukari_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_skin.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_skin.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_tga_ba70bb1.vtex_c b/game/materials/new_touhou_model/yukari/yukari_tga_ba70bb1.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_tga_ba70bb1.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_tga_ba70bb1.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_weapon.vmat_c b/game/materials/new_touhou_model/yukari/yukari_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_weapon.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_weapon.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_weapon2.vmat_c b/game/materials/new_touhou_model/yukari/yukari_weapon2.vmat_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_weapon2.vmat_c rename to game/materials/new_touhou_model/yukari/yukari_weapon2.vmat_c diff --git a/materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_weapon2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yukari/yukari_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_cloth.vmat_c b/game/materials/new_touhou_model/yuuka/yuuka_cloth.vmat_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_cloth.vmat_c rename to game/materials/new_touhou_model/yuuka/yuuka_cloth.vmat_c diff --git a/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_cloth_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_eye.vmat_c b/game/materials/new_touhou_model/yuuka/yuuka_eye.vmat_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_eye.vmat_c rename to game/materials/new_touhou_model/yuuka/yuuka_eye.vmat_c diff --git a/materials/new_touhou_model/yuuka/yuuka_eye_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_eye_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_eye_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_eye_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair1.vmat_c b/game/materials/new_touhou_model/yuuka/yuuka_hair1.vmat_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair1.vmat_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair1.vmat_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair1_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair2.vmat_c b/game/materials/new_touhou_model/yuuka/yuuka_hair2.vmat_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair2.vmat_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair2.vmat_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_hair2_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_leather.vmat_c b/game/materials/new_touhou_model/yuuka/yuuka_leather.vmat_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_leather.vmat_c rename to game/materials/new_touhou_model/yuuka/yuuka_leather.vmat_c diff --git a/materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_leather_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_skin.vmat_c b/game/materials/new_touhou_model/yuuka/yuuka_skin.vmat_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_skin.vmat_c rename to game/materials/new_touhou_model/yuuka/yuuka_skin.vmat_c diff --git a/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_skin_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_tga_b43ec91c.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_tga_b43ec91c.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_tga_b43ec91c.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_tga_b43ec91c.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_weapon.vmat_c b/game/materials/new_touhou_model/yuuka/yuuka_weapon.vmat_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_weapon.vmat_c rename to game/materials/new_touhou_model/yuuka/yuuka_weapon.vmat_c diff --git a/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_5fca2540.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_5fca2540.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_5fca2540.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_5fca2540.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks2_7f9d387d.vtex_c b/game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks2_7f9d387d.vtex_c similarity index 100% rename from materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks2_7f9d387d.vtex_c rename to game/materials/new_touhou_model/yuuka/yuuka_weapon_vmat_g_tmasks2_7f9d387d.vtex_c diff --git a/materials/normal/cloth_png_db9d9165.vtex_c b/game/materials/normal/cloth_png_db9d9165.vtex_c similarity index 100% rename from materials/normal/cloth_png_db9d9165.vtex_c rename to game/materials/normal/cloth_png_db9d9165.vtex_c diff --git a/materials/normal/hair1_png_965f2294.vtex_c b/game/materials/normal/hair1_png_965f2294.vtex_c similarity index 100% rename from materials/normal/hair1_png_965f2294.vtex_c rename to game/materials/normal/hair1_png_965f2294.vtex_c diff --git a/materials/normal/hair2_png_b0ae2332.vtex_c b/game/materials/normal/hair2_png_b0ae2332.vtex_c similarity index 100% rename from materials/normal/hair2_png_b0ae2332.vtex_c rename to game/materials/normal/hair2_png_b0ae2332.vtex_c diff --git a/materials/normal/leather_png_1d787bf2.vtex_c b/game/materials/normal/leather_png_1d787bf2.vtex_c similarity index 100% rename from materials/normal/leather_png_1d787bf2.vtex_c rename to game/materials/normal/leather_png_1d787bf2.vtex_c diff --git a/materials/normal/plush_png_e1e7d098.vtex_c b/game/materials/normal/plush_png_e1e7d098.vtex_c similarity index 100% rename from materials/normal/plush_png_e1e7d098.vtex_c rename to game/materials/normal/plush_png_e1e7d098.vtex_c diff --git a/materials/normal/shekpik1_png_95fd174e.vtex_c b/game/materials/normal/shekpik1_png_95fd174e.vtex_c similarity index 100% rename from materials/normal/shekpik1_png_95fd174e.vtex_c rename to game/materials/normal/shekpik1_png_95fd174e.vtex_c diff --git a/materials/normal/shekpik2_png_5beb2492.vtex_c b/game/materials/normal/shekpik2_png_5beb2492.vtex_c similarity index 100% rename from materials/normal/shekpik2_png_5beb2492.vtex_c rename to game/materials/normal/shekpik2_png_5beb2492.vtex_c diff --git a/materials/normal/shekpik3_png_b391eaf9.vtex_c b/game/materials/normal/shekpik3_png_b391eaf9.vtex_c similarity index 100% rename from materials/normal/shekpik3_png_b391eaf9.vtex_c rename to game/materials/normal/shekpik3_png_b391eaf9.vtex_c diff --git a/materials/normal/skin_png_5b520451.vtex_c b/game/materials/normal/skin_png_5b520451.vtex_c similarity index 100% rename from materials/normal/skin_png_5b520451.vtex_c rename to game/materials/normal/skin_png_5b520451.vtex_c diff --git a/materials/normal/wood_png_5a56d92c.vtex_c b/game/materials/normal/wood_png_5a56d92c.vtex_c similarity index 100% rename from materials/normal/wood_png_5a56d92c.vtex_c rename to game/materials/normal/wood_png_5a56d92c.vtex_c diff --git a/materials/other/tram/body_base.vmat_c b/game/materials/other/tram/body_base.vmat_c similarity index 100% rename from materials/other/tram/body_base.vmat_c rename to game/materials/other/tram/body_base.vmat_c diff --git a/materials/other/tram/body_basecolor.tga_png_cd641330.vtex_c b/game/materials/other/tram/body_basecolor.tga_png_cd641330.vtex_c similarity index 100% rename from materials/other/tram/body_basecolor.tga_png_cd641330.vtex_c rename to game/materials/other/tram/body_basecolor.tga_png_cd641330.vtex_c diff --git a/materials/other/tram/body_metalness.tga_png_c6589688.vtex_c b/game/materials/other/tram/body_metalness.tga_png_c6589688.vtex_c similarity index 100% rename from materials/other/tram/body_metalness.tga_png_c6589688.vtex_c rename to game/materials/other/tram/body_metalness.tga_png_c6589688.vtex_c diff --git a/materials/other/tram/metal.vmat_c b/game/materials/other/tram/metal.vmat_c similarity index 100% rename from materials/other/tram/metal.vmat_c rename to game/materials/other/tram/metal.vmat_c diff --git a/materials/other/tram/metal_color_png_cd475593.vtex_c b/game/materials/other/tram/metal_color_png_cd475593.vtex_c similarity index 100% rename from materials/other/tram/metal_color_png_cd475593.vtex_c rename to game/materials/other/tram/metal_color_png_cd475593.vtex_c diff --git a/materials/other/tram/metal_metalness_png_6e10e077.vtex_c b/game/materials/other/tram/metal_metalness_png_6e10e077.vtex_c similarity index 100% rename from materials/other/tram/metal_metalness_png_6e10e077.vtex_c rename to game/materials/other/tram/metal_metalness_png_6e10e077.vtex_c diff --git a/materials/other/tram/normal_body_png_37099016.vtex_c b/game/materials/other/tram/normal_body_png_37099016.vtex_c similarity index 100% rename from materials/other/tram/normal_body_png_37099016.vtex_c rename to game/materials/other/tram/normal_body_png_37099016.vtex_c diff --git a/materials/other/tram_1/dianche_normal_tga_ffa559.vtex_c b/game/materials/other/tram_1/dianche_normal_tga_ffa559.vtex_c similarity index 100% rename from materials/other/tram_1/dianche_normal_tga_ffa559.vtex_c rename to game/materials/other/tram_1/dianche_normal_tga_ffa559.vtex_c diff --git a/materials/other/tram_1/dianche_tga_ea05377e.vtex_c b/game/materials/other/tram_1/dianche_tga_ea05377e.vtex_c similarity index 100% rename from materials/other/tram_1/dianche_tga_ea05377e.vtex_c rename to game/materials/other/tram_1/dianche_tga_ea05377e.vtex_c diff --git a/materials/other/tram_1/tram_1.vmat_c b/game/materials/other/tram_1/tram_1.vmat_c similarity index 100% rename from materials/other/tram_1/tram_1.vmat_c rename to game/materials/other/tram_1/tram_1.vmat_c diff --git a/materials/other/tram_1/tram_1_vmat_g_tmasks1_ff8fe395.vtex_c b/game/materials/other/tram_1/tram_1_vmat_g_tmasks1_ff8fe395.vtex_c similarity index 100% rename from materials/other/tram_1/tram_1_vmat_g_tmasks1_ff8fe395.vtex_c rename to game/materials/other/tram_1/tram_1_vmat_g_tmasks1_ff8fe395.vtex_c diff --git a/materials/overviews/touhoutd.vmat_c b/game/materials/overviews/touhoutd.vmat_c similarity index 100% rename from materials/overviews/touhoutd.vmat_c rename to game/materials/overviews/touhoutd.vmat_c diff --git a/materials/overviews/touhoutd_tga_78edcfd8.vtex_c b/game/materials/overviews/touhoutd_tga_78edcfd8.vtex_c similarity index 100% rename from materials/overviews/touhoutd_tga_78edcfd8.vtex_c rename to game/materials/overviews/touhoutd_tga_78edcfd8.vtex_c diff --git a/materials/particle/ability_000.vtex_c b/game/materials/particle/ability_000.vtex_c similarity index 100% rename from materials/particle/ability_000.vtex_c rename to game/materials/particle/ability_000.vtex_c diff --git a/materials/particle/ability_byakuren_04.vtex_c b/game/materials/particle/ability_byakuren_04.vtex_c similarity index 100% rename from materials/particle/ability_byakuren_04.vtex_c rename to game/materials/particle/ability_byakuren_04.vtex_c diff --git a/materials/particle/ability_byakuren_04_b.vtex_c b/game/materials/particle/ability_byakuren_04_b.vtex_c similarity index 100% rename from materials/particle/ability_byakuren_04_b.vtex_c rename to game/materials/particle/ability_byakuren_04_b.vtex_c diff --git a/materials/particle/ability_byakuren_04_c.vtex_c b/game/materials/particle/ability_byakuren_04_c.vtex_c similarity index 100% rename from materials/particle/ability_byakuren_04_c.vtex_c rename to game/materials/particle/ability_byakuren_04_c.vtex_c diff --git a/materials/particle/ability_flandre04.vtex_c b/game/materials/particle/ability_flandre04.vtex_c similarity index 100% rename from materials/particle/ability_flandre04.vtex_c rename to game/materials/particle/ability_flandre04.vtex_c diff --git a/materials/particle/ability_kaguya_02_texture_a.vtex_c b/game/materials/particle/ability_kaguya_02_texture_a.vtex_c similarity index 100% rename from materials/particle/ability_kaguya_02_texture_a.vtex_c rename to game/materials/particle/ability_kaguya_02_texture_a.vtex_c diff --git a/materials/particle/ability_kaguya_02_texture_b.vtex_c b/game/materials/particle/ability_kaguya_02_texture_b.vtex_c similarity index 100% rename from materials/particle/ability_kaguya_02_texture_b.vtex_c rename to game/materials/particle/ability_kaguya_02_texture_b.vtex_c diff --git a/materials/particle/ability_kaguya_02_texture_c.vtex_c b/game/materials/particle/ability_kaguya_02_texture_c.vtex_c similarity index 100% rename from materials/particle/ability_kaguya_02_texture_c.vtex_c rename to game/materials/particle/ability_kaguya_02_texture_c.vtex_c diff --git a/materials/particle/ability_kaguya_02_texture_d.vtex_c b/game/materials/particle/ability_kaguya_02_texture_d.vtex_c similarity index 100% rename from materials/particle/ability_kaguya_02_texture_d.vtex_c rename to game/materials/particle/ability_kaguya_02_texture_d.vtex_c diff --git a/materials/particle/ability_lunasa_01.vtex_c b/game/materials/particle/ability_lunasa_01.vtex_c similarity index 100% rename from materials/particle/ability_lunasa_01.vtex_c rename to game/materials/particle/ability_lunasa_01.vtex_c diff --git a/materials/particle/ability_lyrica_01.vtex_c b/game/materials/particle/ability_lyrica_01.vtex_c similarity index 100% rename from materials/particle/ability_lyrica_01.vtex_c rename to game/materials/particle/ability_lyrica_01.vtex_c diff --git a/materials/particle/ability_marisa_02_star.vtex_c b/game/materials/particle/ability_marisa_02_star.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star.vtex_c rename to game/materials/particle/ability_marisa_02_star.vtex_c diff --git a/materials/particle/ability_marisa_02_star_b.vtex_c b/game/materials/particle/ability_marisa_02_star_b.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_b.vtex_c rename to game/materials/particle/ability_marisa_02_star_b.vtex_c diff --git a/materials/particle/ability_marisa_02_star_c.vtex_c b/game/materials/particle/ability_marisa_02_star_c.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_c.vtex_c rename to game/materials/particle/ability_marisa_02_star_c.vtex_c diff --git a/materials/particle/ability_marisa_02_star_d.vtex_c b/game/materials/particle/ability_marisa_02_star_d.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_d.vtex_c rename to game/materials/particle/ability_marisa_02_star_d.vtex_c diff --git a/materials/particle/ability_marisa_02_star_e.vtex_c b/game/materials/particle/ability_marisa_02_star_e.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_e.vtex_c rename to game/materials/particle/ability_marisa_02_star_e.vtex_c diff --git a/materials/particle/ability_marisa_02_star_f.vtex_c b/game/materials/particle/ability_marisa_02_star_f.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_f.vtex_c rename to game/materials/particle/ability_marisa_02_star_f.vtex_c diff --git a/materials/particle/ability_marisa_02_star_g.vtex_c b/game/materials/particle/ability_marisa_02_star_g.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_g.vtex_c rename to game/materials/particle/ability_marisa_02_star_g.vtex_c diff --git a/materials/particle/ability_marisa_02_star_h.vtex_c b/game/materials/particle/ability_marisa_02_star_h.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_h.vtex_c rename to game/materials/particle/ability_marisa_02_star_h.vtex_c diff --git a/materials/particle/ability_marisa_02_star_i.vtex_c b/game/materials/particle/ability_marisa_02_star_i.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_i.vtex_c rename to game/materials/particle/ability_marisa_02_star_i.vtex_c diff --git a/materials/particle/ability_marisa_02_star_j.vtex_c b/game/materials/particle/ability_marisa_02_star_j.vtex_c similarity index 100% rename from materials/particle/ability_marisa_02_star_j.vtex_c rename to game/materials/particle/ability_marisa_02_star_j.vtex_c diff --git a/materials/particle/ability_marisa_04_circle.vtex_c b/game/materials/particle/ability_marisa_04_circle.vtex_c similarity index 100% rename from materials/particle/ability_marisa_04_circle.vtex_c rename to game/materials/particle/ability_marisa_04_circle.vtex_c diff --git a/materials/particle/ability_marisa_04_circle_b.vtex_c b/game/materials/particle/ability_marisa_04_circle_b.vtex_c similarity index 100% rename from materials/particle/ability_marisa_04_circle_b.vtex_c rename to game/materials/particle/ability_marisa_04_circle_b.vtex_c diff --git a/materials/particle/ability_merlin_01.vtex_c b/game/materials/particle/ability_merlin_01.vtex_c similarity index 100% rename from materials/particle/ability_merlin_01.vtex_c rename to game/materials/particle/ability_merlin_01.vtex_c diff --git a/materials/particle/ability_mokou_01.vtex_c b/game/materials/particle/ability_mokou_01.vtex_c similarity index 100% rename from materials/particle/ability_mokou_01.vtex_c rename to game/materials/particle/ability_mokou_01.vtex_c diff --git a/materials/particle/ability_remilia_02.vtex_c b/game/materials/particle/ability_remilia_02.vtex_c similarity index 100% rename from materials/particle/ability_remilia_02.vtex_c rename to game/materials/particle/ability_remilia_02.vtex_c diff --git a/materials/particle/ability_sanae_04_star.vtex_c b/game/materials/particle/ability_sanae_04_star.vtex_c similarity index 100% rename from materials/particle/ability_sanae_04_star.vtex_c rename to game/materials/particle/ability_sanae_04_star.vtex_c diff --git a/materials/particle/ability_sanae_04_star_2.vtex_c b/game/materials/particle/ability_sanae_04_star_2.vtex_c similarity index 100% rename from materials/particle/ability_sanae_04_star_2.vtex_c rename to game/materials/particle/ability_sanae_04_star_2.vtex_c diff --git a/materials/particle/ability_shikieiki_04.vtex_c b/game/materials/particle/ability_shikieiki_04.vtex_c similarity index 100% rename from materials/particle/ability_shikieiki_04.vtex_c rename to game/materials/particle/ability_shikieiki_04.vtex_c diff --git a/materials/particle/ability_youmu_04.vtex_c b/game/materials/particle/ability_youmu_04.vtex_c similarity index 100% rename from materials/particle/ability_youmu_04.vtex_c rename to game/materials/particle/ability_youmu_04.vtex_c diff --git a/materials/particle/ability_yukari_03.vtex_c b/game/materials/particle/ability_yukari_03.vtex_c similarity index 100% rename from materials/particle/ability_yukari_03.vtex_c rename to game/materials/particle/ability_yukari_03.vtex_c diff --git a/materials/particle/ability_yuuka_02.vtex_c b/game/materials/particle/ability_yuuka_02.vtex_c similarity index 100% rename from materials/particle/ability_yuuka_02.vtex_c rename to game/materials/particle/ability_yuuka_02.vtex_c diff --git a/materials/particle/ability_yuyuko_04.vtex_c b/game/materials/particle/ability_yuyuko_04.vtex_c similarity index 100% rename from materials/particle/ability_yuyuko_04.vtex_c rename to game/materials/particle/ability_yuyuko_04.vtex_c diff --git a/materials/particle/ablity_alice_02_light.vtex_c b/game/materials/particle/ablity_alice_02_light.vtex_c similarity index 100% rename from materials/particle/ablity_alice_02_light.vtex_c rename to game/materials/particle/ablity_alice_02_light.vtex_c diff --git a/materials/particle/ablity_alice_line.vtex_c b/game/materials/particle/ablity_alice_line.vtex_c similarity index 100% rename from materials/particle/ablity_alice_line.vtex_c rename to game/materials/particle/ablity_alice_line.vtex_c diff --git a/materials/particle/ablity_alice_penglai_laser.vtex_c b/game/materials/particle/ablity_alice_penglai_laser.vtex_c similarity index 100% rename from materials/particle/ablity_alice_penglai_laser.vtex_c rename to game/materials/particle/ablity_alice_penglai_laser.vtex_c diff --git a/materials/particle/ablity_alice_penglai_laser1.vtex_c b/game/materials/particle/ablity_alice_penglai_laser1.vtex_c similarity index 100% rename from materials/particle/ablity_alice_penglai_laser1.vtex_c rename to game/materials/particle/ablity_alice_penglai_laser1.vtex_c diff --git a/materials/particle/ablity_ran03_light.vtex_c b/game/materials/particle/ablity_ran03_light.vtex_c similarity index 100% rename from materials/particle/ablity_ran03_light.vtex_c rename to game/materials/particle/ablity_ran03_light.vtex_c diff --git a/materials/particle/ablity_reisen_bullet.vtex_c b/game/materials/particle/ablity_reisen_bullet.vtex_c similarity index 100% rename from materials/particle/ablity_reisen_bullet.vtex_c rename to game/materials/particle/ablity_reisen_bullet.vtex_c diff --git a/materials/particle/ablity_reisen_laser.vtex_c b/game/materials/particle/ablity_reisen_laser.vtex_c similarity index 100% rename from materials/particle/ablity_reisen_laser.vtex_c rename to game/materials/particle/ablity_reisen_laser.vtex_c diff --git a/materials/particle/ablity_reisen_laser1.vtex_c b/game/materials/particle/ablity_reisen_laser1.vtex_c similarity index 100% rename from materials/particle/ablity_reisen_laser1.vtex_c rename to game/materials/particle/ablity_reisen_laser1.vtex_c diff --git a/materials/particle/ablity_shikieiki_04_light.vtex_c b/game/materials/particle/ablity_shikieiki_04_light.vtex_c similarity index 100% rename from materials/particle/ablity_shikieiki_04_light.vtex_c rename to game/materials/particle/ablity_shikieiki_04_light.vtex_c diff --git a/materials/particle/aircraft_gold.vtex_c b/game/materials/particle/aircraft_gold.vtex_c similarity index 100% rename from materials/particle/aircraft_gold.vtex_c rename to game/materials/particle/aircraft_gold.vtex_c diff --git a/materials/particle/aircraft_gold_tga_6582e3b9.vtex_c b/game/materials/particle/aircraft_gold_tga_6582e3b9.vtex_c similarity index 100% rename from materials/particle/aircraft_gold_tga_6582e3b9.vtex_c rename to game/materials/particle/aircraft_gold_tga_6582e3b9.vtex_c diff --git a/materials/particle/bagua.vtex_c b/game/materials/particle/bagua.vtex_c similarity index 100% rename from materials/particle/bagua.vtex_c rename to game/materials/particle/bagua.vtex_c diff --git a/materials/particle/basic_glow.vtex_c b/game/materials/particle/basic_glow.vtex_c similarity index 100% rename from materials/particle/basic_glow.vtex_c rename to game/materials/particle/basic_glow.vtex_c diff --git a/materials/particle/basic_rope.vtex_c b/game/materials/particle/basic_rope.vtex_c similarity index 100% rename from materials/particle/basic_rope.vtex_c rename to game/materials/particle/basic_rope.vtex_c diff --git a/materials/particle/basic_rope_energy.vtex_c b/game/materials/particle/basic_rope_energy.vtex_c similarity index 100% rename from materials/particle/basic_rope_energy.vtex_c rename to game/materials/particle/basic_rope_energy.vtex_c diff --git a/materials/particle/basic_smoke.vtex_c b/game/materials/particle/basic_smoke.vtex_c similarity index 100% rename from materials/particle/basic_smoke.vtex_c rename to game/materials/particle/basic_smoke.vtex_c diff --git a/materials/particle/basic_trail.vtex_c b/game/materials/particle/basic_trail.vtex_c similarity index 100% rename from materials/particle/basic_trail.vtex_c rename to game/materials/particle/basic_trail.vtex_c diff --git a/materials/particle/bendibeam2_red.vtex_c b/game/materials/particle/bendibeam2_red.vtex_c similarity index 100% rename from materials/particle/bendibeam2_red.vtex_c rename to game/materials/particle/bendibeam2_red.vtex_c diff --git a/materials/particle/bluelaser1_mip0.vtex_c b/game/materials/particle/bluelaser1_mip0.vtex_c similarity index 100% rename from materials/particle/bluelaser1_mip0.vtex_c rename to game/materials/particle/bluelaser1_mip0.vtex_c diff --git a/materials/particle/emoji/thtd_portraits_hongliange.vtex_c b/game/materials/particle/emoji/thtd_portraits_hongliange.vtex_c similarity index 100% rename from materials/particle/emoji/thtd_portraits_hongliange.vtex_c rename to game/materials/particle/emoji/thtd_portraits_hongliange.vtex_c diff --git a/materials/particle/guilty.vtex_c b/game/materials/particle/guilty.vtex_c similarity index 100% rename from materials/particle/guilty.vtex_c rename to game/materials/particle/guilty.vtex_c diff --git a/materials/particle/hiziri_byakuren_gz.vtex_c b/game/materials/particle/hiziri_byakuren_gz.vtex_c similarity index 100% rename from materials/particle/hiziri_byakuren_gz.vtex_c rename to game/materials/particle/hiziri_byakuren_gz.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_alice.vtex_c b/game/materials/particle/portraits/thtd_portraits_alice.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_alice.vtex_c rename to game/materials/particle/portraits/thtd_portraits_alice.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_aya.vtex_c b/game/materials/particle/portraits/thtd_portraits_aya.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_aya.vtex_c rename to game/materials/particle/portraits/thtd_portraits_aya.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_byakuren.vtex_c b/game/materials/particle/portraits/thtd_portraits_byakuren.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_byakuren.vtex_c rename to game/materials/particle/portraits/thtd_portraits_byakuren.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_chen.vtex_c b/game/materials/particle/portraits/thtd_portraits_chen.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_chen.vtex_c rename to game/materials/particle/portraits/thtd_portraits_chen.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_cirno.vtex_c b/game/materials/particle/portraits/thtd_portraits_cirno.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_cirno.vtex_c rename to game/materials/particle/portraits/thtd_portraits_cirno.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_clownpiece.vtex_c b/game/materials/particle/portraits/thtd_portraits_clownpiece.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_clownpiece.vtex_c rename to game/materials/particle/portraits/thtd_portraits_clownpiece.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_daiyousei.vtex_c b/game/materials/particle/portraits/thtd_portraits_daiyousei.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_daiyousei.vtex_c rename to game/materials/particle/portraits/thtd_portraits_daiyousei.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_eirin.vtex_c b/game/materials/particle/portraits/thtd_portraits_eirin.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_eirin.vtex_c rename to game/materials/particle/portraits/thtd_portraits_eirin.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_elly.vtex_c b/game/materials/particle/portraits/thtd_portraits_elly.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_elly.vtex_c rename to game/materials/particle/portraits/thtd_portraits_elly.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_flandre.vtex_c b/game/materials/particle/portraits/thtd_portraits_flandre.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_flandre.vtex_c rename to game/materials/particle/portraits/thtd_portraits_flandre.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_futo.vtex_c b/game/materials/particle/portraits/thtd_portraits_futo.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_futo.vtex_c rename to game/materials/particle/portraits/thtd_portraits_futo.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_gengetu.vtex_c b/game/materials/particle/portraits/thtd_portraits_gengetu.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_gengetu.vtex_c rename to game/materials/particle/portraits/thtd_portraits_gengetu.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_hatate.vtex_c b/game/materials/particle/portraits/thtd_portraits_hatate.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_hatate.vtex_c rename to game/materials/particle/portraits/thtd_portraits_hatate.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_hecatia.vtex_c b/game/materials/particle/portraits/thtd_portraits_hecatia.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_hecatia.vtex_c rename to game/materials/particle/portraits/thtd_portraits_hecatia.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_hina.vtex_c b/game/materials/particle/portraits/thtd_portraits_hina.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_hina.vtex_c rename to game/materials/particle/portraits/thtd_portraits_hina.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_iku.vtex_c b/game/materials/particle/portraits/thtd_portraits_iku.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_iku.vtex_c rename to game/materials/particle/portraits/thtd_portraits_iku.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_inaba.vtex_c b/game/materials/particle/portraits/thtd_portraits_inaba.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_inaba.vtex_c rename to game/materials/particle/portraits/thtd_portraits_inaba.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_junko.vtex_c b/game/materials/particle/portraits/thtd_portraits_junko.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_junko.vtex_c rename to game/materials/particle/portraits/thtd_portraits_junko.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kagerou.vtex_c b/game/materials/particle/portraits/thtd_portraits_kagerou.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kagerou.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kagerou.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kaguya.vtex_c b/game/materials/particle/portraits/thtd_portraits_kaguya.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kaguya.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kaguya.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kanako.vtex_c b/game/materials/particle/portraits/thtd_portraits_kanako.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kanako.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kanako.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_keine.vtex_c b/game/materials/particle/portraits/thtd_portraits_keine.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_keine.vtex_c rename to game/materials/particle/portraits/thtd_portraits_keine.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kishin.vtex_c b/game/materials/particle/portraits/thtd_portraits_kishin.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kishin.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kishin.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kisume.vtex_c b/game/materials/particle/portraits/thtd_portraits_kisume.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kisume.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kisume.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_koakuma.vtex_c b/game/materials/particle/portraits/thtd_portraits_koakuma.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_koakuma.vtex_c rename to game/materials/particle/portraits/thtd_portraits_koakuma.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kogasa.vtex_c b/game/materials/particle/portraits/thtd_portraits_kogasa.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kogasa.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kogasa.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_koishi.vtex_c b/game/materials/particle/portraits/thtd_portraits_koishi.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_koishi.vtex_c rename to game/materials/particle/portraits/thtd_portraits_koishi.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kokoro.vtex_c b/game/materials/particle/portraits/thtd_portraits_kokoro.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kokoro.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kokoro.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_komachi.vtex_c b/game/materials/particle/portraits/thtd_portraits_komachi.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_komachi.vtex_c rename to game/materials/particle/portraits/thtd_portraits_komachi.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_kyouko.vtex_c b/game/materials/particle/portraits/thtd_portraits_kyouko.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_kyouko.vtex_c rename to game/materials/particle/portraits/thtd_portraits_kyouko.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_letty.vtex_c b/game/materials/particle/portraits/thtd_portraits_letty.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_letty.vtex_c rename to game/materials/particle/portraits/thtd_portraits_letty.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_lily.vtex_c b/game/materials/particle/portraits/thtd_portraits_lily.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_lily.vtex_c rename to game/materials/particle/portraits/thtd_portraits_lily.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_luna.vtex_c b/game/materials/particle/portraits/thtd_portraits_luna.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_luna.vtex_c rename to game/materials/particle/portraits/thtd_portraits_luna.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_lunasa.vtex_c b/game/materials/particle/portraits/thtd_portraits_lunasa.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_lunasa.vtex_c rename to game/materials/particle/portraits/thtd_portraits_lunasa.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_lyrica.vtex_c b/game/materials/particle/portraits/thtd_portraits_lyrica.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_lyrica.vtex_c rename to game/materials/particle/portraits/thtd_portraits_lyrica.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_mamizou.vtex_c b/game/materials/particle/portraits/thtd_portraits_mamizou.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_mamizou.vtex_c rename to game/materials/particle/portraits/thtd_portraits_mamizou.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_maribel.vtex_c b/game/materials/particle/portraits/thtd_portraits_maribel.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_maribel.vtex_c rename to game/materials/particle/portraits/thtd_portraits_maribel.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_marisa.vtex_c b/game/materials/particle/portraits/thtd_portraits_marisa.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_marisa.vtex_c rename to game/materials/particle/portraits/thtd_portraits_marisa.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_matara.vtex_c b/game/materials/particle/portraits/thtd_portraits_matara.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_matara.vtex_c rename to game/materials/particle/portraits/thtd_portraits_matara.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_medicine.vtex_c b/game/materials/particle/portraits/thtd_portraits_medicine.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_medicine.vtex_c rename to game/materials/particle/portraits/thtd_portraits_medicine.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_meirin.vtex_c b/game/materials/particle/portraits/thtd_portraits_meirin.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_meirin.vtex_c rename to game/materials/particle/portraits/thtd_portraits_meirin.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_merlin.vtex_c b/game/materials/particle/portraits/thtd_portraits_merlin.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_merlin.vtex_c rename to game/materials/particle/portraits/thtd_portraits_merlin.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_miko.vtex_c b/game/materials/particle/portraits/thtd_portraits_miko.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_miko.vtex_c rename to game/materials/particle/portraits/thtd_portraits_miko.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_mima.vtex_c b/game/materials/particle/portraits/thtd_portraits_mima.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_mima.vtex_c rename to game/materials/particle/portraits/thtd_portraits_mima.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_minamitsu.vtex_c b/game/materials/particle/portraits/thtd_portraits_minamitsu.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_minamitsu.vtex_c rename to game/materials/particle/portraits/thtd_portraits_minamitsu.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_minoriko.vtex_c b/game/materials/particle/portraits/thtd_portraits_minoriko.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_minoriko.vtex_c rename to game/materials/particle/portraits/thtd_portraits_minoriko.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_mokou.vtex_c b/game/materials/particle/portraits/thtd_portraits_mokou.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_mokou.vtex_c rename to game/materials/particle/portraits/thtd_portraits_mokou.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_momiji.vtex_c b/game/materials/particle/portraits/thtd_portraits_momiji.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_momiji.vtex_c rename to game/materials/particle/portraits/thtd_portraits_momiji.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_mystia.vtex_c b/game/materials/particle/portraits/thtd_portraits_mystia.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_mystia.vtex_c rename to game/materials/particle/portraits/thtd_portraits_mystia.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_nazrin.vtex_c b/game/materials/particle/portraits/thtd_portraits_nazrin.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_nazrin.vtex_c rename to game/materials/particle/portraits/thtd_portraits_nazrin.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_nitori.vtex_c b/game/materials/particle/portraits/thtd_portraits_nitori.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_nitori.vtex_c rename to game/materials/particle/portraits/thtd_portraits_nitori.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_nue.vtex_c b/game/materials/particle/portraits/thtd_portraits_nue.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_nue.vtex_c rename to game/materials/particle/portraits/thtd_portraits_nue.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_patchouli.vtex_c b/game/materials/particle/portraits/thtd_portraits_patchouli.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_patchouli.vtex_c rename to game/materials/particle/portraits/thtd_portraits_patchouli.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_ran.vtex_c b/game/materials/particle/portraits/thtd_portraits_ran.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_ran.vtex_c rename to game/materials/particle/portraits/thtd_portraits_ran.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_reimu.vtex_c b/game/materials/particle/portraits/thtd_portraits_reimu.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_reimu.vtex_c rename to game/materials/particle/portraits/thtd_portraits_reimu.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_reisen.vtex_c b/game/materials/particle/portraits/thtd_portraits_reisen.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_reisen.vtex_c rename to game/materials/particle/portraits/thtd_portraits_reisen.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_remilia.vtex_c b/game/materials/particle/portraits/thtd_portraits_remilia.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_remilia.vtex_c rename to game/materials/particle/portraits/thtd_portraits_remilia.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_renko.vtex_c b/game/materials/particle/portraits/thtd_portraits_renko.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_renko.vtex_c rename to game/materials/particle/portraits/thtd_portraits_renko.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_rin.vtex_c b/game/materials/particle/portraits/thtd_portraits_rin.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_rin.vtex_c rename to game/materials/particle/portraits/thtd_portraits_rin.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_rumia.vtex_c b/game/materials/particle/portraits/thtd_portraits_rumia.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_rumia.vtex_c rename to game/materials/particle/portraits/thtd_portraits_rumia.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_sakuya.vtex_c b/game/materials/particle/portraits/thtd_portraits_sakuya.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_sakuya.vtex_c rename to game/materials/particle/portraits/thtd_portraits_sakuya.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_sanae.vtex_c b/game/materials/particle/portraits/thtd_portraits_sanae.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_sanae.vtex_c rename to game/materials/particle/portraits/thtd_portraits_sanae.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_sariel.vtex_c b/game/materials/particle/portraits/thtd_portraits_sariel.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_sariel.vtex_c rename to game/materials/particle/portraits/thtd_portraits_sariel.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_satori.vtex_c b/game/materials/particle/portraits/thtd_portraits_satori.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_satori.vtex_c rename to game/materials/particle/portraits/thtd_portraits_satori.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_seiga.vtex_c b/game/materials/particle/portraits/thtd_portraits_seiga.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_seiga.vtex_c rename to game/materials/particle/portraits/thtd_portraits_seiga.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_seija.vtex_c b/game/materials/particle/portraits/thtd_portraits_seija.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_seija.vtex_c rename to game/materials/particle/portraits/thtd_portraits_seija.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_shikieiki.vtex_c b/game/materials/particle/portraits/thtd_portraits_shikieiki.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_shikieiki.vtex_c rename to game/materials/particle/portraits/thtd_portraits_shikieiki.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_shinki.vtex_c b/game/materials/particle/portraits/thtd_portraits_shinki.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_shinki.vtex_c rename to game/materials/particle/portraits/thtd_portraits_shinki.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_shinmyoumaru.vtex_c b/game/materials/particle/portraits/thtd_portraits_shinmyoumaru.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_shinmyoumaru.vtex_c rename to game/materials/particle/portraits/thtd_portraits_shinmyoumaru.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_sizuha.vtex_c b/game/materials/particle/portraits/thtd_portraits_sizuha.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_sizuha.vtex_c rename to game/materials/particle/portraits/thtd_portraits_sizuha.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_soga.vtex_c b/game/materials/particle/portraits/thtd_portraits_soga.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_soga.vtex_c rename to game/materials/particle/portraits/thtd_portraits_soga.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_star.vtex_c b/game/materials/particle/portraits/thtd_portraits_star.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_star.vtex_c rename to game/materials/particle/portraits/thtd_portraits_star.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_suika.vtex_c b/game/materials/particle/portraits/thtd_portraits_suika.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_suika.vtex_c rename to game/materials/particle/portraits/thtd_portraits_suika.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_sumireko.vtex_c b/game/materials/particle/portraits/thtd_portraits_sumireko.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_sumireko.vtex_c rename to game/materials/particle/portraits/thtd_portraits_sumireko.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_sunny.vtex_c b/game/materials/particle/portraits/thtd_portraits_sunny.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_sunny.vtex_c rename to game/materials/particle/portraits/thtd_portraits_sunny.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_suwako.vtex_c b/game/materials/particle/portraits/thtd_portraits_suwako.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_suwako.vtex_c rename to game/materials/particle/portraits/thtd_portraits_suwako.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_tenshi.vtex_c b/game/materials/particle/portraits/thtd_portraits_tenshi.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_tenshi.vtex_c rename to game/materials/particle/portraits/thtd_portraits_tenshi.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_toramaru.vtex_c b/game/materials/particle/portraits/thtd_portraits_toramaru.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_toramaru.vtex_c rename to game/materials/particle/portraits/thtd_portraits_toramaru.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_utsuho.vtex_c b/game/materials/particle/portraits/thtd_portraits_utsuho.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_utsuho.vtex_c rename to game/materials/particle/portraits/thtd_portraits_utsuho.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_wriggle.vtex_c b/game/materials/particle/portraits/thtd_portraits_wriggle.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_wriggle.vtex_c rename to game/materials/particle/portraits/thtd_portraits_wriggle.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_yoshika.vtex_c b/game/materials/particle/portraits/thtd_portraits_yoshika.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_yoshika.vtex_c rename to game/materials/particle/portraits/thtd_portraits_yoshika.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_youmu.vtex_c b/game/materials/particle/portraits/thtd_portraits_youmu.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_youmu.vtex_c rename to game/materials/particle/portraits/thtd_portraits_youmu.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_yuakri.vtex_c b/game/materials/particle/portraits/thtd_portraits_yuakri.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_yuakri.vtex_c rename to game/materials/particle/portraits/thtd_portraits_yuakri.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_yukari.vtex_c b/game/materials/particle/portraits/thtd_portraits_yukari.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_yukari.vtex_c rename to game/materials/particle/portraits/thtd_portraits_yukari.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_yumemi.vtex_c b/game/materials/particle/portraits/thtd_portraits_yumemi.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_yumemi.vtex_c rename to game/materials/particle/portraits/thtd_portraits_yumemi.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_yuugi.vtex_c b/game/materials/particle/portraits/thtd_portraits_yuugi.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_yuugi.vtex_c rename to game/materials/particle/portraits/thtd_portraits_yuugi.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_yuuka.vtex_c b/game/materials/particle/portraits/thtd_portraits_yuuka.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_yuuka.vtex_c rename to game/materials/particle/portraits/thtd_portraits_yuuka.vtex_c diff --git a/materials/particle/portraits/thtd_portraits_yuyuko.vtex_c b/game/materials/particle/portraits/thtd_portraits_yuyuko.vtex_c similarity index 100% rename from materials/particle/portraits/thtd_portraits_yuyuko.vtex_c rename to game/materials/particle/portraits/thtd_portraits_yuyuko.vtex_c diff --git a/materials/particle/reimu04_2.vtex_c b/game/materials/particle/reimu04_2.vtex_c similarity index 100% rename from materials/particle/reimu04_2.vtex_c rename to game/materials/particle/reimu04_2.vtex_c diff --git a/materials/particle/remilia/ability_remilia_04.vtex_c b/game/materials/particle/remilia/ability_remilia_04.vtex_c similarity index 100% rename from materials/particle/remilia/ability_remilia_04.vtex_c rename to game/materials/particle/remilia/ability_remilia_04.vtex_c diff --git a/materials/particle/thd2/nuclear.vtex_c b/game/materials/particle/thd2/nuclear.vtex_c similarity index 100% rename from materials/particle/thd2/nuclear.vtex_c rename to game/materials/particle/thd2/nuclear.vtex_c diff --git a/materials/particle/thd2/youmu.vtex_c b/game/materials/particle/thd2/youmu.vtex_c similarity index 100% rename from materials/particle/thd2/youmu.vtex_c rename to game/materials/particle/thd2/youmu.vtex_c diff --git a/materials/particle/timeaura.vtex_c b/game/materials/particle/timeaura.vtex_c similarity index 100% rename from materials/particle/timeaura.vtex_c rename to game/materials/particle/timeaura.vtex_c diff --git a/materials/particle/yugi_slam.vtex_c b/game/materials/particle/yugi_slam.vtex_c similarity index 100% rename from materials/particle/yugi_slam.vtex_c rename to game/materials/particle/yugi_slam.vtex_c diff --git a/materials/pumpkin.vmdl_c b/game/materials/pumpkin.vmdl_c similarity index 100% rename from materials/pumpkin.vmdl_c rename to game/materials/pumpkin.vmdl_c diff --git a/materials/pumpkin.vmesh_c b/game/materials/pumpkin.vmesh_c similarity index 100% rename from materials/pumpkin.vmesh_c rename to game/materials/pumpkin.vmesh_c diff --git a/materials/thd2/fantasy_seal_a1_tga_4f53a520.vtex_c b/game/materials/thd2/fantasy_seal_a1_tga_4f53a520.vtex_c similarity index 100% rename from materials/thd2/fantasy_seal_a1_tga_4f53a520.vtex_c rename to game/materials/thd2/fantasy_seal_a1_tga_4f53a520.vtex_c diff --git a/materials/thd2/fantasy_seal_a2_tga_a8a9082e.vtex_c b/game/materials/thd2/fantasy_seal_a2_tga_a8a9082e.vtex_c similarity index 100% rename from materials/thd2/fantasy_seal_a2_tga_a8a9082e.vtex_c rename to game/materials/thd2/fantasy_seal_a2_tga_a8a9082e.vtex_c diff --git a/materials/thd2/firewing_tga_d4a4a0c0.vtex_c b/game/materials/thd2/firewing_tga_d4a4a0c0.vtex_c similarity index 100% rename from materials/thd2/firewing_tga_d4a4a0c0.vtex_c rename to game/materials/thd2/firewing_tga_d4a4a0c0.vtex_c diff --git a/materials/thd2/phoenix2_nrm_tga_ef47ef6c.vtex_c b/game/materials/thd2/phoenix2_nrm_tga_ef47ef6c.vtex_c similarity index 100% rename from materials/thd2/phoenix2_nrm_tga_ef47ef6c.vtex_c rename to game/materials/thd2/phoenix2_nrm_tga_ef47ef6c.vtex_c diff --git a/materials/thd2/yugi_slam_tga_ddfd64bd.vtex_c b/game/materials/thd2/yugi_slam_tga_ddfd64bd.vtex_c similarity index 100% rename from materials/thd2/yugi_slam_tga_ddfd64bd.vtex_c rename to game/materials/thd2/yugi_slam_tga_ddfd64bd.vtex_c diff --git a/materials/thd2/yuyuko_fan_tga_4a59f131.vtex_c b/game/materials/thd2/yuyuko_fan_tga_4a59f131.vtex_c similarity index 100% rename from materials/thd2/yuyuko_fan_tga_4a59f131.vtex_c rename to game/materials/thd2/yuyuko_fan_tga_4a59f131.vtex_c diff --git a/materials/thd_hero/alice/alice.vmat_c b/game/materials/thd_hero/alice/alice.vmat_c similarity index 100% rename from materials/thd_hero/alice/alice.vmat_c rename to game/materials/thd_hero/alice/alice.vmat_c diff --git a/materials/thd_hero/alice/alice_tga_18584af9.vtex_c b/game/materials/thd_hero/alice/alice_tga_18584af9.vtex_c similarity index 100% rename from materials/thd_hero/alice/alice_tga_18584af9.vtex_c rename to game/materials/thd_hero/alice/alice_tga_18584af9.vtex_c diff --git a/materials/thd_hero/alice/alice_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/alice/alice_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/alice/alice_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/alice/alice_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/aya/aya.vmat_c b/game/materials/thd_hero/aya/aya.vmat_c similarity index 100% rename from materials/thd_hero/aya/aya.vmat_c rename to game/materials/thd_hero/aya/aya.vmat_c diff --git a/materials/thd_hero/aya/aya_tga_fbd5d659.vtex_c b/game/materials/thd_hero/aya/aya_tga_fbd5d659.vtex_c similarity index 100% rename from materials/thd_hero/aya/aya_tga_fbd5d659.vtex_c rename to game/materials/thd_hero/aya/aya_tga_fbd5d659.vtex_c diff --git a/materials/thd_hero/aya/aya_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/aya/aya_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/aya/aya_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/aya/aya_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/byakuren/byakuren.vmat_c b/game/materials/thd_hero/byakuren/byakuren.vmat_c similarity index 100% rename from materials/thd_hero/byakuren/byakuren.vmat_c rename to game/materials/thd_hero/byakuren/byakuren.vmat_c diff --git a/materials/thd_hero/byakuren/byakuren_gz.vmat_c b/game/materials/thd_hero/byakuren/byakuren_gz.vmat_c similarity index 100% rename from materials/thd_hero/byakuren/byakuren_gz.vmat_c rename to game/materials/thd_hero/byakuren/byakuren_gz.vmat_c diff --git a/materials/thd_hero/byakuren/byakuren_gz_tga_246f1bba.vtex_c b/game/materials/thd_hero/byakuren/byakuren_gz_tga_246f1bba.vtex_c similarity index 100% rename from materials/thd_hero/byakuren/byakuren_gz_tga_246f1bba.vtex_c rename to game/materials/thd_hero/byakuren/byakuren_gz_tga_246f1bba.vtex_c diff --git a/materials/thd_hero/byakuren/byakuren_gz_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/byakuren/byakuren_gz_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/byakuren/byakuren_gz_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/byakuren/byakuren_gz_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/byakuren/byakuren_tga_c289bd85.vtex_c b/game/materials/thd_hero/byakuren/byakuren_tga_c289bd85.vtex_c similarity index 100% rename from materials/thd_hero/byakuren/byakuren_tga_c289bd85.vtex_c rename to game/materials/thd_hero/byakuren/byakuren_tga_c289bd85.vtex_c diff --git a/materials/thd_hero/byakuren/byakuren_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/byakuren/byakuren_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/byakuren/byakuren_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/byakuren/byakuren_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/chen/chen.vmat_c b/game/materials/thd_hero/chen/chen.vmat_c similarity index 100% rename from materials/thd_hero/chen/chen.vmat_c rename to game/materials/thd_hero/chen/chen.vmat_c diff --git a/materials/thd_hero/chen/chen_tga_41e7bc62.vtex_c b/game/materials/thd_hero/chen/chen_tga_41e7bc62.vtex_c similarity index 100% rename from materials/thd_hero/chen/chen_tga_41e7bc62.vtex_c rename to game/materials/thd_hero/chen/chen_tga_41e7bc62.vtex_c diff --git a/materials/thd_hero/chen/chen_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/chen/chen_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/chen/chen_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/chen/chen_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/daiyousei/daiyousei.vmat_c b/game/materials/thd_hero/daiyousei/daiyousei.vmat_c similarity index 100% rename from materials/thd_hero/daiyousei/daiyousei.vmat_c rename to game/materials/thd_hero/daiyousei/daiyousei.vmat_c diff --git a/materials/thd_hero/daiyousei/daiyousei2.vmat_c b/game/materials/thd_hero/daiyousei/daiyousei2.vmat_c similarity index 100% rename from materials/thd_hero/daiyousei/daiyousei2.vmat_c rename to game/materials/thd_hero/daiyousei/daiyousei2.vmat_c diff --git a/materials/thd_hero/daiyousei/daiyousei2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/daiyousei/daiyousei2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/daiyousei/daiyousei2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/daiyousei/daiyousei2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/daiyousei/daiyousei_tga_c1256b84.vtex_c b/game/materials/thd_hero/daiyousei/daiyousei_tga_c1256b84.vtex_c similarity index 100% rename from materials/thd_hero/daiyousei/daiyousei_tga_c1256b84.vtex_c rename to game/materials/thd_hero/daiyousei/daiyousei_tga_c1256b84.vtex_c diff --git a/materials/thd_hero/daiyousei/daiyousei_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/daiyousei/daiyousei_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/daiyousei/daiyousei_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/daiyousei/daiyousei_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/eirin/eirin.vmat_c b/game/materials/thd_hero/eirin/eirin.vmat_c similarity index 100% rename from materials/thd_hero/eirin/eirin.vmat_c rename to game/materials/thd_hero/eirin/eirin.vmat_c diff --git a/materials/thd_hero/eirin/eirin_tga_22662c59.vtex_c b/game/materials/thd_hero/eirin/eirin_tga_22662c59.vtex_c similarity index 100% rename from materials/thd_hero/eirin/eirin_tga_22662c59.vtex_c rename to game/materials/thd_hero/eirin/eirin_tga_22662c59.vtex_c diff --git a/materials/thd_hero/eirin/eirin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/eirin/eirin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/eirin/eirin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/eirin/eirin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/futo/blue.vmat_c b/game/materials/thd_hero/futo/blue.vmat_c similarity index 100% rename from materials/thd_hero/futo/blue.vmat_c rename to game/materials/thd_hero/futo/blue.vmat_c diff --git a/materials/thd_hero/futo/blue_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/futo/blue_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/futo/blue_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/futo/blue_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/futo/cyan.vmat_c b/game/materials/thd_hero/futo/cyan.vmat_c similarity index 100% rename from materials/thd_hero/futo/cyan.vmat_c rename to game/materials/thd_hero/futo/cyan.vmat_c diff --git a/materials/thd_hero/futo/cyan_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/futo/cyan_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/futo/cyan_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/futo/cyan_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/futo/futo.vmat_c b/game/materials/thd_hero/futo/futo.vmat_c similarity index 100% rename from materials/thd_hero/futo/futo.vmat_c rename to game/materials/thd_hero/futo/futo.vmat_c diff --git a/materials/thd_hero/futo/futo2_tga_258bb3e7.vtex_c b/game/materials/thd_hero/futo/futo2_tga_258bb3e7.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo2_tga_258bb3e7.vtex_c rename to game/materials/thd_hero/futo/futo2_tga_258bb3e7.vtex_c diff --git a/materials/thd_hero/futo/futo_blue_tga_5fc65f2b.vtex_c b/game/materials/thd_hero/futo/futo_blue_tga_5fc65f2b.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_blue_tga_5fc65f2b.vtex_c rename to game/materials/thd_hero/futo/futo_blue_tga_5fc65f2b.vtex_c diff --git a/materials/thd_hero/futo/futo_cyan_tga_c6f3a534.vtex_c b/game/materials/thd_hero/futo/futo_cyan_tga_c6f3a534.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_cyan_tga_c6f3a534.vtex_c rename to game/materials/thd_hero/futo/futo_cyan_tga_c6f3a534.vtex_c diff --git a/materials/thd_hero/futo/futo_green_tga_69eecc3f.vtex_c b/game/materials/thd_hero/futo/futo_green_tga_69eecc3f.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_green_tga_69eecc3f.vtex_c rename to game/materials/thd_hero/futo/futo_green_tga_69eecc3f.vtex_c diff --git a/materials/thd_hero/futo/futo_orange_tga_71cfea6b.vtex_c b/game/materials/thd_hero/futo/futo_orange_tga_71cfea6b.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_orange_tga_71cfea6b.vtex_c rename to game/materials/thd_hero/futo/futo_orange_tga_71cfea6b.vtex_c diff --git a/materials/thd_hero/futo/futo_red_tga_2a3f02b9.vtex_c b/game/materials/thd_hero/futo/futo_red_tga_2a3f02b9.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_red_tga_2a3f02b9.vtex_c rename to game/materials/thd_hero/futo/futo_red_tga_2a3f02b9.vtex_c diff --git a/materials/thd_hero/futo/futo_tga_1f087d7d.vtex_c b/game/materials/thd_hero/futo/futo_tga_1f087d7d.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_tga_1f087d7d.vtex_c rename to game/materials/thd_hero/futo/futo_tga_1f087d7d.vtex_c diff --git a/materials/thd_hero/futo/futo_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/futo/futo_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/futo/futo_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/futo/futo_yellow_tga_9608b88.vtex_c b/game/materials/thd_hero/futo/futo_yellow_tga_9608b88.vtex_c similarity index 100% rename from materials/thd_hero/futo/futo_yellow_tga_9608b88.vtex_c rename to game/materials/thd_hero/futo/futo_yellow_tga_9608b88.vtex_c diff --git a/materials/thd_hero/futo/green.vmat_c b/game/materials/thd_hero/futo/green.vmat_c similarity index 100% rename from materials/thd_hero/futo/green.vmat_c rename to game/materials/thd_hero/futo/green.vmat_c diff --git a/materials/thd_hero/futo/green_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/futo/green_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/futo/green_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/futo/green_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/futo/orange.vmat_c b/game/materials/thd_hero/futo/orange.vmat_c similarity index 100% rename from materials/thd_hero/futo/orange.vmat_c rename to game/materials/thd_hero/futo/orange.vmat_c diff --git a/materials/thd_hero/futo/orange_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/futo/orange_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/futo/orange_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/futo/orange_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/futo/red.vmat_c b/game/materials/thd_hero/futo/red.vmat_c similarity index 100% rename from materials/thd_hero/futo/red.vmat_c rename to game/materials/thd_hero/futo/red.vmat_c diff --git a/materials/thd_hero/futo/red_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/futo/red_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/futo/red_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/futo/red_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/futo/yellow.vmat_c b/game/materials/thd_hero/futo/yellow.vmat_c similarity index 100% rename from materials/thd_hero/futo/yellow.vmat_c rename to game/materials/thd_hero/futo/yellow.vmat_c diff --git a/materials/thd_hero/futo/yellow_vmat_g_tdetail_e81d3561.vtex_c b/game/materials/thd_hero/futo/yellow_vmat_g_tdetail_e81d3561.vtex_c similarity index 100% rename from materials/thd_hero/futo/yellow_vmat_g_tdetail_e81d3561.vtex_c rename to game/materials/thd_hero/futo/yellow_vmat_g_tdetail_e81d3561.vtex_c diff --git a/materials/thd_hero/futo/yellow_vmat_g_tdetail_fb11e019.vtex_c b/game/materials/thd_hero/futo/yellow_vmat_g_tdetail_fb11e019.vtex_c similarity index 100% rename from materials/thd_hero/futo/yellow_vmat_g_tdetail_fb11e019.vtex_c rename to game/materials/thd_hero/futo/yellow_vmat_g_tdetail_fb11e019.vtex_c diff --git a/materials/thd_hero/futo/yellow_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/futo/yellow_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/futo/yellow_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/futo/yellow_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/hanadayousei/hanadayousei.vmat_c b/game/materials/thd_hero/hanadayousei/hanadayousei.vmat_c similarity index 100% rename from materials/thd_hero/hanadayousei/hanadayousei.vmat_c rename to game/materials/thd_hero/hanadayousei/hanadayousei.vmat_c diff --git a/materials/thd_hero/hanadayousei/hanadayousei2.vmat_c b/game/materials/thd_hero/hanadayousei/hanadayousei2.vmat_c similarity index 100% rename from materials/thd_hero/hanadayousei/hanadayousei2.vmat_c rename to game/materials/thd_hero/hanadayousei/hanadayousei2.vmat_c diff --git a/materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tcolor_c677f2a8.vtex_c b/game/materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tcolor_c677f2a8.vtex_c similarity index 100% rename from materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tcolor_c677f2a8.vtex_c rename to game/materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tcolor_c677f2a8.vtex_c diff --git a/materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/hanadayousei/hanadayousei2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/hanadayousei/hanadayousei_tga_69bd7afa.vtex_c b/game/materials/thd_hero/hanadayousei/hanadayousei_tga_69bd7afa.vtex_c similarity index 100% rename from materials/thd_hero/hanadayousei/hanadayousei_tga_69bd7afa.vtex_c rename to game/materials/thd_hero/hanadayousei/hanadayousei_tga_69bd7afa.vtex_c diff --git a/materials/thd_hero/hanadayousei/hanadayousei_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/hanadayousei/hanadayousei_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/hanadayousei/hanadayousei_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/hanadayousei/hanadayousei_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/hatate/hatate.vmat_c b/game/materials/thd_hero/hatate/hatate.vmat_c similarity index 100% rename from materials/thd_hero/hatate/hatate.vmat_c rename to game/materials/thd_hero/hatate/hatate.vmat_c diff --git a/materials/thd_hero/hatate/hatate_tga_2f75e4fd.vtex_c b/game/materials/thd_hero/hatate/hatate_tga_2f75e4fd.vtex_c similarity index 100% rename from materials/thd_hero/hatate/hatate_tga_2f75e4fd.vtex_c rename to game/materials/thd_hero/hatate/hatate_tga_2f75e4fd.vtex_c diff --git a/materials/thd_hero/hatate/hatate_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/hatate/hatate_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/hatate/hatate_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/hatate/hatate_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/hina/hina.vmat_c b/game/materials/thd_hero/hina/hina.vmat_c similarity index 100% rename from materials/thd_hero/hina/hina.vmat_c rename to game/materials/thd_hero/hina/hina.vmat_c diff --git a/materials/thd_hero/hina/hina_tga_6c1ccb56.vtex_c b/game/materials/thd_hero/hina/hina_tga_6c1ccb56.vtex_c similarity index 100% rename from materials/thd_hero/hina/hina_tga_6c1ccb56.vtex_c rename to game/materials/thd_hero/hina/hina_tga_6c1ccb56.vtex_c diff --git a/materials/thd_hero/hina/hina_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/hina/hina_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/hina/hina_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/hina/hina_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/iku/iku.vmat_c b/game/materials/thd_hero/iku/iku.vmat_c similarity index 100% rename from materials/thd_hero/iku/iku.vmat_c rename to game/materials/thd_hero/iku/iku.vmat_c diff --git a/materials/thd_hero/iku/iku_tga_5edcff5f.vtex_c b/game/materials/thd_hero/iku/iku_tga_5edcff5f.vtex_c similarity index 100% rename from materials/thd_hero/iku/iku_tga_5edcff5f.vtex_c rename to game/materials/thd_hero/iku/iku_tga_5edcff5f.vtex_c diff --git a/materials/thd_hero/iku/iku_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/iku/iku_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/iku/iku_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/iku/iku_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kagerou/kagerou.vmat_c b/game/materials/thd_hero/kagerou/kagerou.vmat_c similarity index 100% rename from materials/thd_hero/kagerou/kagerou.vmat_c rename to game/materials/thd_hero/kagerou/kagerou.vmat_c diff --git a/materials/thd_hero/kagerou/kagerou_tga_74815e20.vtex_c b/game/materials/thd_hero/kagerou/kagerou_tga_74815e20.vtex_c similarity index 100% rename from materials/thd_hero/kagerou/kagerou_tga_74815e20.vtex_c rename to game/materials/thd_hero/kagerou/kagerou_tga_74815e20.vtex_c diff --git a/materials/thd_hero/kagerou/kagerou_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kagerou/kagerou_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kagerou/kagerou_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kagerou/kagerou_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kaguya/kaguya.vmat_c b/game/materials/thd_hero/kaguya/kaguya.vmat_c similarity index 100% rename from materials/thd_hero/kaguya/kaguya.vmat_c rename to game/materials/thd_hero/kaguya/kaguya.vmat_c diff --git a/materials/thd_hero/kaguya/kaguya_tga_e809446d.vtex_c b/game/materials/thd_hero/kaguya/kaguya_tga_e809446d.vtex_c similarity index 100% rename from materials/thd_hero/kaguya/kaguya_tga_e809446d.vtex_c rename to game/materials/thd_hero/kaguya/kaguya_tga_e809446d.vtex_c diff --git a/materials/thd_hero/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kaguya/kaguya_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kanako/aya.vmat_c b/game/materials/thd_hero/kanako/aya.vmat_c similarity index 100% rename from materials/thd_hero/kanako/aya.vmat_c rename to game/materials/thd_hero/kanako/aya.vmat_c diff --git a/materials/thd_hero/kanako/aya_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kanako/aya_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kanako/aya_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kanako/aya_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kanako/kanako.vmat_c b/game/materials/thd_hero/kanako/kanako.vmat_c similarity index 100% rename from materials/thd_hero/kanako/kanako.vmat_c rename to game/materials/thd_hero/kanako/kanako.vmat_c diff --git a/materials/thd_hero/kanako/kanako_tga_dc08fb43.vtex_c b/game/materials/thd_hero/kanako/kanako_tga_dc08fb43.vtex_c similarity index 100% rename from materials/thd_hero/kanako/kanako_tga_dc08fb43.vtex_c rename to game/materials/thd_hero/kanako/kanako_tga_dc08fb43.vtex_c diff --git a/materials/thd_hero/kanako/kanako_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kanako/kanako_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kanako/kanako_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kanako/kanako_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/keine/keine.vmat_c b/game/materials/thd_hero/keine/keine.vmat_c similarity index 100% rename from materials/thd_hero/keine/keine.vmat_c rename to game/materials/thd_hero/keine/keine.vmat_c diff --git a/materials/thd_hero/keine/keine_2.vmat_c b/game/materials/thd_hero/keine/keine_2.vmat_c similarity index 100% rename from materials/thd_hero/keine/keine_2.vmat_c rename to game/materials/thd_hero/keine/keine_2.vmat_c diff --git a/materials/thd_hero/keine/keine_2_tga_19652e5a.vtex_c b/game/materials/thd_hero/keine/keine_2_tga_19652e5a.vtex_c similarity index 100% rename from materials/thd_hero/keine/keine_2_tga_19652e5a.vtex_c rename to game/materials/thd_hero/keine/keine_2_tga_19652e5a.vtex_c diff --git a/materials/thd_hero/keine/keine_2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/keine/keine_2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/keine/keine_2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/keine/keine_2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/keine/keine_tga_24e10455.vtex_c b/game/materials/thd_hero/keine/keine_tga_24e10455.vtex_c similarity index 100% rename from materials/thd_hero/keine/keine_tga_24e10455.vtex_c rename to game/materials/thd_hero/keine/keine_tga_24e10455.vtex_c diff --git a/materials/thd_hero/keine/keine_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/keine/keine_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/keine/keine_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/keine/keine_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kisume/kisume.vmat_c b/game/materials/thd_hero/kisume/kisume.vmat_c similarity index 100% rename from materials/thd_hero/kisume/kisume.vmat_c rename to game/materials/thd_hero/kisume/kisume.vmat_c diff --git a/materials/thd_hero/kisume/kisume_tga_ff9bd729.vtex_c b/game/materials/thd_hero/kisume/kisume_tga_ff9bd729.vtex_c similarity index 100% rename from materials/thd_hero/kisume/kisume_tga_ff9bd729.vtex_c rename to game/materials/thd_hero/kisume/kisume_tga_ff9bd729.vtex_c diff --git a/materials/thd_hero/kisume/kisume_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kisume/kisume_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kisume/kisume_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kisume/kisume_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/koakuma/koakuma.vmat_c b/game/materials/thd_hero/koakuma/koakuma.vmat_c similarity index 100% rename from materials/thd_hero/koakuma/koakuma.vmat_c rename to game/materials/thd_hero/koakuma/koakuma.vmat_c diff --git a/materials/thd_hero/koakuma/koakuma_tga_97db6b1e.vtex_c b/game/materials/thd_hero/koakuma/koakuma_tga_97db6b1e.vtex_c similarity index 100% rename from materials/thd_hero/koakuma/koakuma_tga_97db6b1e.vtex_c rename to game/materials/thd_hero/koakuma/koakuma_tga_97db6b1e.vtex_c diff --git a/materials/thd_hero/koakuma/koakuma_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/koakuma/koakuma_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/koakuma/koakuma_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/koakuma/koakuma_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kogasa/kogasa.vmat_c b/game/materials/thd_hero/kogasa/kogasa.vmat_c similarity index 100% rename from materials/thd_hero/kogasa/kogasa.vmat_c rename to game/materials/thd_hero/kogasa/kogasa.vmat_c diff --git a/materials/thd_hero/kogasa/kogasa_tga_a8591f08.vtex_c b/game/materials/thd_hero/kogasa/kogasa_tga_a8591f08.vtex_c similarity index 100% rename from materials/thd_hero/kogasa/kogasa_tga_a8591f08.vtex_c rename to game/materials/thd_hero/kogasa/kogasa_tga_a8591f08.vtex_c diff --git a/materials/thd_hero/kogasa/kogasa_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kogasa/kogasa_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kogasa/kogasa_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kogasa/kogasa_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kumoi/kumoi.vmat_c b/game/materials/thd_hero/kumoi/kumoi.vmat_c similarity index 100% rename from materials/thd_hero/kumoi/kumoi.vmat_c rename to game/materials/thd_hero/kumoi/kumoi.vmat_c diff --git a/materials/thd_hero/kumoi/kumoi_tga_45b25c30.vtex_c b/game/materials/thd_hero/kumoi/kumoi_tga_45b25c30.vtex_c similarity index 100% rename from materials/thd_hero/kumoi/kumoi_tga_45b25c30.vtex_c rename to game/materials/thd_hero/kumoi/kumoi_tga_45b25c30.vtex_c diff --git a/materials/thd_hero/kumoi/kumoi_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kumoi/kumoi_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kumoi/kumoi_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kumoi/kumoi_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/kyouko/kyouko.vmat_c b/game/materials/thd_hero/kyouko/kyouko.vmat_c similarity index 100% rename from materials/thd_hero/kyouko/kyouko.vmat_c rename to game/materials/thd_hero/kyouko/kyouko.vmat_c diff --git a/materials/thd_hero/kyouko/kyouko_tga_5843f0d4.vtex_c b/game/materials/thd_hero/kyouko/kyouko_tga_5843f0d4.vtex_c similarity index 100% rename from materials/thd_hero/kyouko/kyouko_tga_5843f0d4.vtex_c rename to game/materials/thd_hero/kyouko/kyouko_tga_5843f0d4.vtex_c diff --git a/materials/thd_hero/kyouko/kyouko_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/kyouko/kyouko_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/kyouko/kyouko_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/kyouko/kyouko_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/letty/letty.vmat_c b/game/materials/thd_hero/letty/letty.vmat_c similarity index 100% rename from materials/thd_hero/letty/letty.vmat_c rename to game/materials/thd_hero/letty/letty.vmat_c diff --git a/materials/thd_hero/letty/letty_tga_de4a83ee.vtex_c b/game/materials/thd_hero/letty/letty_tga_de4a83ee.vtex_c similarity index 100% rename from materials/thd_hero/letty/letty_tga_de4a83ee.vtex_c rename to game/materials/thd_hero/letty/letty_tga_de4a83ee.vtex_c diff --git a/materials/thd_hero/letty/letty_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/letty/letty_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/letty/letty_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/letty/letty_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/lily_white/lily_white.vmat_c b/game/materials/thd_hero/lily_white/lily_white.vmat_c similarity index 100% rename from materials/thd_hero/lily_white/lily_white.vmat_c rename to game/materials/thd_hero/lily_white/lily_white.vmat_c diff --git a/materials/thd_hero/lily_white/lily_white2.vmat_c b/game/materials/thd_hero/lily_white/lily_white2.vmat_c similarity index 100% rename from materials/thd_hero/lily_white/lily_white2.vmat_c rename to game/materials/thd_hero/lily_white/lily_white2.vmat_c diff --git a/materials/thd_hero/lily_white/lily_white2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/lily_white/lily_white2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/lily_white/lily_white2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/lily_white/lily_white2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/lily_white/lily_white_tga_a989b872.vtex_c b/game/materials/thd_hero/lily_white/lily_white_tga_a989b872.vtex_c similarity index 100% rename from materials/thd_hero/lily_white/lily_white_tga_a989b872.vtex_c rename to game/materials/thd_hero/lily_white/lily_white_tga_a989b872.vtex_c diff --git a/materials/thd_hero/lily_white/lily_white_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/lily_white/lily_white_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/lily_white/lily_white_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/lily_white/lily_white_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/luna/luna_tga_46072901.vtex_c b/game/materials/thd_hero/luna/luna_tga_46072901.vtex_c similarity index 100% rename from materials/thd_hero/luna/luna_tga_46072901.vtex_c rename to game/materials/thd_hero/luna/luna_tga_46072901.vtex_c diff --git a/materials/thd_hero/luna/luna_tga_b816aecc.vtex_c b/game/materials/thd_hero/luna/luna_tga_b816aecc.vtex_c similarity index 100% rename from materials/thd_hero/luna/luna_tga_b816aecc.vtex_c rename to game/materials/thd_hero/luna/luna_tga_b816aecc.vtex_c diff --git a/materials/thd_hero/luna/lunar.vmat_c b/game/materials/thd_hero/luna/lunar.vmat_c similarity index 100% rename from materials/thd_hero/luna/lunar.vmat_c rename to game/materials/thd_hero/luna/lunar.vmat_c diff --git a/materials/thd_hero/luna/lunar2.vmat_c b/game/materials/thd_hero/luna/lunar2.vmat_c similarity index 100% rename from materials/thd_hero/luna/lunar2.vmat_c rename to game/materials/thd_hero/luna/lunar2.vmat_c diff --git a/materials/thd_hero/luna/lunar2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/luna/lunar2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/luna/lunar2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/luna/lunar2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/luna/lunar3.vmat_c b/game/materials/thd_hero/luna/lunar3.vmat_c similarity index 100% rename from materials/thd_hero/luna/lunar3.vmat_c rename to game/materials/thd_hero/luna/lunar3.vmat_c diff --git a/materials/thd_hero/luna/lunar3_vmat_g_tcolor_e8a2e485.vtex_c b/game/materials/thd_hero/luna/lunar3_vmat_g_tcolor_e8a2e485.vtex_c similarity index 100% rename from materials/thd_hero/luna/lunar3_vmat_g_tcolor_e8a2e485.vtex_c rename to game/materials/thd_hero/luna/lunar3_vmat_g_tcolor_e8a2e485.vtex_c diff --git a/materials/thd_hero/luna/lunar3_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/luna/lunar3_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/luna/lunar3_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/luna/lunar3_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/luna/lunar_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/luna/lunar_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/luna/lunar_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/luna/lunar_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/maidyousei/maidyousei.vmat_c b/game/materials/thd_hero/maidyousei/maidyousei.vmat_c similarity index 100% rename from materials/thd_hero/maidyousei/maidyousei.vmat_c rename to game/materials/thd_hero/maidyousei/maidyousei.vmat_c diff --git a/materials/thd_hero/maidyousei/maidyousei2.vmat_c b/game/materials/thd_hero/maidyousei/maidyousei2.vmat_c similarity index 100% rename from materials/thd_hero/maidyousei/maidyousei2.vmat_c rename to game/materials/thd_hero/maidyousei/maidyousei2.vmat_c diff --git a/materials/thd_hero/maidyousei/maidyousei2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/maidyousei/maidyousei2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/maidyousei/maidyousei2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/maidyousei/maidyousei2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/maidyousei/maidyousei_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/maidyousei/maidyousei_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/maidyousei/maidyousei_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/maidyousei/maidyousei_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/maidyousei/soldiers_far_red_tga_52f18576.vtex_c b/game/materials/thd_hero/maidyousei/soldiers_far_red_tga_52f18576.vtex_c similarity index 100% rename from materials/thd_hero/maidyousei/soldiers_far_red_tga_52f18576.vtex_c rename to game/materials/thd_hero/maidyousei/soldiers_far_red_tga_52f18576.vtex_c diff --git a/materials/thd_hero/medicine/medicine.vmat_c b/game/materials/thd_hero/medicine/medicine.vmat_c similarity index 100% rename from materials/thd_hero/medicine/medicine.vmat_c rename to game/materials/thd_hero/medicine/medicine.vmat_c diff --git a/materials/thd_hero/medicine/medicine_tga_aff12530.vtex_c b/game/materials/thd_hero/medicine/medicine_tga_aff12530.vtex_c similarity index 100% rename from materials/thd_hero/medicine/medicine_tga_aff12530.vtex_c rename to game/materials/thd_hero/medicine/medicine_tga_aff12530.vtex_c diff --git a/materials/thd_hero/medicine/medicine_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/medicine/medicine_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/medicine/medicine_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/medicine/medicine_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/meirin/cloth01/meirin_cloth01.vmat_c b/game/materials/thd_hero/meirin/cloth01/meirin_cloth01.vmat_c similarity index 100% rename from materials/thd_hero/meirin/cloth01/meirin_cloth01.vmat_c rename to game/materials/thd_hero/meirin/cloth01/meirin_cloth01.vmat_c diff --git a/materials/thd_hero/meirin/cloth01/meirin_cloth01_tga_d3654b00.vtex_c b/game/materials/thd_hero/meirin/cloth01/meirin_cloth01_tga_d3654b00.vtex_c similarity index 100% rename from materials/thd_hero/meirin/cloth01/meirin_cloth01_tga_d3654b00.vtex_c rename to game/materials/thd_hero/meirin/cloth01/meirin_cloth01_tga_d3654b00.vtex_c diff --git a/materials/thd_hero/meirin/cloth01/meirin_cloth01_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/meirin/cloth01/meirin_cloth01_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/meirin/cloth01/meirin_cloth01_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/meirin/cloth01/meirin_cloth01_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/meirin/meirin.vmat_c b/game/materials/thd_hero/meirin/meirin.vmat_c similarity index 100% rename from materials/thd_hero/meirin/meirin.vmat_c rename to game/materials/thd_hero/meirin/meirin.vmat_c diff --git a/materials/thd_hero/meirin/meirin_tga_c947f470.vtex_c b/game/materials/thd_hero/meirin/meirin_tga_c947f470.vtex_c similarity index 100% rename from materials/thd_hero/meirin/meirin_tga_c947f470.vtex_c rename to game/materials/thd_hero/meirin/meirin_tga_c947f470.vtex_c diff --git a/materials/thd_hero/meirin/meirin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/meirin/meirin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/meirin/meirin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/meirin/meirin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/miko/miko.vmat_c b/game/materials/thd_hero/miko/miko.vmat_c similarity index 100% rename from materials/thd_hero/miko/miko.vmat_c rename to game/materials/thd_hero/miko/miko.vmat_c diff --git a/materials/thd_hero/miko/miko_tga_c40f5acf.vtex_c b/game/materials/thd_hero/miko/miko_tga_c40f5acf.vtex_c similarity index 100% rename from materials/thd_hero/miko/miko_tga_c40f5acf.vtex_c rename to game/materials/thd_hero/miko/miko_tga_c40f5acf.vtex_c diff --git a/materials/thd_hero/miko/miko_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/miko/miko_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/miko/miko_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/miko/miko_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/minamitsu/minamitsu.vmat_c b/game/materials/thd_hero/minamitsu/minamitsu.vmat_c similarity index 100% rename from materials/thd_hero/minamitsu/minamitsu.vmat_c rename to game/materials/thd_hero/minamitsu/minamitsu.vmat_c diff --git a/materials/thd_hero/minamitsu/minamitsu_tga_b41da9bb.vtex_c b/game/materials/thd_hero/minamitsu/minamitsu_tga_b41da9bb.vtex_c similarity index 100% rename from materials/thd_hero/minamitsu/minamitsu_tga_b41da9bb.vtex_c rename to game/materials/thd_hero/minamitsu/minamitsu_tga_b41da9bb.vtex_c diff --git a/materials/thd_hero/minamitsu/minamitsu_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/minamitsu/minamitsu_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/minamitsu/minamitsu_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/minamitsu/minamitsu_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/minoriko/minoriko.vmat_c b/game/materials/thd_hero/minoriko/minoriko.vmat_c similarity index 100% rename from materials/thd_hero/minoriko/minoriko.vmat_c rename to game/materials/thd_hero/minoriko/minoriko.vmat_c diff --git a/materials/thd_hero/minoriko/minoriko_tga_2b09e938.vtex_c b/game/materials/thd_hero/minoriko/minoriko_tga_2b09e938.vtex_c similarity index 100% rename from materials/thd_hero/minoriko/minoriko_tga_2b09e938.vtex_c rename to game/materials/thd_hero/minoriko/minoriko_tga_2b09e938.vtex_c diff --git a/materials/thd_hero/minoriko/minoriko_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/minoriko/minoriko_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/minoriko/minoriko_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/minoriko/minoriko_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/mokou/mokou.vmat_c b/game/materials/thd_hero/mokou/mokou.vmat_c similarity index 100% rename from materials/thd_hero/mokou/mokou.vmat_c rename to game/materials/thd_hero/mokou/mokou.vmat_c diff --git a/materials/thd_hero/mokou/mokou_tga_1103ab21.vtex_c b/game/materials/thd_hero/mokou/mokou_tga_1103ab21.vtex_c similarity index 100% rename from materials/thd_hero/mokou/mokou_tga_1103ab21.vtex_c rename to game/materials/thd_hero/mokou/mokou_tga_1103ab21.vtex_c diff --git a/materials/thd_hero/mokou/mokou_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/mokou/mokou_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/mokou/mokou_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/mokou/mokou_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/momiji/momiji.vmat_c b/game/materials/thd_hero/momiji/momiji.vmat_c similarity index 100% rename from materials/thd_hero/momiji/momiji.vmat_c rename to game/materials/thd_hero/momiji/momiji.vmat_c diff --git a/materials/thd_hero/momiji/momiji_tga_49d2e202.vtex_c b/game/materials/thd_hero/momiji/momiji_tga_49d2e202.vtex_c similarity index 100% rename from materials/thd_hero/momiji/momiji_tga_49d2e202.vtex_c rename to game/materials/thd_hero/momiji/momiji_tga_49d2e202.vtex_c diff --git a/materials/thd_hero/momiji/momiji_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/momiji/momiji_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/momiji/momiji_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/momiji/momiji_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/mugiyousei/mugiyousei.vmat_c b/game/materials/thd_hero/mugiyousei/mugiyousei.vmat_c similarity index 100% rename from materials/thd_hero/mugiyousei/mugiyousei.vmat_c rename to game/materials/thd_hero/mugiyousei/mugiyousei.vmat_c diff --git a/materials/thd_hero/mugiyousei/mugiyousei2.vmat_c b/game/materials/thd_hero/mugiyousei/mugiyousei2.vmat_c similarity index 100% rename from materials/thd_hero/mugiyousei/mugiyousei2.vmat_c rename to game/materials/thd_hero/mugiyousei/mugiyousei2.vmat_c diff --git a/materials/thd_hero/mugiyousei/mugiyousei2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/mugiyousei/mugiyousei2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/mugiyousei/mugiyousei2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/mugiyousei/mugiyousei2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/mugiyousei/mugiyousei_tga_fbdda306.vtex_c b/game/materials/thd_hero/mugiyousei/mugiyousei_tga_fbdda306.vtex_c similarity index 100% rename from materials/thd_hero/mugiyousei/mugiyousei_tga_fbdda306.vtex_c rename to game/materials/thd_hero/mugiyousei/mugiyousei_tga_fbdda306.vtex_c diff --git a/materials/thd_hero/mugiyousei/mugiyousei_tga_fcd78f6e.vtex_c b/game/materials/thd_hero/mugiyousei/mugiyousei_tga_fcd78f6e.vtex_c similarity index 100% rename from materials/thd_hero/mugiyousei/mugiyousei_tga_fcd78f6e.vtex_c rename to game/materials/thd_hero/mugiyousei/mugiyousei_tga_fcd78f6e.vtex_c diff --git a/materials/thd_hero/mugiyousei/mugiyousei_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/mugiyousei/mugiyousei_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/mugiyousei/mugiyousei_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/mugiyousei/mugiyousei_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/mystia/cloth01/mystia_cloth01.vmat_c b/game/materials/thd_hero/mystia/cloth01/mystia_cloth01.vmat_c similarity index 100% rename from materials/thd_hero/mystia/cloth01/mystia_cloth01.vmat_c rename to game/materials/thd_hero/mystia/cloth01/mystia_cloth01.vmat_c diff --git a/materials/thd_hero/mystia/cloth01/mystia_cloth01_tga_4c5334b2.vtex_c b/game/materials/thd_hero/mystia/cloth01/mystia_cloth01_tga_4c5334b2.vtex_c similarity index 100% rename from materials/thd_hero/mystia/cloth01/mystia_cloth01_tga_4c5334b2.vtex_c rename to game/materials/thd_hero/mystia/cloth01/mystia_cloth01_tga_4c5334b2.vtex_c diff --git a/materials/thd_hero/mystia/cloth01/mystia_cloth01_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/mystia/cloth01/mystia_cloth01_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/mystia/cloth01/mystia_cloth01_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/mystia/cloth01/mystia_cloth01_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/mystia/mystia.vmat_c b/game/materials/thd_hero/mystia/mystia.vmat_c similarity index 100% rename from materials/thd_hero/mystia/mystia.vmat_c rename to game/materials/thd_hero/mystia/mystia.vmat_c diff --git a/materials/thd_hero/mystia/mystia_tga_8ed9869a.vtex_c b/game/materials/thd_hero/mystia/mystia_tga_8ed9869a.vtex_c similarity index 100% rename from materials/thd_hero/mystia/mystia_tga_8ed9869a.vtex_c rename to game/materials/thd_hero/mystia/mystia_tga_8ed9869a.vtex_c diff --git a/materials/thd_hero/mystia/mystia_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/mystia/mystia_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/mystia/mystia_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/mystia/mystia_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/nazrin/nazrin.vmat_c b/game/materials/thd_hero/nazrin/nazrin.vmat_c similarity index 100% rename from materials/thd_hero/nazrin/nazrin.vmat_c rename to game/materials/thd_hero/nazrin/nazrin.vmat_c diff --git a/materials/thd_hero/nazrin/nazrin_tga_b4944eca.vtex_c b/game/materials/thd_hero/nazrin/nazrin_tga_b4944eca.vtex_c similarity index 100% rename from materials/thd_hero/nazrin/nazrin_tga_b4944eca.vtex_c rename to game/materials/thd_hero/nazrin/nazrin_tga_b4944eca.vtex_c diff --git a/materials/thd_hero/nazrin/nazrin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/nazrin/nazrin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/nazrin/nazrin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/nazrin/nazrin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/ningyou/axebladebluesteel_tga_2ab353a8.vtex_c b/game/materials/thd_hero/ningyou/axebladebluesteel_tga_2ab353a8.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/axebladebluesteel_tga_2ab353a8.vtex_c rename to game/materials/thd_hero/ningyou/axebladebluesteel_tga_2ab353a8.vtex_c diff --git a/materials/thd_hero/ningyou/ningyou.vmat_c b/game/materials/thd_hero/ningyou/ningyou.vmat_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou.vmat_c rename to game/materials/thd_hero/ningyou/ningyou.vmat_c diff --git a/materials/thd_hero/ningyou/ningyou2.vmat_c b/game/materials/thd_hero/ningyou/ningyou2.vmat_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou2.vmat_c rename to game/materials/thd_hero/ningyou/ningyou2.vmat_c diff --git a/materials/thd_hero/ningyou/ningyou2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/ningyou/ningyou2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/ningyou/ningyou2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/ningyou/ningyou3.vmat_c b/game/materials/thd_hero/ningyou/ningyou3.vmat_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou3.vmat_c rename to game/materials/thd_hero/ningyou/ningyou3.vmat_c diff --git a/materials/thd_hero/ningyou/ningyou3_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/ningyou/ningyou3_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou3_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/ningyou/ningyou3_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/ningyou/ningyou4.vmat_c b/game/materials/thd_hero/ningyou/ningyou4.vmat_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou4.vmat_c rename to game/materials/thd_hero/ningyou/ningyou4.vmat_c diff --git a/materials/thd_hero/ningyou/ningyou4_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/ningyou/ningyou4_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou4_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/ningyou/ningyou4_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/ningyou/ningyou_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/ningyou/ningyou_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/ningyou_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/ningyou/ningyou_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/ningyou/rifleman_tga_14902bdf.vtex_c b/game/materials/thd_hero/ningyou/rifleman_tga_14902bdf.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/rifleman_tga_14902bdf.vtex_c rename to game/materials/thd_hero/ningyou/rifleman_tga_14902bdf.vtex_c diff --git a/materials/thd_hero/ningyou/shanghai_body_tga_4af98f4c.vtex_c b/game/materials/thd_hero/ningyou/shanghai_body_tga_4af98f4c.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/shanghai_body_tga_4af98f4c.vtex_c rename to game/materials/thd_hero/ningyou/shanghai_body_tga_4af98f4c.vtex_c diff --git a/materials/thd_hero/ningyou/shanghai_head_tga_50c8ae1d.vtex_c b/game/materials/thd_hero/ningyou/shanghai_head_tga_50c8ae1d.vtex_c similarity index 100% rename from materials/thd_hero/ningyou/shanghai_head_tga_50c8ae1d.vtex_c rename to game/materials/thd_hero/ningyou/shanghai_head_tga_50c8ae1d.vtex_c diff --git a/materials/thd_hero/nitori/blue_star.vmat_c b/game/materials/thd_hero/nitori/blue_star.vmat_c similarity index 100% rename from materials/thd_hero/nitori/blue_star.vmat_c rename to game/materials/thd_hero/nitori/blue_star.vmat_c diff --git a/materials/thd_hero/nitori/blue_star_tga_4f6b881f.vtex_c b/game/materials/thd_hero/nitori/blue_star_tga_4f6b881f.vtex_c similarity index 100% rename from materials/thd_hero/nitori/blue_star_tga_4f6b881f.vtex_c rename to game/materials/thd_hero/nitori/blue_star_tga_4f6b881f.vtex_c diff --git a/materials/thd_hero/nitori/blue_star_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/nitori/blue_star_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/nitori/blue_star_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/nitori/blue_star_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/nitori/nitori_n_body.vmat_c b/game/materials/thd_hero/nitori/nitori_n_body.vmat_c similarity index 100% rename from materials/thd_hero/nitori/nitori_n_body.vmat_c rename to game/materials/thd_hero/nitori/nitori_n_body.vmat_c diff --git a/materials/thd_hero/nitori/nitori_n_body_tga_f8781472.vtex_c b/game/materials/thd_hero/nitori/nitori_n_body_tga_f8781472.vtex_c similarity index 100% rename from materials/thd_hero/nitori/nitori_n_body_tga_f8781472.vtex_c rename to game/materials/thd_hero/nitori/nitori_n_body_tga_f8781472.vtex_c diff --git a/materials/thd_hero/nitori/nitori_n_body_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/nitori/nitori_n_body_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/nitori/nitori_n_body_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/nitori/nitori_n_body_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/nitori/nitori_n_head.vmat_c b/game/materials/thd_hero/nitori/nitori_n_head.vmat_c similarity index 100% rename from materials/thd_hero/nitori/nitori_n_head.vmat_c rename to game/materials/thd_hero/nitori/nitori_n_head.vmat_c diff --git a/materials/thd_hero/nitori/nitori_n_head_tga_22a70d4b.vtex_c b/game/materials/thd_hero/nitori/nitori_n_head_tga_22a70d4b.vtex_c similarity index 100% rename from materials/thd_hero/nitori/nitori_n_head_tga_22a70d4b.vtex_c rename to game/materials/thd_hero/nitori/nitori_n_head_tga_22a70d4b.vtex_c diff --git a/materials/thd_hero/nitori/nitori_n_head_tga_9b2878d0.vtex_c b/game/materials/thd_hero/nitori/nitori_n_head_tga_9b2878d0.vtex_c similarity index 100% rename from materials/thd_hero/nitori/nitori_n_head_tga_9b2878d0.vtex_c rename to game/materials/thd_hero/nitori/nitori_n_head_tga_9b2878d0.vtex_c diff --git a/materials/thd_hero/nitori/nitori_n_head_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/nitori/nitori_n_head_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/nitori/nitori_n_head_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/nitori/nitori_n_head_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2.vmat_c b/game/materials/thd_hero/nitori/red_glow2.vmat_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2.vmat_c rename to game/materials/thd_hero/nitori/red_glow2.vmat_c diff --git a/materials/thd_hero/nitori/red_glow2_alpha_tga_4f6eee01.vtex_c b/game/materials/thd_hero/nitori/red_glow2_alpha_tga_4f6eee01.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_alpha_tga_4f6eee01.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_alpha_tga_4f6eee01.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_alpha_tga_5b27b44c.vtex_c b/game/materials/thd_hero/nitori/red_glow2_alpha_tga_5b27b44c.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_alpha_tga_5b27b44c.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_alpha_tga_5b27b44c.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_alpha_tga_cc688742.vtex_c b/game/materials/thd_hero/nitori/red_glow2_alpha_tga_cc688742.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_alpha_tga_cc688742.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_alpha_tga_cc688742.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_alpha_tga_ce664636.vtex_c b/game/materials/thd_hero/nitori/red_glow2_alpha_tga_ce664636.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_alpha_tga_ce664636.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_alpha_tga_ce664636.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_alpha_tga_e2adb10.vtex_c b/game/materials/thd_hero/nitori/red_glow2_alpha_tga_e2adb10.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_alpha_tga_e2adb10.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_alpha_tga_e2adb10.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_alpha_tga_f4002bf6.vtex_c b/game/materials/thd_hero/nitori/red_glow2_alpha_tga_f4002bf6.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_alpha_tga_f4002bf6.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_alpha_tga_f4002bf6.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_alpha_tga_fb52e58e.vtex_c b/game/materials/thd_hero/nitori/red_glow2_alpha_tga_fb52e58e.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_alpha_tga_fb52e58e.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_alpha_tga_fb52e58e.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_tga_16543498.vtex_c b/game/materials/thd_hero/nitori/red_glow2_tga_16543498.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_tga_16543498.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_tga_16543498.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_tga_4777de86.vtex_c b/game/materials/thd_hero/nitori/red_glow2_tga_4777de86.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_tga_4777de86.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_tga_4777de86.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_tga_48998b9c.vtex_c b/game/materials/thd_hero/nitori/red_glow2_tga_48998b9c.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_tga_48998b9c.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_tga_48998b9c.vtex_c diff --git a/materials/thd_hero/nitori/red_glow2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/nitori/red_glow2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/nitori/red_glow2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/nitori/red_glow2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/nue/nue.vmat_c b/game/materials/thd_hero/nue/nue.vmat_c similarity index 100% rename from materials/thd_hero/nue/nue.vmat_c rename to game/materials/thd_hero/nue/nue.vmat_c diff --git a/materials/thd_hero/nue/nue_tga_db90ffce.vtex_c b/game/materials/thd_hero/nue/nue_tga_db90ffce.vtex_c similarity index 100% rename from materials/thd_hero/nue/nue_tga_db90ffce.vtex_c rename to game/materials/thd_hero/nue/nue_tga_db90ffce.vtex_c diff --git a/materials/thd_hero/nue/nue_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/nue/nue_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/nue/nue_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/nue/nue_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/parsee/parsee.vmat_c b/game/materials/thd_hero/parsee/parsee.vmat_c similarity index 100% rename from materials/thd_hero/parsee/parsee.vmat_c rename to game/materials/thd_hero/parsee/parsee.vmat_c diff --git a/materials/thd_hero/parsee/parsee_tga_4533e2e7.vtex_c b/game/materials/thd_hero/parsee/parsee_tga_4533e2e7.vtex_c similarity index 100% rename from materials/thd_hero/parsee/parsee_tga_4533e2e7.vtex_c rename to game/materials/thd_hero/parsee/parsee_tga_4533e2e7.vtex_c diff --git a/materials/thd_hero/parsee/parsee_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/parsee/parsee_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/parsee/parsee_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/parsee/parsee_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/ran/ran.vmat_c b/game/materials/thd_hero/ran/ran.vmat_c similarity index 100% rename from materials/thd_hero/ran/ran.vmat_c rename to game/materials/thd_hero/ran/ran.vmat_c diff --git a/materials/thd_hero/ran/ran_tga_d060fd65.vtex_c b/game/materials/thd_hero/ran/ran_tga_d060fd65.vtex_c similarity index 100% rename from materials/thd_hero/ran/ran_tga_d060fd65.vtex_c rename to game/materials/thd_hero/ran/ran_tga_d060fd65.vtex_c diff --git a/materials/thd_hero/ran/ran_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/ran/ran_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/ran/ran_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/ran/ran_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/reisen/cloth01/reisen_cloth01.vmat_c b/game/materials/thd_hero/reisen/cloth01/reisen_cloth01.vmat_c similarity index 100% rename from materials/thd_hero/reisen/cloth01/reisen_cloth01.vmat_c rename to game/materials/thd_hero/reisen/cloth01/reisen_cloth01.vmat_c diff --git a/materials/thd_hero/reisen/cloth01/reisen_cloth01_tga_2444ead6.vtex_c b/game/materials/thd_hero/reisen/cloth01/reisen_cloth01_tga_2444ead6.vtex_c similarity index 100% rename from materials/thd_hero/reisen/cloth01/reisen_cloth01_tga_2444ead6.vtex_c rename to game/materials/thd_hero/reisen/cloth01/reisen_cloth01_tga_2444ead6.vtex_c diff --git a/materials/thd_hero/reisen/cloth01/reisen_cloth01_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/reisen/cloth01/reisen_cloth01_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/reisen/cloth01/reisen_cloth01_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/reisen/cloth01/reisen_cloth01_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/reisen/reisen.vmat_c b/game/materials/thd_hero/reisen/reisen.vmat_c similarity index 100% rename from materials/thd_hero/reisen/reisen.vmat_c rename to game/materials/thd_hero/reisen/reisen.vmat_c diff --git a/materials/thd_hero/reisen/reisen_tga_cb7cd6fb.vtex_c b/game/materials/thd_hero/reisen/reisen_tga_cb7cd6fb.vtex_c similarity index 100% rename from materials/thd_hero/reisen/reisen_tga_cb7cd6fb.vtex_c rename to game/materials/thd_hero/reisen/reisen_tga_cb7cd6fb.vtex_c diff --git a/materials/thd_hero/reisen/reisen_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/reisen/reisen_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/reisen/reisen_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/reisen/reisen_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/rin/rin.vmat_c b/game/materials/thd_hero/rin/rin.vmat_c similarity index 100% rename from materials/thd_hero/rin/rin.vmat_c rename to game/materials/thd_hero/rin/rin.vmat_c diff --git a/materials/thd_hero/rin/rin_tga_1308de50.vtex_c b/game/materials/thd_hero/rin/rin_tga_1308de50.vtex_c similarity index 100% rename from materials/thd_hero/rin/rin_tga_1308de50.vtex_c rename to game/materials/thd_hero/rin/rin_tga_1308de50.vtex_c diff --git a/materials/thd_hero/rin/rin_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/rin/rin_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/rin/rin_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/rin/rin_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/rumia/rumia.vmat_c b/game/materials/thd_hero/rumia/rumia.vmat_c similarity index 100% rename from materials/thd_hero/rumia/rumia.vmat_c rename to game/materials/thd_hero/rumia/rumia.vmat_c diff --git a/materials/thd_hero/rumia/rumia_tga_f0528c4d.vtex_c b/game/materials/thd_hero/rumia/rumia_tga_f0528c4d.vtex_c similarity index 100% rename from materials/thd_hero/rumia/rumia_tga_f0528c4d.vtex_c rename to game/materials/thd_hero/rumia/rumia_tga_f0528c4d.vtex_c diff --git a/materials/thd_hero/rumia/rumia_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/rumia/rumia_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/rumia/rumia_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/rumia/rumia_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/sanae/cloth01/sanae_jk.vmat_c b/game/materials/thd_hero/sanae/cloth01/sanae_jk.vmat_c similarity index 100% rename from materials/thd_hero/sanae/cloth01/sanae_jk.vmat_c rename to game/materials/thd_hero/sanae/cloth01/sanae_jk.vmat_c diff --git a/materials/thd_hero/sanae/cloth01/sanae_jk_tga_f06e0233.vtex_c b/game/materials/thd_hero/sanae/cloth01/sanae_jk_tga_f06e0233.vtex_c similarity index 100% rename from materials/thd_hero/sanae/cloth01/sanae_jk_tga_f06e0233.vtex_c rename to game/materials/thd_hero/sanae/cloth01/sanae_jk_tga_f06e0233.vtex_c diff --git a/materials/thd_hero/sanae/cloth01/sanae_jk_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/sanae/cloth01/sanae_jk_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/sanae/cloth01/sanae_jk_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/sanae/cloth01/sanae_jk_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/sanae/sanae.vmat_c b/game/materials/thd_hero/sanae/sanae.vmat_c similarity index 100% rename from materials/thd_hero/sanae/sanae.vmat_c rename to game/materials/thd_hero/sanae/sanae.vmat_c diff --git a/materials/thd_hero/sanae/sanae_tga_e31c059c.vtex_c b/game/materials/thd_hero/sanae/sanae_tga_e31c059c.vtex_c similarity index 100% rename from materials/thd_hero/sanae/sanae_tga_e31c059c.vtex_c rename to game/materials/thd_hero/sanae/sanae_tga_e31c059c.vtex_c diff --git a/materials/thd_hero/sanae/sanae_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/sanae/sanae_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/sanae/sanae_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/sanae/sanae_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/saoling/saoling.vmat_c b/game/materials/thd_hero/saoling/saoling.vmat_c similarity index 100% rename from materials/thd_hero/saoling/saoling.vmat_c rename to game/materials/thd_hero/saoling/saoling.vmat_c diff --git a/materials/thd_hero/saoling/saoling_tga_130effbf.vtex_c b/game/materials/thd_hero/saoling/saoling_tga_130effbf.vtex_c similarity index 100% rename from materials/thd_hero/saoling/saoling_tga_130effbf.vtex_c rename to game/materials/thd_hero/saoling/saoling_tga_130effbf.vtex_c diff --git a/materials/thd_hero/saoling/saoling_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/saoling/saoling_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/saoling/saoling_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/saoling/saoling_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/seiga/seiga.vmat_c b/game/materials/thd_hero/seiga/seiga.vmat_c similarity index 100% rename from materials/thd_hero/seiga/seiga.vmat_c rename to game/materials/thd_hero/seiga/seiga.vmat_c diff --git a/materials/thd_hero/seiga/seiga2.vmat_c b/game/materials/thd_hero/seiga/seiga2.vmat_c similarity index 100% rename from materials/thd_hero/seiga/seiga2.vmat_c rename to game/materials/thd_hero/seiga/seiga2.vmat_c diff --git a/materials/thd_hero/seiga/seiga2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/seiga/seiga2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/seiga/seiga2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/seiga/seiga2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/seiga/seiga_tga_562fc2bb.vtex_c b/game/materials/thd_hero/seiga/seiga_tga_562fc2bb.vtex_c similarity index 100% rename from materials/thd_hero/seiga/seiga_tga_562fc2bb.vtex_c rename to game/materials/thd_hero/seiga/seiga_tga_562fc2bb.vtex_c diff --git a/materials/thd_hero/seiga/seiga_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/seiga/seiga_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/seiga/seiga_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/seiga/seiga_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/sizuha/sizuha.vmat_c b/game/materials/thd_hero/sizuha/sizuha.vmat_c similarity index 100% rename from materials/thd_hero/sizuha/sizuha.vmat_c rename to game/materials/thd_hero/sizuha/sizuha.vmat_c diff --git a/materials/thd_hero/sizuha/sizuha_tga_2db82aa4.vtex_c b/game/materials/thd_hero/sizuha/sizuha_tga_2db82aa4.vtex_c similarity index 100% rename from materials/thd_hero/sizuha/sizuha_tga_2db82aa4.vtex_c rename to game/materials/thd_hero/sizuha/sizuha_tga_2db82aa4.vtex_c diff --git a/materials/thd_hero/sizuha/sizuha_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/sizuha/sizuha_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/sizuha/sizuha_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/sizuha/sizuha_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/soga/soga.vmat_c b/game/materials/thd_hero/soga/soga.vmat_c similarity index 100% rename from materials/thd_hero/soga/soga.vmat_c rename to game/materials/thd_hero/soga/soga.vmat_c diff --git a/materials/thd_hero/soga/soga_tga_b946acef.vtex_c b/game/materials/thd_hero/soga/soga_tga_b946acef.vtex_c similarity index 100% rename from materials/thd_hero/soga/soga_tga_b946acef.vtex_c rename to game/materials/thd_hero/soga/soga_tga_b946acef.vtex_c diff --git a/materials/thd_hero/soga/soga_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/soga/soga_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/soga/soga_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/soga/soga_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/star/star.vmat_c b/game/materials/thd_hero/star/star.vmat_c similarity index 100% rename from materials/thd_hero/star/star.vmat_c rename to game/materials/thd_hero/star/star.vmat_c diff --git a/materials/thd_hero/star/star2.vmat_c b/game/materials/thd_hero/star/star2.vmat_c similarity index 100% rename from materials/thd_hero/star/star2.vmat_c rename to game/materials/thd_hero/star/star2.vmat_c diff --git a/materials/thd_hero/star/star2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/star/star2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/star/star2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/star/star2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/star/star_tga_a2fe7928.vtex_c b/game/materials/thd_hero/star/star_tga_a2fe7928.vtex_c similarity index 100% rename from materials/thd_hero/star/star_tga_a2fe7928.vtex_c rename to game/materials/thd_hero/star/star_tga_a2fe7928.vtex_c diff --git a/materials/thd_hero/star/star_tga_f84ca24a.vtex_c b/game/materials/thd_hero/star/star_tga_f84ca24a.vtex_c similarity index 100% rename from materials/thd_hero/star/star_tga_f84ca24a.vtex_c rename to game/materials/thd_hero/star/star_tga_f84ca24a.vtex_c diff --git a/materials/thd_hero/star/star_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/star/star_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/star/star_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/star/star_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/suika/suika.vmat_c b/game/materials/thd_hero/suika/suika.vmat_c similarity index 100% rename from materials/thd_hero/suika/suika.vmat_c rename to game/materials/thd_hero/suika/suika.vmat_c diff --git a/materials/thd_hero/suika/suika_tga_4f63ebe.vtex_c b/game/materials/thd_hero/suika/suika_tga_4f63ebe.vtex_c similarity index 100% rename from materials/thd_hero/suika/suika_tga_4f63ebe.vtex_c rename to game/materials/thd_hero/suika/suika_tga_4f63ebe.vtex_c diff --git a/materials/thd_hero/suika/suika_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/suika/suika_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/suika/suika_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/suika/suika_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/sunny/sunny.vmat_c b/game/materials/thd_hero/sunny/sunny.vmat_c similarity index 100% rename from materials/thd_hero/sunny/sunny.vmat_c rename to game/materials/thd_hero/sunny/sunny.vmat_c diff --git a/materials/thd_hero/sunny/sunny2.vmat_c b/game/materials/thd_hero/sunny/sunny2.vmat_c similarity index 100% rename from materials/thd_hero/sunny/sunny2.vmat_c rename to game/materials/thd_hero/sunny/sunny2.vmat_c diff --git a/materials/thd_hero/sunny/sunny2_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/sunny/sunny2_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/sunny/sunny2_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/sunny/sunny2_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/sunny/sunny_tga_3cdaafce.vtex_c b/game/materials/thd_hero/sunny/sunny_tga_3cdaafce.vtex_c similarity index 100% rename from materials/thd_hero/sunny/sunny_tga_3cdaafce.vtex_c rename to game/materials/thd_hero/sunny/sunny_tga_3cdaafce.vtex_c diff --git a/materials/thd_hero/sunny/sunny_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/sunny/sunny_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/sunny/sunny_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/sunny/sunny_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/suwako/cloth01/suwako_cloth01.vmat_c b/game/materials/thd_hero/suwako/cloth01/suwako_cloth01.vmat_c similarity index 100% rename from materials/thd_hero/suwako/cloth01/suwako_cloth01.vmat_c rename to game/materials/thd_hero/suwako/cloth01/suwako_cloth01.vmat_c diff --git a/materials/thd_hero/suwako/cloth01/suwako_cloth01_tga_b59062e9.vtex_c b/game/materials/thd_hero/suwako/cloth01/suwako_cloth01_tga_b59062e9.vtex_c similarity index 100% rename from materials/thd_hero/suwako/cloth01/suwako_cloth01_tga_b59062e9.vtex_c rename to game/materials/thd_hero/suwako/cloth01/suwako_cloth01_tga_b59062e9.vtex_c diff --git a/materials/thd_hero/suwako/cloth01/suwako_cloth01_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/suwako/cloth01/suwako_cloth01_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/suwako/cloth01/suwako_cloth01_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/suwako/cloth01/suwako_cloth01_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/suwako/suwako.vmat_c b/game/materials/thd_hero/suwako/suwako.vmat_c similarity index 100% rename from materials/thd_hero/suwako/suwako.vmat_c rename to game/materials/thd_hero/suwako/suwako.vmat_c diff --git a/materials/thd_hero/suwako/suwako_tga_20d720c2.vtex_c b/game/materials/thd_hero/suwako/suwako_tga_20d720c2.vtex_c similarity index 100% rename from materials/thd_hero/suwako/suwako_tga_20d720c2.vtex_c rename to game/materials/thd_hero/suwako/suwako_tga_20d720c2.vtex_c diff --git a/materials/thd_hero/suwako/suwako_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/suwako/suwako_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/suwako/suwako_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/suwako/suwako_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/toramarushou/toramarushou.vmat_c b/game/materials/thd_hero/toramarushou/toramarushou.vmat_c similarity index 100% rename from materials/thd_hero/toramarushou/toramarushou.vmat_c rename to game/materials/thd_hero/toramarushou/toramarushou.vmat_c diff --git a/materials/thd_hero/toramarushou/toramarushou_tga_bb3b5af7.vtex_c b/game/materials/thd_hero/toramarushou/toramarushou_tga_bb3b5af7.vtex_c similarity index 100% rename from materials/thd_hero/toramarushou/toramarushou_tga_bb3b5af7.vtex_c rename to game/materials/thd_hero/toramarushou/toramarushou_tga_bb3b5af7.vtex_c diff --git a/materials/thd_hero/toramarushou/toramarushou_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/toramarushou/toramarushou_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/toramarushou/toramarushou_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/toramarushou/toramarushou_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/utsuho/utsuho.vmat_c b/game/materials/thd_hero/utsuho/utsuho.vmat_c similarity index 100% rename from materials/thd_hero/utsuho/utsuho.vmat_c rename to game/materials/thd_hero/utsuho/utsuho.vmat_c diff --git a/materials/thd_hero/utsuho/utsuho_tga_bf77ec2b.vtex_c b/game/materials/thd_hero/utsuho/utsuho_tga_bf77ec2b.vtex_c similarity index 100% rename from materials/thd_hero/utsuho/utsuho_tga_bf77ec2b.vtex_c rename to game/materials/thd_hero/utsuho/utsuho_tga_bf77ec2b.vtex_c diff --git a/materials/thd_hero/utsuho/utsuho_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/utsuho/utsuho_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/utsuho/utsuho_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/utsuho/utsuho_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/wakasagihime/wakasagihime.vmat_c b/game/materials/thd_hero/wakasagihime/wakasagihime.vmat_c similarity index 100% rename from materials/thd_hero/wakasagihime/wakasagihime.vmat_c rename to game/materials/thd_hero/wakasagihime/wakasagihime.vmat_c diff --git a/materials/thd_hero/wakasagihime/wakasagihime_tga_d21c02cd.vtex_c b/game/materials/thd_hero/wakasagihime/wakasagihime_tga_d21c02cd.vtex_c similarity index 100% rename from materials/thd_hero/wakasagihime/wakasagihime_tga_d21c02cd.vtex_c rename to game/materials/thd_hero/wakasagihime/wakasagihime_tga_d21c02cd.vtex_c diff --git a/materials/thd_hero/wakasagihime/wakasagihime_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/wakasagihime/wakasagihime_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/wakasagihime/wakasagihime_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/wakasagihime/wakasagihime_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/wiggle/wriggle.vmat_c b/game/materials/thd_hero/wiggle/wriggle.vmat_c similarity index 100% rename from materials/thd_hero/wiggle/wriggle.vmat_c rename to game/materials/thd_hero/wiggle/wriggle.vmat_c diff --git a/materials/thd_hero/wiggle/wriggle_tga_e6d56bb3.vtex_c b/game/materials/thd_hero/wiggle/wriggle_tga_e6d56bb3.vtex_c similarity index 100% rename from materials/thd_hero/wiggle/wriggle_tga_e6d56bb3.vtex_c rename to game/materials/thd_hero/wiggle/wriggle_tga_e6d56bb3.vtex_c diff --git a/materials/thd_hero/wiggle/wriggle_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/wiggle/wriggle_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/wiggle/wriggle_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/wiggle/wriggle_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/yamame/yamame.vmat_c b/game/materials/thd_hero/yamame/yamame.vmat_c similarity index 100% rename from materials/thd_hero/yamame/yamame.vmat_c rename to game/materials/thd_hero/yamame/yamame.vmat_c diff --git a/materials/thd_hero/yamame/yamame_tga_23c3cca7.vtex_c b/game/materials/thd_hero/yamame/yamame_tga_23c3cca7.vtex_c similarity index 100% rename from materials/thd_hero/yamame/yamame_tga_23c3cca7.vtex_c rename to game/materials/thd_hero/yamame/yamame_tga_23c3cca7.vtex_c diff --git a/materials/thd_hero/yamame/yamame_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/yamame/yamame_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/yamame/yamame_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/yamame/yamame_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/yoshika/yoshika.vmat_c b/game/materials/thd_hero/yoshika/yoshika.vmat_c similarity index 100% rename from materials/thd_hero/yoshika/yoshika.vmat_c rename to game/materials/thd_hero/yoshika/yoshika.vmat_c diff --git a/materials/thd_hero/yoshika/yoshika_tga_6bc4e7e2.vtex_c b/game/materials/thd_hero/yoshika/yoshika_tga_6bc4e7e2.vtex_c similarity index 100% rename from materials/thd_hero/yoshika/yoshika_tga_6bc4e7e2.vtex_c rename to game/materials/thd_hero/yoshika/yoshika_tga_6bc4e7e2.vtex_c diff --git a/materials/thd_hero/yoshika/yoshika_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/yoshika/yoshika_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/yoshika/yoshika_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/yoshika/yoshika_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/yuugi/yuugi.vmat_c b/game/materials/thd_hero/yuugi/yuugi.vmat_c similarity index 100% rename from materials/thd_hero/yuugi/yuugi.vmat_c rename to game/materials/thd_hero/yuugi/yuugi.vmat_c diff --git a/materials/thd_hero/yuugi/yuugi_tga_ce2c5321.vtex_c b/game/materials/thd_hero/yuugi/yuugi_tga_ce2c5321.vtex_c similarity index 100% rename from materials/thd_hero/yuugi/yuugi_tga_ce2c5321.vtex_c rename to game/materials/thd_hero/yuugi/yuugi_tga_ce2c5321.vtex_c diff --git a/materials/thd_hero/yuugi/yuugi_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/yuugi/yuugi_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/yuugi/yuugi_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/yuugi/yuugi_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/thd_hero/yuyuko/yuyuko.vmat_c b/game/materials/thd_hero/yuyuko/yuyuko.vmat_c similarity index 100% rename from materials/thd_hero/yuyuko/yuyuko.vmat_c rename to game/materials/thd_hero/yuyuko/yuyuko.vmat_c diff --git a/materials/thd_hero/yuyuko/yuyuko_tga_902d88af.vtex_c b/game/materials/thd_hero/yuyuko/yuyuko_tga_902d88af.vtex_c similarity index 100% rename from materials/thd_hero/yuyuko/yuyuko_tga_902d88af.vtex_c rename to game/materials/thd_hero/yuyuko/yuyuko_tga_902d88af.vtex_c diff --git a/materials/thd_hero/yuyuko/yuyuko_vmat_g_tmasks1_ce06f645.vtex_c b/game/materials/thd_hero/yuyuko/yuyuko_vmat_g_tmasks1_ce06f645.vtex_c similarity index 100% rename from materials/thd_hero/yuyuko/yuyuko_vmat_g_tmasks1_ce06f645.vtex_c rename to game/materials/thd_hero/yuyuko/yuyuko_vmat_g_tmasks1_ce06f645.vtex_c diff --git a/materials/vgui/hud/minimap_hero_sheet.vmat_c b/game/materials/vgui/hud/minimap_hero_sheet.vmat_c similarity index 100% rename from materials/vgui/hud/minimap_hero_sheet.vmat_c rename to game/materials/vgui/hud/minimap_hero_sheet.vmat_c diff --git a/materials/vgui/hud/minimap_hero_sheet_origin_psd_ec58bae3.vtex_c b/game/materials/vgui/hud/minimap_hero_sheet_origin_psd_ec58bae3.vtex_c similarity index 100% rename from materials/vgui/hud/minimap_hero_sheet_origin_psd_ec58bae3.vtex_c rename to game/materials/vgui/hud/minimap_hero_sheet_origin_psd_ec58bae3.vtex_c diff --git a/materials/yuukaspark_tga_baba9b75.vtex_c b/game/materials/yuukaspark_tga_baba9b75.vtex_c similarity index 100% rename from materials/yuukaspark_tga_baba9b75.vtex_c rename to game/materials/yuukaspark_tga_baba9b75.vtex_c diff --git a/models/alice/0c825569/alice_attack.vanim_c b/game/models/alice/0c825569/alice_attack.vanim_c similarity index 100% rename from models/alice/0c825569/alice_attack.vanim_c rename to game/models/alice/0c825569/alice_attack.vanim_c diff --git a/models/alice/0c825569/alice_attack2.vanim_c b/game/models/alice/0c825569/alice_attack2.vanim_c similarity index 100% rename from models/alice/0c825569/alice_attack2.vanim_c rename to game/models/alice/0c825569/alice_attack2.vanim_c diff --git a/models/alice/0c825569/alice_attack3.vanim_c b/game/models/alice/0c825569/alice_attack3.vanim_c similarity index 100% rename from models/alice/0c825569/alice_attack3.vanim_c rename to game/models/alice/0c825569/alice_attack3.vanim_c diff --git a/models/alice/0c825569/alice_attack_2.vanim_c b/game/models/alice/0c825569/alice_attack_2.vanim_c similarity index 100% rename from models/alice/0c825569/alice_attack_2.vanim_c rename to game/models/alice/0c825569/alice_attack_2.vanim_c diff --git a/models/alice/0c825569/alice_attack__2_.vanim_c b/game/models/alice/0c825569/alice_attack__2_.vanim_c similarity index 100% rename from models/alice/0c825569/alice_attack__2_.vanim_c rename to game/models/alice/0c825569/alice_attack__2_.vanim_c diff --git a/models/alice/0c825569/alice_cast.vanim_c b/game/models/alice/0c825569/alice_cast.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast.vanim_c rename to game/models/alice/0c825569/alice_cast.vanim_c diff --git a/models/alice/0c825569/alice_cast1.vanim_c b/game/models/alice/0c825569/alice_cast1.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast1.vanim_c rename to game/models/alice/0c825569/alice_cast1.vanim_c diff --git a/models/alice/0c825569/alice_cast2.vanim_c b/game/models/alice/0c825569/alice_cast2.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast2.vanim_c rename to game/models/alice/0c825569/alice_cast2.vanim_c diff --git a/models/alice/0c825569/alice_cast3.vanim_c b/game/models/alice/0c825569/alice_cast3.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast3.vanim_c rename to game/models/alice/0c825569/alice_cast3.vanim_c diff --git a/models/alice/0c825569/alice_cast4.vanim_c b/game/models/alice/0c825569/alice_cast4.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast4.vanim_c rename to game/models/alice/0c825569/alice_cast4.vanim_c diff --git a/models/alice/0c825569/alice_cast4_2.vanim_c b/game/models/alice/0c825569/alice_cast4_2.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast4_2.vanim_c rename to game/models/alice/0c825569/alice_cast4_2.vanim_c diff --git a/models/alice/0c825569/alice_cast_2.vanim_c b/game/models/alice/0c825569/alice_cast_2.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast_2.vanim_c rename to game/models/alice/0c825569/alice_cast_2.vanim_c diff --git a/models/alice/0c825569/alice_cast_3.vanim_c b/game/models/alice/0c825569/alice_cast_3.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast_3.vanim_c rename to game/models/alice/0c825569/alice_cast_3.vanim_c diff --git a/models/alice/0c825569/alice_cast_4.vanim_c b/game/models/alice/0c825569/alice_cast_4.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast_4.vanim_c rename to game/models/alice/0c825569/alice_cast_4.vanim_c diff --git a/models/alice/0c825569/alice_cast__2_.vanim_c b/game/models/alice/0c825569/alice_cast__2_.vanim_c similarity index 100% rename from models/alice/0c825569/alice_cast__2_.vanim_c rename to game/models/alice/0c825569/alice_cast__2_.vanim_c diff --git a/models/alice/0c825569/alice_die.vanim_c b/game/models/alice/0c825569/alice_die.vanim_c similarity index 100% rename from models/alice/0c825569/alice_die.vanim_c rename to game/models/alice/0c825569/alice_die.vanim_c diff --git a/models/alice/0c825569/alice_idle.vanim_c b/game/models/alice/0c825569/alice_idle.vanim_c similarity index 100% rename from models/alice/0c825569/alice_idle.vanim_c rename to game/models/alice/0c825569/alice_idle.vanim_c diff --git a/models/alice/0c825569/alice_idle1.vanim_c b/game/models/alice/0c825569/alice_idle1.vanim_c similarity index 100% rename from models/alice/0c825569/alice_idle1.vanim_c rename to game/models/alice/0c825569/alice_idle1.vanim_c diff --git a/models/alice/0c825569/alice_idle2.vanim_c b/game/models/alice/0c825569/alice_idle2.vanim_c similarity index 100% rename from models/alice/0c825569/alice_idle2.vanim_c rename to game/models/alice/0c825569/alice_idle2.vanim_c diff --git a/models/alice/0c825569/alice_idle__2_.vanim_c b/game/models/alice/0c825569/alice_idle__2_.vanim_c similarity index 100% rename from models/alice/0c825569/alice_idle__2_.vanim_c rename to game/models/alice/0c825569/alice_idle__2_.vanim_c diff --git a/models/alice/0c825569/alice_por.vanim_c b/game/models/alice/0c825569/alice_por.vanim_c similarity index 100% rename from models/alice/0c825569/alice_por.vanim_c rename to game/models/alice/0c825569/alice_por.vanim_c diff --git a/models/alice/0c825569/alice_run.vanim_c b/game/models/alice/0c825569/alice_run.vanim_c similarity index 100% rename from models/alice/0c825569/alice_run.vanim_c rename to game/models/alice/0c825569/alice_run.vanim_c diff --git a/models/alice/0c825569/alice_run1.vanim_c b/game/models/alice/0c825569/alice_run1.vanim_c similarity index 100% rename from models/alice/0c825569/alice_run1.vanim_c rename to game/models/alice/0c825569/alice_run1.vanim_c diff --git a/models/alice/0c825569/alice_run2.vanim_c b/game/models/alice/0c825569/alice_run2.vanim_c similarity index 100% rename from models/alice/0c825569/alice_run2.vanim_c rename to game/models/alice/0c825569/alice_run2.vanim_c diff --git a/models/alice/13ff4685/falanxi_attack.vanim_c b/game/models/alice/13ff4685/falanxi_attack.vanim_c similarity index 100% rename from models/alice/13ff4685/falanxi_attack.vanim_c rename to game/models/alice/13ff4685/falanxi_attack.vanim_c diff --git a/models/alice/13ff4685/falanxi_cast.vanim_c b/game/models/alice/13ff4685/falanxi_cast.vanim_c similarity index 100% rename from models/alice/13ff4685/falanxi_cast.vanim_c rename to game/models/alice/13ff4685/falanxi_cast.vanim_c diff --git a/models/alice/13ff4685/falanxi_die.vanim_c b/game/models/alice/13ff4685/falanxi_die.vanim_c similarity index 100% rename from models/alice/13ff4685/falanxi_die.vanim_c rename to game/models/alice/13ff4685/falanxi_die.vanim_c diff --git a/models/alice/13ff4685/falanxi_idle.vanim_c b/game/models/alice/13ff4685/falanxi_idle.vanim_c similarity index 100% rename from models/alice/13ff4685/falanxi_idle.vanim_c rename to game/models/alice/13ff4685/falanxi_idle.vanim_c diff --git a/models/alice/13ff4685/falanxi_run.vanim_c b/game/models/alice/13ff4685/falanxi_run.vanim_c similarity index 100% rename from models/alice/13ff4685/falanxi_run.vanim_c rename to game/models/alice/13ff4685/falanxi_run.vanim_c diff --git a/models/alice/alice.vmdl_c b/game/models/alice/alice.vmdl_c similarity index 100% rename from models/alice/alice.vmdl_c rename to game/models/alice/alice.vmdl_c diff --git a/models/alice/alice.vmesh_c b/game/models/alice/alice.vmesh_c similarity index 100% rename from models/alice/alice.vmesh_c rename to game/models/alice/alice.vmesh_c diff --git a/models/alice/alice.vmorf_c b/game/models/alice/alice.vmorf_c similarity index 100% rename from models/alice/alice.vmorf_c rename to game/models/alice/alice.vmorf_c diff --git a/models/alice/alice_0c825569.vagrp_c b/game/models/alice/alice_0c825569.vagrp_c similarity index 100% rename from models/alice/alice_0c825569.vagrp_c rename to game/models/alice/alice_0c825569.vagrp_c diff --git a/models/alice/alice_vmorf.vtex_c b/game/models/alice/alice_vmorf.vtex_c similarity index 100% rename from models/alice/alice_vmorf.vtex_c rename to game/models/alice/alice_vmorf.vtex_c diff --git a/models/alice/falanxi.vmdl_c b/game/models/alice/falanxi.vmdl_c similarity index 100% rename from models/alice/falanxi.vmdl_c rename to game/models/alice/falanxi.vmdl_c diff --git a/models/alice/falanxi.vmesh_c b/game/models/alice/falanxi.vmesh_c similarity index 100% rename from models/alice/falanxi.vmesh_c rename to game/models/alice/falanxi.vmesh_c diff --git a/models/alice/falanxi.vmorf_c b/game/models/alice/falanxi.vmorf_c similarity index 100% rename from models/alice/falanxi.vmorf_c rename to game/models/alice/falanxi.vmorf_c diff --git a/models/alice/falanxi_13ff4685.vagrp_c b/game/models/alice/falanxi_13ff4685.vagrp_c similarity index 100% rename from models/alice/falanxi_13ff4685.vagrp_c rename to game/models/alice/falanxi_13ff4685.vagrp_c diff --git a/models/alice/falanxi_vmorf.vtex_c b/game/models/alice/falanxi_vmorf.vtex_c similarity index 100% rename from models/alice/falanxi_vmorf.vtex_c rename to game/models/alice/falanxi_vmorf.vtex_c diff --git a/models/bilibilitv/mask/bilibili.vmat_c b/game/models/bilibilitv/mask/bilibili.vmat_c similarity index 100% rename from models/bilibilitv/mask/bilibili.vmat_c rename to game/models/bilibilitv/mask/bilibili.vmat_c diff --git a/models/bilibilitv/mask/bilibili_color_tga_d325be54.vtex_c b/game/models/bilibilitv/mask/bilibili_color_tga_d325be54.vtex_c similarity index 100% rename from models/bilibilitv/mask/bilibili_color_tga_d325be54.vtex_c rename to game/models/bilibilitv/mask/bilibili_color_tga_d325be54.vtex_c diff --git a/models/bilibilitv/mask/bilibili_metalnessmask_tga_5c27c737.vtex_c b/game/models/bilibilitv/mask/bilibili_metalnessmask_tga_5c27c737.vtex_c similarity index 100% rename from models/bilibilitv/mask/bilibili_metalnessmask_tga_5c27c737.vtex_c rename to game/models/bilibilitv/mask/bilibili_metalnessmask_tga_5c27c737.vtex_c diff --git a/models/bilibilitv/mask/bilibili_normal_tga_f2efe42d.vtex_c b/game/models/bilibilitv/mask/bilibili_normal_tga_f2efe42d.vtex_c similarity index 100% rename from models/bilibilitv/mask/bilibili_normal_tga_f2efe42d.vtex_c rename to game/models/bilibilitv/mask/bilibili_normal_tga_f2efe42d.vtex_c diff --git a/models/bilibilitv/mask/bilibili_specmask_tga_f14aeca6.vtex_c b/game/models/bilibilitv/mask/bilibili_specmask_tga_f14aeca6.vtex_c similarity index 100% rename from models/bilibilitv/mask/bilibili_specmask_tga_f14aeca6.vtex_c rename to game/models/bilibilitv/mask/bilibili_specmask_tga_f14aeca6.vtex_c diff --git a/models/bilibilitv/model/3b1bae87/dead.vanim_c b/game/models/bilibilitv/model/3b1bae87/dead.vanim_c similarity index 100% rename from models/bilibilitv/model/3b1bae87/dead.vanim_c rename to game/models/bilibilitv/model/3b1bae87/dead.vanim_c diff --git a/models/bilibilitv/model/3b1bae87/run.vanim_c b/game/models/bilibilitv/model/3b1bae87/run.vanim_c similarity index 100% rename from models/bilibilitv/model/3b1bae87/run.vanim_c rename to game/models/bilibilitv/model/3b1bae87/run.vanim_c diff --git a/models/bilibilitv/model/3b1bae87/spaw.vanim_c b/game/models/bilibilitv/model/3b1bae87/spaw.vanim_c similarity index 100% rename from models/bilibilitv/model/3b1bae87/spaw.vanim_c rename to game/models/bilibilitv/model/3b1bae87/spaw.vanim_c diff --git a/models/bilibilitv/model/3b1bae87/standby.vanim_c b/game/models/bilibilitv/model/3b1bae87/standby.vanim_c similarity index 100% rename from models/bilibilitv/model/3b1bae87/standby.vanim_c rename to game/models/bilibilitv/model/3b1bae87/standby.vanim_c diff --git a/models/bilibilitv/model/c0fe6c19/birth.vanim_c b/game/models/bilibilitv/model/c0fe6c19/birth.vanim_c similarity index 100% rename from models/bilibilitv/model/c0fe6c19/birth.vanim_c rename to game/models/bilibilitv/model/c0fe6c19/birth.vanim_c diff --git a/models/bilibilitv/model/c0fe6c19/dead.vanim_c b/game/models/bilibilitv/model/c0fe6c19/dead.vanim_c similarity index 100% rename from models/bilibilitv/model/c0fe6c19/dead.vanim_c rename to game/models/bilibilitv/model/c0fe6c19/dead.vanim_c diff --git a/models/bilibilitv/model/c0fe6c19/idle.vanim_c b/game/models/bilibilitv/model/c0fe6c19/idle.vanim_c similarity index 100% rename from models/bilibilitv/model/c0fe6c19/idle.vanim_c rename to game/models/bilibilitv/model/c0fe6c19/idle.vanim_c diff --git a/models/bilibilitv/model/c0fe6c19/run.vanim_c b/game/models/bilibilitv/model/c0fe6c19/run.vanim_c similarity index 100% rename from models/bilibilitv/model/c0fe6c19/run.vanim_c rename to game/models/bilibilitv/model/c0fe6c19/run.vanim_c diff --git a/models/bilibilitv/model/c0fe6c19/steandby.vanim_c b/game/models/bilibilitv/model/c0fe6c19/steandby.vanim_c similarity index 100% rename from models/bilibilitv/model/c0fe6c19/steandby.vanim_c rename to game/models/bilibilitv/model/c0fe6c19/steandby.vanim_c diff --git a/models/bilibilitv/model/tv.vmdl_c b/game/models/bilibilitv/model/tv.vmdl_c similarity index 100% rename from models/bilibilitv/model/tv.vmdl_c rename to game/models/bilibilitv/model/tv.vmdl_c diff --git a/models/bilibilitv/model/tv.vmesh_c b/game/models/bilibilitv/model/tv.vmesh_c similarity index 100% rename from models/bilibilitv/model/tv.vmesh_c rename to game/models/bilibilitv/model/tv.vmesh_c diff --git a/models/bilibilitv/model/tv_c0fe6c19.vagrp_c b/game/models/bilibilitv/model/tv_c0fe6c19.vagrp_c similarity index 100% rename from models/bilibilitv/model/tv_c0fe6c19.vagrp_c rename to game/models/bilibilitv/model/tv_c0fe6c19.vagrp_c diff --git a/models/bilibilitv/model/tv_flying.vmdl_c b/game/models/bilibilitv/model/tv_flying.vmdl_c similarity index 100% rename from models/bilibilitv/model/tv_flying.vmdl_c rename to game/models/bilibilitv/model/tv_flying.vmdl_c diff --git a/models/bilibilitv/model/tv_flying.vmesh_c b/game/models/bilibilitv/model/tv_flying.vmesh_c similarity index 100% rename from models/bilibilitv/model/tv_flying.vmesh_c rename to game/models/bilibilitv/model/tv_flying.vmesh_c diff --git a/models/bilibilitv/model/tv_flying_3b1bae87.vagrp_c b/game/models/bilibilitv/model/tv_flying_3b1bae87.vagrp_c similarity index 100% rename from models/bilibilitv/model/tv_flying_3b1bae87.vagrp_c rename to game/models/bilibilitv/model/tv_flying_3b1bae87.vagrp_c diff --git a/models/cages/91a5d900/cages_act_dota_die.vanim_c b/game/models/cages/91a5d900/cages_act_dota_die.vanim_c similarity index 100% rename from models/cages/91a5d900/cages_act_dota_die.vanim_c rename to game/models/cages/91a5d900/cages_act_dota_die.vanim_c diff --git a/models/cages/91a5d900/cages_act_dota_idle.vanim_c b/game/models/cages/91a5d900/cages_act_dota_idle.vanim_c similarity index 100% rename from models/cages/91a5d900/cages_act_dota_idle.vanim_c rename to game/models/cages/91a5d900/cages_act_dota_idle.vanim_c diff --git a/models/cages/91a5d900/cages_act_dota_por.vanim_c b/game/models/cages/91a5d900/cages_act_dota_por.vanim_c similarity index 100% rename from models/cages/91a5d900/cages_act_dota_por.vanim_c rename to game/models/cages/91a5d900/cages_act_dota_por.vanim_c diff --git a/models/cages/91a5d900/cages_act_dota_run.vanim_c b/game/models/cages/91a5d900/cages_act_dota_run.vanim_c similarity index 100% rename from models/cages/91a5d900/cages_act_dota_run.vanim_c rename to game/models/cages/91a5d900/cages_act_dota_run.vanim_c diff --git a/models/cages/91a5d900/cages_act_dota_spawn.vanim_c b/game/models/cages/91a5d900/cages_act_dota_spawn.vanim_c similarity index 100% rename from models/cages/91a5d900/cages_act_dota_spawn.vanim_c rename to game/models/cages/91a5d900/cages_act_dota_spawn.vanim_c diff --git a/models/cages/cages.vmesh_c b/game/models/cages/cages.vmesh_c similarity index 100% rename from models/cages/cages.vmesh_c rename to game/models/cages/cages.vmesh_c diff --git a/models/cages/cages_ship.vmdl_c b/game/models/cages/cages_ship.vmdl_c similarity index 100% rename from models/cages/cages_ship.vmdl_c rename to game/models/cages/cages_ship.vmdl_c diff --git a/models/cages/cages_ship_5a8c0ff0.vagrp_c b/game/models/cages/cages_ship_5a8c0ff0.vagrp_c similarity index 100% rename from models/cages/cages_ship_5a8c0ff0.vagrp_c rename to game/models/cages/cages_ship_5a8c0ff0.vagrp_c diff --git a/models/cages/cages_ship_91a5d900.vagrp_c b/game/models/cages/cages_ship_91a5d900.vagrp_c similarity index 100% rename from models/cages/cages_ship_91a5d900.vagrp_c rename to game/models/cages/cages_ship_91a5d900.vagrp_c diff --git a/models/heroes/bane/3d308b6c/atk.vanim_c b/game/models/heroes/bane/3d308b6c/atk.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/atk.vanim_c rename to game/models/heroes/bane/3d308b6c/atk.vanim_c diff --git a/models/heroes/bane/3d308b6c/atk2.vanim_c b/game/models/heroes/bane/3d308b6c/atk2.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/atk2.vanim_c rename to game/models/heroes/bane/3d308b6c/atk2.vanim_c diff --git a/models/heroes/bane/3d308b6c/capture.vanim_c b/game/models/heroes/bane/3d308b6c/capture.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/capture.vanim_c rename to game/models/heroes/bane/3d308b6c/capture.vanim_c diff --git a/models/heroes/bane/3d308b6c/dazhao.vanim_c b/game/models/heroes/bane/3d308b6c/dazhao.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/dazhao.vanim_c rename to game/models/heroes/bane/3d308b6c/dazhao.vanim_c diff --git a/models/heroes/bane/3d308b6c/death.vanim_c b/game/models/heroes/bane/3d308b6c/death.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/death.vanim_c rename to game/models/heroes/bane/3d308b6c/death.vanim_c diff --git a/models/heroes/bane/3d308b6c/jingzhi.vanim_c b/game/models/heroes/bane/3d308b6c/jingzhi.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/jingzhi.vanim_c rename to game/models/heroes/bane/3d308b6c/jingzhi.vanim_c diff --git a/models/heroes/bane/3d308b6c/shifag.vanim_c b/game/models/heroes/bane/3d308b6c/shifag.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/shifag.vanim_c rename to game/models/heroes/bane/3d308b6c/shifag.vanim_c diff --git a/models/heroes/bane/3d308b6c/shifag_copy.vanim_c b/game/models/heroes/bane/3d308b6c/shifag_copy.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/shifag_copy.vanim_c rename to game/models/heroes/bane/3d308b6c/shifag_copy.vanim_c diff --git a/models/heroes/bane/3d308b6c/shinao.vanim_c b/game/models/heroes/bane/3d308b6c/shinao.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/shinao.vanim_c rename to game/models/heroes/bane/3d308b6c/shinao.vanim_c diff --git a/models/heroes/bane/3d308b6c/versus.vanim_c b/game/models/heroes/bane/3d308b6c/versus.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/versus.vanim_c rename to game/models/heroes/bane/3d308b6c/versus.vanim_c diff --git a/models/heroes/bane/3d308b6c/zoulu.vanim_c b/game/models/heroes/bane/3d308b6c/zoulu.vanim_c similarity index 100% rename from models/heroes/bane/3d308b6c/zoulu.vanim_c rename to game/models/heroes/bane/3d308b6c/zoulu.vanim_c diff --git a/models/heroes/bane/bane.vmdl_c b/game/models/heroes/bane/bane.vmdl_c similarity index 100% rename from models/heroes/bane/bane.vmdl_c rename to game/models/heroes/bane/bane.vmdl_c diff --git a/models/heroes/bane/bane.vmesh_c b/game/models/heroes/bane/bane.vmesh_c similarity index 100% rename from models/heroes/bane/bane.vmesh_c rename to game/models/heroes/bane/bane.vmesh_c diff --git a/models/heroes/bane/bane_3d308b6c.vagrp_c b/game/models/heroes/bane/bane_3d308b6c.vagrp_c similarity index 100% rename from models/heroes/bane/bane_3d308b6c.vagrp_c rename to game/models/heroes/bane/bane_3d308b6c.vagrp_c diff --git a/models/heroes/bane/bane_head.vmdl_c b/game/models/heroes/bane/bane_head.vmdl_c similarity index 100% rename from models/heroes/bane/bane_head.vmdl_c rename to game/models/heroes/bane/bane_head.vmdl_c diff --git a/models/heroes/bane/bane_shoulders.vmdl_c b/game/models/heroes/bane/bane_shoulders.vmdl_c similarity index 100% rename from models/heroes/bane/bane_shoulders.vmdl_c rename to game/models/heroes/bane/bane_shoulders.vmdl_c diff --git a/models/heroes/bane/grip.vmdl_c b/game/models/heroes/bane/grip.vmdl_c similarity index 100% rename from models/heroes/bane/grip.vmdl_c rename to game/models/heroes/bane/grip.vmdl_c diff --git a/models/heroes/death_prophet/c6722722/wriggle_f_run.vanim_c b/game/models/heroes/death_prophet/c6722722/wriggle_f_run.vanim_c similarity index 100% rename from models/heroes/death_prophet/c6722722/wriggle_f_run.vanim_c rename to game/models/heroes/death_prophet/c6722722/wriggle_f_run.vanim_c diff --git a/models/heroes/death_prophet/dc567896/wriggle_f_run.vanim_c b/game/models/heroes/death_prophet/dc567896/wriggle_f_run.vanim_c similarity index 100% rename from models/heroes/death_prophet/dc567896/wriggle_f_run.vanim_c rename to game/models/heroes/death_prophet/dc567896/wriggle_f_run.vanim_c diff --git a/models/heroes/death_prophet/death_prophet_ghost.vmdl_c b/game/models/heroes/death_prophet/death_prophet_ghost.vmdl_c similarity index 100% rename from models/heroes/death_prophet/death_prophet_ghost.vmdl_c rename to game/models/heroes/death_prophet/death_prophet_ghost.vmdl_c diff --git a/models/heroes/death_prophet/death_prophet_ghost_c6722722.vagrp_c b/game/models/heroes/death_prophet/death_prophet_ghost_c6722722.vagrp_c similarity index 100% rename from models/heroes/death_prophet/death_prophet_ghost_c6722722.vagrp_c rename to game/models/heroes/death_prophet/death_prophet_ghost_c6722722.vagrp_c diff --git a/models/heroes/death_prophet/death_prophet_ghost_dc567896.vagrp_c b/game/models/heroes/death_prophet/death_prophet_ghost_dc567896.vagrp_c similarity index 100% rename from models/heroes/death_prophet/death_prophet_ghost_dc567896.vagrp_c rename to game/models/heroes/death_prophet/death_prophet_ghost_dc567896.vagrp_c diff --git a/models/heroes/death_prophet/wriggle_f.vmesh_c b/game/models/heroes/death_prophet/wriggle_f.vmesh_c similarity index 100% rename from models/heroes/death_prophet/wriggle_f.vmesh_c rename to game/models/heroes/death_prophet/wriggle_f.vmesh_c diff --git a/models/heroes/juggernaut/849777fd/hg_death.vanim_c b/game/models/heroes/juggernaut/849777fd/hg_death.vanim_c similarity index 100% rename from models/heroes/juggernaut/849777fd/hg_death.vanim_c rename to game/models/heroes/juggernaut/849777fd/hg_death.vanim_c diff --git a/models/heroes/juggernaut/849777fd/hg_idle.vanim_c b/game/models/heroes/juggernaut/849777fd/hg_idle.vanim_c similarity index 100% rename from models/heroes/juggernaut/849777fd/hg_idle.vanim_c rename to game/models/heroes/juggernaut/849777fd/hg_idle.vanim_c diff --git a/models/heroes/juggernaut/849777fd/hg_run.vanim_c b/game/models/heroes/juggernaut/849777fd/hg_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/849777fd/hg_run.vanim_c rename to game/models/heroes/juggernaut/849777fd/hg_run.vanim_c diff --git a/models/heroes/juggernaut/849777fd/hg_spawn.vanim_c b/game/models/heroes/juggernaut/849777fd/hg_spawn.vanim_c similarity index 100% rename from models/heroes/juggernaut/849777fd/hg_spawn.vanim_c rename to game/models/heroes/juggernaut/849777fd/hg_spawn.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/bindpose.vanim_c b/game/models/heroes/juggernaut/94e2634b/bindpose.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/bindpose.vanim_c rename to game/models/heroes/juggernaut/94e2634b/bindpose.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_debut.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_debut.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_debut.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_debut.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_frontpage.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_frontpage.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_frontpage.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_alt_frontpage.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_debut.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_debut.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_debut.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_debut.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_frontpage.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_frontpage.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_frontpage.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_frontpage.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_debut.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_debut.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_debut.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_debut.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_frontpage.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_frontpage.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_frontpage.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_frontpage.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_loadout_v3_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_showoff.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_showoff.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_showoff.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_showoff.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_spawn.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_spawn.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_spawn.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_spawn.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_arcana_taunt.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_arcana_taunt.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_arcana_taunt.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_arcana_taunt.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack02_versus.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack02_versus.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack02_versus.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack02_versus.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_anim_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_anim_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_anim_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_anim_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_fast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_fast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_fast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_fast_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_fast_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_fast_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_fast_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_faster.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_faster.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_faster.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_faster_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_faster_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_faster_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_faster_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_fastest.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_fastest.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_fastest.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack1_fastest_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack1_fastest_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack1_fastest_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack1_fastest_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_anim_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_anim_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_anim_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_anim_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_fast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_fast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_fast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_fast_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_fast_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_fast_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_fast_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_faster.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_faster.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_faster.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_faster_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_faster_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_faster_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_faster_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_fastest.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_fastest.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_fastest.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack2_fastest_ti8.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack2_fastest_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack2_fastest_ti8.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack2_fastest_ti8.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_crit.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_crit.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_crit.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_crit.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_crit2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_crit2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_crit2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_crit2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_crit_armor_of_the_favorite.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_crit_armor_of_the_favorite.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_crit_armor_of_the_favorite.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_crit_armor_of_the_favorite.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_crit_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_crit_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_crit_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_crit_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi1.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi1.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi1_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_faster.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi1_faster.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_faster.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fastest.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fastest.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi1_fastest.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi2_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_faster.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi2_faster.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_faster.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fastest.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fastest.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi2_fastest.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi3_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_faster.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi3_faster.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_faster.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fastest.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fastest.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_odachi3_fastest.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_omni_cast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_omni_cast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_omni_cast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_omni_cast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_spin.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_spin.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_spin.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_spin.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_spin_cast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_spin_cast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_spin_cast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_spin_cast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_spin_cast_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_spin_cast_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_spin_cast_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_spin_cast_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_attack_spin_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_attack_spin_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_attack_spin_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_attack_spin_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_crit_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_crit_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_crit_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_crit_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death2_faes_dup.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death2_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death2_faes_dup.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death2_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death2_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death2_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death2_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death2_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death2_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death2_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death2_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death2_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death3_faes_dup.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death3_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death3_faes_dup.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death3_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death3_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death3_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death3_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death3_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death3_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death3_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death3_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death3_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_1.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_1.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_1.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_1.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_1.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_1.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_1.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_1.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_1.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_faes_dup_red_3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_1.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_red_1.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_1.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_red_2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_alt01_red_3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_alt01_red_3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_faes_dup.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_faes_dup.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_death_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_death_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_death_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_death_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_defeat_arcana.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_defeat_arcana.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_defeat_arcana.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_defeat_arcana.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death2_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death2_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death2_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death2_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death3_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death3_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death3_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death3_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death4.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death4.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death4.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death4.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death4_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death4_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death4_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death4_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_death_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_death_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_death_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_death_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_loadout.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_loadout.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_loadout.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_loadout.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_faes_loadout_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_faes_loadout_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_faes_loadout_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_faes_loadout_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_fail.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_fail.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_fail.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_fail.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_fail_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_fail_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_fail_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_fail_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_forcestaff.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_forcestaff.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_forcestaff.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_forcestaff.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_forcestaff_end_agg.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_forcestaff_end_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_forcestaff_end_agg.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_forcestaff_end_agg.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_forcestaff_end_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_forcestaff_end_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_forcestaff_end_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_forcestaff_end_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_generic_channel.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_generic_channel.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_generic_channel.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_generic_channel.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_healing_ward.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_healing_ward.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_healing_ward.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_healing_ward.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_healing_ward_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_healing_ward_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_healing_ward_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_healing_ward_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle2_reverse_rare_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_agg_injured.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_agg_injured.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_agg_injured.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_agg_injured.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_agg_rare.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_agg_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_agg_rare.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_agg_rare.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_agg_rare_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_agg_rare_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_agg_rare_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_agg_rare_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_agg_spin_sword.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_agg_spin_sword.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_agg_spin_sword.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_agg_spin_sword.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_arcana_4_loop_no_fx.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_arcana_4_loop_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_arcana_4_loop_no_fx.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_arcana_4_loop_no_fx.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_agg_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx_copy.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx_copy.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx_copy.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_no_fx_copy.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_5_loop_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_odachi_rare.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_odachi_rare.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_odachi_rare.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_injured_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_idle_reverse_rare_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_alt_effigy.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_alt_effigy.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_alt_effigy.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_alt_effigy.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_default.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_default.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_default.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_default.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_default_spawn.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_default_spawn.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_default_spawn.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_default_spawn.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_red_rare.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_red_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_red_rare.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_red_rare.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_loadout_red_rare_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_loadout_red_rare_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_loadout_red_rare_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_loadout_red_rare_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_odachi_run.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_odachi_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_odachi_run.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_odachi_run.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_odachi_walk.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_odachi_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_odachi_walk.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_odachi_walk.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_omni.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_omni.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_omni.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_omni.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_omni_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_omni_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_omni_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_omni_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_omni_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_omni_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_omni_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_omni_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_portrait.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_portrait.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_portrait.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_portrait.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_portrait_copy.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_portrait_copy.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_portrait_copy.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_portrait_copy.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_portrait_copy_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_portrait_copy_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_portrait_copy_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_portrait_copy_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_portrait_head_turn.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_portrait_head_turn.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_portrait_head_turn.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_portrait_head_turn.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_portrait_head_turn_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_portrait_head_turn_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_portrait_head_turn_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_portrait_head_turn_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_portrait_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_portrait_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_portrait_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_portrait_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_reverse_run.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_reverse_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_reverse_run.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_reverse_run.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_reverse_walk.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_reverse_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_reverse_walk.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_reverse_walk.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_chase.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_chase.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_chase.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_chase.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_fast_alt.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_fast_alt.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_loadout.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_loadout.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_fast_alt_loadout.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_loadout.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi_loadout.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi_loadout.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi_loadout.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_fast_alt_odachi_loadout.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_fast_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_run_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_run_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_run_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_walk.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_walk.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_injured_walk_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_injured_walk_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_reverse.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_reverse.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_reverse.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_reverse.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_reverse_run_fast_alt.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_reverse_run_fast_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_reverse_run_fast_alt.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_reverse_run_fast_alt.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_run.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_run.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_run.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_run_walk.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_run_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_run_walk.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_run_walk.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_spawn01.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_spawn01.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_spawn01.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_spawn01.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_spawn_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_spawn_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_spawn_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_spawn_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_spawn_odachi_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_spawn_odachi_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_spawn_odachi_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_spawn_odachi_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_spin_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_spin_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_spin_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_spin_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_stun.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_stun.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_stun.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_stun.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_stun_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_stun_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_stun_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_stun_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_taunt_face_me.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_taunt_face_me.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_taunt_face_me.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_taunt_face_me.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_taunt_loser.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_taunt_loser.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_taunt_loser.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_taunt_loser.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_taunt_loser_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_taunt_loser_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_taunt_loser_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_taunt_loser_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_taunt_masklord_01.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_taunt_masklord_01.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_taunt_masklord_01.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_taunt_masklord_01.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_taunt_odachi_01.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_taunt_odachi_01.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_taunt_odachi_01.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_taunt_odachi_01.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade_anim.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade_anim.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_taunt_sharp_blade_anim.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport_effigy.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport_effigy.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport_effigy.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport_effigy.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport_end.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport_end.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport_end.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport_end.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport_end_aggressive_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport_end_odachi.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport_end_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport_end_odachi.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport_end_odachi.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport_end_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport_end_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport_end_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport_end_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_teleport_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_teleport_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_teleport_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_teleport_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_alt.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_alt.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_alt.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare_favorite_legs.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_red_rare_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_v3.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_v3.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_ti9_loadout_v3.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_ti9_loadout_v3.vanim_c diff --git a/models/heroes/juggernaut/94e2634b/okita_victory.vanim_c b/game/models/heroes/juggernaut/94e2634b/okita_victory.vanim_c similarity index 100% rename from models/heroes/juggernaut/94e2634b/okita_victory.vanim_c rename to game/models/heroes/juggernaut/94e2634b/okita_victory.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/bindpose.vanim_c b/game/models/heroes/juggernaut/9cb2f493/bindpose.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/bindpose.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/bindpose.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_debut.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_debut.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_debut.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_debut.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_frontpage.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_frontpage.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_frontpage.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_alt_frontpage.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_debut.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_debut.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_debut.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_debut.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_frontpage.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_frontpage.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_frontpage.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_frontpage.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_debut.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_debut.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_debut.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_debut.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_frontpage.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_frontpage.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_frontpage.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_frontpage.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_spawn_v2_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_loadout_v3_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_showoff.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_showoff.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_showoff.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_showoff.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_spawn.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_spawn.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_spawn.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_spawn.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_arcana_taunt.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_arcana_taunt.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_arcana_taunt.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_arcana_taunt.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack02_versus.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack02_versus.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack02_versus.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack02_versus.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_anim_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_anim_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_anim_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_anim_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_fast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_fast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_fast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_fast_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_fast_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_fast_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_fast_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_faster.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_faster.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_faster.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_faster_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_faster_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_faster_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_faster_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_fastest.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_fastest.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_fastest.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack1_fastest_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack1_fastest_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack1_fastest_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack1_fastest_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_anim_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_anim_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_anim_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_anim_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_fast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_fast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_fast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_fast_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_fast_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_fast_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_fast_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_faster.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_faster.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_faster.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_faster_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_faster_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_faster_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_faster_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_fastest.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_fastest.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_fastest.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack2_fastest_ti8.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack2_fastest_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack2_fastest_ti8.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack2_fastest_ti8.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_crit.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_crit.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_crit.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_crit.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_crit2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_crit2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_crit2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_crit2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_crit_anim_ti8_overtheshoulder.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_crit_armor_of_the_favorite.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_crit_armor_of_the_favorite.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_crit_armor_of_the_favorite.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_crit_armor_of_the_favorite.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_crit_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_crit_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_crit_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_crit_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi1.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_faster.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_faster.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_faster.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fastest.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fastest.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi1_fastest.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_faster.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_faster.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_faster.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fastest.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fastest.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi2_fastest.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_faster.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_faster.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_faster.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fastest.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fastest.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_odachi3_fastest.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_omni_cast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_omni_cast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_omni_cast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_omni_cast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_spin.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_spin.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_spin.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_spin.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_spin_cast_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_attack_spin_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_attack_spin_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_attack_spin_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_attack_spin_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_crit_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_crit_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_crit_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_crit_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death2_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death2_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death2_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death2_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death2_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death3_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death3_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death3_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death3_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death3_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_1.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_1.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_1.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_1.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_1.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_1.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_1.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_1.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_1.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_faes_dup_red_3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_1.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_1.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_1.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_alt01_red_3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_faes_dup.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_faes_dup.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_faes_dup.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_faes_dup.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_faes_dup_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_faes_dup_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_faes_dup_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_faes_dup_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_death_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_death_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_death_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_death_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_defeat_arcana.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_defeat_arcana.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_defeat_arcana.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_defeat_arcana.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death2_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death2_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death2_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death2_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death3_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death3_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death3_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death3_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death4.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death4.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death4.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death4.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death4_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death4_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death4_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death4_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_death_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_death_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_death_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_death_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_loadout.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_loadout.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_loadout.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_loadout.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_faes_loadout_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_faes_loadout_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_faes_loadout_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_faes_loadout_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_fail.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_fail.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_fail.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_fail.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_fail_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_fail_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_fail_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_fail_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_forcestaff.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_forcestaff.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_forcestaff.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_forcestaff.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_agg.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_agg.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_agg.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_forcestaff_end_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_generic_channel.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_generic_channel.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_generic_channel.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_generic_channel.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_healing_ward.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_healing_ward.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_healing_ward.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_healing_ward.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_healing_ward_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_healing_ward_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_healing_ward_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_healing_ward_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle2_reverse_rare_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_agg_injured.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_injured.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_agg_injured.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_injured.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_rare_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_agg_spin_sword.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_spin_sword.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_agg_spin_sword.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_agg_spin_sword.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_arcana_4_loop_no_fx.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_arcana_4_loop_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_arcana_4_loop_no_fx.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_arcana_4_loop_no_fx.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_no_fx_copy.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_agg_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx_copy.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx_copy.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx_copy.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_no_fx_copy.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_5_loop_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_rare.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_odachi_rare.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_odachi_rare.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_arcana_4_loop_no_fx.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_injured_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_idle_reverse_rare_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_alt_effigy.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_alt_effigy.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_alt_effigy.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_alt_effigy.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_arcana_spawn_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_default.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_default.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_default.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_default.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_default_spawn.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_default_spawn.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_default_spawn.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_default_spawn.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_loadout_red_rare_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_odachi_run.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_odachi_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_odachi_run.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_odachi_run.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_odachi_walk.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_odachi_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_odachi_walk.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_odachi_walk.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_omni.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_omni.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_omni.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_omni.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_omni_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_omni_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_omni_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_omni_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_omni_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_omni_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_omni_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_omni_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_portrait.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_portrait.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_portrait.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_portrait.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_portrait_copy.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_portrait_copy.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_portrait_copy.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_portrait_copy.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_portrait_copy_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_portrait_copy_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_portrait_copy_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_portrait_copy_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_portrait_head_turn_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_portrait_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_portrait_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_portrait_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_portrait_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_reverse_run.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_reverse_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_reverse_run.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_reverse_run.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_reverse_walk.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_reverse_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_reverse_walk.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_reverse_walk.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_chase.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_chase.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_chase.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_chase.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_fast_alt.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_loadout.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_loadout.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_loadout.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_loadout.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi_loadout.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi_loadout.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi_loadout.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_fast_alt_odachi_loadout.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_fast_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_run_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_run_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_walk.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_agg_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_injured_walk_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_reverse.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_reverse.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_reverse.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_reverse.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_reverse_run_fast_alt.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_reverse_run_fast_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_reverse_run_fast_alt.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_reverse_run_fast_alt.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_run.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_run.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_run.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_run_walk.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_run_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_run_walk.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_run_walk.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_spawn01.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_spawn01.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_spawn01.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_spawn01.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_spawn_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_spawn_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_spawn_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_spawn_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_spawn_odachi_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_spawn_odachi_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_spawn_odachi_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_spawn_odachi_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_spin_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_spin_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_spin_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_spin_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_stun.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_stun.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_stun.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_stun.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_stun_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_stun_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_stun_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_stun_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_taunt_face_me.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_taunt_face_me.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_taunt_face_me.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_taunt_face_me.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_taunt_loser.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_taunt_loser.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_taunt_loser.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_taunt_loser.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_taunt_loser_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_taunt_loser_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_taunt_loser_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_taunt_loser_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_taunt_masklord_01.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_taunt_masklord_01.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_taunt_masklord_01.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_taunt_masklord_01.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_taunt_odachi_01.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_taunt_odachi_01.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_taunt_odachi_01.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_taunt_odachi_01.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade_anim.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade_anim.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_taunt_sharp_blade_anim.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport_effigy.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport_effigy.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport_effigy.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport_effigy.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport_end.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport_end.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport_end.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport_end.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_aggressive_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport_end_odachi.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport_end_odachi.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_odachi.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport_end_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport_end_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport_end_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_teleport_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_teleport_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_teleport_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_teleport_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_alt_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_spawn_v2_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_arcana_loadout_v3_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_alt.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_alt.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_alt.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_alt.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_arcana_spawn_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare_favorite_legs.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare_favorite_legs.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare_favorite_legs.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_red_rare_favorite_legs.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_v3.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_v3.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_v3.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_ti9_loadout_v3.vanim_c diff --git a/models/heroes/juggernaut/9cb2f493/okita_victory.vanim_c b/game/models/heroes/juggernaut/9cb2f493/okita_victory.vanim_c similarity index 100% rename from models/heroes/juggernaut/9cb2f493/okita_victory.vanim_c rename to game/models/heroes/juggernaut/9cb2f493/okita_victory.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/bindpose.vanim_c b/game/models/heroes/juggernaut/cce213bc/bindpose.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/bindpose.vanim_c rename to game/models/heroes/juggernaut/cce213bc/bindpose.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_arcana_teleport_end_codachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_arcana_teleport_end_codachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_arcana_teleport_end_codachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_arcana_teleport_end_codachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack02_versus.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack02_versus.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack02_versus.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack02_versus.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_anim_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_anim_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_anim_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_anim_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_fast_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_fast_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_fast_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_fast_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_faster.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_faster.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_faster.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_faster_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_faster_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_faster_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_faster_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_fastest.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_fastest.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_fastest.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack1_fastest_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack1_fastest_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack1_fastest_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack1_fastest_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_anim_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_anim_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_anim_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_anim_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_fast_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_fast_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_fast_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_fast_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_faster.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_faster.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_faster.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_faster_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_faster_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_faster_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_faster_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_fastest.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_fastest.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_fastest.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack2_fastest_ti8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack2_fastest_ti8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack2_fastest_ti8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack2_fastest_ti8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_crit.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_crit.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_crit.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_crit.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_crit_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_crit_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_crit_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_crit_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite_effigy.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite_effigy.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite_effigy.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_crit_armor_of_the_favorite_effigy.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_crit_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_crit_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_crit_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_crit_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_crit_ti8_overtheshoulder.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_crit_ti8_overtheshoulder.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_crit_ti8_overtheshoulder.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_crit_ti8_overtheshoulder.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi1.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi1.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi1_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_faster.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi1_faster.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_faster.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fastest.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fastest.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi1_fastest.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi2.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi2.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi2_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_faster.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi2_faster.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_faster.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fastest.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fastest.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi2_fastest.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi3.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi3.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi3_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_faster.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_faster.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi3_faster.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_faster.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fastest.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fastest.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fastest.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_odachi3_fastest.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_omni_cast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_omni_cast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_omni_cast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_omni_cast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_showoff.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_showoff.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_showoff.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_showoff.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_spin.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_spin.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_spin.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_spin.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_spin_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_spin_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_spin_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_spin_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_spin_cast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_spin_cast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_spin_cast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_spin_cast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_attack_spin_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_attack_spin_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_attack_spin_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_attack_spin_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_death.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_death.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_death.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_death.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_death2.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_death2.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_death2.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_death2.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_death3.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_death3.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_death3.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_death3.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_death_alt01.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_death_alt01.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_death_alt01.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_death_alt01.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_death_alt01_1.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_death_alt01_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_death_alt01_1.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_death_alt01_1.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_death_alt01_2.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_death_alt01_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_death_alt01_2.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_death_alt01_2.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_death_alt01_3.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_death_alt01_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_death_alt01_3.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_death_alt01_3.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_fail.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_fail.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_fail.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_fail.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_fail_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_fail_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_fail_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_fail_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_1.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_1.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_1.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_1.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_10.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_10.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_10.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_10.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_2.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_2.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_2.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_2.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_3.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_3.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_3.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_3.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_4.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_4.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_4.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_4.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_5.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_5.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_5.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_5.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_6.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_6.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_6.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_6.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_7.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_7.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_7.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_7.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_8.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_8.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_8.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_8.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_death_9.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_death_9.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_death_9.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_death_9.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_loadout.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_loadout.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_loadout.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_loadout.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_feas_loadout_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_feas_loadout_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_feas_loadout_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_feas_loadout_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_forcestaff.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_forcestaff.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_forcestaff.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_forcestaff.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_forcestaff_end_agg.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_forcestaff_end_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_forcestaff_end_agg.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_forcestaff_end_agg.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_forcestaff_end_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_forcestaff_end_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_forcestaff_end_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_forcestaff_end_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_generic_channel.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_generic_channel.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_generic_channel.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_generic_channel.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_healing_ward_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_healing_ward_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_healing_ward_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_healing_ward_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle2.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle2.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle2.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle2.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle2_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle2_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle2_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle2_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle_agg_injured.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle_agg_injured.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle_agg_injured.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle_agg_injured.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle_aggressive.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle_aggressive.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle_aggressive.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle_aggressive.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle_odachi_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle_odachi_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle_odachi_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle_odachi_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle_reserve_injured.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle_reserve_injured.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle_reserve_injured.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle_reserve_injured.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle_reverse.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle_reverse.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle_reverse.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle_reverse.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_idle_spin_sword.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_idle_spin_sword.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_idle_spin_sword.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_idle_spin_sword.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_loadout_default.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_loadout_default.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_loadout_default.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_loadout_default.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_loadout_default_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_loadout_default_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_loadout_default_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_loadout_default_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_loadout_default_spawn_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_odachi_run.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_odachi_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_odachi_run.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_odachi_run.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_odachi_run_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_odachi_run_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_odachi_run_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_odachi_run_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_odachi_walk.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_odachi_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_odachi_walk.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_odachi_walk.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_omni.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_omni.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_omni.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_omni.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_omni_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_omni_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_omni_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_omni_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_omni_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_omni_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_omni_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_omni_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_portrait.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_portrait.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_portrait.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_portrait.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_portrait_head_turn.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_portrait_head_turn.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_portrait_head_turn.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_portrait_head_turn.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_portrait_movie.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_portrait_movie.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_portrait_movie.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_portrait_movie.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_reverse_run.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_reverse_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_reverse_run.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_reverse_run.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_reverse_run_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_reverse_run_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_reverse_run_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_reverse_run_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_reverse_walk.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_reverse_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_reverse_walk.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_reverse_walk.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_chase.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_chase.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_chase.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_chase.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_fast_agg.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_fast_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_fast_agg.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_fast_agg.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_run_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_walk.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_walk.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_odachi_walk.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_run.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_run.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_run.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_run_agg.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_run_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_run_agg.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_run_agg.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast_agg.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast_agg.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_run_fast_agg.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_walk.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_walk.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_walk.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_injured_walk_agg.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_injured_walk_agg.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_injured_walk_agg.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_injured_walk_agg.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_reverse.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_reverse.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_reverse.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_reverse.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_reverse_run_loadout_versus.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_reverse_run_loadout_versus.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_reverse_run_loadout_versus.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_reverse_run_loadout_versus.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_run.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_run.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_run.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_run.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_run_walk.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_run_walk.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_run_walk.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_run_walk.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_skill2.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_skill2.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_skill2.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_skill2.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_spawn01.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_spawn01.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_spawn01.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_spawn01.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_spawn01_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_spawn01_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_spawn01_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_spawn01_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_spawn_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_spawn_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_spawn_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_spawn_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_spawn_odachi_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_spawn_odachi_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_spawn_odachi_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_spawn_odachi_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_spin_cast_odachi.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_spin_cast_odachi.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_spin_cast_odachi.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_spin_cast_odachi.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_stun.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_stun.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_stun.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_stun.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_stun_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_stun_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_stun_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_stun_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_taunt_face_me.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_taunt_face_me.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_taunt_face_me.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_taunt_face_me.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_taunt_loser.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_taunt_loser.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_taunt_loser.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_taunt_loser.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_taunt_loser_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_taunt_loser_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_taunt_loser_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_taunt_loser_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_taunt_masklord_01.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_taunt_masklord_01.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_taunt_masklord_01.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_taunt_masklord_01.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_taunt_odachi_01.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_taunt_odachi_01.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_taunt_odachi_01.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_taunt_odachi_01.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade_anim.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade_anim.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade_anim.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_taunt_sharp_blade_anim.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_teleport_end.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_teleport_end.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_teleport_end.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_teleport_end.vanim_c diff --git a/models/heroes/juggernaut/cce213bc/okita_victory.vanim_c b/game/models/heroes/juggernaut/cce213bc/okita_victory.vanim_c similarity index 100% rename from models/heroes/juggernaut/cce213bc/okita_victory.vanim_c rename to game/models/heroes/juggernaut/cce213bc/okita_victory.vanim_c diff --git a/models/heroes/juggernaut/hg_c8351919.vmesh_c b/game/models/heroes/juggernaut/hg_c8351919.vmesh_c similarity index 100% rename from models/heroes/juggernaut/hg_c8351919.vmesh_c rename to game/models/heroes/juggernaut/hg_c8351919.vmesh_c diff --git a/models/heroes/juggernaut/jugg_bracers.vmdl_c b/game/models/heroes/juggernaut/jugg_bracers.vmdl_c similarity index 100% rename from models/heroes/juggernaut/jugg_bracers.vmdl_c rename to game/models/heroes/juggernaut/jugg_bracers.vmdl_c diff --git a/models/heroes/juggernaut/jugg_cape.vmdl_c b/game/models/heroes/juggernaut/jugg_cape.vmdl_c similarity index 100% rename from models/heroes/juggernaut/jugg_cape.vmdl_c rename to game/models/heroes/juggernaut/jugg_cape.vmdl_c diff --git a/models/heroes/juggernaut/jugg_healing_ward.vmdl_c b/game/models/heroes/juggernaut/jugg_healing_ward.vmdl_c similarity index 100% rename from models/heroes/juggernaut/jugg_healing_ward.vmdl_c rename to game/models/heroes/juggernaut/jugg_healing_ward.vmdl_c diff --git a/models/heroes/juggernaut/jugg_healing_ward_849777fd.vagrp_c b/game/models/heroes/juggernaut/jugg_healing_ward_849777fd.vagrp_c similarity index 100% rename from models/heroes/juggernaut/jugg_healing_ward_849777fd.vagrp_c rename to game/models/heroes/juggernaut/jugg_healing_ward_849777fd.vagrp_c diff --git a/models/heroes/juggernaut/jugg_mask.vmdl_c b/game/models/heroes/juggernaut/jugg_mask.vmdl_c similarity index 100% rename from models/heroes/juggernaut/jugg_mask.vmdl_c rename to game/models/heroes/juggernaut/jugg_mask.vmdl_c diff --git a/models/heroes/juggernaut/jugg_sword.vmdl_c b/game/models/heroes/juggernaut/jugg_sword.vmdl_c similarity index 100% rename from models/heroes/juggernaut/jugg_sword.vmdl_c rename to game/models/heroes/juggernaut/jugg_sword.vmdl_c diff --git a/models/heroes/juggernaut/juggernaut.vmdl_c b/game/models/heroes/juggernaut/juggernaut.vmdl_c similarity index 100% rename from models/heroes/juggernaut/juggernaut.vmdl_c rename to game/models/heroes/juggernaut/juggernaut.vmdl_c diff --git a/models/heroes/juggernaut/juggernaut_arcana.vmdl_c b/game/models/heroes/juggernaut/juggernaut_arcana.vmdl_c similarity index 100% rename from models/heroes/juggernaut/juggernaut_arcana.vmdl_c rename to game/models/heroes/juggernaut/juggernaut_arcana.vmdl_c diff --git a/models/heroes/juggernaut/juggernaut_arcana_9cb2f493.vagrp_c b/game/models/heroes/juggernaut/juggernaut_arcana_9cb2f493.vagrp_c similarity index 100% rename from models/heroes/juggernaut/juggernaut_arcana_9cb2f493.vagrp_c rename to game/models/heroes/juggernaut/juggernaut_arcana_9cb2f493.vagrp_c diff --git a/models/heroes/juggernaut/juggernaut_cce213bc.vagrp_c b/game/models/heroes/juggernaut/juggernaut_cce213bc.vagrp_c similarity index 100% rename from models/heroes/juggernaut/juggernaut_cce213bc.vagrp_c rename to game/models/heroes/juggernaut/juggernaut_cce213bc.vagrp_c diff --git a/models/heroes/juggernaut/juggernaut_pants.vmdl_c b/game/models/heroes/juggernaut/juggernaut_pants.vmdl_c similarity index 100% rename from models/heroes/juggernaut/juggernaut_pants.vmdl_c rename to game/models/heroes/juggernaut/juggernaut_pants.vmdl_c diff --git a/models/heroes/juggernaut/okita.vmdl_c b/game/models/heroes/juggernaut/okita.vmdl_c similarity index 100% rename from models/heroes/juggernaut/okita.vmdl_c rename to game/models/heroes/juggernaut/okita.vmdl_c diff --git a/models/heroes/juggernaut/okita_2ae260ef.vmesh_c b/game/models/heroes/juggernaut/okita_2ae260ef.vmesh_c similarity index 100% rename from models/heroes/juggernaut/okita_2ae260ef.vmesh_c rename to game/models/heroes/juggernaut/okita_2ae260ef.vmesh_c diff --git a/models/heroes/juggernaut/okita_5862be93.vmesh_c b/game/models/heroes/juggernaut/okita_5862be93.vmesh_c similarity index 100% rename from models/heroes/juggernaut/okita_5862be93.vmesh_c rename to game/models/heroes/juggernaut/okita_5862be93.vmesh_c diff --git a/models/heroes/juggernaut/okita_94e2634b.vagrp_c b/game/models/heroes/juggernaut/okita_94e2634b.vagrp_c similarity index 100% rename from models/heroes/juggernaut/okita_94e2634b.vagrp_c rename to game/models/heroes/juggernaut/okita_94e2634b.vagrp_c diff --git a/models/heroes/juggernaut/okita_d6b356b5.vmesh_c b/game/models/heroes/juggernaut/okita_d6b356b5.vmesh_c similarity index 100% rename from models/heroes/juggernaut/okita_d6b356b5.vmesh_c rename to game/models/heroes/juggernaut/okita_d6b356b5.vmesh_c diff --git a/models/heroes/lina/dragonslave.vmdl_c b/game/models/heroes/lina/dragonslave.vmdl_c similarity index 100% rename from models/heroes/lina/dragonslave.vmdl_c rename to game/models/heroes/lina/dragonslave.vmdl_c diff --git a/models/heroes/lina/lina.vmdl_c b/game/models/heroes/lina/lina.vmdl_c similarity index 100% rename from models/heroes/lina/lina.vmdl_c rename to game/models/heroes/lina/lina.vmdl_c diff --git a/models/heroes/lina/lina_arms.vmdl_c b/game/models/heroes/lina/lina_arms.vmdl_c similarity index 100% rename from models/heroes/lina/lina_arms.vmdl_c rename to game/models/heroes/lina/lina_arms.vmdl_c diff --git a/models/heroes/lina/lina_belt.vmdl_c b/game/models/heroes/lina/lina_belt.vmdl_c similarity index 100% rename from models/heroes/lina/lina_belt.vmdl_c rename to game/models/heroes/lina/lina_belt.vmdl_c diff --git a/models/heroes/lina/lina_head.vmdl_c b/game/models/heroes/lina/lina_head.vmdl_c similarity index 100% rename from models/heroes/lina/lina_head.vmdl_c rename to game/models/heroes/lina/lina_head.vmdl_c diff --git a/models/heroes/lina/lina_neck.vmdl_c b/game/models/heroes/lina/lina_neck.vmdl_c similarity index 100% rename from models/heroes/lina/lina_neck.vmdl_c rename to game/models/heroes/lina/lina_neck.vmdl_c diff --git a/models/heroes/lina/lina_teaser.vmdl_c b/game/models/heroes/lina/lina_teaser.vmdl_c similarity index 100% rename from models/heroes/lina/lina_teaser.vmdl_c rename to game/models/heroes/lina/lina_teaser.vmdl_c diff --git a/models/hujing_wangyu/1ca13d9b/hujingludfeixing_dea.vanim_c b/game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_dea.vanim_c similarity index 100% rename from models/hujing_wangyu/1ca13d9b/hujingludfeixing_dea.vanim_c rename to game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_dea.vanim_c diff --git a/models/hujing_wangyu/1ca13d9b/hujingludfeixing_idle.vanim_c b/game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_idle.vanim_c similarity index 100% rename from models/hujing_wangyu/1ca13d9b/hujingludfeixing_idle.vanim_c rename to game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_idle.vanim_c diff --git a/models/hujing_wangyu/1ca13d9b/hujingludfeixing_move.vanim_c b/game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_move.vanim_c similarity index 100% rename from models/hujing_wangyu/1ca13d9b/hujingludfeixing_move.vanim_c rename to game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_move.vanim_c diff --git a/models/hujing_wangyu/1ca13d9b/hujingludfeixing_s.vanim_c b/game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_s.vanim_c similarity index 100% rename from models/hujing_wangyu/1ca13d9b/hujingludfeixing_s.vanim_c rename to game/models/hujing_wangyu/1ca13d9b/hujingludfeixing_s.vanim_c diff --git a/models/hujing_wangyu/cfefbe74/hujingludfeixing_dea.vanim_c b/game/models/hujing_wangyu/cfefbe74/hujingludfeixing_dea.vanim_c similarity index 100% rename from models/hujing_wangyu/cfefbe74/hujingludfeixing_dea.vanim_c rename to game/models/hujing_wangyu/cfefbe74/hujingludfeixing_dea.vanim_c diff --git a/models/hujing_wangyu/cfefbe74/hujingludfeixing_idle.vanim_c b/game/models/hujing_wangyu/cfefbe74/hujingludfeixing_idle.vanim_c similarity index 100% rename from models/hujing_wangyu/cfefbe74/hujingludfeixing_idle.vanim_c rename to game/models/hujing_wangyu/cfefbe74/hujingludfeixing_idle.vanim_c diff --git a/models/hujing_wangyu/cfefbe74/hujingludfeixing_move.vanim_c b/game/models/hujing_wangyu/cfefbe74/hujingludfeixing_move.vanim_c similarity index 100% rename from models/hujing_wangyu/cfefbe74/hujingludfeixing_move.vanim_c rename to game/models/hujing_wangyu/cfefbe74/hujingludfeixing_move.vanim_c diff --git a/models/hujing_wangyu/cfefbe74/hujingludfeixing_s.vanim_c b/game/models/hujing_wangyu/cfefbe74/hujingludfeixing_s.vanim_c similarity index 100% rename from models/hujing_wangyu/cfefbe74/hujingludfeixing_s.vanim_c rename to game/models/hujing_wangyu/cfefbe74/hujingludfeixing_s.vanim_c diff --git a/models/hujing_wangyu/f8fee260/hujingludfeixing_dea.vanim_c b/game/models/hujing_wangyu/f8fee260/hujingludfeixing_dea.vanim_c similarity index 100% rename from models/hujing_wangyu/f8fee260/hujingludfeixing_dea.vanim_c rename to game/models/hujing_wangyu/f8fee260/hujingludfeixing_dea.vanim_c diff --git a/models/hujing_wangyu/f8fee260/hujingludfeixing_idle.vanim_c b/game/models/hujing_wangyu/f8fee260/hujingludfeixing_idle.vanim_c similarity index 100% rename from models/hujing_wangyu/f8fee260/hujingludfeixing_idle.vanim_c rename to game/models/hujing_wangyu/f8fee260/hujingludfeixing_idle.vanim_c diff --git a/models/hujing_wangyu/f8fee260/hujingludfeixing_move.vanim_c b/game/models/hujing_wangyu/f8fee260/hujingludfeixing_move.vanim_c similarity index 100% rename from models/hujing_wangyu/f8fee260/hujingludfeixing_move.vanim_c rename to game/models/hujing_wangyu/f8fee260/hujingludfeixing_move.vanim_c diff --git a/models/hujing_wangyu/f8fee260/hujingludfeixing_s.vanim_c b/game/models/hujing_wangyu/f8fee260/hujingludfeixing_s.vanim_c similarity index 100% rename from models/hujing_wangyu/f8fee260/hujingludfeixing_s.vanim_c rename to game/models/hujing_wangyu/f8fee260/hujingludfeixing_s.vanim_c diff --git a/models/hujing_wangyu/hujing.vmat_c b/game/models/hujing_wangyu/hujing.vmat_c similarity index 100% rename from models/hujing_wangyu/hujing.vmat_c rename to game/models/hujing_wangyu/hujing.vmat_c diff --git a/models/hujing_wangyu/hujing.vmdl_c b/game/models/hujing_wangyu/hujing.vmdl_c similarity index 100% rename from models/hujing_wangyu/hujing.vmdl_c rename to game/models/hujing_wangyu/hujing.vmdl_c diff --git a/models/hujing_wangyu/hujing.vmesh_c b/game/models/hujing_wangyu/hujing.vmesh_c similarity index 100% rename from models/hujing_wangyu/hujing.vmesh_c rename to game/models/hujing_wangyu/hujing.vmesh_c diff --git a/models/hujing_wangyu/hujing_1ca13d9b.vagrp_c b/game/models/hujing_wangyu/hujing_1ca13d9b.vagrp_c similarity index 100% rename from models/hujing_wangyu/hujing_1ca13d9b.vagrp_c rename to game/models/hujing_wangyu/hujing_1ca13d9b.vagrp_c diff --git a/models/hujing_wangyu/hujing_flying.vmdl_c b/game/models/hujing_wangyu/hujing_flying.vmdl_c similarity index 100% rename from models/hujing_wangyu/hujing_flying.vmdl_c rename to game/models/hujing_wangyu/hujing_flying.vmdl_c diff --git a/models/hujing_wangyu/hujing_flying.vmesh_c b/game/models/hujing_wangyu/hujing_flying.vmesh_c similarity index 100% rename from models/hujing_wangyu/hujing_flying.vmesh_c rename to game/models/hujing_wangyu/hujing_flying.vmesh_c diff --git a/models/hujing_wangyu/hujing_flying_f8fee260.vagrp_c b/game/models/hujing_wangyu/hujing_flying_f8fee260.vagrp_c similarity index 100% rename from models/hujing_wangyu/hujing_flying_f8fee260.vagrp_c rename to game/models/hujing_wangyu/hujing_flying_f8fee260.vagrp_c diff --git a/models/hujing_wangyu/hujing_psd_e7e07518.vtex_c b/game/models/hujing_wangyu/hujing_psd_e7e07518.vtex_c similarity index 100% rename from models/hujing_wangyu/hujing_psd_e7e07518.vtex_c rename to game/models/hujing_wangyu/hujing_psd_e7e07518.vtex_c diff --git a/models/hujing_wangyu/hujingludfeixin_f.vmdl_c b/game/models/hujing_wangyu/hujingludfeixin_f.vmdl_c similarity index 100% rename from models/hujing_wangyu/hujingludfeixin_f.vmdl_c rename to game/models/hujing_wangyu/hujingludfeixin_f.vmdl_c diff --git a/models/hujing_wangyu/hujingludfeixin_f_cfefbe74.vagrp_c b/game/models/hujing_wangyu/hujingludfeixin_f_cfefbe74.vagrp_c similarity index 100% rename from models/hujing_wangyu/hujingludfeixin_f_cfefbe74.vagrp_c rename to game/models/hujing_wangyu/hujingludfeixin_f_cfefbe74.vagrp_c diff --git a/models/hy/2fe0ff88/dead.vanim_c b/game/models/hy/2fe0ff88/dead.vanim_c similarity index 100% rename from models/hy/2fe0ff88/dead.vanim_c rename to game/models/hy/2fe0ff88/dead.vanim_c diff --git a/models/hy/2fe0ff88/run.vanim_c b/game/models/hy/2fe0ff88/run.vanim_c similarity index 100% rename from models/hy/2fe0ff88/run.vanim_c rename to game/models/hy/2fe0ff88/run.vanim_c diff --git a/models/hy/2fe0ff88/standby.vanim_c b/game/models/hy/2fe0ff88/standby.vanim_c similarity index 100% rename from models/hy/2fe0ff88/standby.vanim_c rename to game/models/hy/2fe0ff88/standby.vanim_c diff --git a/models/hy/5cf68cd6/birth.vanim_c b/game/models/hy/5cf68cd6/birth.vanim_c similarity index 100% rename from models/hy/5cf68cd6/birth.vanim_c rename to game/models/hy/5cf68cd6/birth.vanim_c diff --git a/models/hy/5cf68cd6/dead.vanim_c b/game/models/hy/5cf68cd6/dead.vanim_c similarity index 100% rename from models/hy/5cf68cd6/dead.vanim_c rename to game/models/hy/5cf68cd6/dead.vanim_c diff --git a/models/hy/5cf68cd6/run.vanim_c b/game/models/hy/5cf68cd6/run.vanim_c similarity index 100% rename from models/hy/5cf68cd6/run.vanim_c rename to game/models/hy/5cf68cd6/run.vanim_c diff --git a/models/hy/5cf68cd6/standby.vanim_c b/game/models/hy/5cf68cd6/standby.vanim_c similarity index 100% rename from models/hy/5cf68cd6/standby.vanim_c rename to game/models/hy/5cf68cd6/standby.vanim_c diff --git a/models/hy/huya.vmdl_c b/game/models/hy/huya.vmdl_c similarity index 100% rename from models/hy/huya.vmdl_c rename to game/models/hy/huya.vmdl_c diff --git a/models/hy/huya.vmesh_c b/game/models/hy/huya.vmesh_c similarity index 100% rename from models/hy/huya.vmesh_c rename to game/models/hy/huya.vmesh_c diff --git a/models/hy/huya0.vmat_c b/game/models/hy/huya0.vmat_c similarity index 100% rename from models/hy/huya0.vmat_c rename to game/models/hy/huya0.vmat_c diff --git a/models/hy/huya_5cf68cd6.vagrp_c b/game/models/hy/huya_5cf68cd6.vagrp_c similarity index 100% rename from models/hy/huya_5cf68cd6.vagrp_c rename to game/models/hy/huya_5cf68cd6.vagrp_c diff --git a/models/hy/huya_color_tga_db287ca2.vtex_c b/game/models/hy/huya_color_tga_db287ca2.vtex_c similarity index 100% rename from models/hy/huya_color_tga_db287ca2.vtex_c rename to game/models/hy/huya_color_tga_db287ca2.vtex_c diff --git a/models/hy/huya_flying.vmdl_c b/game/models/hy/huya_flying.vmdl_c similarity index 100% rename from models/hy/huya_flying.vmdl_c rename to game/models/hy/huya_flying.vmdl_c diff --git a/models/hy/huya_flying.vmesh_c b/game/models/hy/huya_flying.vmesh_c similarity index 100% rename from models/hy/huya_flying.vmesh_c rename to game/models/hy/huya_flying.vmesh_c diff --git a/models/hy/huya_flying_2fe0ff88.vagrp_c b/game/models/hy/huya_flying_2fe0ff88.vagrp_c similarity index 100% rename from models/hy/huya_flying_2fe0ff88.vagrp_c rename to game/models/hy/huya_flying_2fe0ff88.vagrp_c diff --git a/models/hy/huya_normal_tga_6e1615c1.vtex_c b/game/models/hy/huya_normal_tga_6e1615c1.vtex_c similarity index 100% rename from models/hy/huya_normal_tga_6e1615c1.vtex_c rename to game/models/hy/huya_normal_tga_6e1615c1.vtex_c diff --git a/models/hy/huya_spec_tga_74ceba46.vtex_c b/game/models/hy/huya_spec_tga_74ceba46.vtex_c similarity index 100% rename from models/hy/huya_spec_tga_74ceba46.vtex_c rename to game/models/hy/huya_spec_tga_74ceba46.vtex_c diff --git a/models/hy/test_tga_677a8420.vtex_c b/game/models/hy/test_tga_677a8420.vtex_c similarity index 100% rename from models/hy/test_tga_677a8420.vtex_c rename to game/models/hy/test_tga_677a8420.vtex_c diff --git a/models/imagine_assets/props/chest/0955ba3d/chest_key_01.vanim_c b/game/models/imagine_assets/props/chest/0955ba3d/chest_key_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/0955ba3d/chest_key_01.vanim_c rename to game/models/imagine_assets/props/chest/0955ba3d/chest_key_01.vanim_c diff --git a/models/imagine_assets/props/chest/101ac8c4/chest_key_01.vanim_c b/game/models/imagine_assets/props/chest/101ac8c4/chest_key_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/101ac8c4/chest_key_01.vanim_c rename to game/models/imagine_assets/props/chest/101ac8c4/chest_key_01.vanim_c diff --git a/models/imagine_assets/props/chest/2f036a39/chest_01.vanim_c b/game/models/imagine_assets/props/chest/2f036a39/chest_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/2f036a39/chest_01.vanim_c rename to game/models/imagine_assets/props/chest/2f036a39/chest_01.vanim_c diff --git a/models/imagine_assets/props/chest/3860a290/chest_01.vanim_c b/game/models/imagine_assets/props/chest/3860a290/chest_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/3860a290/chest_01.vanim_c rename to game/models/imagine_assets/props/chest/3860a290/chest_01.vanim_c diff --git a/models/imagine_assets/props/chest/5ca4d927/chest_key_01.vanim_c b/game/models/imagine_assets/props/chest/5ca4d927/chest_key_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/5ca4d927/chest_key_01.vanim_c rename to game/models/imagine_assets/props/chest/5ca4d927/chest_key_01.vanim_c diff --git a/models/imagine_assets/props/chest/7198ed49/chest_key_01.vanim_c b/game/models/imagine_assets/props/chest/7198ed49/chest_key_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/7198ed49/chest_key_01.vanim_c rename to game/models/imagine_assets/props/chest/7198ed49/chest_key_01.vanim_c diff --git a/models/imagine_assets/props/chest/83871a17/chest_01.vanim_c b/game/models/imagine_assets/props/chest/83871a17/chest_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/83871a17/chest_01.vanim_c rename to game/models/imagine_assets/props/chest/83871a17/chest_01.vanim_c diff --git a/models/imagine_assets/props/chest/93a11198/chest_key_01.vanim_c b/game/models/imagine_assets/props/chest/93a11198/chest_key_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/93a11198/chest_key_01.vanim_c rename to game/models/imagine_assets/props/chest/93a11198/chest_key_01.vanim_c diff --git a/models/imagine_assets/props/chest/b9d035be/chest_01.vanim_c b/game/models/imagine_assets/props/chest/b9d035be/chest_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/b9d035be/chest_01.vanim_c rename to game/models/imagine_assets/props/chest/b9d035be/chest_01.vanim_c diff --git a/models/imagine_assets/props/chest/chest_01.vmdl_c b/game/models/imagine_assets/props/chest/chest_01.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01.vmdl_c rename to game/models/imagine_assets/props/chest/chest_01.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_01_1e2f7cd3.vmesh_c b/game/models/imagine_assets/props/chest/chest_01_1e2f7cd3.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_1e2f7cd3.vmesh_c rename to game/models/imagine_assets/props/chest/chest_01_1e2f7cd3.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_01_42d16ff9.vmesh_c b/game/models/imagine_assets/props/chest/chest_01_42d16ff9.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_42d16ff9.vmesh_c rename to game/models/imagine_assets/props/chest/chest_01_42d16ff9.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_01_76dabb51.vmesh_c b/game/models/imagine_assets/props/chest/chest_01_76dabb51.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_76dabb51.vmesh_c rename to game/models/imagine_assets/props/chest/chest_01_76dabb51.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_01_b1609e72.vmesh_c b/game/models/imagine_assets/props/chest/chest_01_b1609e72.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_b1609e72.vmesh_c rename to game/models/imagine_assets/props/chest/chest_01_b1609e72.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_01_bronze.vmdl_c b/game/models/imagine_assets/props/chest/chest_01_bronze.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_bronze.vmdl_c rename to game/models/imagine_assets/props/chest/chest_01_bronze.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_01_bronze_3860a290.vagrp_c b/game/models/imagine_assets/props/chest/chest_01_bronze_3860a290.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_bronze_3860a290.vagrp_c rename to game/models/imagine_assets/props/chest/chest_01_bronze_3860a290.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_01_dd6f19f2.vagrp_c b/game/models/imagine_assets/props/chest/chest_01_dd6f19f2.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_dd6f19f2.vagrp_c rename to game/models/imagine_assets/props/chest/chest_01_dd6f19f2.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_01_emerald.vmdl_c b/game/models/imagine_assets/props/chest/chest_01_emerald.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_emerald.vmdl_c rename to game/models/imagine_assets/props/chest/chest_01_emerald.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_01_emerald_b9d035be.vagrp_c b/game/models/imagine_assets/props/chest/chest_01_emerald_b9d035be.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_emerald_b9d035be.vagrp_c rename to game/models/imagine_assets/props/chest/chest_01_emerald_b9d035be.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_01_f647bdc9.vmesh_c b/game/models/imagine_assets/props/chest/chest_01_f647bdc9.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_f647bdc9.vmesh_c rename to game/models/imagine_assets/props/chest/chest_01_f647bdc9.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_01_gold.vmdl_c b/game/models/imagine_assets/props/chest/chest_01_gold.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_gold.vmdl_c rename to game/models/imagine_assets/props/chest/chest_01_gold.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_01_gold_83871a17.vagrp_c b/game/models/imagine_assets/props/chest/chest_01_gold_83871a17.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_gold_83871a17.vagrp_c rename to game/models/imagine_assets/props/chest/chest_01_gold_83871a17.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_01_silver.vmdl_c b/game/models/imagine_assets/props/chest/chest_01_silver.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_silver.vmdl_c rename to game/models/imagine_assets/props/chest/chest_01_silver.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_01_silver_2f036a39.vagrp_c b/game/models/imagine_assets/props/chest/chest_01_silver_2f036a39.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_01_silver_2f036a39.vagrp_c rename to game/models/imagine_assets/props/chest/chest_01_silver_2f036a39.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_key_01.vmdl_c b/game/models/imagine_assets/props/chest/chest_key_01.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01.vmdl_c rename to game/models/imagine_assets/props/chest/chest_key_01.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_key_01.vmesh_c b/game/models/imagine_assets/props/chest/chest_key_01.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01.vmesh_c rename to game/models/imagine_assets/props/chest/chest_key_01.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_key_01_5c1b53ae.vmesh_c b/game/models/imagine_assets/props/chest/chest_key_01_5c1b53ae.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_5c1b53ae.vmesh_c rename to game/models/imagine_assets/props/chest/chest_key_01_5c1b53ae.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_key_01_7198ed49.vagrp_c b/game/models/imagine_assets/props/chest/chest_key_01_7198ed49.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_7198ed49.vagrp_c rename to game/models/imagine_assets/props/chest/chest_key_01_7198ed49.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_key_01_958eb35d.vmesh_c b/game/models/imagine_assets/props/chest/chest_key_01_958eb35d.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_958eb35d.vmesh_c rename to game/models/imagine_assets/props/chest/chest_key_01_958eb35d.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_key_01_a1bec939.vmesh_c b/game/models/imagine_assets/props/chest/chest_key_01_a1bec939.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_a1bec939.vmesh_c rename to game/models/imagine_assets/props/chest/chest_key_01_a1bec939.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_key_01_b1247d95.vmesh_c b/game/models/imagine_assets/props/chest/chest_key_01_b1247d95.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_b1247d95.vmesh_c rename to game/models/imagine_assets/props/chest/chest_key_01_b1247d95.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_key_01_bronze.vmdl_c b/game/models/imagine_assets/props/chest/chest_key_01_bronze.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_bronze.vmdl_c rename to game/models/imagine_assets/props/chest/chest_key_01_bronze.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_key_01_bronze_5ca4d927.vagrp_c b/game/models/imagine_assets/props/chest/chest_key_01_bronze_5ca4d927.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_bronze_5ca4d927.vagrp_c rename to game/models/imagine_assets/props/chest/chest_key_01_bronze_5ca4d927.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_key_01_e20176be.vmesh_c b/game/models/imagine_assets/props/chest/chest_key_01_e20176be.vmesh_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_e20176be.vmesh_c rename to game/models/imagine_assets/props/chest/chest_key_01_e20176be.vmesh_c diff --git a/models/imagine_assets/props/chest/chest_key_01_emerald.vmdl_c b/game/models/imagine_assets/props/chest/chest_key_01_emerald.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_emerald.vmdl_c rename to game/models/imagine_assets/props/chest/chest_key_01_emerald.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_key_01_emerald_93a11198.vagrp_c b/game/models/imagine_assets/props/chest/chest_key_01_emerald_93a11198.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_emerald_93a11198.vagrp_c rename to game/models/imagine_assets/props/chest/chest_key_01_emerald_93a11198.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_key_01_gold.vmdl_c b/game/models/imagine_assets/props/chest/chest_key_01_gold.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_gold.vmdl_c rename to game/models/imagine_assets/props/chest/chest_key_01_gold.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_key_01_gold_0955ba3d.vagrp_c b/game/models/imagine_assets/props/chest/chest_key_01_gold_0955ba3d.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_gold_0955ba3d.vagrp_c rename to game/models/imagine_assets/props/chest/chest_key_01_gold_0955ba3d.vagrp_c diff --git a/models/imagine_assets/props/chest/chest_key_01_silver.vmdl_c b/game/models/imagine_assets/props/chest/chest_key_01_silver.vmdl_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_silver.vmdl_c rename to game/models/imagine_assets/props/chest/chest_key_01_silver.vmdl_c diff --git a/models/imagine_assets/props/chest/chest_key_01_silver_101ac8c4.vagrp_c b/game/models/imagine_assets/props/chest/chest_key_01_silver_101ac8c4.vagrp_c similarity index 100% rename from models/imagine_assets/props/chest/chest_key_01_silver_101ac8c4.vagrp_c rename to game/models/imagine_assets/props/chest/chest_key_01_silver_101ac8c4.vagrp_c diff --git a/models/imagine_assets/props/chest/dd6f19f2/chest_01.vanim_c b/game/models/imagine_assets/props/chest/dd6f19f2/chest_01.vanim_c similarity index 100% rename from models/imagine_assets/props/chest/dd6f19f2/chest_01.vanim_c rename to game/models/imagine_assets/props/chest/dd6f19f2/chest_01.vanim_c diff --git a/models/items/juggernaut/5e7c8e71/hg_death.vanim_c b/game/models/items/juggernaut/5e7c8e71/hg_death.vanim_c similarity index 100% rename from models/items/juggernaut/5e7c8e71/hg_death.vanim_c rename to game/models/items/juggernaut/5e7c8e71/hg_death.vanim_c diff --git a/models/items/juggernaut/5e7c8e71/hg_idle.vanim_c b/game/models/items/juggernaut/5e7c8e71/hg_idle.vanim_c similarity index 100% rename from models/items/juggernaut/5e7c8e71/hg_idle.vanim_c rename to game/models/items/juggernaut/5e7c8e71/hg_idle.vanim_c diff --git a/models/items/juggernaut/5e7c8e71/hg_run.vanim_c b/game/models/items/juggernaut/5e7c8e71/hg_run.vanim_c similarity index 100% rename from models/items/juggernaut/5e7c8e71/hg_run.vanim_c rename to game/models/items/juggernaut/5e7c8e71/hg_run.vanim_c diff --git a/models/items/juggernaut/5e7c8e71/hg_spawn.vanim_c b/game/models/items/juggernaut/5e7c8e71/hg_spawn.vanim_c similarity index 100% rename from models/items/juggernaut/5e7c8e71/hg_spawn.vanim_c rename to game/models/items/juggernaut/5e7c8e71/hg_spawn.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/_jd_debut_loop.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/_jd_debut_loop.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/_jd_debut_loop.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/_jd_debut_loop.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/bind_pose.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/bind_pose.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/bind_pose.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/bind_pose.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_blade_fury.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_blade_fury.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_blade_fury.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_blade_fury.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_crit.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_crit.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_crit.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_crit.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_crit_tgt.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_crit_tgt.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_crit_tgt.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_crit_tgt.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_death.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_death.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_death.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_death.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_debut.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_debut.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_debut.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_debut.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_debut_end.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_debut_end.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_debut_end.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_debut_end.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_loadout_rare.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_loadout_rare.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_loadout_rare.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_loadout_rare.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn_v2.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn_v2.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn_v2.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_loadout_spawn_v2.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_omnislash.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_omnislash.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_omnislash.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_omnislash.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_portrait.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_portrait.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_portrait.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_portrait.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_teleport.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_teleport.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_teleport.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_teleport.vanim_c diff --git a/models/items/juggernaut/arcana/2a73f23d/jd_teleport_end.vanim_c b/game/models/items/juggernaut/arcana/2a73f23d/jd_teleport_end.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/2a73f23d/jd_teleport_end.vanim_c rename to game/models/items/juggernaut/arcana/2a73f23d/jd_teleport_end.vanim_c diff --git a/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_front_page.vanim_c b/game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_front_page.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_front_page.vanim_c rename to game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_front_page.vanim_c diff --git a/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle.vanim_c b/game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle.vanim_c rename to game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle.vanim_c diff --git a/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle_loadout.vanim_c b/game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle_loadout.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle_loadout.vanim_c rename to game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_idle_loadout.vanim_c diff --git a/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_run.vanim_c b/game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_run.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_run.vanim_c rename to game/models/items/juggernaut/arcana/5b860821/juggernaut_arcana_mask_run.vanim_c diff --git a/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle.vanim_c b/game/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle.vanim_c rename to game/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle.vanim_c diff --git a/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle_loadout.vanim_c b/game/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle_loadout.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle_loadout.vanim_c rename to game/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_idle_loadout.vanim_c diff --git a/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_run.vanim_c b/game/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_run.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_run.vanim_c rename to game/models/items/juggernaut/arcana/78e7abf3/juggernaut_arcana_mask_run.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/bind_pose.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/bind_pose.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/bind_pose.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/bind_pose.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_blade_fury.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_blade_fury.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_blade_fury.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_blade_fury.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_crit.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_crit.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_crit.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_crit.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_crit_tgt.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_crit_tgt.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_crit_tgt.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_crit_tgt.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_death.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_death.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_death.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_death.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_loadout_spawn.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_loadout_spawn.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_loadout_spawn.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_loadout_spawn.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_omnislash.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_omnislash.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_omnislash.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_omnislash.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_origin.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_origin.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_origin.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_origin.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_teleport.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_teleport.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_teleport.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_teleport.vanim_c diff --git a/models/items/juggernaut/arcana/9561c0f2/jd_teleport_end.vanim_c b/game/models/items/juggernaut/arcana/9561c0f2/jd_teleport_end.vanim_c similarity index 100% rename from models/items/juggernaut/arcana/9561c0f2/jd_teleport_end.vanim_c rename to game/models/items/juggernaut/arcana/9561c0f2/jd_teleport_end.vanim_c diff --git a/models/items/juggernaut/arcana/base_2a73f23d.vagrp_c b/game/models/items/juggernaut/arcana/base_2a73f23d.vagrp_c similarity index 100% rename from models/items/juggernaut/arcana/base_2a73f23d.vagrp_c rename to game/models/items/juggernaut/arcana/base_2a73f23d.vagrp_c diff --git a/models/items/juggernaut/arcana/base_9561c0f2.vagrp_c b/game/models/items/juggernaut/arcana/base_9561c0f2.vagrp_c similarity index 100% rename from models/items/juggernaut/arcana/base_9561c0f2.vagrp_c rename to game/models/items/juggernaut/arcana/base_9561c0f2.vagrp_c diff --git a/models/items/juggernaut/arcana/jugg_dragon.vmdl_c b/game/models/items/juggernaut/arcana/jugg_dragon.vmdl_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_dragon.vmdl_c rename to game/models/items/juggernaut/arcana/jugg_dragon.vmdl_c diff --git a/models/items/juggernaut/arcana/jugg_dragon.vmesh_c b/game/models/items/juggernaut/arcana/jugg_dragon.vmesh_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_dragon.vmesh_c rename to game/models/items/juggernaut/arcana/jugg_dragon.vmesh_c diff --git a/models/items/juggernaut/arcana/jugg_dragon_2e0da6fe.vmesh_c b/game/models/items/juggernaut/arcana/jugg_dragon_2e0da6fe.vmesh_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_dragon_2e0da6fe.vmesh_c rename to game/models/items/juggernaut/arcana/jugg_dragon_2e0da6fe.vmesh_c diff --git a/models/items/juggernaut/arcana/jugg_dragon_574afb98.vagrp_c b/game/models/items/juggernaut/arcana/jugg_dragon_574afb98.vagrp_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_dragon_574afb98.vagrp_c rename to game/models/items/juggernaut/arcana/jugg_dragon_574afb98.vagrp_c diff --git a/models/items/juggernaut/arcana/jugg_dragon_head.vmdl_c b/game/models/items/juggernaut/arcana/jugg_dragon_head.vmdl_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_dragon_head.vmdl_c rename to game/models/items/juggernaut/arcana/jugg_dragon_head.vmdl_c diff --git a/models/items/juggernaut/arcana/jugg_dragon_head_b31822dd.vagrp_c b/game/models/items/juggernaut/arcana/jugg_dragon_head_b31822dd.vagrp_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_dragon_head_b31822dd.vagrp_c rename to game/models/items/juggernaut/arcana/jugg_dragon_head_b31822dd.vagrp_c diff --git a/models/items/juggernaut/arcana/jugg_mask_33b517bc.vmesh_c b/game/models/items/juggernaut/arcana/jugg_mask_33b517bc.vmesh_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_mask_33b517bc.vmesh_c rename to game/models/items/juggernaut/arcana/jugg_mask_33b517bc.vmesh_c diff --git a/models/items/juggernaut/arcana/jugg_mask_be306eb5.vmesh_c b/game/models/items/juggernaut/arcana/jugg_mask_be306eb5.vmesh_c similarity index 100% rename from models/items/juggernaut/arcana/jugg_mask_be306eb5.vmesh_c rename to game/models/items/juggernaut/arcana/jugg_mask_be306eb5.vmesh_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_front_page.vmdl_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_front_page.vmdl_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_front_page.vmdl_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_front_page.vmdl_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_front_page_5b860821.vagrp_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_front_page_5b860821.vagrp_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_front_page_5b860821.vagrp_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_front_page_5b860821.vagrp_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask.vphys_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask.vphys_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask.vphys_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask.vphys_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask_78e7abf3.vagrp_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask_78e7abf3.vagrp_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask_78e7abf3.vagrp_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask_78e7abf3.vagrp_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmdl_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmdl_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmdl_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmdl_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmesh_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmesh_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmesh_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask_a.vmesh_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmdl_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmdl_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmdl_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmdl_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmesh_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmesh_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmesh_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask_b.vmesh_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmdl_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmdl_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmdl_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmdl_c diff --git a/models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmesh_c b/game/models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmesh_c similarity index 100% rename from models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmesh_c rename to game/models/items/juggernaut/arcana/juggernaut_arcana_mask_c.vmesh_c diff --git a/models/items/juggernaut/hg_6cda6949.vmesh_c b/game/models/items/juggernaut/hg_6cda6949.vmesh_c similarity index 100% rename from models/items/juggernaut/hg_6cda6949.vmesh_c rename to game/models/items/juggernaut/hg_6cda6949.vmesh_c diff --git a/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_death.vanim_c b/game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_death.vanim_c similarity index 100% rename from models/items/juggernaut/ward/dc_wardupate/0415277e/hg_death.vanim_c rename to game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_death.vanim_c diff --git a/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_idle.vanim_c b/game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_idle.vanim_c similarity index 100% rename from models/items/juggernaut/ward/dc_wardupate/0415277e/hg_idle.vanim_c rename to game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_idle.vanim_c diff --git a/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_run.vanim_c b/game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_run.vanim_c similarity index 100% rename from models/items/juggernaut/ward/dc_wardupate/0415277e/hg_run.vanim_c rename to game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_run.vanim_c diff --git a/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_spawn.vanim_c b/game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_spawn.vanim_c similarity index 100% rename from models/items/juggernaut/ward/dc_wardupate/0415277e/hg_spawn.vanim_c rename to game/models/items/juggernaut/ward/dc_wardupate/0415277e/hg_spawn.vanim_c diff --git a/models/items/juggernaut/ward/dc_wardupate/dc_wardupate.vmdl_c b/game/models/items/juggernaut/ward/dc_wardupate/dc_wardupate.vmdl_c similarity index 100% rename from models/items/juggernaut/ward/dc_wardupate/dc_wardupate.vmdl_c rename to game/models/items/juggernaut/ward/dc_wardupate/dc_wardupate.vmdl_c diff --git a/models/items/juggernaut/ward/dc_wardupate/dc_wardupate_0415277e.vagrp_c b/game/models/items/juggernaut/ward/dc_wardupate/dc_wardupate_0415277e.vagrp_c similarity index 100% rename from models/items/juggernaut/ward/dc_wardupate/dc_wardupate_0415277e.vagrp_c rename to game/models/items/juggernaut/ward/dc_wardupate/dc_wardupate_0415277e.vagrp_c diff --git a/models/items/juggernaut/ward/dc_wardupate/hg_8df6ea6c.vmesh_c b/game/models/items/juggernaut/ward/dc_wardupate/hg_8df6ea6c.vmesh_c similarity index 100% rename from models/items/juggernaut/ward/dc_wardupate/hg_8df6ea6c.vmesh_c rename to game/models/items/juggernaut/ward/dc_wardupate/hg_8df6ea6c.vmesh_c diff --git a/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_death.vanim_c b/game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_death.vanim_c similarity index 100% rename from models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_death.vanim_c rename to game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_death.vanim_c diff --git a/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_idle.vanim_c b/game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_idle.vanim_c similarity index 100% rename from models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_idle.vanim_c rename to game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_idle.vanim_c diff --git a/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_run.vanim_c b/game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_run.vanim_c similarity index 100% rename from models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_run.vanim_c rename to game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_run.vanim_c diff --git a/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_spawn.vanim_c b/game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_spawn.vanim_c similarity index 100% rename from models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_spawn.vanim_c rename to game/models/items/juggernaut/ward/fortunes_tout/d6908e54/hg_spawn.vanim_c diff --git a/models/items/juggernaut/ward/fortunes_tout/fortunes_tout.vmdl_c b/game/models/items/juggernaut/ward/fortunes_tout/fortunes_tout.vmdl_c similarity index 100% rename from models/items/juggernaut/ward/fortunes_tout/fortunes_tout.vmdl_c rename to game/models/items/juggernaut/ward/fortunes_tout/fortunes_tout.vmdl_c diff --git a/models/items/juggernaut/ward/fortunes_tout/fortunes_tout_d6908e54.vagrp_c b/game/models/items/juggernaut/ward/fortunes_tout/fortunes_tout_d6908e54.vagrp_c similarity index 100% rename from models/items/juggernaut/ward/fortunes_tout/fortunes_tout_d6908e54.vagrp_c rename to game/models/items/juggernaut/ward/fortunes_tout/fortunes_tout_d6908e54.vagrp_c diff --git a/models/items/juggernaut/ward/fortunes_tout/hg_e55b95f0.vmesh_c b/game/models/items/juggernaut/ward/fortunes_tout/hg_e55b95f0.vmesh_c similarity index 100% rename from models/items/juggernaut/ward/fortunes_tout/hg_e55b95f0.vmesh_c rename to game/models/items/juggernaut/ward/fortunes_tout/hg_e55b95f0.vmesh_c diff --git a/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_death.vanim_c b/game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_death.vanim_c similarity index 100% rename from models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_death.vanim_c rename to game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_death.vanim_c diff --git a/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_idle.vanim_c b/game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_idle.vanim_c similarity index 100% rename from models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_idle.vanim_c rename to game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_idle.vanim_c diff --git a/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_run.vanim_c b/game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_run.vanim_c similarity index 100% rename from models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_run.vanim_c rename to game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_run.vanim_c diff --git a/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_spawn.vanim_c b/game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_spawn.vanim_c similarity index 100% rename from models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_spawn.vanim_c rename to game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/6418fa2b/hg_spawn.vanim_c diff --git a/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward.vmdl_c b/game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward.vmdl_c similarity index 100% rename from models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward.vmdl_c rename to game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward.vmdl_c diff --git a/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward_6418fa2b.vagrp_c b/game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward_6418fa2b.vagrp_c similarity index 100% rename from models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward_6418fa2b.vagrp_c rename to game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/frostivus2018_jugg_northern_wanderer_ward_6418fa2b.vagrp_c diff --git a/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/hg_9f4305d7.vmesh_c b/game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/hg_9f4305d7.vmesh_c similarity index 100% rename from models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/hg_9f4305d7.vmesh_c rename to game/models/items/juggernaut/ward/frostivus2018_jugg_northern_wanderer_ward/hg_9f4305d7.vmesh_c diff --git a/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_death.vanim_c b/game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_death.vanim_c similarity index 100% rename from models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_death.vanim_c rename to game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_death.vanim_c diff --git a/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_idle.vanim_c b/game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_idle.vanim_c similarity index 100% rename from models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_idle.vanim_c rename to game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_idle.vanim_c diff --git a/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_run.vanim_c b/game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_run.vanim_c similarity index 100% rename from models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_run.vanim_c rename to game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_run.vanim_c diff --git a/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_spawn.vanim_c b/game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_spawn.vanim_c similarity index 100% rename from models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_spawn.vanim_c rename to game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/cabc212c/hg_spawn.vanim_c diff --git a/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles.vmdl_c b/game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles.vmdl_c similarity index 100% rename from models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles.vmdl_c rename to game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles.vmdl_c diff --git a/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles_cabc212c.vagrp_c b/game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles_cabc212c.vagrp_c similarity index 100% rename from models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles_cabc212c.vagrp_c rename to game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/healing_gills_of_the_lost_isles_cabc212c.vagrp_c diff --git a/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/hg_0977293f.vmesh_c b/game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/hg_0977293f.vmesh_c similarity index 100% rename from models/items/juggernaut/ward/healing_gills_of_the_lost_isles/hg_0977293f.vmesh_c rename to game/models/items/juggernaut/ward/healing_gills_of_the_lost_isles/hg_0977293f.vmesh_c diff --git a/models/items/juggernaut/ward_foo.vmdl_c b/game/models/items/juggernaut/ward_foo.vmdl_c similarity index 100% rename from models/items/juggernaut/ward_foo.vmdl_c rename to game/models/items/juggernaut/ward_foo.vmdl_c diff --git a/models/items/juggernaut/ward_foo_5e7c8e71.vagrp_c b/game/models/items/juggernaut/ward_foo_5e7c8e71.vagrp_c similarity index 100% rename from models/items/juggernaut/ward_foo_5e7c8e71.vagrp_c rename to game/models/items/juggernaut/ward_foo_5e7c8e71.vagrp_c diff --git a/models/kokoro/4f25baf6/attack1.vanim_c b/game/models/kokoro/4f25baf6/attack1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/attack1.vanim_c rename to game/models/kokoro/4f25baf6/attack1.vanim_c diff --git a/models/kokoro/4f25baf6/attack2.vanim_c b/game/models/kokoro/4f25baf6/attack2.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/attack2.vanim_c rename to game/models/kokoro/4f25baf6/attack2.vanim_c diff --git a/models/kokoro/4f25baf6/attack3.vanim_c b/game/models/kokoro/4f25baf6/attack3.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/attack3.vanim_c rename to game/models/kokoro/4f25baf6/attack3.vanim_c diff --git a/models/kokoro/4f25baf6/attack4.vanim_c b/game/models/kokoro/4f25baf6/attack4.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/attack4.vanim_c rename to game/models/kokoro/4f25baf6/attack4.vanim_c diff --git a/models/kokoro/4f25baf6/attack5.vanim_c b/game/models/kokoro/4f25baf6/attack5.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/attack5.vanim_c rename to game/models/kokoro/4f25baf6/attack5.vanim_c diff --git a/models/kokoro/4f25baf6/attack6.vanim_c b/game/models/kokoro/4f25baf6/attack6.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/attack6.vanim_c rename to game/models/kokoro/4f25baf6/attack6.vanim_c diff --git a/models/kokoro/4f25baf6/cast1.vanim_c b/game/models/kokoro/4f25baf6/cast1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/cast1.vanim_c rename to game/models/kokoro/4f25baf6/cast1.vanim_c diff --git a/models/kokoro/4f25baf6/death1.vanim_c b/game/models/kokoro/4f25baf6/death1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/death1.vanim_c rename to game/models/kokoro/4f25baf6/death1.vanim_c diff --git a/models/kokoro/4f25baf6/fan_attack1.vanim_c b/game/models/kokoro/4f25baf6/fan_attack1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/fan_attack1.vanim_c rename to game/models/kokoro/4f25baf6/fan_attack1.vanim_c diff --git a/models/kokoro/4f25baf6/flail1.vanim_c b/game/models/kokoro/4f25baf6/flail1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/flail1.vanim_c rename to game/models/kokoro/4f25baf6/flail1.vanim_c diff --git a/models/kokoro/4f25baf6/idie1.vanim_c b/game/models/kokoro/4f25baf6/idie1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/idie1.vanim_c rename to game/models/kokoro/4f25baf6/idie1.vanim_c diff --git a/models/kokoro/4f25baf6/mask_change1.vanim_c b/game/models/kokoro/4f25baf6/mask_change1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/mask_change1.vanim_c rename to game/models/kokoro/4f25baf6/mask_change1.vanim_c diff --git a/models/kokoro/4f25baf6/run1.vanim_c b/game/models/kokoro/4f25baf6/run1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/run1.vanim_c rename to game/models/kokoro/4f25baf6/run1.vanim_c diff --git a/models/kokoro/4f25baf6/stun1.vanim_c b/game/models/kokoro/4f25baf6/stun1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/stun1.vanim_c rename to game/models/kokoro/4f25baf6/stun1.vanim_c diff --git a/models/kokoro/4f25baf6/tp1.vanim_c b/game/models/kokoro/4f25baf6/tp1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/tp1.vanim_c rename to game/models/kokoro/4f25baf6/tp1.vanim_c diff --git a/models/kokoro/4f25baf6/victory1.vanim_c b/game/models/kokoro/4f25baf6/victory1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/victory1.vanim_c rename to game/models/kokoro/4f25baf6/victory1.vanim_c diff --git a/models/kokoro/4f25baf6/wudizhan1.vanim_c b/game/models/kokoro/4f25baf6/wudizhan1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/wudizhan1.vanim_c rename to game/models/kokoro/4f25baf6/wudizhan1.vanim_c diff --git a/models/kokoro/4f25baf6/wudizhan_begin1.vanim_c b/game/models/kokoro/4f25baf6/wudizhan_begin1.vanim_c similarity index 100% rename from models/kokoro/4f25baf6/wudizhan_begin1.vanim_c rename to game/models/kokoro/4f25baf6/wudizhan_begin1.vanim_c diff --git a/models/kokoro/kokoro.fbm/bluebow.vmat_c b/game/models/kokoro/kokoro.fbm/bluebow.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/bluebow.vmat_c rename to game/models/kokoro/kokoro.fbm/bluebow.vmat_c diff --git a/models/kokoro/kokoro.fbm/bluebow_tga_9958b2c1.vtex_c b/game/models/kokoro/kokoro.fbm/bluebow_tga_9958b2c1.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/bluebow_tga_9958b2c1.vtex_c rename to game/models/kokoro/kokoro.fbm/bluebow_tga_9958b2c1.vtex_c diff --git a/models/kokoro/kokoro.fbm/body.vmat_c b/game/models/kokoro/kokoro.fbm/body.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/body.vmat_c rename to game/models/kokoro/kokoro.fbm/body.vmat_c diff --git a/models/kokoro/kokoro.fbm/body_tga_d27ee894.vtex_c b/game/models/kokoro/kokoro.fbm/body_tga_d27ee894.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/body_tga_d27ee894.vtex_c rename to game/models/kokoro/kokoro.fbm/body_tga_d27ee894.vtex_c diff --git a/models/kokoro/kokoro.fbm/cloth.vmat_c b/game/models/kokoro/kokoro.fbm/cloth.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/cloth.vmat_c rename to game/models/kokoro/kokoro.fbm/cloth.vmat_c diff --git a/models/kokoro/kokoro.fbm/cloth_tga_53a5f8ca.vtex_c b/game/models/kokoro/kokoro.fbm/cloth_tga_53a5f8ca.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/cloth_tga_53a5f8ca.vtex_c rename to game/models/kokoro/kokoro.fbm/cloth_tga_53a5f8ca.vtex_c diff --git a/models/kokoro/kokoro.fbm/face.vmat_c b/game/models/kokoro/kokoro.fbm/face.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/face.vmat_c rename to game/models/kokoro/kokoro.fbm/face.vmat_c diff --git a/models/kokoro/kokoro.fbm/face_tga_d5d47217.vtex_c b/game/models/kokoro/kokoro.fbm/face_tga_d5d47217.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/face_tga_d5d47217.vtex_c rename to game/models/kokoro/kokoro.fbm/face_tga_d5d47217.vtex_c diff --git a/models/kokoro/kokoro.fbm/hair.vmat_c b/game/models/kokoro/kokoro.fbm/hair.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/hair.vmat_c rename to game/models/kokoro/kokoro.fbm/hair.vmat_c diff --git a/models/kokoro/kokoro.fbm/hair_tga_d614128e.vtex_c b/game/models/kokoro/kokoro.fbm/hair_tga_d614128e.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/hair_tga_d614128e.vtex_c rename to game/models/kokoro/kokoro.fbm/hair_tga_d614128e.vtex_c diff --git a/models/kokoro/kokoro.fbm/naginata.vmat_c b/game/models/kokoro/kokoro.fbm/naginata.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/naginata.vmat_c rename to game/models/kokoro/kokoro.fbm/naginata.vmat_c diff --git a/models/kokoro/kokoro.fbm/naginata_tga_80de1964.vtex_c b/game/models/kokoro/kokoro.fbm/naginata_tga_80de1964.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/naginata_tga_80de1964.vtex_c rename to game/models/kokoro/kokoro.fbm/naginata_tga_80de1964.vtex_c diff --git a/models/kokoro/kokoro.fbm/pinkbow.vmat_c b/game/models/kokoro/kokoro.fbm/pinkbow.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/pinkbow.vmat_c rename to game/models/kokoro/kokoro.fbm/pinkbow.vmat_c diff --git a/models/kokoro/kokoro.fbm/pinkbow_tga_5cc830df.vtex_c b/game/models/kokoro/kokoro.fbm/pinkbow_tga_5cc830df.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/pinkbow_tga_5cc830df.vtex_c rename to game/models/kokoro/kokoro.fbm/pinkbow_tga_5cc830df.vtex_c diff --git a/models/kokoro/kokoro.fbm/underwear.vmat_c b/game/models/kokoro/kokoro.fbm/underwear.vmat_c similarity index 100% rename from models/kokoro/kokoro.fbm/underwear.vmat_c rename to game/models/kokoro/kokoro.fbm/underwear.vmat_c diff --git a/models/kokoro/kokoro.fbm/underwear_tga_5851bdd3.vtex_c b/game/models/kokoro/kokoro.fbm/underwear_tga_5851bdd3.vtex_c similarity index 100% rename from models/kokoro/kokoro.fbm/underwear_tga_5851bdd3.vtex_c rename to game/models/kokoro/kokoro.fbm/underwear_tga_5851bdd3.vtex_c diff --git a/models/kokoro/kokoro.vmdl_c b/game/models/kokoro/kokoro.vmdl_c similarity index 100% rename from models/kokoro/kokoro.vmdl_c rename to game/models/kokoro/kokoro.vmdl_c diff --git a/models/kokoro/kokoro_3ce293f7.vmesh_c b/game/models/kokoro/kokoro_3ce293f7.vmesh_c similarity index 100% rename from models/kokoro/kokoro_3ce293f7.vmesh_c rename to game/models/kokoro/kokoro_3ce293f7.vmesh_c diff --git a/models/kokoro/kokoro_4f25baf6.vagrp_c b/game/models/kokoro/kokoro_4f25baf6.vagrp_c similarity index 100% rename from models/kokoro/kokoro_4f25baf6.vagrp_c rename to game/models/kokoro/kokoro_4f25baf6.vagrp_c diff --git a/models/komachi/7c18e388/komachi_attack.vanim_c b/game/models/komachi/7c18e388/komachi_attack.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_attack.vanim_c rename to game/models/komachi/7c18e388/komachi_attack.vanim_c diff --git a/models/komachi/7c18e388/komachi_attack1.vanim_c b/game/models/komachi/7c18e388/komachi_attack1.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_attack1.vanim_c rename to game/models/komachi/7c18e388/komachi_attack1.vanim_c diff --git a/models/komachi/7c18e388/komachi_attack2.vanim_c b/game/models/komachi/7c18e388/komachi_attack2.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_attack2.vanim_c rename to game/models/komachi/7c18e388/komachi_attack2.vanim_c diff --git a/models/komachi/7c18e388/komachi_cast1.vanim_c b/game/models/komachi/7c18e388/komachi_cast1.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_cast1.vanim_c rename to game/models/komachi/7c18e388/komachi_cast1.vanim_c diff --git a/models/komachi/7c18e388/komachi_cast2.vanim_c b/game/models/komachi/7c18e388/komachi_cast2.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_cast2.vanim_c rename to game/models/komachi/7c18e388/komachi_cast2.vanim_c diff --git a/models/komachi/7c18e388/komachi_cast2_copy.vanim_c b/game/models/komachi/7c18e388/komachi_cast2_copy.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_cast2_copy.vanim_c rename to game/models/komachi/7c18e388/komachi_cast2_copy.vanim_c diff --git a/models/komachi/7c18e388/komachi_cast3.vanim_c b/game/models/komachi/7c18e388/komachi_cast3.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_cast3.vanim_c rename to game/models/komachi/7c18e388/komachi_cast3.vanim_c diff --git a/models/komachi/7c18e388/komachi_cast4.vanim_c b/game/models/komachi/7c18e388/komachi_cast4.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_cast4.vanim_c rename to game/models/komachi/7c18e388/komachi_cast4.vanim_c diff --git a/models/komachi/7c18e388/komachi_die.vanim_c b/game/models/komachi/7c18e388/komachi_die.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_die.vanim_c rename to game/models/komachi/7c18e388/komachi_die.vanim_c diff --git a/models/komachi/7c18e388/komachi_disabled.vanim_c b/game/models/komachi/7c18e388/komachi_disabled.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_disabled.vanim_c rename to game/models/komachi/7c18e388/komachi_disabled.vanim_c diff --git a/models/komachi/7c18e388/komachi_idle.vanim_c b/game/models/komachi/7c18e388/komachi_idle.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_idle.vanim_c rename to game/models/komachi/7c18e388/komachi_idle.vanim_c diff --git a/models/komachi/7c18e388/komachi_por.vanim_c b/game/models/komachi/7c18e388/komachi_por.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_por.vanim_c rename to game/models/komachi/7c18e388/komachi_por.vanim_c diff --git a/models/komachi/7c18e388/komachi_run.vanim_c b/game/models/komachi/7c18e388/komachi_run.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_run.vanim_c rename to game/models/komachi/7c18e388/komachi_run.vanim_c diff --git a/models/komachi/7c18e388/komachi_run2.vanim_c b/game/models/komachi/7c18e388/komachi_run2.vanim_c similarity index 100% rename from models/komachi/7c18e388/komachi_run2.vanim_c rename to game/models/komachi/7c18e388/komachi_run2.vanim_c diff --git a/models/komachi/komachi.vmdl_c b/game/models/komachi/komachi.vmdl_c similarity index 100% rename from models/komachi/komachi.vmdl_c rename to game/models/komachi/komachi.vmdl_c diff --git a/models/komachi/komachi.vmesh_c b/game/models/komachi/komachi.vmesh_c similarity index 100% rename from models/komachi/komachi.vmesh_c rename to game/models/komachi/komachi.vmesh_c diff --git a/models/komachi/komachi.vmorf_c b/game/models/komachi/komachi.vmorf_c similarity index 100% rename from models/komachi/komachi.vmorf_c rename to game/models/komachi/komachi.vmorf_c diff --git a/models/komachi/komachi_7c18e388.vagrp_c b/game/models/komachi/komachi_7c18e388.vagrp_c similarity index 100% rename from models/komachi/komachi_7c18e388.vagrp_c rename to game/models/komachi/komachi_7c18e388.vagrp_c diff --git a/models/komachi/komachi_vmorf.vtex_c b/game/models/komachi/komachi_vmorf.vtex_c similarity index 100% rename from models/komachi/komachi_vmorf.vtex_c rename to game/models/komachi/komachi_vmorf.vtex_c diff --git a/models/medicine/67868622/medicine.vanim_c b/game/models/medicine/67868622/medicine.vanim_c similarity index 100% rename from models/medicine/67868622/medicine.vanim_c rename to game/models/medicine/67868622/medicine.vanim_c diff --git a/models/medicine/67868622/medicine_attack1.vanim_c b/game/models/medicine/67868622/medicine_attack1.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_attack1.vanim_c rename to game/models/medicine/67868622/medicine_attack1.vanim_c diff --git a/models/medicine/67868622/medicine_attack2.vanim_c b/game/models/medicine/67868622/medicine_attack2.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_attack2.vanim_c rename to game/models/medicine/67868622/medicine_attack2.vanim_c diff --git a/models/medicine/67868622/medicine_cast2.vanim_c b/game/models/medicine/67868622/medicine_cast2.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_cast2.vanim_c rename to game/models/medicine/67868622/medicine_cast2.vanim_c diff --git a/models/medicine/67868622/medicine_cast4.vanim_c b/game/models/medicine/67868622/medicine_cast4.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_cast4.vanim_c rename to game/models/medicine/67868622/medicine_cast4.vanim_c diff --git a/models/medicine/67868622/medicine_die.vanim_c b/game/models/medicine/67868622/medicine_die.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_die.vanim_c rename to game/models/medicine/67868622/medicine_die.vanim_c diff --git a/models/medicine/67868622/medicine_disabled.vanim_c b/game/models/medicine/67868622/medicine_disabled.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_disabled.vanim_c rename to game/models/medicine/67868622/medicine_disabled.vanim_c diff --git a/models/medicine/67868622/medicine_idle.vanim_c b/game/models/medicine/67868622/medicine_idle.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_idle.vanim_c rename to game/models/medicine/67868622/medicine_idle.vanim_c diff --git a/models/medicine/67868622/medicine_por.vanim_c b/game/models/medicine/67868622/medicine_por.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_por.vanim_c rename to game/models/medicine/67868622/medicine_por.vanim_c diff --git a/models/medicine/67868622/medicine_run.vanim_c b/game/models/medicine/67868622/medicine_run.vanim_c similarity index 100% rename from models/medicine/67868622/medicine_run.vanim_c rename to game/models/medicine/67868622/medicine_run.vanim_c diff --git a/models/medicine/904f66ba/linglanrenou.vanim_c b/game/models/medicine/904f66ba/linglanrenou.vanim_c similarity index 100% rename from models/medicine/904f66ba/linglanrenou.vanim_c rename to game/models/medicine/904f66ba/linglanrenou.vanim_c diff --git a/models/medicine/904f66ba/linglanrenou_die.vanim_c b/game/models/medicine/904f66ba/linglanrenou_die.vanim_c similarity index 100% rename from models/medicine/904f66ba/linglanrenou_die.vanim_c rename to game/models/medicine/904f66ba/linglanrenou_die.vanim_c diff --git a/models/medicine/904f66ba/linglanrenou_idle.vanim_c b/game/models/medicine/904f66ba/linglanrenou_idle.vanim_c similarity index 100% rename from models/medicine/904f66ba/linglanrenou_idle.vanim_c rename to game/models/medicine/904f66ba/linglanrenou_idle.vanim_c diff --git a/models/medicine/linglanrenou.vmdl_c b/game/models/medicine/linglanrenou.vmdl_c similarity index 100% rename from models/medicine/linglanrenou.vmdl_c rename to game/models/medicine/linglanrenou.vmdl_c diff --git a/models/medicine/linglanrenou.vmesh_c b/game/models/medicine/linglanrenou.vmesh_c similarity index 100% rename from models/medicine/linglanrenou.vmesh_c rename to game/models/medicine/linglanrenou.vmesh_c diff --git a/models/medicine/linglanrenou.vmorf_c b/game/models/medicine/linglanrenou.vmorf_c similarity index 100% rename from models/medicine/linglanrenou.vmorf_c rename to game/models/medicine/linglanrenou.vmorf_c diff --git a/models/medicine/linglanrenou_904f66ba.vagrp_c b/game/models/medicine/linglanrenou_904f66ba.vagrp_c similarity index 100% rename from models/medicine/linglanrenou_904f66ba.vagrp_c rename to game/models/medicine/linglanrenou_904f66ba.vagrp_c diff --git a/models/medicine/linglanrenou_vmorf.vtex_c b/game/models/medicine/linglanrenou_vmorf.vtex_c similarity index 100% rename from models/medicine/linglanrenou_vmorf.vtex_c rename to game/models/medicine/linglanrenou_vmorf.vtex_c diff --git a/models/medicine/medicine.vmdl_c b/game/models/medicine/medicine.vmdl_c similarity index 100% rename from models/medicine/medicine.vmdl_c rename to game/models/medicine/medicine.vmdl_c diff --git a/models/medicine/medicine.vmesh_c b/game/models/medicine/medicine.vmesh_c similarity index 100% rename from models/medicine/medicine.vmesh_c rename to game/models/medicine/medicine.vmesh_c diff --git a/models/medicine/medicine.vmorf_c b/game/models/medicine/medicine.vmorf_c similarity index 100% rename from models/medicine/medicine.vmorf_c rename to game/models/medicine/medicine.vmorf_c diff --git a/models/medicine/medicine_67868622.vagrp_c b/game/models/medicine/medicine_67868622.vagrp_c similarity index 100% rename from models/medicine/medicine_67868622.vagrp_c rename to game/models/medicine/medicine_67868622.vagrp_c diff --git a/models/medicine/medicine_vmorf.vtex_c b/game/models/medicine/medicine_vmorf.vtex_c similarity index 100% rename from models/medicine/medicine_vmorf.vtex_c rename to game/models/medicine/medicine_vmorf.vtex_c diff --git a/models/new_touhou_model/aya/aya.vmdl_c b/game/models/new_touhou_model/aya/aya.vmdl_c similarity index 100% rename from models/new_touhou_model/aya/aya.vmdl_c rename to game/models/new_touhou_model/aya/aya.vmdl_c diff --git a/models/new_touhou_model/aya/aya.vmesh_c b/game/models/new_touhou_model/aya/aya.vmesh_c similarity index 100% rename from models/new_touhou_model/aya/aya.vmesh_c rename to game/models/new_touhou_model/aya/aya.vmesh_c diff --git a/models/new_touhou_model/aya/aya_e61a3819.vagrp_c b/game/models/new_touhou_model/aya/aya_e61a3819.vagrp_c similarity index 100% rename from models/new_touhou_model/aya/aya_e61a3819.vagrp_c rename to game/models/new_touhou_model/aya/aya_e61a3819.vagrp_c diff --git a/models/new_touhou_model/aya/aya_wing.vmdl_c b/game/models/new_touhou_model/aya/aya_wing.vmdl_c similarity index 100% rename from models/new_touhou_model/aya/aya_wing.vmdl_c rename to game/models/new_touhou_model/aya/aya_wing.vmdl_c diff --git a/models/new_touhou_model/aya/aya_wing.vmesh_c b/game/models/new_touhou_model/aya/aya_wing.vmesh_c similarity index 100% rename from models/new_touhou_model/aya/aya_wing.vmesh_c rename to game/models/new_touhou_model/aya/aya_wing.vmesh_c diff --git a/models/new_touhou_model/aya/e61a3819/aya.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya.vanim_c diff --git a/models/new_touhou_model/aya/e61a3819/aya_attack1.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya_attack1.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya_attack1.vanim_c diff --git a/models/new_touhou_model/aya/e61a3819/aya_attack2.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya_attack2.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya_attack2.vanim_c diff --git a/models/new_touhou_model/aya/e61a3819/aya_cast1.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya_cast1.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya_cast1.vanim_c diff --git a/models/new_touhou_model/aya/e61a3819/aya_cast2.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya_cast2.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya_cast2.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya_cast2.vanim_c diff --git a/models/new_touhou_model/aya/e61a3819/aya_cast3.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya_cast3.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya_cast3.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya_cast3.vanim_c diff --git a/models/new_touhou_model/aya/e61a3819/aya_cast4.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya_cast4.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya_cast4.vanim_c diff --git a/models/new_touhou_model/aya/e61a3819/aya_idle.vanim_c b/game/models/new_touhou_model/aya/e61a3819/aya_idle.vanim_c similarity index 100% rename from models/new_touhou_model/aya/e61a3819/aya_idle.vanim_c rename to game/models/new_touhou_model/aya/e61a3819/aya_idle.vanim_c diff --git a/models/new_touhou_model/cirno/cirno.vmdl_c b/game/models/new_touhou_model/cirno/cirno.vmdl_c similarity index 100% rename from models/new_touhou_model/cirno/cirno.vmdl_c rename to game/models/new_touhou_model/cirno/cirno.vmdl_c diff --git a/models/new_touhou_model/cirno/cirno.vmesh_c b/game/models/new_touhou_model/cirno/cirno.vmesh_c similarity index 100% rename from models/new_touhou_model/cirno/cirno.vmesh_c rename to game/models/new_touhou_model/cirno/cirno.vmesh_c diff --git a/models/new_touhou_model/cirno/cirno_e22ed6f2.vagrp_c b/game/models/new_touhou_model/cirno/cirno_e22ed6f2.vagrp_c similarity index 100% rename from models/new_touhou_model/cirno/cirno_e22ed6f2.vagrp_c rename to game/models/new_touhou_model/cirno/cirno_e22ed6f2.vagrp_c diff --git a/models/new_touhou_model/cirno/e22ed6f2/cirno.vanim_c b/game/models/new_touhou_model/cirno/e22ed6f2/cirno.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/e22ed6f2/cirno.vanim_c rename to game/models/new_touhou_model/cirno/e22ed6f2/cirno.vanim_c diff --git a/models/new_touhou_model/cirno/e22ed6f2/cirno_attack1.vanim_c b/game/models/new_touhou_model/cirno/e22ed6f2/cirno_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/e22ed6f2/cirno_attack1.vanim_c rename to game/models/new_touhou_model/cirno/e22ed6f2/cirno_attack1.vanim_c diff --git a/models/new_touhou_model/cirno/e22ed6f2/cirno_attack2.vanim_c b/game/models/new_touhou_model/cirno/e22ed6f2/cirno_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/e22ed6f2/cirno_attack2.vanim_c rename to game/models/new_touhou_model/cirno/e22ed6f2/cirno_attack2.vanim_c diff --git a/models/new_touhou_model/cirno/e22ed6f2/cirno_cast2.vanim_c b/game/models/new_touhou_model/cirno/e22ed6f2/cirno_cast2.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/e22ed6f2/cirno_cast2.vanim_c rename to game/models/new_touhou_model/cirno/e22ed6f2/cirno_cast2.vanim_c diff --git a/models/new_touhou_model/cirno/e22ed6f2/cirno_idle.vanim_c b/game/models/new_touhou_model/cirno/e22ed6f2/cirno_idle.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/e22ed6f2/cirno_idle.vanim_c rename to game/models/new_touhou_model/cirno/e22ed6f2/cirno_idle.vanim_c diff --git a/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno.vanim_c b/game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno.vanim_c rename to game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno.vanim_c diff --git a/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack1.vanim_c b/game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack1.vanim_c rename to game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack1.vanim_c diff --git a/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack2.vanim_c b/game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack2.vanim_c rename to game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_attack2.vanim_c diff --git a/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_cast.vanim_c b/game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_cast.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_cast.vanim_c rename to game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_cast.vanim_c diff --git a/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_idle.vanim_c b/game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_idle.vanim_c similarity index 100% rename from models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_idle.vanim_c rename to game/models/new_touhou_model/cirno/ex/163eb7c1/ex_cirno_idle.vanim_c diff --git a/models/new_touhou_model/cirno/ex/ex_cirno.vmdl_c b/game/models/new_touhou_model/cirno/ex/ex_cirno.vmdl_c similarity index 100% rename from models/new_touhou_model/cirno/ex/ex_cirno.vmdl_c rename to game/models/new_touhou_model/cirno/ex/ex_cirno.vmdl_c diff --git a/models/new_touhou_model/cirno/ex/ex_cirno.vmesh_c b/game/models/new_touhou_model/cirno/ex/ex_cirno.vmesh_c similarity index 100% rename from models/new_touhou_model/cirno/ex/ex_cirno.vmesh_c rename to game/models/new_touhou_model/cirno/ex/ex_cirno.vmesh_c diff --git a/models/new_touhou_model/cirno/ex/ex_cirno_163eb7c1.vagrp_c b/game/models/new_touhou_model/cirno/ex/ex_cirno_163eb7c1.vagrp_c similarity index 100% rename from models/new_touhou_model/cirno/ex/ex_cirno_163eb7c1.vagrp_c rename to game/models/new_touhou_model/cirno/ex/ex_cirno_163eb7c1.vagrp_c diff --git a/models/new_touhou_model/clownpiece/34799dea/clownpiece.vanim_c b/game/models/new_touhou_model/clownpiece/34799dea/clownpiece.vanim_c similarity index 100% rename from models/new_touhou_model/clownpiece/34799dea/clownpiece.vanim_c rename to game/models/new_touhou_model/clownpiece/34799dea/clownpiece.vanim_c diff --git a/models/new_touhou_model/clownpiece/34799dea/clownpiece_attack1.vanim_c b/game/models/new_touhou_model/clownpiece/34799dea/clownpiece_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/clownpiece/34799dea/clownpiece_attack1.vanim_c rename to game/models/new_touhou_model/clownpiece/34799dea/clownpiece_attack1.vanim_c diff --git a/models/new_touhou_model/clownpiece/34799dea/clownpiece_attack2.vanim_c b/game/models/new_touhou_model/clownpiece/34799dea/clownpiece_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/clownpiece/34799dea/clownpiece_attack2.vanim_c rename to game/models/new_touhou_model/clownpiece/34799dea/clownpiece_attack2.vanim_c diff --git a/models/new_touhou_model/clownpiece/34799dea/clownpiece_cast1.vanim_c b/game/models/new_touhou_model/clownpiece/34799dea/clownpiece_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/clownpiece/34799dea/clownpiece_cast1.vanim_c rename to game/models/new_touhou_model/clownpiece/34799dea/clownpiece_cast1.vanim_c diff --git a/models/new_touhou_model/clownpiece/34799dea/clownpiece_idle.vanim_c b/game/models/new_touhou_model/clownpiece/34799dea/clownpiece_idle.vanim_c similarity index 100% rename from models/new_touhou_model/clownpiece/34799dea/clownpiece_idle.vanim_c rename to game/models/new_touhou_model/clownpiece/34799dea/clownpiece_idle.vanim_c diff --git a/models/new_touhou_model/clownpiece/clownpiece.vmdl_c b/game/models/new_touhou_model/clownpiece/clownpiece.vmdl_c similarity index 100% rename from models/new_touhou_model/clownpiece/clownpiece.vmdl_c rename to game/models/new_touhou_model/clownpiece/clownpiece.vmdl_c diff --git a/models/new_touhou_model/clownpiece/clownpiece.vmesh_c b/game/models/new_touhou_model/clownpiece/clownpiece.vmesh_c similarity index 100% rename from models/new_touhou_model/clownpiece/clownpiece.vmesh_c rename to game/models/new_touhou_model/clownpiece/clownpiece.vmesh_c diff --git a/models/new_touhou_model/clownpiece/clownpiece_34799dea.vagrp_c b/game/models/new_touhou_model/clownpiece/clownpiece_34799dea.vagrp_c similarity index 100% rename from models/new_touhou_model/clownpiece/clownpiece_34799dea.vagrp_c rename to game/models/new_touhou_model/clownpiece/clownpiece_34799dea.vagrp_c diff --git a/models/new_touhou_model/flandre/7b6befc4/flandre.vanim_c b/game/models/new_touhou_model/flandre/7b6befc4/flandre.vanim_c similarity index 100% rename from models/new_touhou_model/flandre/7b6befc4/flandre.vanim_c rename to game/models/new_touhou_model/flandre/7b6befc4/flandre.vanim_c diff --git a/models/new_touhou_model/flandre/7b6befc4/flandre_attack1.vanim_c b/game/models/new_touhou_model/flandre/7b6befc4/flandre_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/flandre/7b6befc4/flandre_attack1.vanim_c rename to game/models/new_touhou_model/flandre/7b6befc4/flandre_attack1.vanim_c diff --git a/models/new_touhou_model/flandre/7b6befc4/flandre_attack2.vanim_c b/game/models/new_touhou_model/flandre/7b6befc4/flandre_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/flandre/7b6befc4/flandre_attack2.vanim_c rename to game/models/new_touhou_model/flandre/7b6befc4/flandre_attack2.vanim_c diff --git a/models/new_touhou_model/flandre/7b6befc4/flandre_cast4.vanim_c b/game/models/new_touhou_model/flandre/7b6befc4/flandre_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/flandre/7b6befc4/flandre_cast4.vanim_c rename to game/models/new_touhou_model/flandre/7b6befc4/flandre_cast4.vanim_c diff --git a/models/new_touhou_model/flandre/7b6befc4/flandre_idle.vanim_c b/game/models/new_touhou_model/flandre/7b6befc4/flandre_idle.vanim_c similarity index 100% rename from models/new_touhou_model/flandre/7b6befc4/flandre_idle.vanim_c rename to game/models/new_touhou_model/flandre/7b6befc4/flandre_idle.vanim_c diff --git a/models/new_touhou_model/flandre/flandre.vmdl_c b/game/models/new_touhou_model/flandre/flandre.vmdl_c similarity index 100% rename from models/new_touhou_model/flandre/flandre.vmdl_c rename to game/models/new_touhou_model/flandre/flandre.vmdl_c diff --git a/models/new_touhou_model/flandre/flandre.vmesh_c b/game/models/new_touhou_model/flandre/flandre.vmesh_c similarity index 100% rename from models/new_touhou_model/flandre/flandre.vmesh_c rename to game/models/new_touhou_model/flandre/flandre.vmesh_c diff --git a/models/new_touhou_model/flandre/flandre_7b6befc4.vagrp_c b/game/models/new_touhou_model/flandre/flandre_7b6befc4.vagrp_c similarity index 100% rename from models/new_touhou_model/flandre/flandre_7b6befc4.vagrp_c rename to game/models/new_touhou_model/flandre/flandre_7b6befc4.vagrp_c diff --git a/models/new_touhou_model/hecatia/17c03822/hecatia.vanim_c b/game/models/new_touhou_model/hecatia/17c03822/hecatia.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/17c03822/hecatia.vanim_c rename to game/models/new_touhou_model/hecatia/17c03822/hecatia.vanim_c diff --git a/models/new_touhou_model/hecatia/17c03822/hecatia_attack1.vanim_c b/game/models/new_touhou_model/hecatia/17c03822/hecatia_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/17c03822/hecatia_attack1.vanim_c rename to game/models/new_touhou_model/hecatia/17c03822/hecatia_attack1.vanim_c diff --git a/models/new_touhou_model/hecatia/17c03822/hecatia_attack2.vanim_c b/game/models/new_touhou_model/hecatia/17c03822/hecatia_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/17c03822/hecatia_attack2.vanim_c rename to game/models/new_touhou_model/hecatia/17c03822/hecatia_attack2.vanim_c diff --git a/models/new_touhou_model/hecatia/17c03822/hecatia_cast1.vanim_c b/game/models/new_touhou_model/hecatia/17c03822/hecatia_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/17c03822/hecatia_cast1.vanim_c rename to game/models/new_touhou_model/hecatia/17c03822/hecatia_cast1.vanim_c diff --git a/models/new_touhou_model/hecatia/17c03822/hecatia_idle.vanim_c b/game/models/new_touhou_model/hecatia/17c03822/hecatia_idle.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/17c03822/hecatia_idle.vanim_c rename to game/models/new_touhou_model/hecatia/17c03822/hecatia_idle.vanim_c diff --git a/models/new_touhou_model/hecatia/3dfd9839/hecatia_attack1.vanim_c b/game/models/new_touhou_model/hecatia/3dfd9839/hecatia_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/3dfd9839/hecatia_attack1.vanim_c rename to game/models/new_touhou_model/hecatia/3dfd9839/hecatia_attack1.vanim_c diff --git a/models/new_touhou_model/hecatia/3dfd9839/hecatia_attack2.vanim_c b/game/models/new_touhou_model/hecatia/3dfd9839/hecatia_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/3dfd9839/hecatia_attack2.vanim_c rename to game/models/new_touhou_model/hecatia/3dfd9839/hecatia_attack2.vanim_c diff --git a/models/new_touhou_model/hecatia/3dfd9839/hecatia_cast1.vanim_c b/game/models/new_touhou_model/hecatia/3dfd9839/hecatia_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/3dfd9839/hecatia_cast1.vanim_c rename to game/models/new_touhou_model/hecatia/3dfd9839/hecatia_cast1.vanim_c diff --git a/models/new_touhou_model/hecatia/3dfd9839/hecatia_idle.vanim_c b/game/models/new_touhou_model/hecatia/3dfd9839/hecatia_idle.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/3dfd9839/hecatia_idle.vanim_c rename to game/models/new_touhou_model/hecatia/3dfd9839/hecatia_idle.vanim_c diff --git a/models/new_touhou_model/hecatia/earth.vmdl_c b/game/models/new_touhou_model/hecatia/earth.vmdl_c similarity index 100% rename from models/new_touhou_model/hecatia/earth.vmdl_c rename to game/models/new_touhou_model/hecatia/earth.vmdl_c diff --git a/models/new_touhou_model/hecatia/earth.vmesh_c b/game/models/new_touhou_model/hecatia/earth.vmesh_c similarity index 100% rename from models/new_touhou_model/hecatia/earth.vmesh_c rename to game/models/new_touhou_model/hecatia/earth.vmesh_c diff --git a/models/new_touhou_model/hecatia/hecatia.vmdl_c b/game/models/new_touhou_model/hecatia/hecatia.vmdl_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia.vmdl_c rename to game/models/new_touhou_model/hecatia/hecatia.vmdl_c diff --git a/models/new_touhou_model/hecatia/hecatia.vmesh_c b/game/models/new_touhou_model/hecatia/hecatia.vmesh_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia.vmesh_c rename to game/models/new_touhou_model/hecatia/hecatia.vmesh_c diff --git a/models/new_touhou_model/hecatia/hecatia_17c03822.vagrp_c b/game/models/new_touhou_model/hecatia/hecatia_17c03822.vagrp_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_17c03822.vagrp_c rename to game/models/new_touhou_model/hecatia/hecatia_17c03822.vagrp_c diff --git a/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack1.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack1.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack1.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack2.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack2.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_attack2.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_cast1.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_cast1.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_cast1.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_idle.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_idle.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_idle.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_earth/3dfd9839/hecatia_idle.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_earth/hecatia.vmesh_c b/game/models/new_touhou_model/hecatia/hecatia_earth/hecatia.vmesh_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_earth/hecatia.vmesh_c rename to game/models/new_touhou_model/hecatia/hecatia_earth/hecatia.vmesh_c diff --git a/models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth.vmdl_c b/game/models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth.vmdl_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth.vmdl_c rename to game/models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth.vmdl_c diff --git a/models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth_3dfd9839.vagrp_c b/game/models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth_3dfd9839.vagrp_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth_3dfd9839.vagrp_c rename to game/models/new_touhou_model/hecatia/hecatia_earth/hecatia_earth_3dfd9839.vagrp_c diff --git a/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack1.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack1.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack1.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack2.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack2.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_attack2.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_cast1.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_cast1.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_cast1.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_idle.vanim_c b/game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_idle.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_idle.vanim_c rename to game/models/new_touhou_model/hecatia/hecatia_moon/dc1804ca/hecatia_idle.vanim_c diff --git a/models/new_touhou_model/hecatia/hecatia_moon/hecatia.vmesh_c b/game/models/new_touhou_model/hecatia/hecatia_moon/hecatia.vmesh_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_moon/hecatia.vmesh_c rename to game/models/new_touhou_model/hecatia/hecatia_moon/hecatia.vmesh_c diff --git a/models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon.vmdl_c b/game/models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon.vmdl_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon.vmdl_c rename to game/models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon.vmdl_c diff --git a/models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon_dc1804ca.vagrp_c b/game/models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon_dc1804ca.vagrp_c similarity index 100% rename from models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon_dc1804ca.vagrp_c rename to game/models/new_touhou_model/hecatia/hecatia_moon/hecatia_moon_dc1804ca.vagrp_c diff --git a/models/new_touhou_model/hecatia/item/f40dfb37/hecatia_idle.vanim_c b/game/models/new_touhou_model/hecatia/item/f40dfb37/hecatia_idle.vanim_c similarity index 100% rename from models/new_touhou_model/hecatia/item/f40dfb37/hecatia_idle.vanim_c rename to game/models/new_touhou_model/hecatia/item/f40dfb37/hecatia_idle.vanim_c diff --git a/models/new_touhou_model/hecatia/item/hecatia.vmesh_c b/game/models/new_touhou_model/hecatia/item/hecatia.vmesh_c similarity index 100% rename from models/new_touhou_model/hecatia/item/hecatia.vmesh_c rename to game/models/new_touhou_model/hecatia/item/hecatia.vmesh_c diff --git a/models/new_touhou_model/hecatia/item/item_hecatia.vmdl_c b/game/models/new_touhou_model/hecatia/item/item_hecatia.vmdl_c similarity index 100% rename from models/new_touhou_model/hecatia/item/item_hecatia.vmdl_c rename to game/models/new_touhou_model/hecatia/item/item_hecatia.vmdl_c diff --git a/models/new_touhou_model/hecatia/item/item_hecatia_f40dfb37.vagrp_c b/game/models/new_touhou_model/hecatia/item/item_hecatia_f40dfb37.vagrp_c similarity index 100% rename from models/new_touhou_model/hecatia/item/item_hecatia_f40dfb37.vagrp_c rename to game/models/new_touhou_model/hecatia/item/item_hecatia_f40dfb37.vagrp_c diff --git a/models/new_touhou_model/hecatia/moon.vmdl_c b/game/models/new_touhou_model/hecatia/moon.vmdl_c similarity index 100% rename from models/new_touhou_model/hecatia/moon.vmdl_c rename to game/models/new_touhou_model/hecatia/moon.vmdl_c diff --git a/models/new_touhou_model/hecatia/moon.vmesh_c b/game/models/new_touhou_model/hecatia/moon.vmesh_c similarity index 100% rename from models/new_touhou_model/hecatia/moon.vmesh_c rename to game/models/new_touhou_model/hecatia/moon.vmesh_c diff --git a/models/new_touhou_model/hecatia/otherworld.vmdl_c b/game/models/new_touhou_model/hecatia/otherworld.vmdl_c similarity index 100% rename from models/new_touhou_model/hecatia/otherworld.vmdl_c rename to game/models/new_touhou_model/hecatia/otherworld.vmdl_c diff --git a/models/new_touhou_model/hecatia/otherworld.vmesh_c b/game/models/new_touhou_model/hecatia/otherworld.vmesh_c similarity index 100% rename from models/new_touhou_model/hecatia/otherworld.vmesh_c rename to game/models/new_touhou_model/hecatia/otherworld.vmesh_c diff --git a/models/new_touhou_model/junko/0a62ecd6/junko.vanim_c b/game/models/new_touhou_model/junko/0a62ecd6/junko.vanim_c similarity index 100% rename from models/new_touhou_model/junko/0a62ecd6/junko.vanim_c rename to game/models/new_touhou_model/junko/0a62ecd6/junko.vanim_c diff --git a/models/new_touhou_model/junko/0a62ecd6/junko_attack1.vanim_c b/game/models/new_touhou_model/junko/0a62ecd6/junko_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/junko/0a62ecd6/junko_attack1.vanim_c rename to game/models/new_touhou_model/junko/0a62ecd6/junko_attack1.vanim_c diff --git a/models/new_touhou_model/junko/0a62ecd6/junko_attack2.vanim_c b/game/models/new_touhou_model/junko/0a62ecd6/junko_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/junko/0a62ecd6/junko_attack2.vanim_c rename to game/models/new_touhou_model/junko/0a62ecd6/junko_attack2.vanim_c diff --git a/models/new_touhou_model/junko/0a62ecd6/junko_cast.vanim_c b/game/models/new_touhou_model/junko/0a62ecd6/junko_cast.vanim_c similarity index 100% rename from models/new_touhou_model/junko/0a62ecd6/junko_cast.vanim_c rename to game/models/new_touhou_model/junko/0a62ecd6/junko_cast.vanim_c diff --git a/models/new_touhou_model/junko/0a62ecd6/junko_cast4.vanim_c b/game/models/new_touhou_model/junko/0a62ecd6/junko_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/junko/0a62ecd6/junko_cast4.vanim_c rename to game/models/new_touhou_model/junko/0a62ecd6/junko_cast4.vanim_c diff --git a/models/new_touhou_model/junko/0a62ecd6/junko_idle.vanim_c b/game/models/new_touhou_model/junko/0a62ecd6/junko_idle.vanim_c similarity index 100% rename from models/new_touhou_model/junko/0a62ecd6/junko_idle.vanim_c rename to game/models/new_touhou_model/junko/0a62ecd6/junko_idle.vanim_c diff --git a/models/new_touhou_model/junko/item/221a59f7/junko_idle.vanim_c b/game/models/new_touhou_model/junko/item/221a59f7/junko_idle.vanim_c similarity index 100% rename from models/new_touhou_model/junko/item/221a59f7/junko_idle.vanim_c rename to game/models/new_touhou_model/junko/item/221a59f7/junko_idle.vanim_c diff --git a/models/new_touhou_model/junko/item/item_junko.vmdl_c b/game/models/new_touhou_model/junko/item/item_junko.vmdl_c similarity index 100% rename from models/new_touhou_model/junko/item/item_junko.vmdl_c rename to game/models/new_touhou_model/junko/item/item_junko.vmdl_c diff --git a/models/new_touhou_model/junko/item/item_junko_221a59f7.vagrp_c b/game/models/new_touhou_model/junko/item/item_junko_221a59f7.vagrp_c similarity index 100% rename from models/new_touhou_model/junko/item/item_junko_221a59f7.vagrp_c rename to game/models/new_touhou_model/junko/item/item_junko_221a59f7.vagrp_c diff --git a/models/new_touhou_model/junko/item/junko.vmesh_c b/game/models/new_touhou_model/junko/item/junko.vmesh_c similarity index 100% rename from models/new_touhou_model/junko/item/junko.vmesh_c rename to game/models/new_touhou_model/junko/item/junko.vmesh_c diff --git a/models/new_touhou_model/junko/junko.vmdl_c b/game/models/new_touhou_model/junko/junko.vmdl_c similarity index 100% rename from models/new_touhou_model/junko/junko.vmdl_c rename to game/models/new_touhou_model/junko/junko.vmdl_c diff --git a/models/new_touhou_model/junko/junko.vmesh_c b/game/models/new_touhou_model/junko/junko.vmesh_c similarity index 100% rename from models/new_touhou_model/junko/junko.vmesh_c rename to game/models/new_touhou_model/junko/junko.vmesh_c diff --git a/models/new_touhou_model/junko/junko_0a62ecd6.vagrp_c b/game/models/new_touhou_model/junko/junko_0a62ecd6.vagrp_c similarity index 100% rename from models/new_touhou_model/junko/junko_0a62ecd6.vagrp_c rename to game/models/new_touhou_model/junko/junko_0a62ecd6.vagrp_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa.vanim_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa_attack1.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa_attack1.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa_attack1.vanim_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa_attack2.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa_attack2.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa_attack2.vanim_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa_cast1.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa_cast1.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa_cast1.vanim_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa_cast2.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa_cast2.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa_cast2.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa_cast2.vanim_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa_cast4.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa_cast4.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa_cast4.vanim_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa_idle.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa_idle.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa_idle.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa_idle.vanim_c diff --git a/models/new_touhou_model/marisa/f177ccd9/marisa_run.vanim_c b/game/models/new_touhou_model/marisa/f177ccd9/marisa_run.vanim_c similarity index 100% rename from models/new_touhou_model/marisa/f177ccd9/marisa_run.vanim_c rename to game/models/new_touhou_model/marisa/f177ccd9/marisa_run.vanim_c diff --git a/models/new_touhou_model/marisa/marisa.vmdl_c b/game/models/new_touhou_model/marisa/marisa.vmdl_c similarity index 100% rename from models/new_touhou_model/marisa/marisa.vmdl_c rename to game/models/new_touhou_model/marisa/marisa.vmdl_c diff --git a/models/new_touhou_model/marisa/marisa.vmesh_c b/game/models/new_touhou_model/marisa/marisa.vmesh_c similarity index 100% rename from models/new_touhou_model/marisa/marisa.vmesh_c rename to game/models/new_touhou_model/marisa/marisa.vmesh_c diff --git a/models/new_touhou_model/marisa/marisa_f177ccd9.vagrp_c b/game/models/new_touhou_model/marisa/marisa_f177ccd9.vagrp_c similarity index 100% rename from models/new_touhou_model/marisa/marisa_f177ccd9.vagrp_c rename to game/models/new_touhou_model/marisa/marisa_f177ccd9.vagrp_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack1.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack1.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack1.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack2.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack2.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_attack2.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast1.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast1.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast1.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast2.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast2.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast2.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast2.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast3.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast3.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast3.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast3.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast4.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast4.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast4.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast44.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast44.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast44.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast44.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast5.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast5.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast5.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast5.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast6.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast6.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast6.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_cast6.vanim_c diff --git a/models/new_touhou_model/patchouli/41dfbfc1/patchouli_idle.vanim_c b/game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_idle.vanim_c similarity index 100% rename from models/new_touhou_model/patchouli/41dfbfc1/patchouli_idle.vanim_c rename to game/models/new_touhou_model/patchouli/41dfbfc1/patchouli_idle.vanim_c diff --git a/models/new_touhou_model/patchouli/patchouli.vmdl_c b/game/models/new_touhou_model/patchouli/patchouli.vmdl_c similarity index 100% rename from models/new_touhou_model/patchouli/patchouli.vmdl_c rename to game/models/new_touhou_model/patchouli/patchouli.vmdl_c diff --git a/models/new_touhou_model/patchouli/patchouli.vmesh_c b/game/models/new_touhou_model/patchouli/patchouli.vmesh_c similarity index 100% rename from models/new_touhou_model/patchouli/patchouli.vmesh_c rename to game/models/new_touhou_model/patchouli/patchouli.vmesh_c diff --git a/models/new_touhou_model/patchouli/patchouli_41dfbfc1.vagrp_c b/game/models/new_touhou_model/patchouli/patchouli_41dfbfc1.vagrp_c similarity index 100% rename from models/new_touhou_model/patchouli/patchouli_41dfbfc1.vagrp_c rename to game/models/new_touhou_model/patchouli/patchouli_41dfbfc1.vagrp_c diff --git a/models/new_touhou_model/patchouli/philosophers_stone.vmdl_c b/game/models/new_touhou_model/patchouli/philosophers_stone.vmdl_c similarity index 100% rename from models/new_touhou_model/patchouli/philosophers_stone.vmdl_c rename to game/models/new_touhou_model/patchouli/philosophers_stone.vmdl_c diff --git a/models/new_touhou_model/patchouli/philosophers_stone.vmesh_c b/game/models/new_touhou_model/patchouli/philosophers_stone.vmesh_c similarity index 100% rename from models/new_touhou_model/patchouli/philosophers_stone.vmesh_c rename to game/models/new_touhou_model/patchouli/philosophers_stone.vmesh_c diff --git a/models/new_touhou_model/reimu/b9bb1cbf/reimu_attack1.vanim_c b/game/models/new_touhou_model/reimu/b9bb1cbf/reimu_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/reimu/b9bb1cbf/reimu_attack1.vanim_c rename to game/models/new_touhou_model/reimu/b9bb1cbf/reimu_attack1.vanim_c diff --git a/models/new_touhou_model/reimu/b9bb1cbf/reimu_attack2.vanim_c b/game/models/new_touhou_model/reimu/b9bb1cbf/reimu_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/reimu/b9bb1cbf/reimu_attack2.vanim_c rename to game/models/new_touhou_model/reimu/b9bb1cbf/reimu_attack2.vanim_c diff --git a/models/new_touhou_model/reimu/b9bb1cbf/reimu_cast1.vanim_c b/game/models/new_touhou_model/reimu/b9bb1cbf/reimu_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/reimu/b9bb1cbf/reimu_cast1.vanim_c rename to game/models/new_touhou_model/reimu/b9bb1cbf/reimu_cast1.vanim_c diff --git a/models/new_touhou_model/reimu/b9bb1cbf/reimu_cast3.vanim_c b/game/models/new_touhou_model/reimu/b9bb1cbf/reimu_cast3.vanim_c similarity index 100% rename from models/new_touhou_model/reimu/b9bb1cbf/reimu_cast3.vanim_c rename to game/models/new_touhou_model/reimu/b9bb1cbf/reimu_cast3.vanim_c diff --git a/models/new_touhou_model/reimu/b9bb1cbf/reimu_idle.vanim_c b/game/models/new_touhou_model/reimu/b9bb1cbf/reimu_idle.vanim_c similarity index 100% rename from models/new_touhou_model/reimu/b9bb1cbf/reimu_idle.vanim_c rename to game/models/new_touhou_model/reimu/b9bb1cbf/reimu_idle.vanim_c diff --git a/models/new_touhou_model/reimu/b9bb1cbf/reimu_run.vanim_c b/game/models/new_touhou_model/reimu/b9bb1cbf/reimu_run.vanim_c similarity index 100% rename from models/new_touhou_model/reimu/b9bb1cbf/reimu_run.vanim_c rename to game/models/new_touhou_model/reimu/b9bb1cbf/reimu_run.vanim_c diff --git a/models/new_touhou_model/reimu/ofuda.vmdl_c b/game/models/new_touhou_model/reimu/ofuda.vmdl_c similarity index 100% rename from models/new_touhou_model/reimu/ofuda.vmdl_c rename to game/models/new_touhou_model/reimu/ofuda.vmdl_c diff --git a/models/new_touhou_model/reimu/ofuda.vmesh_c b/game/models/new_touhou_model/reimu/ofuda.vmesh_c similarity index 100% rename from models/new_touhou_model/reimu/ofuda.vmesh_c rename to game/models/new_touhou_model/reimu/ofuda.vmesh_c diff --git a/models/new_touhou_model/reimu/onmyongyoku/onmyougyoku.vmesh_c b/game/models/new_touhou_model/reimu/onmyongyoku/onmyougyoku.vmesh_c similarity index 100% rename from models/new_touhou_model/reimu/onmyongyoku/onmyougyoku.vmesh_c rename to game/models/new_touhou_model/reimu/onmyongyoku/onmyougyoku.vmesh_c diff --git a/models/new_touhou_model/reimu/onmyongyoku/onmyougyoku_max.vmdl_c b/game/models/new_touhou_model/reimu/onmyongyoku/onmyougyoku_max.vmdl_c similarity index 100% rename from models/new_touhou_model/reimu/onmyongyoku/onmyougyoku_max.vmdl_c rename to game/models/new_touhou_model/reimu/onmyongyoku/onmyougyoku_max.vmdl_c diff --git a/models/new_touhou_model/reimu/onmyougyoku.vmdl_c b/game/models/new_touhou_model/reimu/onmyougyoku.vmdl_c similarity index 100% rename from models/new_touhou_model/reimu/onmyougyoku.vmdl_c rename to game/models/new_touhou_model/reimu/onmyougyoku.vmdl_c diff --git a/models/new_touhou_model/reimu/onmyougyoku.vmesh_c b/game/models/new_touhou_model/reimu/onmyougyoku.vmesh_c similarity index 100% rename from models/new_touhou_model/reimu/onmyougyoku.vmesh_c rename to game/models/new_touhou_model/reimu/onmyougyoku.vmesh_c diff --git a/models/new_touhou_model/reimu/reimu.vmdl_c b/game/models/new_touhou_model/reimu/reimu.vmdl_c similarity index 100% rename from models/new_touhou_model/reimu/reimu.vmdl_c rename to game/models/new_touhou_model/reimu/reimu.vmdl_c diff --git a/models/new_touhou_model/reimu/reimu.vmesh_c b/game/models/new_touhou_model/reimu/reimu.vmesh_c similarity index 100% rename from models/new_touhou_model/reimu/reimu.vmesh_c rename to game/models/new_touhou_model/reimu/reimu.vmesh_c diff --git a/models/new_touhou_model/reimu/reimu_b9bb1cbf.vagrp_c b/game/models/new_touhou_model/reimu/reimu_b9bb1cbf.vagrp_c similarity index 100% rename from models/new_touhou_model/reimu/reimu_b9bb1cbf.vagrp_c rename to game/models/new_touhou_model/reimu/reimu_b9bb1cbf.vagrp_c diff --git a/models/new_touhou_model/remilia/ccce6eed/attack1.vanim_c b/game/models/new_touhou_model/remilia/ccce6eed/attack1.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ccce6eed/attack1.vanim_c rename to game/models/new_touhou_model/remilia/ccce6eed/attack1.vanim_c diff --git a/models/new_touhou_model/remilia/ccce6eed/attack2.vanim_c b/game/models/new_touhou_model/remilia/ccce6eed/attack2.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ccce6eed/attack2.vanim_c rename to game/models/new_touhou_model/remilia/ccce6eed/attack2.vanim_c diff --git a/models/new_touhou_model/remilia/ccce6eed/cast1.vanim_c b/game/models/new_touhou_model/remilia/ccce6eed/cast1.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ccce6eed/cast1.vanim_c rename to game/models/new_touhou_model/remilia/ccce6eed/cast1.vanim_c diff --git a/models/new_touhou_model/remilia/ccce6eed/cast2.vanim_c b/game/models/new_touhou_model/remilia/ccce6eed/cast2.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ccce6eed/cast2.vanim_c rename to game/models/new_touhou_model/remilia/ccce6eed/cast2.vanim_c diff --git a/models/new_touhou_model/remilia/ccce6eed/cast3.vanim_c b/game/models/new_touhou_model/remilia/ccce6eed/cast3.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ccce6eed/cast3.vanim_c rename to game/models/new_touhou_model/remilia/ccce6eed/cast3.vanim_c diff --git a/models/new_touhou_model/remilia/ccce6eed/idle.vanim_c b/game/models/new_touhou_model/remilia/ccce6eed/idle.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ccce6eed/idle.vanim_c rename to game/models/new_touhou_model/remilia/ccce6eed/idle.vanim_c diff --git a/models/new_touhou_model/remilia/ccce6eed/remilia.vanim_c b/game/models/new_touhou_model/remilia/ccce6eed/remilia.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ccce6eed/remilia.vanim_c rename to game/models/new_touhou_model/remilia/ccce6eed/remilia.vanim_c diff --git a/models/new_touhou_model/remilia/ed516360/gungnir.vanim_c b/game/models/new_touhou_model/remilia/ed516360/gungnir.vanim_c similarity index 100% rename from models/new_touhou_model/remilia/ed516360/gungnir.vanim_c rename to game/models/new_touhou_model/remilia/ed516360/gungnir.vanim_c diff --git a/models/new_touhou_model/remilia/gungnir.vmdl_c b/game/models/new_touhou_model/remilia/gungnir.vmdl_c similarity index 100% rename from models/new_touhou_model/remilia/gungnir.vmdl_c rename to game/models/new_touhou_model/remilia/gungnir.vmdl_c diff --git a/models/new_touhou_model/remilia/gungnir.vmesh_c b/game/models/new_touhou_model/remilia/gungnir.vmesh_c similarity index 100% rename from models/new_touhou_model/remilia/gungnir.vmesh_c rename to game/models/new_touhou_model/remilia/gungnir.vmesh_c diff --git a/models/new_touhou_model/remilia/gungnir_ed516360.vagrp_c b/game/models/new_touhou_model/remilia/gungnir_ed516360.vagrp_c similarity index 100% rename from models/new_touhou_model/remilia/gungnir_ed516360.vagrp_c rename to game/models/new_touhou_model/remilia/gungnir_ed516360.vagrp_c diff --git a/models/new_touhou_model/remilia/remilia.vmdl_c b/game/models/new_touhou_model/remilia/remilia.vmdl_c similarity index 100% rename from models/new_touhou_model/remilia/remilia.vmdl_c rename to game/models/new_touhou_model/remilia/remilia.vmdl_c diff --git a/models/new_touhou_model/remilia/remilia.vmesh_c b/game/models/new_touhou_model/remilia/remilia.vmesh_c similarity index 100% rename from models/new_touhou_model/remilia/remilia.vmesh_c rename to game/models/new_touhou_model/remilia/remilia.vmesh_c diff --git a/models/new_touhou_model/remilia/remilia_ccce6eed.vagrp_c b/game/models/new_touhou_model/remilia/remilia_ccce6eed.vagrp_c similarity index 100% rename from models/new_touhou_model/remilia/remilia_ccce6eed.vagrp_c rename to game/models/new_touhou_model/remilia/remilia_ccce6eed.vagrp_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/attack1.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/attack1.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/attack1.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/attack1.vanim_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/attack2.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/attack2.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/attack2.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/attack2.vanim_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/cast1.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/cast1.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/cast1.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/cast1.vanim_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/cast1_2.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/cast1_2.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/cast1_2.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/cast1_2.vanim_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/cast2.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/cast2.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/cast2.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/cast2.vanim_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/cast3.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/cast3.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/cast3.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/cast3.vanim_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/cast4.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/cast4.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/cast4.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/cast4.vanim_c diff --git a/models/new_touhou_model/sakuya/0d9644b6/idle.vanim_c b/game/models/new_touhou_model/sakuya/0d9644b6/idle.vanim_c similarity index 100% rename from models/new_touhou_model/sakuya/0d9644b6/idle.vanim_c rename to game/models/new_touhou_model/sakuya/0d9644b6/idle.vanim_c diff --git a/models/new_touhou_model/sakuya/sakuya.vmdl_c b/game/models/new_touhou_model/sakuya/sakuya.vmdl_c similarity index 100% rename from models/new_touhou_model/sakuya/sakuya.vmdl_c rename to game/models/new_touhou_model/sakuya/sakuya.vmdl_c diff --git a/models/new_touhou_model/sakuya/sakuya.vmesh_c b/game/models/new_touhou_model/sakuya/sakuya.vmesh_c similarity index 100% rename from models/new_touhou_model/sakuya/sakuya.vmesh_c rename to game/models/new_touhou_model/sakuya/sakuya.vmesh_c diff --git a/models/new_touhou_model/sakuya/sakuya_0d9644b6.vagrp_c b/game/models/new_touhou_model/sakuya/sakuya_0d9644b6.vagrp_c similarity index 100% rename from models/new_touhou_model/sakuya/sakuya_0d9644b6.vagrp_c rename to game/models/new_touhou_model/sakuya/sakuya_0d9644b6.vagrp_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_attack1.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_attack1.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_attack1.vanim_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_attack2.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_attack2.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_attack2.vanim_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_cast1.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_cast1.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_cast1.vanim_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_cast2.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_cast2.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_cast2.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_cast2.vanim_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_cast3.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_cast3.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_cast3.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_cast3.vanim_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_cast4.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_cast4.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_cast4.vanim_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_cast5.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_cast5.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_cast5.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_cast5.vanim_c diff --git a/models/new_touhou_model/satori/c283cfd4/satori_idle.vanim_c b/game/models/new_touhou_model/satori/c283cfd4/satori_idle.vanim_c similarity index 100% rename from models/new_touhou_model/satori/c283cfd4/satori_idle.vanim_c rename to game/models/new_touhou_model/satori/c283cfd4/satori_idle.vanim_c diff --git a/models/new_touhou_model/satori/satori.vmdl_c b/game/models/new_touhou_model/satori/satori.vmdl_c similarity index 100% rename from models/new_touhou_model/satori/satori.vmdl_c rename to game/models/new_touhou_model/satori/satori.vmdl_c diff --git a/models/new_touhou_model/satori/satori.vmesh_c b/game/models/new_touhou_model/satori/satori.vmesh_c similarity index 100% rename from models/new_touhou_model/satori/satori.vmesh_c rename to game/models/new_touhou_model/satori/satori.vmesh_c diff --git a/models/new_touhou_model/satori/satori_c283cfd4.vagrp_c b/game/models/new_touhou_model/satori/satori_c283cfd4.vagrp_c similarity index 100% rename from models/new_touhou_model/satori/satori_c283cfd4.vagrp_c rename to game/models/new_touhou_model/satori/satori_c283cfd4.vagrp_c diff --git a/models/new_touhou_model/tenshi/3e07bb2d/tenshi.vanim_c b/game/models/new_touhou_model/tenshi/3e07bb2d/tenshi.vanim_c similarity index 100% rename from models/new_touhou_model/tenshi/3e07bb2d/tenshi.vanim_c rename to game/models/new_touhou_model/tenshi/3e07bb2d/tenshi.vanim_c diff --git a/models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack1.vanim_c b/game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack1.vanim_c rename to game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack1.vanim_c diff --git a/models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack2.vanim_c b/game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack2.vanim_c rename to game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_attack2.vanim_c diff --git a/models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast1.vanim_c b/game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast1.vanim_c rename to game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast1.vanim_c diff --git a/models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast4.vanim_c b/game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast4.vanim_c rename to game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_cast4.vanim_c diff --git a/models/new_touhou_model/tenshi/3e07bb2d/tenshi_idle.vanim_c b/game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_idle.vanim_c similarity index 100% rename from models/new_touhou_model/tenshi/3e07bb2d/tenshi_idle.vanim_c rename to game/models/new_touhou_model/tenshi/3e07bb2d/tenshi_idle.vanim_c diff --git a/models/new_touhou_model/tenshi/tenshi.vmdl_c b/game/models/new_touhou_model/tenshi/tenshi.vmdl_c similarity index 100% rename from models/new_touhou_model/tenshi/tenshi.vmdl_c rename to game/models/new_touhou_model/tenshi/tenshi.vmdl_c diff --git a/models/new_touhou_model/tenshi/tenshi.vmesh_c b/game/models/new_touhou_model/tenshi/tenshi.vmesh_c similarity index 100% rename from models/new_touhou_model/tenshi/tenshi.vmesh_c rename to game/models/new_touhou_model/tenshi/tenshi.vmesh_c diff --git a/models/new_touhou_model/tenshi/tenshi_3e07bb2d.vagrp_c b/game/models/new_touhou_model/tenshi/tenshi_3e07bb2d.vagrp_c similarity index 100% rename from models/new_touhou_model/tenshi/tenshi_3e07bb2d.vagrp_c rename to game/models/new_touhou_model/tenshi/tenshi_3e07bb2d.vagrp_c diff --git a/models/new_touhou_model/youmu/81fa2138/youmu_ghost_idle.vanim_c b/game/models/new_touhou_model/youmu/81fa2138/youmu_ghost_idle.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/81fa2138/youmu_ghost_idle.vanim_c rename to game/models/new_touhou_model/youmu/81fa2138/youmu_ghost_idle.vanim_c diff --git a/models/new_touhou_model/youmu/987a8d26/youmu.vanim_c b/game/models/new_touhou_model/youmu/987a8d26/youmu.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/987a8d26/youmu.vanim_c rename to game/models/new_touhou_model/youmu/987a8d26/youmu.vanim_c diff --git a/models/new_touhou_model/youmu/987a8d26/youmu_attack1.vanim_c b/game/models/new_touhou_model/youmu/987a8d26/youmu_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/987a8d26/youmu_attack1.vanim_c rename to game/models/new_touhou_model/youmu/987a8d26/youmu_attack1.vanim_c diff --git a/models/new_touhou_model/youmu/987a8d26/youmu_attack2.vanim_c b/game/models/new_touhou_model/youmu/987a8d26/youmu_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/987a8d26/youmu_attack2.vanim_c rename to game/models/new_touhou_model/youmu/987a8d26/youmu_attack2.vanim_c diff --git a/models/new_touhou_model/youmu/987a8d26/youmu_cast1.vanim_c b/game/models/new_touhou_model/youmu/987a8d26/youmu_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/987a8d26/youmu_cast1.vanim_c rename to game/models/new_touhou_model/youmu/987a8d26/youmu_cast1.vanim_c diff --git a/models/new_touhou_model/youmu/987a8d26/youmu_cast4.vanim_c b/game/models/new_touhou_model/youmu/987a8d26/youmu_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/987a8d26/youmu_cast4.vanim_c rename to game/models/new_touhou_model/youmu/987a8d26/youmu_cast4.vanim_c diff --git a/models/new_touhou_model/youmu/987a8d26/youmu_ghost_idle.vanim_c b/game/models/new_touhou_model/youmu/987a8d26/youmu_ghost_idle.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/987a8d26/youmu_ghost_idle.vanim_c rename to game/models/new_touhou_model/youmu/987a8d26/youmu_ghost_idle.vanim_c diff --git a/models/new_touhou_model/youmu/987a8d26/youmu_idle.vanim_c b/game/models/new_touhou_model/youmu/987a8d26/youmu_idle.vanim_c similarity index 100% rename from models/new_touhou_model/youmu/987a8d26/youmu_idle.vanim_c rename to game/models/new_touhou_model/youmu/987a8d26/youmu_idle.vanim_c diff --git a/models/new_touhou_model/youmu/youmu.vmdl_c b/game/models/new_touhou_model/youmu/youmu.vmdl_c similarity index 100% rename from models/new_touhou_model/youmu/youmu.vmdl_c rename to game/models/new_touhou_model/youmu/youmu.vmdl_c diff --git a/models/new_touhou_model/youmu/youmu.vmesh_c b/game/models/new_touhou_model/youmu/youmu.vmesh_c similarity index 100% rename from models/new_touhou_model/youmu/youmu.vmesh_c rename to game/models/new_touhou_model/youmu/youmu.vmesh_c diff --git a/models/new_touhou_model/youmu/youmu_987a8d26.vagrp_c b/game/models/new_touhou_model/youmu/youmu_987a8d26.vagrp_c similarity index 100% rename from models/new_touhou_model/youmu/youmu_987a8d26.vagrp_c rename to game/models/new_touhou_model/youmu/youmu_987a8d26.vagrp_c diff --git a/models/new_touhou_model/youmu/youmu_ghost_idle.vmdl_c b/game/models/new_touhou_model/youmu/youmu_ghost_idle.vmdl_c similarity index 100% rename from models/new_touhou_model/youmu/youmu_ghost_idle.vmdl_c rename to game/models/new_touhou_model/youmu/youmu_ghost_idle.vmdl_c diff --git a/models/new_touhou_model/youmu/youmu_ghost_idle.vmesh_c b/game/models/new_touhou_model/youmu/youmu_ghost_idle.vmesh_c similarity index 100% rename from models/new_touhou_model/youmu/youmu_ghost_idle.vmesh_c rename to game/models/new_touhou_model/youmu/youmu_ghost_idle.vmesh_c diff --git a/models/new_touhou_model/youmu/youmu_ghost_idle_81fa2138.vagrp_c b/game/models/new_touhou_model/youmu/youmu_ghost_idle_81fa2138.vagrp_c similarity index 100% rename from models/new_touhou_model/youmu/youmu_ghost_idle_81fa2138.vagrp_c rename to game/models/new_touhou_model/youmu/youmu_ghost_idle_81fa2138.vagrp_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari.vanim_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari_attack1.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari_attack1.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari_attack1.vanim_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari_attack2.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari_attack2.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari_attack2.vanim_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari_cast1.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari_cast1.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari_cast1.vanim_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari_cast2.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari_cast2.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari_cast2.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari_cast2.vanim_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari_cast3.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari_cast3.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari_cast3.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari_cast3.vanim_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari_cast4.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari_cast4.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari_cast4.vanim_c diff --git a/models/new_touhou_model/yukari/d70f67dd/yukari_idle.vanim_c b/game/models/new_touhou_model/yukari/d70f67dd/yukari_idle.vanim_c similarity index 100% rename from models/new_touhou_model/yukari/d70f67dd/yukari_idle.vanim_c rename to game/models/new_touhou_model/yukari/d70f67dd/yukari_idle.vanim_c diff --git a/models/new_touhou_model/yukari/yukari.vmdl_c b/game/models/new_touhou_model/yukari/yukari.vmdl_c similarity index 100% rename from models/new_touhou_model/yukari/yukari.vmdl_c rename to game/models/new_touhou_model/yukari/yukari.vmdl_c diff --git a/models/new_touhou_model/yukari/yukari.vmesh_c b/game/models/new_touhou_model/yukari/yukari.vmesh_c similarity index 100% rename from models/new_touhou_model/yukari/yukari.vmesh_c rename to game/models/new_touhou_model/yukari/yukari.vmesh_c diff --git a/models/new_touhou_model/yukari/yukari_d70f67dd.vagrp_c b/game/models/new_touhou_model/yukari/yukari_d70f67dd.vagrp_c similarity index 100% rename from models/new_touhou_model/yukari/yukari_d70f67dd.vagrp_c rename to game/models/new_touhou_model/yukari/yukari_d70f67dd.vagrp_c diff --git a/models/new_touhou_model/yuuka/4c48dc12/yuuka.vanim_c b/game/models/new_touhou_model/yuuka/4c48dc12/yuuka.vanim_c similarity index 100% rename from models/new_touhou_model/yuuka/4c48dc12/yuuka.vanim_c rename to game/models/new_touhou_model/yuuka/4c48dc12/yuuka.vanim_c diff --git a/models/new_touhou_model/yuuka/4c48dc12/yuuka_attack1.vanim_c b/game/models/new_touhou_model/yuuka/4c48dc12/yuuka_attack1.vanim_c similarity index 100% rename from models/new_touhou_model/yuuka/4c48dc12/yuuka_attack1.vanim_c rename to game/models/new_touhou_model/yuuka/4c48dc12/yuuka_attack1.vanim_c diff --git a/models/new_touhou_model/yuuka/4c48dc12/yuuka_attack2.vanim_c b/game/models/new_touhou_model/yuuka/4c48dc12/yuuka_attack2.vanim_c similarity index 100% rename from models/new_touhou_model/yuuka/4c48dc12/yuuka_attack2.vanim_c rename to game/models/new_touhou_model/yuuka/4c48dc12/yuuka_attack2.vanim_c diff --git a/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast1.vanim_c b/game/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast1.vanim_c similarity index 100% rename from models/new_touhou_model/yuuka/4c48dc12/yuuka_cast1.vanim_c rename to game/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast1.vanim_c diff --git a/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast3.vanim_c b/game/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast3.vanim_c similarity index 100% rename from models/new_touhou_model/yuuka/4c48dc12/yuuka_cast3.vanim_c rename to game/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast3.vanim_c diff --git a/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast4.vanim_c b/game/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast4.vanim_c similarity index 100% rename from models/new_touhou_model/yuuka/4c48dc12/yuuka_cast4.vanim_c rename to game/models/new_touhou_model/yuuka/4c48dc12/yuuka_cast4.vanim_c diff --git a/models/new_touhou_model/yuuka/4c48dc12/yuuka_idle.vanim_c b/game/models/new_touhou_model/yuuka/4c48dc12/yuuka_idle.vanim_c similarity index 100% rename from models/new_touhou_model/yuuka/4c48dc12/yuuka_idle.vanim_c rename to game/models/new_touhou_model/yuuka/4c48dc12/yuuka_idle.vanim_c diff --git a/models/new_touhou_model/yuuka/yuuka.vmdl_c b/game/models/new_touhou_model/yuuka/yuuka.vmdl_c similarity index 100% rename from models/new_touhou_model/yuuka/yuuka.vmdl_c rename to game/models/new_touhou_model/yuuka/yuuka.vmdl_c diff --git a/models/new_touhou_model/yuuka/yuuka.vmesh_c b/game/models/new_touhou_model/yuuka/yuuka.vmesh_c similarity index 100% rename from models/new_touhou_model/yuuka/yuuka.vmesh_c rename to game/models/new_touhou_model/yuuka/yuuka.vmesh_c diff --git a/models/new_touhou_model/yuuka/yuuka_4c48dc12.vagrp_c b/game/models/new_touhou_model/yuuka/yuuka_4c48dc12.vagrp_c similarity index 100% rename from models/new_touhou_model/yuuka/yuuka_4c48dc12.vagrp_c rename to game/models/new_touhou_model/yuuka/yuuka_4c48dc12.vagrp_c diff --git a/models/other/paws/9e17cb5a/1.vanim_c b/game/models/other/paws/9e17cb5a/1.vanim_c similarity index 100% rename from models/other/paws/9e17cb5a/1.vanim_c rename to game/models/other/paws/9e17cb5a/1.vanim_c diff --git a/models/other/paws/9e17cb5a/paws.vanim_c b/game/models/other/paws/9e17cb5a/paws.vanim_c similarity index 100% rename from models/other/paws/9e17cb5a/paws.vanim_c rename to game/models/other/paws/9e17cb5a/paws.vanim_c diff --git a/models/other/paws/9e17cb5a/paws_idle.vanim_c b/game/models/other/paws/9e17cb5a/paws_idle.vanim_c similarity index 100% rename from models/other/paws/9e17cb5a/paws_idle.vanim_c rename to game/models/other/paws/9e17cb5a/paws_idle.vanim_c diff --git a/models/other/paws/9e17cb5a/paws_nie.vanim_c b/game/models/other/paws/9e17cb5a/paws_nie.vanim_c similarity index 100% rename from models/other/paws/9e17cb5a/paws_nie.vanim_c rename to game/models/other/paws/9e17cb5a/paws_nie.vanim_c diff --git a/models/other/paws/9e17cb5a/paws_niebao.vanim_c b/game/models/other/paws/9e17cb5a/paws_niebao.vanim_c similarity index 100% rename from models/other/paws/9e17cb5a/paws_niebao.vanim_c rename to game/models/other/paws/9e17cb5a/paws_niebao.vanim_c diff --git a/models/other/paws/9e17cb5a/paws_zhuaqu.vanim_c b/game/models/other/paws/9e17cb5a/paws_zhuaqu.vanim_c similarity index 100% rename from models/other/paws/9e17cb5a/paws_zhuaqu.vanim_c rename to game/models/other/paws/9e17cb5a/paws_zhuaqu.vanim_c diff --git a/models/other/paws/paws.vmdl_c b/game/models/other/paws/paws.vmdl_c similarity index 100% rename from models/other/paws/paws.vmdl_c rename to game/models/other/paws/paws.vmdl_c diff --git a/models/other/paws/paws.vmesh_c b/game/models/other/paws/paws.vmesh_c similarity index 100% rename from models/other/paws/paws.vmesh_c rename to game/models/other/paws/paws.vmesh_c diff --git a/models/other/paws/paws_9e17cb5a.vagrp_c b/game/models/other/paws/paws_9e17cb5a.vagrp_c similarity index 100% rename from models/other/paws/paws_9e17cb5a.vagrp_c rename to game/models/other/paws/paws_9e17cb5a.vagrp_c diff --git a/models/other/tram_1/tram_1.vmdl_c b/game/models/other/tram_1/tram_1.vmdl_c similarity index 100% rename from models/other/tram_1/tram_1.vmdl_c rename to game/models/other/tram_1/tram_1.vmdl_c diff --git a/models/other/tram_1/tram_1.vmesh_c b/game/models/other/tram_1/tram_1.vmesh_c similarity index 100% rename from models/other/tram_1/tram_1.vmesh_c rename to game/models/other/tram_1/tram_1.vmesh_c diff --git a/models/qie/color1_jpg_adb56c16.vtex_c b/game/models/qie/color1_jpg_adb56c16.vtex_c similarity index 100% rename from models/qie/color1_jpg_adb56c16.vtex_c rename to game/models/qie/color1_jpg_adb56c16.vtex_c diff --git a/models/qie/color2_jpg_c5093a7.vtex_c b/game/models/qie/color2_jpg_c5093a7.vtex_c similarity index 100% rename from models/qie/color2_jpg_c5093a7.vtex_c rename to game/models/qie/color2_jpg_c5093a7.vtex_c diff --git a/models/qie/color2_jpg_e0427587.vtex_c b/game/models/qie/color2_jpg_e0427587.vtex_c similarity index 100% rename from models/qie/color2_jpg_e0427587.vtex_c rename to game/models/qie/color2_jpg_e0427587.vtex_c diff --git a/models/qie/color3_jpg_3200044.vtex_c b/game/models/qie/color3_jpg_3200044.vtex_c similarity index 100% rename from models/qie/color3_jpg_3200044.vtex_c rename to game/models/qie/color3_jpg_3200044.vtex_c diff --git a/models/qie/color3_jpg_a0263e47.vtex_c b/game/models/qie/color3_jpg_a0263e47.vtex_c similarity index 100% rename from models/qie/color3_jpg_a0263e47.vtex_c rename to game/models/qie/color3_jpg_a0263e47.vtex_c diff --git a/models/qie/color_jpg_6b17d528.vtex_c b/game/models/qie/color_jpg_6b17d528.vtex_c similarity index 100% rename from models/qie/color_jpg_6b17d528.vtex_c rename to game/models/qie/color_jpg_6b17d528.vtex_c diff --git a/models/qie/color_jpg_b4042fc2.vtex_c b/game/models/qie/color_jpg_b4042fc2.vtex_c similarity index 100% rename from models/qie/color_jpg_b4042fc2.vtex_c rename to game/models/qie/color_jpg_b4042fc2.vtex_c diff --git a/models/qie/color_jpg_ec24fef2.vtex_c b/game/models/qie/color_jpg_ec24fef2.vtex_c similarity index 100% rename from models/qie/color_jpg_ec24fef2.vtex_c rename to game/models/qie/color_jpg_ec24fef2.vtex_c diff --git a/models/qie/dc799c0c/dead.vanim_c b/game/models/qie/dc799c0c/dead.vanim_c similarity index 100% rename from models/qie/dc799c0c/dead.vanim_c rename to game/models/qie/dc799c0c/dead.vanim_c diff --git a/models/qie/dc799c0c/idle.vanim_c b/game/models/qie/dc799c0c/idle.vanim_c similarity index 100% rename from models/qie/dc799c0c/idle.vanim_c rename to game/models/qie/dc799c0c/idle.vanim_c diff --git a/models/qie/dc799c0c/run.vanim_c b/game/models/qie/dc799c0c/run.vanim_c similarity index 100% rename from models/qie/dc799c0c/run.vanim_c rename to game/models/qie/dc799c0c/run.vanim_c diff --git a/models/qie/dc799c0c/speaw.vanim_c b/game/models/qie/dc799c0c/speaw.vanim_c similarity index 100% rename from models/qie/dc799c0c/speaw.vanim_c rename to game/models/qie/dc799c0c/speaw.vanim_c diff --git a/models/qie/ed945614/dead.vanim_c b/game/models/qie/ed945614/dead.vanim_c similarity index 100% rename from models/qie/ed945614/dead.vanim_c rename to game/models/qie/ed945614/dead.vanim_c diff --git a/models/qie/ed945614/fly.vanim_c b/game/models/qie/ed945614/fly.vanim_c similarity index 100% rename from models/qie/ed945614/fly.vanim_c rename to game/models/qie/ed945614/fly.vanim_c diff --git a/models/qie/ed945614/idle.vanim_c b/game/models/qie/ed945614/idle.vanim_c similarity index 100% rename from models/qie/ed945614/idle.vanim_c rename to game/models/qie/ed945614/idle.vanim_c diff --git a/models/qie/ed945614/speaw.vanim_c b/game/models/qie/ed945614/speaw.vanim_c similarity index 100% rename from models/qie/ed945614/speaw.vanim_c rename to game/models/qie/ed945614/speaw.vanim_c diff --git a/models/qie/fly.vmesh_c b/game/models/qie/fly.vmesh_c similarity index 100% rename from models/qie/fly.vmesh_c rename to game/models/qie/fly.vmesh_c diff --git a/models/qie/idle.vmesh_c b/game/models/qie/idle.vmesh_c similarity index 100% rename from models/qie/idle.vmesh_c rename to game/models/qie/idle.vmesh_c diff --git a/models/qie/qie.vmdl_c b/game/models/qie/qie.vmdl_c similarity index 100% rename from models/qie/qie.vmdl_c rename to game/models/qie/qie.vmdl_c diff --git a/models/qie/qie_dc799c0c.vagrp_c b/game/models/qie/qie_dc799c0c.vagrp_c similarity index 100% rename from models/qie/qie_dc799c0c.vagrp_c rename to game/models/qie/qie_dc799c0c.vagrp_c diff --git a/models/qie/qie_flying.vmdl_c b/game/models/qie/qie_flying.vmdl_c similarity index 100% rename from models/qie/qie_flying.vmdl_c rename to game/models/qie/qie_flying.vmdl_c diff --git a/models/qie/qie_flying_ed945614.vagrp_c b/game/models/qie/qie_flying_ed945614.vagrp_c similarity index 100% rename from models/qie/qie_flying_ed945614.vagrp_c rename to game/models/qie/qie_flying_ed945614.vagrp_c diff --git a/models/qie/shenti.vmat_c b/game/models/qie/shenti.vmat_c similarity index 100% rename from models/qie/shenti.vmat_c rename to game/models/qie/shenti.vmat_c diff --git a/models/qie/shenti2.vmat_c b/game/models/qie/shenti2.vmat_c similarity index 100% rename from models/qie/shenti2.vmat_c rename to game/models/qie/shenti2.vmat_c diff --git a/models/qie/shentix.vmat_c b/game/models/qie/shentix.vmat_c similarity index 100% rename from models/qie/shentix.vmat_c rename to game/models/qie/shentix.vmat_c diff --git a/models/qie/shentiy.vmat_c b/game/models/qie/shentiy.vmat_c similarity index 100% rename from models/qie/shentiy.vmat_c rename to game/models/qie/shentiy.vmat_c diff --git a/models/qie/shentz.vmat_c b/game/models/qie/shentz.vmat_c similarity index 100% rename from models/qie/shentz.vmat_c rename to game/models/qie/shentz.vmat_c diff --git a/models/qie/toukui.vmat_c b/game/models/qie/toukui.vmat_c similarity index 100% rename from models/qie/toukui.vmat_c rename to game/models/qie/toukui.vmat_c diff --git a/models/reimu/onmyougyoku.vmdl_c b/game/models/reimu/onmyougyoku.vmdl_c similarity index 100% rename from models/reimu/onmyougyoku.vmdl_c rename to game/models/reimu/onmyougyoku.vmdl_c diff --git a/models/reimu/onmyougyoku.vmesh_c b/game/models/reimu/onmyougyoku.vmesh_c similarity index 100% rename from models/reimu/onmyougyoku.vmesh_c rename to game/models/reimu/onmyougyoku.vmesh_c diff --git a/models/shinki/03ed6df9/attack1.vanim_c b/game/models/shinki/03ed6df9/attack1.vanim_c similarity index 100% rename from models/shinki/03ed6df9/attack1.vanim_c rename to game/models/shinki/03ed6df9/attack1.vanim_c diff --git a/models/shinki/03ed6df9/attack2.vanim_c b/game/models/shinki/03ed6df9/attack2.vanim_c similarity index 100% rename from models/shinki/03ed6df9/attack2.vanim_c rename to game/models/shinki/03ed6df9/attack2.vanim_c diff --git a/models/shinki/03ed6df9/bingpose.vanim_c b/game/models/shinki/03ed6df9/bingpose.vanim_c similarity index 100% rename from models/shinki/03ed6df9/bingpose.vanim_c rename to game/models/shinki/03ed6df9/bingpose.vanim_c diff --git a/models/shinki/03ed6df9/capture.vanim_c b/game/models/shinki/03ed6df9/capture.vanim_c similarity index 100% rename from models/shinki/03ed6df9/capture.vanim_c rename to game/models/shinki/03ed6df9/capture.vanim_c diff --git a/models/shinki/03ed6df9/cast1.vanim_c b/game/models/shinki/03ed6df9/cast1.vanim_c similarity index 100% rename from models/shinki/03ed6df9/cast1.vanim_c rename to game/models/shinki/03ed6df9/cast1.vanim_c diff --git a/models/shinki/03ed6df9/cast2.vanim_c b/game/models/shinki/03ed6df9/cast2.vanim_c similarity index 100% rename from models/shinki/03ed6df9/cast2.vanim_c rename to game/models/shinki/03ed6df9/cast2.vanim_c diff --git a/models/shinki/03ed6df9/cast3.vanim_c b/game/models/shinki/03ed6df9/cast3.vanim_c similarity index 100% rename from models/shinki/03ed6df9/cast3.vanim_c rename to game/models/shinki/03ed6df9/cast3.vanim_c diff --git a/models/shinki/03ed6df9/cast4.vanim_c b/game/models/shinki/03ed6df9/cast4.vanim_c similarity index 100% rename from models/shinki/03ed6df9/cast4.vanim_c rename to game/models/shinki/03ed6df9/cast4.vanim_c diff --git a/models/shinki/03ed6df9/die.vanim_c b/game/models/shinki/03ed6df9/die.vanim_c similarity index 100% rename from models/shinki/03ed6df9/die.vanim_c rename to game/models/shinki/03ed6df9/die.vanim_c diff --git a/models/shinki/03ed6df9/disabled.vanim_c b/game/models/shinki/03ed6df9/disabled.vanim_c similarity index 100% rename from models/shinki/03ed6df9/disabled.vanim_c rename to game/models/shinki/03ed6df9/disabled.vanim_c diff --git a/models/shinki/03ed6df9/idle.vanim_c b/game/models/shinki/03ed6df9/idle.vanim_c similarity index 100% rename from models/shinki/03ed6df9/idle.vanim_c rename to game/models/shinki/03ed6df9/idle.vanim_c diff --git a/models/shinki/03ed6df9/run.vanim_c b/game/models/shinki/03ed6df9/run.vanim_c similarity index 100% rename from models/shinki/03ed6df9/run.vanim_c rename to game/models/shinki/03ed6df9/run.vanim_c diff --git a/models/shinki/shinki.vmdl_c b/game/models/shinki/shinki.vmdl_c similarity index 100% rename from models/shinki/shinki.vmdl_c rename to game/models/shinki/shinki.vmdl_c diff --git a/models/shinki/shinki.vmesh_c b/game/models/shinki/shinki.vmesh_c similarity index 100% rename from models/shinki/shinki.vmesh_c rename to game/models/shinki/shinki.vmesh_c diff --git a/models/shinki/shinki.vmorf_c b/game/models/shinki/shinki.vmorf_c similarity index 100% rename from models/shinki/shinki.vmorf_c rename to game/models/shinki/shinki.vmorf_c diff --git a/models/shinki/shinki/blousea1.vmat_c b/game/models/shinki/shinki/blousea1.vmat_c similarity index 100% rename from models/shinki/shinki/blousea1.vmat_c rename to game/models/shinki/shinki/blousea1.vmat_c diff --git a/models/shinki/shinki/blousea1_png_b1aa2b8a.vtex_c b/game/models/shinki/shinki/blousea1_png_b1aa2b8a.vtex_c similarity index 100% rename from models/shinki/shinki/blousea1_png_b1aa2b8a.vtex_c rename to game/models/shinki/shinki/blousea1_png_b1aa2b8a.vtex_c diff --git a/models/shinki/shinki/cloth2.vmat_c b/game/models/shinki/shinki/cloth2.vmat_c similarity index 100% rename from models/shinki/shinki/cloth2.vmat_c rename to game/models/shinki/shinki/cloth2.vmat_c diff --git a/models/shinki/shinki/cloth2_png_ce24d72.vtex_c b/game/models/shinki/shinki/cloth2_png_ce24d72.vtex_c similarity index 100% rename from models/shinki/shinki/cloth2_png_ce24d72.vtex_c rename to game/models/shinki/shinki/cloth2_png_ce24d72.vtex_c diff --git a/models/shinki/shinki/dy01.vmat_c b/game/models/shinki/shinki/dy01.vmat_c similarity index 100% rename from models/shinki/shinki/dy01.vmat_c rename to game/models/shinki/shinki/dy01.vmat_c diff --git a/models/shinki/shinki/dy01_png_62b3b2de.vtex_c b/game/models/shinki/shinki/dy01_png_62b3b2de.vtex_c similarity index 100% rename from models/shinki/shinki/dy01_png_62b3b2de.vtex_c rename to game/models/shinki/shinki/dy01_png_62b3b2de.vtex_c diff --git a/models/shinki/shinki/dy02.vmat_c b/game/models/shinki/shinki/dy02.vmat_c similarity index 100% rename from models/shinki/shinki/dy02.vmat_c rename to game/models/shinki/shinki/dy02.vmat_c diff --git a/models/shinki/shinki/dy02_png_b2fb3165.vtex_c b/game/models/shinki/shinki/dy02_png_b2fb3165.vtex_c similarity index 100% rename from models/shinki/shinki/dy02_png_b2fb3165.vtex_c rename to game/models/shinki/shinki/dy02_png_b2fb3165.vtex_c diff --git a/models/shinki/shinki/fub.vmat_c b/game/models/shinki/shinki/fub.vmat_c similarity index 100% rename from models/shinki/shinki/fub.vmat_c rename to game/models/shinki/shinki/fub.vmat_c diff --git a/models/shinki/shinki/fub_png_bc3ec2b7.vtex_c b/game/models/shinki/shinki/fub_png_bc3ec2b7.vtex_c similarity index 100% rename from models/shinki/shinki/fub_png_bc3ec2b7.vtex_c rename to game/models/shinki/shinki/fub_png_bc3ec2b7.vtex_c diff --git a/models/shinki/shinki/hair_d.vmat_c b/game/models/shinki/shinki/hair_d.vmat_c similarity index 100% rename from models/shinki/shinki/hair_d.vmat_c rename to game/models/shinki/shinki/hair_d.vmat_c diff --git a/models/shinki/shinki/hair_d_png_63bff560.vtex_c b/game/models/shinki/shinki/hair_d_png_63bff560.vtex_c similarity index 100% rename from models/shinki/shinki/hair_d_png_63bff560.vtex_c rename to game/models/shinki/shinki/hair_d_png_63bff560.vtex_c diff --git a/models/shinki/shinki/koishi_face.vmat_c b/game/models/shinki/shinki/koishi_face.vmat_c similarity index 100% rename from models/shinki/shinki/koishi_face.vmat_c rename to game/models/shinki/shinki/koishi_face.vmat_c diff --git a/models/shinki/shinki/koishi_face_png_e250bdd1.vtex_c b/game/models/shinki/shinki/koishi_face_png_e250bdd1.vtex_c similarity index 100% rename from models/shinki/shinki/koishi_face_png_e250bdd1.vtex_c rename to game/models/shinki/shinki/koishi_face_png_e250bdd1.vtex_c diff --git a/models/shinki/shinki/koishi_face_png_efb01f9e.vtex_c b/game/models/shinki/shinki/koishi_face_png_efb01f9e.vtex_c similarity index 100% rename from models/shinki/shinki/koishi_face_png_efb01f9e.vtex_c rename to game/models/shinki/shinki/koishi_face_png_efb01f9e.vtex_c diff --git a/models/shinki/shinki/mcbn.vmat_c b/game/models/shinki/shinki/mcbn.vmat_c similarity index 100% rename from models/shinki/shinki/mcbn.vmat_c rename to game/models/shinki/shinki/mcbn.vmat_c diff --git a/models/shinki/shinki/mcbn_png_6057e8e6.vtex_c b/game/models/shinki/shinki/mcbn_png_6057e8e6.vtex_c similarity index 100% rename from models/shinki/shinki/mcbn_png_6057e8e6.vtex_c rename to game/models/shinki/shinki/mcbn_png_6057e8e6.vtex_c diff --git a/models/shinki/shinki/null.vmat_c b/game/models/shinki/shinki/null.vmat_c similarity index 100% rename from models/shinki/shinki/null.vmat_c rename to game/models/shinki/shinki/null.vmat_c diff --git a/models/shinki/shinki/skirt.vmat_c b/game/models/shinki/shinki/skirt.vmat_c similarity index 100% rename from models/shinki/shinki/skirt.vmat_c rename to game/models/shinki/shinki/skirt.vmat_c diff --git a/models/shinki/shinki/skirt_png_687915ec.vtex_c b/game/models/shinki/shinki/skirt_png_687915ec.vtex_c similarity index 100% rename from models/shinki/shinki/skirt_png_687915ec.vtex_c rename to game/models/shinki/shinki/skirt_png_687915ec.vtex_c diff --git a/models/shinki/shinki/tex2_w.vmat_c b/game/models/shinki/shinki/tex2_w.vmat_c similarity index 100% rename from models/shinki/shinki/tex2_w.vmat_c rename to game/models/shinki/shinki/tex2_w.vmat_c diff --git a/models/shinki/shinki/tex2_w_png_6aa622f2.vtex_c b/game/models/shinki/shinki/tex2_w_png_6aa622f2.vtex_c similarity index 100% rename from models/shinki/shinki/tex2_w_png_6aa622f2.vtex_c rename to game/models/shinki/shinki/tex2_w_png_6aa622f2.vtex_c diff --git a/models/shinki/shinki/texture6.vmat_c b/game/models/shinki/shinki/texture6.vmat_c similarity index 100% rename from models/shinki/shinki/texture6.vmat_c rename to game/models/shinki/shinki/texture6.vmat_c diff --git a/models/shinki/shinki/texture6_png_88ea66d0.vtex_c b/game/models/shinki/shinki/texture6_png_88ea66d0.vtex_c similarity index 100% rename from models/shinki/shinki/texture6_png_88ea66d0.vtex_c rename to game/models/shinki/shinki/texture6_png_88ea66d0.vtex_c diff --git a/models/shinki/shinki/tr03.vmat_c b/game/models/shinki/shinki/tr03.vmat_c similarity index 100% rename from models/shinki/shinki/tr03.vmat_c rename to game/models/shinki/shinki/tr03.vmat_c diff --git a/models/shinki/shinki/tr03_png_8ac4ad9.vtex_c b/game/models/shinki/shinki/tr03_png_8ac4ad9.vtex_c similarity index 100% rename from models/shinki/shinki/tr03_png_8ac4ad9.vtex_c rename to game/models/shinki/shinki/tr03_png_8ac4ad9.vtex_c diff --git a/models/shinki/shinki_03ed6df9.vagrp_c b/game/models/shinki/shinki_03ed6df9.vagrp_c similarity index 100% rename from models/shinki/shinki_03ed6df9.vagrp_c rename to game/models/shinki/shinki_03ed6df9.vagrp_c diff --git a/models/shinki/shinki_vmorf.vtex_c b/game/models/shinki/shinki_vmorf.vtex_c similarity index 100% rename from models/shinki/shinki_vmorf.vtex_c rename to game/models/shinki/shinki_vmorf.vtex_c diff --git a/models/shudaixiong/mask/jianpan/jianpan_color_tga_b66704e0.vtex_c b/game/models/shudaixiong/mask/jianpan/jianpan_color_tga_b66704e0.vtex_c similarity index 100% rename from models/shudaixiong/mask/jianpan/jianpan_color_tga_b66704e0.vtex_c rename to game/models/shudaixiong/mask/jianpan/jianpan_color_tga_b66704e0.vtex_c diff --git a/models/shudaixiong/mask/jianpan/jianpan_detailmask_tga_b766f570.vtex_c b/game/models/shudaixiong/mask/jianpan/jianpan_detailmask_tga_b766f570.vtex_c similarity index 100% rename from models/shudaixiong/mask/jianpan/jianpan_detailmask_tga_b766f570.vtex_c rename to game/models/shudaixiong/mask/jianpan/jianpan_detailmask_tga_b766f570.vtex_c diff --git a/models/shudaixiong/mask/jianpan/jianpan_normal_tga_be1cf31.vtex_c b/game/models/shudaixiong/mask/jianpan/jianpan_normal_tga_be1cf31.vtex_c similarity index 100% rename from models/shudaixiong/mask/jianpan/jianpan_normal_tga_be1cf31.vtex_c rename to game/models/shudaixiong/mask/jianpan/jianpan_normal_tga_be1cf31.vtex_c diff --git a/models/shudaixiong/mask/jianpan/jianpan_specmask_tga_746f9612.vtex_c b/game/models/shudaixiong/mask/jianpan/jianpan_specmask_tga_746f9612.vtex_c similarity index 100% rename from models/shudaixiong/mask/jianpan/jianpan_specmask_tga_746f9612.vtex_c rename to game/models/shudaixiong/mask/jianpan/jianpan_specmask_tga_746f9612.vtex_c diff --git a/models/shudaixiong/mask/naica/naica.vmat_c b/game/models/shudaixiong/mask/naica/naica.vmat_c similarity index 100% rename from models/shudaixiong/mask/naica/naica.vmat_c rename to game/models/shudaixiong/mask/naica/naica.vmat_c diff --git a/models/shudaixiong/mask/naica/naica_color_tga_281c7ef3.vtex_c b/game/models/shudaixiong/mask/naica/naica_color_tga_281c7ef3.vtex_c similarity index 100% rename from models/shudaixiong/mask/naica/naica_color_tga_281c7ef3.vtex_c rename to game/models/shudaixiong/mask/naica/naica_color_tga_281c7ef3.vtex_c diff --git a/models/shudaixiong/mask/naica/naica_detailmask_tga_7ddb99c6.vtex_c b/game/models/shudaixiong/mask/naica/naica_detailmask_tga_7ddb99c6.vtex_c similarity index 100% rename from models/shudaixiong/mask/naica/naica_detailmask_tga_7ddb99c6.vtex_c rename to game/models/shudaixiong/mask/naica/naica_detailmask_tga_7ddb99c6.vtex_c diff --git a/models/shudaixiong/mask/naica/naica_normal_tga_79f99357.vtex_c b/game/models/shudaixiong/mask/naica/naica_normal_tga_79f99357.vtex_c similarity index 100% rename from models/shudaixiong/mask/naica/naica_normal_tga_79f99357.vtex_c rename to game/models/shudaixiong/mask/naica/naica_normal_tga_79f99357.vtex_c diff --git a/models/shudaixiong/mask/naica/naica_specmask_tga_34acb5f3.vtex_c b/game/models/shudaixiong/mask/naica/naica_specmask_tga_34acb5f3.vtex_c similarity index 100% rename from models/shudaixiong/mask/naica/naica_specmask_tga_34acb5f3.vtex_c rename to game/models/shudaixiong/mask/naica/naica_specmask_tga_34acb5f3.vtex_c diff --git a/models/shudaixiong/mask/shubiao/shubiao_color_tga_2fea90c8.vtex_c b/game/models/shudaixiong/mask/shubiao/shubiao_color_tga_2fea90c8.vtex_c similarity index 100% rename from models/shudaixiong/mask/shubiao/shubiao_color_tga_2fea90c8.vtex_c rename to game/models/shudaixiong/mask/shubiao/shubiao_color_tga_2fea90c8.vtex_c diff --git a/models/shudaixiong/mask/shubiao/shubiao_default_mask_png_f7c01ec7.vtex_c b/game/models/shudaixiong/mask/shubiao/shubiao_default_mask_png_f7c01ec7.vtex_c similarity index 100% rename from models/shudaixiong/mask/shubiao/shubiao_default_mask_png_f7c01ec7.vtex_c rename to game/models/shudaixiong/mask/shubiao/shubiao_default_mask_png_f7c01ec7.vtex_c diff --git a/models/shudaixiong/mask/shubiao/shubiao_detailmask_tga_449f93bd.vtex_c b/game/models/shudaixiong/mask/shubiao/shubiao_detailmask_tga_449f93bd.vtex_c similarity index 100% rename from models/shudaixiong/mask/shubiao/shubiao_detailmask_tga_449f93bd.vtex_c rename to game/models/shudaixiong/mask/shubiao/shubiao_detailmask_tga_449f93bd.vtex_c diff --git a/models/shudaixiong/mask/shubiao/shubiao_normal_tga_17a936bc.vtex_c b/game/models/shudaixiong/mask/shubiao/shubiao_normal_tga_17a936bc.vtex_c similarity index 100% rename from models/shudaixiong/mask/shubiao/shubiao_normal_tga_17a936bc.vtex_c rename to game/models/shudaixiong/mask/shubiao/shubiao_normal_tga_17a936bc.vtex_c diff --git a/models/shudaixiong/mask/shubiao/shubiao_specmask_tga_89fdac8d.vtex_c b/game/models/shudaixiong/mask/shubiao/shubiao_specmask_tga_89fdac8d.vtex_c similarity index 100% rename from models/shudaixiong/mask/shubiao/shubiao_specmask_tga_89fdac8d.vtex_c rename to game/models/shudaixiong/mask/shubiao/shubiao_specmask_tga_89fdac8d.vtex_c diff --git a/models/shudaixiong/mask/shudaixiong/jianpan.vmat_c b/game/models/shudaixiong/mask/shudaixiong/jianpan.vmat_c similarity index 100% rename from models/shudaixiong/mask/shudaixiong/jianpan.vmat_c rename to game/models/shudaixiong/mask/shudaixiong/jianpan.vmat_c diff --git a/models/shudaixiong/mask/shudaixiong/shubiao.vmat_c b/game/models/shudaixiong/mask/shudaixiong/shubiao.vmat_c similarity index 100% rename from models/shudaixiong/mask/shudaixiong/shubiao.vmat_c rename to game/models/shudaixiong/mask/shudaixiong/shubiao.vmat_c diff --git a/models/shudaixiong/mask/shudaixiong/shudaixiong.vmat_c b/game/models/shudaixiong/mask/shudaixiong/shudaixiong.vmat_c similarity index 100% rename from models/shudaixiong/mask/shudaixiong/shudaixiong.vmat_c rename to game/models/shudaixiong/mask/shudaixiong/shudaixiong.vmat_c diff --git a/models/shudaixiong/mask/shudaixiong/shudaixiong_low_color_tga_32cfe540.vtex_c b/game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_color_tga_32cfe540.vtex_c similarity index 100% rename from models/shudaixiong/mask/shudaixiong/shudaixiong_low_color_tga_32cfe540.vtex_c rename to game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_color_tga_32cfe540.vtex_c diff --git a/models/shudaixiong/mask/shudaixiong/shudaixiong_low_detailmask_tga_fedd85bd.vtex_c b/game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_detailmask_tga_fedd85bd.vtex_c similarity index 100% rename from models/shudaixiong/mask/shudaixiong/shudaixiong_low_detailmask_tga_fedd85bd.vtex_c rename to game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_detailmask_tga_fedd85bd.vtex_c diff --git a/models/shudaixiong/mask/shudaixiong/shudaixiong_low_normal_tga_6b5f32f2.vtex_c b/game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_normal_tga_6b5f32f2.vtex_c similarity index 100% rename from models/shudaixiong/mask/shudaixiong/shudaixiong_low_normal_tga_6b5f32f2.vtex_c rename to game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_normal_tga_6b5f32f2.vtex_c diff --git a/models/shudaixiong/mask/shudaixiong/shudaixiong_low_specmask_tga_2b0557af.vtex_c b/game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_specmask_tga_2b0557af.vtex_c similarity index 100% rename from models/shudaixiong/mask/shudaixiong/shudaixiong_low_specmask_tga_2b0557af.vtex_c rename to game/models/shudaixiong/mask/shudaixiong/shudaixiong_low_specmask_tga_2b0557af.vtex_c diff --git a/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiiong_death.vanim_c b/game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiiong_death.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/12a4f795/shudaixiiong_death.vanim_c rename to game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiiong_death.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_idel.vanim_c b/game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_idel.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_idel.vanim_c rename to game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_idel.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_run.vanim_c b/game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_run.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_run.vanim_c rename to game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_run.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_spawn.vanim_c b/game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_spawn.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_spawn.vanim_c rename to game/models/shudaixiong/model/shudaixiong/12a4f795/shudaixiong_spawn.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiiong_death.vanim_c b/game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiiong_death.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/1b127c58/shudaixiiong_death.vanim_c rename to game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiiong_death.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_idel.vanim_c b/game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_idel.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_idel.vanim_c rename to game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_idel.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_run.vanim_c b/game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_run.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_run.vanim_c rename to game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_run.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_spawn.vanim_c b/game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_spawn.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_spawn.vanim_c rename to game/models/shudaixiong/model/shudaixiong/1b127c58/shudaixiong_spawn.vanim_c diff --git a/models/shudaixiong/model/shudaixiong/shudaixiiong.vmdl_c b/game/models/shudaixiong/model/shudaixiong/shudaixiiong.vmdl_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/shudaixiiong.vmdl_c rename to game/models/shudaixiong/model/shudaixiong/shudaixiiong.vmdl_c diff --git a/models/shudaixiong/model/shudaixiong/shudaixiiong_1b127c58.vagrp_c b/game/models/shudaixiong/model/shudaixiong/shudaixiiong_1b127c58.vagrp_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/shudaixiiong_1b127c58.vagrp_c rename to game/models/shudaixiong/model/shudaixiong/shudaixiiong_1b127c58.vagrp_c diff --git a/models/shudaixiong/model/shudaixiong/shudaixiiong_death.vmesh_c b/game/models/shudaixiong/model/shudaixiong/shudaixiiong_death.vmesh_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/shudaixiiong_death.vmesh_c rename to game/models/shudaixiong/model/shudaixiong/shudaixiiong_death.vmesh_c diff --git a/models/shudaixiong/model/shudaixiong/shudaixiong.vmdl_c b/game/models/shudaixiong/model/shudaixiong/shudaixiong.vmdl_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/shudaixiong.vmdl_c rename to game/models/shudaixiong/model/shudaixiong/shudaixiong.vmdl_c diff --git a/models/shudaixiong/model/shudaixiong/shudaixiong_12a4f795.vagrp_c b/game/models/shudaixiong/model/shudaixiong/shudaixiong_12a4f795.vagrp_c similarity index 100% rename from models/shudaixiong/model/shudaixiong/shudaixiong_12a4f795.vagrp_c rename to game/models/shudaixiong/model/shudaixiong/shudaixiong_12a4f795.vagrp_c diff --git a/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_death.vanim_c b/game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_death.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_death.vanim_c rename to game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_death.vanim_c diff --git a/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_idel.vanim_c b/game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_idel.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_idel.vanim_c rename to game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_idel.vanim_c diff --git a/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_run.vanim_c b/game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_run.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_run.vanim_c rename to game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_run.vanim_c diff --git a/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_spanw.vanim_c b/game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_spanw.vanim_c similarity index 100% rename from models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_spanw.vanim_c rename to game/models/shudaixiong/model/shudaixiong_flying/2ceb8555/shudaixiong_fly_spanw.vanim_c diff --git a/models/shudaixiong/model/shudaixiong_flying/shudaixiong_fly_idel.vmesh_c b/game/models/shudaixiong/model/shudaixiong_flying/shudaixiong_fly_idel.vmesh_c similarity index 100% rename from models/shudaixiong/model/shudaixiong_flying/shudaixiong_fly_idel.vmesh_c rename to game/models/shudaixiong/model/shudaixiong_flying/shudaixiong_fly_idel.vmesh_c diff --git a/models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying.vmdl_c b/game/models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying.vmdl_c similarity index 100% rename from models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying.vmdl_c rename to game/models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying.vmdl_c diff --git a/models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying_2ceb8555.vagrp_c b/game/models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying_2ceb8555.vagrp_c similarity index 100% rename from models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying_2ceb8555.vagrp_c rename to game/models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying_2ceb8555.vagrp_c diff --git a/models/tei/body.vmat_c b/game/models/tei/body.vmat_c similarity index 100% rename from models/tei/body.vmat_c rename to game/models/tei/body.vmat_c diff --git a/models/tei/body_1.vmat_c b/game/models/tei/body_1.vmat_c similarity index 100% rename from models/tei/body_1.vmat_c rename to game/models/tei/body_1.vmat_c diff --git a/models/tei/body_png_14dc0524.vtex_c b/game/models/tei/body_png_14dc0524.vtex_c similarity index 100% rename from models/tei/body_png_14dc0524.vtex_c rename to game/models/tei/body_png_14dc0524.vtex_c diff --git a/models/tei/cloth.vmat_c b/game/models/tei/cloth.vmat_c similarity index 100% rename from models/tei/cloth.vmat_c rename to game/models/tei/cloth.vmat_c diff --git a/models/tei/cloth_1.vmat_c b/game/models/tei/cloth_1.vmat_c similarity index 100% rename from models/tei/cloth_1.vmat_c rename to game/models/tei/cloth_1.vmat_c diff --git a/models/tei/cloth_2.vmat_c b/game/models/tei/cloth_2.vmat_c similarity index 100% rename from models/tei/cloth_2.vmat_c rename to game/models/tei/cloth_2.vmat_c diff --git a/models/tei/cloth_3.vmat_c b/game/models/tei/cloth_3.vmat_c similarity index 100% rename from models/tei/cloth_3.vmat_c rename to game/models/tei/cloth_3.vmat_c diff --git a/models/tei/cloth_4.vmat_c b/game/models/tei/cloth_4.vmat_c similarity index 100% rename from models/tei/cloth_4.vmat_c rename to game/models/tei/cloth_4.vmat_c diff --git a/models/tei/cloth_5.vmat_c b/game/models/tei/cloth_5.vmat_c similarity index 100% rename from models/tei/cloth_5.vmat_c rename to game/models/tei/cloth_5.vmat_c diff --git a/models/tei/cloth_6.vmat_c b/game/models/tei/cloth_6.vmat_c similarity index 100% rename from models/tei/cloth_6.vmat_c rename to game/models/tei/cloth_6.vmat_c diff --git a/models/tei/cloth_7.vmat_c b/game/models/tei/cloth_7.vmat_c similarity index 100% rename from models/tei/cloth_7.vmat_c rename to game/models/tei/cloth_7.vmat_c diff --git a/models/tei/cloth_png_c0f362a4.vtex_c b/game/models/tei/cloth_png_c0f362a4.vtex_c similarity index 100% rename from models/tei/cloth_png_c0f362a4.vtex_c rename to game/models/tei/cloth_png_c0f362a4.vtex_c diff --git a/models/tei/debody.vmat_c b/game/models/tei/debody.vmat_c similarity index 100% rename from models/tei/debody.vmat_c rename to game/models/tei/debody.vmat_c diff --git a/models/tei/debody1.vmat_c b/game/models/tei/debody1.vmat_c similarity index 100% rename from models/tei/debody1.vmat_c rename to game/models/tei/debody1.vmat_c diff --git a/models/tei/debody1_png_5b403c25.vtex_c b/game/models/tei/debody1_png_5b403c25.vtex_c similarity index 100% rename from models/tei/debody1_png_5b403c25.vtex_c rename to game/models/tei/debody1_png_5b403c25.vtex_c diff --git a/models/tei/debody_png_a24cc85.vtex_c b/game/models/tei/debody_png_a24cc85.vtex_c similarity index 100% rename from models/tei/debody_png_a24cc85.vtex_c rename to game/models/tei/debody_png_a24cc85.vtex_c diff --git a/models/tei/eye.vmat_c b/game/models/tei/eye.vmat_c similarity index 100% rename from models/tei/eye.vmat_c rename to game/models/tei/eye.vmat_c diff --git a/models/tei/eye_png_80106387.vtex_c b/game/models/tei/eye_png_80106387.vtex_c similarity index 100% rename from models/tei/eye_png_80106387.vtex_c rename to game/models/tei/eye_png_80106387.vtex_c diff --git a/models/tei/face.vmat_c b/game/models/tei/face.vmat_c similarity index 100% rename from models/tei/face.vmat_c rename to game/models/tei/face.vmat_c diff --git a/models/tei/face_1.vmat_c b/game/models/tei/face_1.vmat_c similarity index 100% rename from models/tei/face_1.vmat_c rename to game/models/tei/face_1.vmat_c diff --git a/models/tei/face_2.vmat_c b/game/models/tei/face_2.vmat_c similarity index 100% rename from models/tei/face_2.vmat_c rename to game/models/tei/face_2.vmat_c diff --git a/models/tei/face_3.vmat_c b/game/models/tei/face_3.vmat_c similarity index 100% rename from models/tei/face_3.vmat_c rename to game/models/tei/face_3.vmat_c diff --git a/models/tei/face_png_a2a0ebc5.vtex_c b/game/models/tei/face_png_a2a0ebc5.vtex_c similarity index 100% rename from models/tei/face_png_a2a0ebc5.vtex_c rename to game/models/tei/face_png_a2a0ebc5.vtex_c diff --git a/models/tei/fd9cad11/tei_attack.vanim_c b/game/models/tei/fd9cad11/tei_attack.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_attack.vanim_c rename to game/models/tei/fd9cad11/tei_attack.vanim_c diff --git a/models/tei/fd9cad11/tei_cast1.vanim_c b/game/models/tei/fd9cad11/tei_cast1.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_cast1.vanim_c rename to game/models/tei/fd9cad11/tei_cast1.vanim_c diff --git a/models/tei/fd9cad11/tei_cast2.vanim_c b/game/models/tei/fd9cad11/tei_cast2.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_cast2.vanim_c rename to game/models/tei/fd9cad11/tei_cast2.vanim_c diff --git a/models/tei/fd9cad11/tei_cast3.vanim_c b/game/models/tei/fd9cad11/tei_cast3.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_cast3.vanim_c rename to game/models/tei/fd9cad11/tei_cast3.vanim_c diff --git a/models/tei/fd9cad11/tei_die.vanim_c b/game/models/tei/fd9cad11/tei_die.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_die.vanim_c rename to game/models/tei/fd9cad11/tei_die.vanim_c diff --git a/models/tei/fd9cad11/tei_disabled.vanim_c b/game/models/tei/fd9cad11/tei_disabled.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_disabled.vanim_c rename to game/models/tei/fd9cad11/tei_disabled.vanim_c diff --git a/models/tei/fd9cad11/tei_idle.vanim_c b/game/models/tei/fd9cad11/tei_idle.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_idle.vanim_c rename to game/models/tei/fd9cad11/tei_idle.vanim_c diff --git a/models/tei/fd9cad11/tei_run.vanim_c b/game/models/tei/fd9cad11/tei_run.vanim_c similarity index 100% rename from models/tei/fd9cad11/tei_run.vanim_c rename to game/models/tei/fd9cad11/tei_run.vanim_c diff --git a/models/tei/hair.vmat_c b/game/models/tei/hair.vmat_c similarity index 100% rename from models/tei/hair.vmat_c rename to game/models/tei/hair.vmat_c diff --git a/models/tei/hair_1.vmat_c b/game/models/tei/hair_1.vmat_c similarity index 100% rename from models/tei/hair_1.vmat_c rename to game/models/tei/hair_1.vmat_c diff --git a/models/tei/hair_2.vmat_c b/game/models/tei/hair_2.vmat_c similarity index 100% rename from models/tei/hair_2.vmat_c rename to game/models/tei/hair_2.vmat_c diff --git a/models/tei/hair_png_a1c54520.vtex_c b/game/models/tei/hair_png_a1c54520.vtex_c similarity index 100% rename from models/tei/hair_png_a1c54520.vtex_c rename to game/models/tei/hair_png_a1c54520.vtex_c diff --git a/models/tei/high_light.vmat_c b/game/models/tei/high_light.vmat_c similarity index 100% rename from models/tei/high_light.vmat_c rename to game/models/tei/high_light.vmat_c diff --git a/models/tei/high_light_png_41e1116.vtex_c b/game/models/tei/high_light_png_41e1116.vtex_c similarity index 100% rename from models/tei/high_light_png_41e1116.vtex_c rename to game/models/tei/high_light_png_41e1116.vtex_c diff --git a/models/tei/null.vmat_c b/game/models/tei/null.vmat_c similarity index 100% rename from models/tei/null.vmat_c rename to game/models/tei/null.vmat_c diff --git a/models/tei/null_1.vmat_c b/game/models/tei/null_1.vmat_c similarity index 100% rename from models/tei/null_1.vmat_c rename to game/models/tei/null_1.vmat_c diff --git a/models/tei/null_2.vmat_c b/game/models/tei/null_2.vmat_c similarity index 100% rename from models/tei/null_2.vmat_c rename to game/models/tei/null_2.vmat_c diff --git a/models/tei/null_3.vmat_c b/game/models/tei/null_3.vmat_c similarity index 100% rename from models/tei/null_3.vmat_c rename to game/models/tei/null_3.vmat_c diff --git a/models/tei/null_r.vmat_c b/game/models/tei/null_r.vmat_c similarity index 100% rename from models/tei/null_r.vmat_c rename to game/models/tei/null_r.vmat_c diff --git a/models/tei/null_s.vmat_c b/game/models/tei/null_s.vmat_c similarity index 100% rename from models/tei/null_s.vmat_c rename to game/models/tei/null_s.vmat_c diff --git a/models/tei/null_s_1.vmat_c b/game/models/tei/null_s_1.vmat_c similarity index 100% rename from models/tei/null_s_1.vmat_c rename to game/models/tei/null_s_1.vmat_c diff --git a/models/tei/null_y.vmat_c b/game/models/tei/null_y.vmat_c similarity index 100% rename from models/tei/null_y.vmat_c rename to game/models/tei/null_y.vmat_c diff --git a/models/tei/rif_aug.vmat_c b/game/models/tei/rif_aug.vmat_c similarity index 100% rename from models/tei/rif_aug.vmat_c rename to game/models/tei/rif_aug.vmat_c diff --git a/models/tei/rif_aug_scope.vmat_c b/game/models/tei/rif_aug_scope.vmat_c similarity index 100% rename from models/tei/rif_aug_scope.vmat_c rename to game/models/tei/rif_aug_scope.vmat_c diff --git a/models/tei/rif_aug_scope_tga_9cadfbed.vtex_c b/game/models/tei/rif_aug_scope_tga_9cadfbed.vtex_c similarity index 100% rename from models/tei/rif_aug_scope_tga_9cadfbed.vtex_c rename to game/models/tei/rif_aug_scope_tga_9cadfbed.vtex_c diff --git a/models/tei/rif_aug_tga_f711f69f.vtex_c b/game/models/tei/rif_aug_tga_f711f69f.vtex_c similarity index 100% rename from models/tei/rif_aug_tga_f711f69f.vtex_c rename to game/models/tei/rif_aug_tga_f711f69f.vtex_c diff --git a/models/tei/tei2.vmdl_c b/game/models/tei/tei2.vmdl_c similarity index 100% rename from models/tei/tei2.vmdl_c rename to game/models/tei/tei2.vmdl_c diff --git a/models/tei/tei2_fd9cad11.vagrp_c b/game/models/tei/tei2_fd9cad11.vagrp_c similarity index 100% rename from models/tei/tei2_fd9cad11.vagrp_c rename to game/models/tei/tei2_fd9cad11.vagrp_c diff --git a/models/tei/tei_f49f4904.vmesh_c b/game/models/tei/tei_f49f4904.vmesh_c similarity index 100% rename from models/tei/tei_f49f4904.vmesh_c rename to game/models/tei/tei_f49f4904.vmesh_c diff --git a/models/tei/white.vmat_c b/game/models/tei/white.vmat_c similarity index 100% rename from models/tei/white.vmat_c rename to game/models/tei/white.vmat_c diff --git a/models/tei/white_png_73005c8f.vtex_c b/game/models/tei/white_png_73005c8f.vtex_c similarity index 100% rename from models/tei/white_png_73005c8f.vtex_c rename to game/models/tei/white_png_73005c8f.vtex_c diff --git a/models/thd2/2a7f126c/yuyuko_fan_a.vanim_c b/game/models/thd2/2a7f126c/yuyuko_fan_a.vanim_c similarity index 100% rename from models/thd2/2a7f126c/yuyuko_fan_a.vanim_c rename to game/models/thd2/2a7f126c/yuyuko_fan_a.vanim_c diff --git a/models/thd2/4e31b715/firewing_stand.vanim_c b/game/models/thd2/4e31b715/firewing_stand.vanim_c similarity index 100% rename from models/thd2/4e31b715/firewing_stand.vanim_c rename to game/models/thd2/4e31b715/firewing_stand.vanim_c diff --git a/models/thd2/ba431f01/blsss_01_death.vanim_c b/game/models/thd2/ba431f01/blsss_01_death.vanim_c similarity index 100% rename from models/thd2/ba431f01/blsss_01_death.vanim_c rename to game/models/thd2/ba431f01/blsss_01_death.vanim_c diff --git a/models/thd2/ba431f01/blsss_01_stand.vanim_c b/game/models/thd2/ba431f01/blsss_01_stand.vanim_c similarity index 100% rename from models/thd2/ba431f01/blsss_01_stand.vanim_c rename to game/models/thd2/ba431f01/blsss_01_stand.vanim_c diff --git a/models/thd2/blsss.vmdl_c b/game/models/thd2/blsss.vmdl_c similarity index 100% rename from models/thd2/blsss.vmdl_c rename to game/models/thd2/blsss.vmdl_c diff --git a/models/thd2/blsss/0f73a2a1/blsss_02_death.vanim_c b/game/models/thd2/blsss/0f73a2a1/blsss_02_death.vanim_c similarity index 100% rename from models/thd2/blsss/0f73a2a1/blsss_02_death.vanim_c rename to game/models/thd2/blsss/0f73a2a1/blsss_02_death.vanim_c diff --git a/models/thd2/blsss/0f73a2a1/blsss_02_stand.vanim_c b/game/models/thd2/blsss/0f73a2a1/blsss_02_stand.vanim_c similarity index 100% rename from models/thd2/blsss/0f73a2a1/blsss_02_stand.vanim_c rename to game/models/thd2/blsss/0f73a2a1/blsss_02_stand.vanim_c diff --git a/models/thd2/blsss/b667adb4/blsss_03_death.vanim_c b/game/models/thd2/blsss/b667adb4/blsss_03_death.vanim_c similarity index 100% rename from models/thd2/blsss/b667adb4/blsss_03_death.vanim_c rename to game/models/thd2/blsss/b667adb4/blsss_03_death.vanim_c diff --git a/models/thd2/blsss/b667adb4/blsss_03_stand.vanim_c b/game/models/thd2/blsss/b667adb4/blsss_03_stand.vanim_c similarity index 100% rename from models/thd2/blsss/b667adb4/blsss_03_stand.vanim_c rename to game/models/thd2/blsss/b667adb4/blsss_03_stand.vanim_c diff --git a/models/thd2/blsss/blsss_01.vmesh_c b/game/models/thd2/blsss/blsss_01.vmesh_c similarity index 100% rename from models/thd2/blsss/blsss_01.vmesh_c rename to game/models/thd2/blsss/blsss_01.vmesh_c diff --git a/models/thd2/blsss/blsss_01_779531b3.vagrp_c b/game/models/thd2/blsss/blsss_01_779531b3.vagrp_c similarity index 100% rename from models/thd2/blsss/blsss_01_779531b3.vagrp_c rename to game/models/thd2/blsss/blsss_01_779531b3.vagrp_c diff --git a/models/thd2/blsss/blsss_02.vmdl_c b/game/models/thd2/blsss/blsss_02.vmdl_c similarity index 100% rename from models/thd2/blsss/blsss_02.vmdl_c rename to game/models/thd2/blsss/blsss_02.vmdl_c diff --git a/models/thd2/blsss/blsss_02.vmesh_c b/game/models/thd2/blsss/blsss_02.vmesh_c similarity index 100% rename from models/thd2/blsss/blsss_02.vmesh_c rename to game/models/thd2/blsss/blsss_02.vmesh_c diff --git a/models/thd2/blsss/blsss_02_0f73a2a1.vagrp_c b/game/models/thd2/blsss/blsss_02_0f73a2a1.vagrp_c similarity index 100% rename from models/thd2/blsss/blsss_02_0f73a2a1.vagrp_c rename to game/models/thd2/blsss/blsss_02_0f73a2a1.vagrp_c diff --git a/models/thd2/blsss/blsss_02_3fc7faa0.vagrp_c b/game/models/thd2/blsss/blsss_02_3fc7faa0.vagrp_c similarity index 100% rename from models/thd2/blsss/blsss_02_3fc7faa0.vagrp_c rename to game/models/thd2/blsss/blsss_02_3fc7faa0.vagrp_c diff --git a/models/thd2/blsss/blsss_03.vmdl_c b/game/models/thd2/blsss/blsss_03.vmdl_c similarity index 100% rename from models/thd2/blsss/blsss_03.vmdl_c rename to game/models/thd2/blsss/blsss_03.vmdl_c diff --git a/models/thd2/blsss/blsss_03.vmesh_c b/game/models/thd2/blsss/blsss_03.vmesh_c similarity index 100% rename from models/thd2/blsss/blsss_03.vmesh_c rename to game/models/thd2/blsss/blsss_03.vmesh_c diff --git a/models/thd2/blsss/blsss_03_a99579a0.vagrp_c b/game/models/thd2/blsss/blsss_03_a99579a0.vagrp_c similarity index 100% rename from models/thd2/blsss/blsss_03_a99579a0.vagrp_c rename to game/models/thd2/blsss/blsss_03_a99579a0.vagrp_c diff --git a/models/thd2/blsss/blsss_03_b667adb4.vagrp_c b/game/models/thd2/blsss/blsss_03_b667adb4.vagrp_c similarity index 100% rename from models/thd2/blsss/blsss_03_b667adb4.vagrp_c rename to game/models/thd2/blsss/blsss_03_b667adb4.vagrp_c diff --git a/models/thd2/blsss/gate.vmdl_c b/game/models/thd2/blsss/gate.vmdl_c similarity index 100% rename from models/thd2/blsss/gate.vmdl_c rename to game/models/thd2/blsss/gate.vmdl_c diff --git a/models/thd2/blsss/gate.vmesh_c b/game/models/thd2/blsss/gate.vmesh_c similarity index 100% rename from models/thd2/blsss/gate.vmesh_c rename to game/models/thd2/blsss/gate.vmesh_c diff --git a/models/thd2/blsss_01.vmesh_c b/game/models/thd2/blsss_01.vmesh_c similarity index 100% rename from models/thd2/blsss_01.vmesh_c rename to game/models/thd2/blsss_01.vmesh_c diff --git a/models/thd2/blsss_ba431f01.vagrp_c b/game/models/thd2/blsss_ba431f01.vagrp_c similarity index 100% rename from models/thd2/blsss_ba431f01.vagrp_c rename to game/models/thd2/blsss_ba431f01.vagrp_c diff --git a/models/thd2/blsss_cbaeaf6f.vagrp_c b/game/models/thd2/blsss_cbaeaf6f.vagrp_c similarity index 100% rename from models/thd2/blsss_cbaeaf6f.vagrp_c rename to game/models/thd2/blsss_cbaeaf6f.vagrp_c diff --git a/models/thd2/firewing.vmdl_c b/game/models/thd2/firewing.vmdl_c similarity index 100% rename from models/thd2/firewing.vmdl_c rename to game/models/thd2/firewing.vmdl_c diff --git a/models/thd2/firewing.vmesh_c b/game/models/thd2/firewing.vmesh_c similarity index 100% rename from models/thd2/firewing.vmesh_c rename to game/models/thd2/firewing.vmesh_c diff --git a/models/thd2/firewing_4e31b715.vagrp_c b/game/models/thd2/firewing_4e31b715.vagrp_c similarity index 100% rename from models/thd2/firewing_4e31b715.vagrp_c rename to game/models/thd2/firewing_4e31b715.vagrp_c diff --git a/models/thd2/firewing_85702f93.vagrp_c b/game/models/thd2/firewing_85702f93.vagrp_c similarity index 100% rename from models/thd2/firewing_85702f93.vagrp_c rename to game/models/thd2/firewing_85702f93.vagrp_c diff --git a/models/thd2/iku/iku_lightning_drill.vmdl_c b/game/models/thd2/iku/iku_lightning_drill.vmdl_c similarity index 100% rename from models/thd2/iku/iku_lightning_drill.vmdl_c rename to game/models/thd2/iku/iku_lightning_drill.vmdl_c diff --git a/models/thd2/iku/iku_lightning_drill.vmesh_c b/game/models/thd2/iku/iku_lightning_drill.vmesh_c similarity index 100% rename from models/thd2/iku/iku_lightning_drill.vmesh_c rename to game/models/thd2/iku/iku_lightning_drill.vmesh_c diff --git a/models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3.vanim_c b/game/models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3.vanim_c similarity index 100% rename from models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3.vanim_c rename to game/models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3.vanim_c diff --git a/models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3a.vanim_c b/game/models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3a.vanim_c similarity index 100% rename from models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3a.vanim_c rename to game/models/thd2/kaguya/48cef8c0/kaguya_mmd_kamidakara_3a.vanim_c diff --git a/models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1.vanim_c b/game/models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1.vanim_c similarity index 100% rename from models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1.vanim_c rename to game/models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1.vanim_c diff --git a/models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1a.vanim_c b/game/models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1a.vanim_c similarity index 100% rename from models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1a.vanim_c rename to game/models/thd2/kaguya/4dc4e304/kaguya_mmd_kamidakara_1a.vanim_c diff --git a/models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4.vanim_c b/game/models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4.vanim_c similarity index 100% rename from models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4.vanim_c rename to game/models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4.vanim_c diff --git a/models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4a.vanim_c b/game/models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4a.vanim_c similarity index 100% rename from models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4a.vanim_c rename to game/models/thd2/kaguya/9b8cecbf/kaguya_mmd_kamidakara_4a.vanim_c diff --git a/models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2.vanim_c b/game/models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2.vanim_c similarity index 100% rename from models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2.vanim_c rename to game/models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2.vanim_c diff --git a/models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2a.vanim_c b/game/models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2a.vanim_c similarity index 100% rename from models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2a.vanim_c rename to game/models/thd2/kaguya/cb70e8b6/kaguya_mmd_kamidakara_2a.vanim_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmdl_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmdl_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmdl_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmdl_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmesh_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmesh_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmesh_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_1.vmesh_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_1_4dc4e304.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_1_4dc4e304.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_1_4dc4e304.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_1_4dc4e304.vagrp_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_1_7eae02c0.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_1_7eae02c0.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_1_7eae02c0.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_1_7eae02c0.vagrp_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmdl_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmdl_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmdl_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmdl_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmesh_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmesh_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmesh_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_2.vmesh_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_2_cb70e8b6.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_2_cb70e8b6.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_2_cb70e8b6.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_2_cb70e8b6.vagrp_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_2_dfeccb44.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_2_dfeccb44.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_2_dfeccb44.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_2_dfeccb44.vagrp_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmdl_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmdl_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmdl_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmdl_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmesh_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmesh_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmesh_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_3.vmesh_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_3_48cef8c0.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_3_48cef8c0.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_3_48cef8c0.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_3_48cef8c0.vagrp_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_3_9b812ebc.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_3_9b812ebc.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_3_9b812ebc.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_3_9b812ebc.vagrp_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmdl_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmdl_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmdl_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmdl_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmesh_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmesh_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmesh_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_4.vmesh_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_4_96c13d6b.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_4_96c13d6b.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_4_96c13d6b.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_4_96c13d6b.vagrp_c diff --git a/models/thd2/kaguya/kaguya_mmd_kamidakara_4_9b8cecbf.vagrp_c b/game/models/thd2/kaguya/kaguya_mmd_kamidakara_4_9b8cecbf.vagrp_c similarity index 100% rename from models/thd2/kaguya/kaguya_mmd_kamidakara_4_9b8cecbf.vagrp_c rename to game/models/thd2/kaguya/kaguya_mmd_kamidakara_4_9b8cecbf.vagrp_c diff --git a/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_die.vanim_c b/game/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_die.vanim_c similarity index 100% rename from models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_die.vanim_c rename to game/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_die.vanim_c diff --git a/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_idle.vanim_c b/game/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_idle.vanim_c rename to game/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_idle.vanim_c diff --git a/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_run.vanim_c b/game/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_run.vanim_c similarity index 100% rename from models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_run.vanim_c rename to game/models/thd2/kanako/76758ba0/kanako_mmd_q_act_dota_run.vanim_c diff --git a/models/thd2/kanako/76758ba0/kanako_mmd_rq_act_dota_run.vanim_c b/game/models/thd2/kanako/76758ba0/kanako_mmd_rq_act_dota_run.vanim_c similarity index 100% rename from models/thd2/kanako/76758ba0/kanako_mmd_rq_act_dota_run.vanim_c rename to game/models/thd2/kanako/76758ba0/kanako_mmd_rq_act_dota_run.vanim_c diff --git a/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_die.vanim_c b/game/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_die.vanim_c similarity index 100% rename from models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_die.vanim_c rename to game/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_die.vanim_c diff --git a/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_idle.vanim_c b/game/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_idle.vanim_c rename to game/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_idle.vanim_c diff --git a/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_run.vanim_c b/game/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_run.vanim_c similarity index 100% rename from models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_run.vanim_c rename to game/models/thd2/kanako/a0a76351/kanako_mmd_q_act_dota_run.vanim_c diff --git a/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_die.vanim_c b/game/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_die.vanim_c similarity index 100% rename from models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_die.vanim_c rename to game/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_die.vanim_c diff --git a/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_idle.vanim_c b/game/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_idle.vanim_c rename to game/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_idle.vanim_c diff --git a/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_run.vanim_c b/game/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_run.vanim_c similarity index 100% rename from models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_run.vanim_c rename to game/models/thd2/kanako/ada24887/kanako_mmd_rq_act_dota_run.vanim_c diff --git a/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_die.vanim_c b/game/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_die.vanim_c similarity index 100% rename from models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_die.vanim_c rename to game/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_die.vanim_c diff --git a/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_idle.vanim_c b/game/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_idle.vanim_c rename to game/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_idle.vanim_c diff --git a/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_run.vanim_c b/game/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_run.vanim_c similarity index 100% rename from models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_run.vanim_c rename to game/models/thd2/kanako/ff9c6473/kanako_mmd_q_act_dota_run.vanim_c diff --git a/models/thd2/kanako/kanako_mmd_gojou.vmdl_c b/game/models/thd2/kanako/kanako_mmd_gojou.vmdl_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_gojou.vmdl_c rename to game/models/thd2/kanako/kanako_mmd_gojou.vmdl_c diff --git a/models/thd2/kanako/kanako_mmd_gojou.vmesh_c b/game/models/thd2/kanako/kanako_mmd_gojou.vmesh_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_gojou.vmesh_c rename to game/models/thd2/kanako/kanako_mmd_gojou.vmesh_c diff --git a/models/thd2/kanako/kanako_mmd_gojou_a0a76351.vagrp_c b/game/models/thd2/kanako/kanako_mmd_gojou_a0a76351.vagrp_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_gojou_a0a76351.vagrp_c rename to game/models/thd2/kanako/kanako_mmd_gojou_a0a76351.vagrp_c diff --git a/models/thd2/kanako/kanako_mmd_q.vmdl_c b/game/models/thd2/kanako/kanako_mmd_q.vmdl_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_q.vmdl_c rename to game/models/thd2/kanako/kanako_mmd_q.vmdl_c diff --git a/models/thd2/kanako/kanako_mmd_q.vmesh_c b/game/models/thd2/kanako/kanako_mmd_q.vmesh_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_q.vmesh_c rename to game/models/thd2/kanako/kanako_mmd_q.vmesh_c diff --git a/models/thd2/kanako/kanako_mmd_q_76758ba0.vagrp_c b/game/models/thd2/kanako/kanako_mmd_q_76758ba0.vagrp_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_q_76758ba0.vagrp_c rename to game/models/thd2/kanako/kanako_mmd_q_76758ba0.vagrp_c diff --git a/models/thd2/kanako/kanako_mmd_rq.vmdl_c b/game/models/thd2/kanako/kanako_mmd_rq.vmdl_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_rq.vmdl_c rename to game/models/thd2/kanako/kanako_mmd_rq.vmdl_c diff --git a/models/thd2/kanako/kanako_mmd_rq.vmesh_c b/game/models/thd2/kanako/kanako_mmd_rq.vmesh_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_rq.vmesh_c rename to game/models/thd2/kanako/kanako_mmd_rq.vmesh_c diff --git a/models/thd2/kanako/kanako_mmd_rq_ada24887.vagrp_c b/game/models/thd2/kanako/kanako_mmd_rq_ada24887.vagrp_c similarity index 100% rename from models/thd2/kanako/kanako_mmd_rq_ada24887.vagrp_c rename to game/models/thd2/kanako/kanako_mmd_rq_ada24887.vagrp_c diff --git a/models/thd2/masterspark.vmdl_c b/game/models/thd2/masterspark.vmdl_c similarity index 100% rename from models/thd2/masterspark.vmdl_c rename to game/models/thd2/masterspark.vmdl_c diff --git a/models/thd2/masterspark.vmesh_c b/game/models/thd2/masterspark.vmesh_c similarity index 100% rename from models/thd2/masterspark.vmesh_c rename to game/models/thd2/masterspark.vmesh_c diff --git a/models/thd2/masterspark_0416072b.vmesh_c b/game/models/thd2/masterspark_0416072b.vmesh_c similarity index 100% rename from models/thd2/masterspark_0416072b.vmesh_c rename to game/models/thd2/masterspark_0416072b.vmesh_c diff --git a/models/thd2/masterspark_7b5f46f2.vmesh_c b/game/models/thd2/masterspark_7b5f46f2.vmesh_c similarity index 100% rename from models/thd2/masterspark_7b5f46f2.vmesh_c rename to game/models/thd2/masterspark_7b5f46f2.vmesh_c diff --git a/models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_idle.vanim_c b/game/models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_idle.vanim_c rename to game/models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_idle.vanim_c diff --git a/models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_run.vanim_c b/game/models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_run.vanim_c similarity index 100% rename from models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_run.vanim_c rename to game/models/thd2/minamitsu/37042f0e/minamitsu_mmd_w_act_dota_run.vanim_c diff --git a/models/thd2/minamitsu/minamitsu_mmd_w.vmdl_c b/game/models/thd2/minamitsu/minamitsu_mmd_w.vmdl_c similarity index 100% rename from models/thd2/minamitsu/minamitsu_mmd_w.vmdl_c rename to game/models/thd2/minamitsu/minamitsu_mmd_w.vmdl_c diff --git a/models/thd2/minamitsu/minamitsu_mmd_w.vmesh_c b/game/models/thd2/minamitsu/minamitsu_mmd_w.vmesh_c similarity index 100% rename from models/thd2/minamitsu/minamitsu_mmd_w.vmesh_c rename to game/models/thd2/minamitsu/minamitsu_mmd_w.vmesh_c diff --git a/models/thd2/minamitsu/minamitsu_mmd_w_37042f0e.vagrp_c b/game/models/thd2/minamitsu/minamitsu_mmd_w_37042f0e.vagrp_c similarity index 100% rename from models/thd2/minamitsu/minamitsu_mmd_w_37042f0e.vagrp_c rename to game/models/thd2/minamitsu/minamitsu_mmd_w_37042f0e.vagrp_c diff --git a/models/thd2/remilia/7a8407a9/remilia_gungnir_1.vanim_c b/game/models/thd2/remilia/7a8407a9/remilia_gungnir_1.vanim_c similarity index 100% rename from models/thd2/remilia/7a8407a9/remilia_gungnir_1.vanim_c rename to game/models/thd2/remilia/7a8407a9/remilia_gungnir_1.vanim_c diff --git a/models/thd2/remilia/remilia_gungnir.vmdl_c b/game/models/thd2/remilia/remilia_gungnir.vmdl_c similarity index 100% rename from models/thd2/remilia/remilia_gungnir.vmdl_c rename to game/models/thd2/remilia/remilia_gungnir.vmdl_c diff --git a/models/thd2/remilia/remilia_gungnir.vmesh_c b/game/models/thd2/remilia/remilia_gungnir.vmesh_c similarity index 100% rename from models/thd2/remilia/remilia_gungnir.vmesh_c rename to game/models/thd2/remilia/remilia_gungnir.vmesh_c diff --git a/models/thd2/remilia/remilia_gungnir_0258b55f.vagrp_c b/game/models/thd2/remilia/remilia_gungnir_0258b55f.vagrp_c similarity index 100% rename from models/thd2/remilia/remilia_gungnir_0258b55f.vagrp_c rename to game/models/thd2/remilia/remilia_gungnir_0258b55f.vagrp_c diff --git a/models/thd2/remilia/remilia_gungnir_7a8407a9.vagrp_c b/game/models/thd2/remilia/remilia_gungnir_7a8407a9.vagrp_c similarity index 100% rename from models/thd2/remilia/remilia_gungnir_7a8407a9.vagrp_c rename to game/models/thd2/remilia/remilia_gungnir_7a8407a9.vagrp_c diff --git a/models/thd2/rumia_ex/715597a9/rumia_ex_attack_1.vanim_c b/game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_1.vanim_c similarity index 100% rename from models/thd2/rumia_ex/715597a9/rumia_ex_attack_1.vanim_c rename to game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_1.vanim_c diff --git a/models/thd2/rumia_ex/715597a9/rumia_ex_attack_2.vanim_c b/game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_2.vanim_c similarity index 100% rename from models/thd2/rumia_ex/715597a9/rumia_ex_attack_2.vanim_c rename to game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_2.vanim_c diff --git a/models/thd2/rumia_ex/715597a9/rumia_ex_attack_3.vanim_c b/game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_3.vanim_c similarity index 100% rename from models/thd2/rumia_ex/715597a9/rumia_ex_attack_3.vanim_c rename to game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_3.vanim_c diff --git a/models/thd2/rumia_ex/715597a9/rumia_ex_attack_5.vanim_c b/game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_5.vanim_c similarity index 100% rename from models/thd2/rumia_ex/715597a9/rumia_ex_attack_5.vanim_c rename to game/models/thd2/rumia_ex/715597a9/rumia_ex_attack_5.vanim_c diff --git a/models/thd2/rumia_ex/715597a9/rumia_ex_stand.vanim_c b/game/models/thd2/rumia_ex/715597a9/rumia_ex_stand.vanim_c similarity index 100% rename from models/thd2/rumia_ex/715597a9/rumia_ex_stand.vanim_c rename to game/models/thd2/rumia_ex/715597a9/rumia_ex_stand.vanim_c diff --git a/models/thd2/rumia_ex/715597a9/rumia_ex_walk.vanim_c b/game/models/thd2/rumia_ex/715597a9/rumia_ex_walk.vanim_c similarity index 100% rename from models/thd2/rumia_ex/715597a9/rumia_ex_walk.vanim_c rename to game/models/thd2/rumia_ex/715597a9/rumia_ex_walk.vanim_c diff --git a/models/thd2/rumia_ex/rumia_ex.vmdl_c b/game/models/thd2/rumia_ex/rumia_ex.vmdl_c similarity index 100% rename from models/thd2/rumia_ex/rumia_ex.vmdl_c rename to game/models/thd2/rumia_ex/rumia_ex.vmdl_c diff --git a/models/thd2/rumia_ex/rumia_ex.vmesh_c b/game/models/thd2/rumia_ex/rumia_ex.vmesh_c similarity index 100% rename from models/thd2/rumia_ex/rumia_ex.vmesh_c rename to game/models/thd2/rumia_ex/rumia_ex.vmesh_c diff --git a/models/thd2/rumia_ex/rumia_ex_562f0a70.vagrp_c b/game/models/thd2/rumia_ex/rumia_ex_562f0a70.vagrp_c similarity index 100% rename from models/thd2/rumia_ex/rumia_ex_562f0a70.vagrp_c rename to game/models/thd2/rumia_ex/rumia_ex_562f0a70.vagrp_c diff --git a/models/thd2/rumia_ex/rumia_ex_715597a9.vagrp_c b/game/models/thd2/rumia_ex/rumia_ex_715597a9.vagrp_c similarity index 100% rename from models/thd2/rumia_ex/rumia_ex_715597a9.vagrp_c rename to game/models/thd2/rumia_ex/rumia_ex_715597a9.vagrp_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack2.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack2.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack2.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_attack2.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_1.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_1.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_1.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_1.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_2.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_2.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_2.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_2.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_3.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_3.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_3.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_3.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_4.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_4.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_4.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_cast_ability_4.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_die.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_die.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_die.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_die.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_idle.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_idle.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_idle.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_por.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_por.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_por.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_por.vanim_c diff --git a/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_run.vanim_c b/game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_run.vanim_c similarity index 100% rename from models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_run.vanim_c rename to game/models/thd2/shikieiki/1370f3f0/shikieiki_mmd_act_dota_run.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack2.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack2.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack2.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_attack2.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_1.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_1.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_1.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_1.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_2.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_2.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_2.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_2.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_3.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_3.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_3.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_3.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_4.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_4.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_4.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_cast_ability_4.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_die.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_die.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_die.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_die.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_idle.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_idle.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_idle.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_por.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_por.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_por.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_por.vanim_c diff --git a/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_run.vanim_c b/game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_run.vanim_c similarity index 100% rename from models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_run.vanim_c rename to game/models/thd2/shikieiki/989bf045/shikieiki_mmd_act_dota_run.vanim_c diff --git a/models/thd2/shikieiki/shikieiki_mmd.vmdl_c b/game/models/thd2/shikieiki/shikieiki_mmd.vmdl_c similarity index 100% rename from models/thd2/shikieiki/shikieiki_mmd.vmdl_c rename to game/models/thd2/shikieiki/shikieiki_mmd.vmdl_c diff --git a/models/thd2/shikieiki/shikieiki_mmd.vmesh_c b/game/models/thd2/shikieiki/shikieiki_mmd.vmesh_c similarity index 100% rename from models/thd2/shikieiki/shikieiki_mmd.vmesh_c rename to game/models/thd2/shikieiki/shikieiki_mmd.vmesh_c diff --git a/models/thd2/shikieiki/shikieiki_mmd_1370f3f0.vagrp_c b/game/models/thd2/shikieiki/shikieiki_mmd_1370f3f0.vagrp_c similarity index 100% rename from models/thd2/shikieiki/shikieiki_mmd_1370f3f0.vagrp_c rename to game/models/thd2/shikieiki/shikieiki_mmd_1370f3f0.vagrp_c diff --git a/models/thd2/shikieiki/shikieiki_mmd_989bf045.vagrp_c b/game/models/thd2/shikieiki/shikieiki_mmd_989bf045.vagrp_c similarity index 100% rename from models/thd2/shikieiki/shikieiki_mmd_989bf045.vagrp_c rename to game/models/thd2/shikieiki/shikieiki_mmd_989bf045.vagrp_c diff --git a/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_die.vanim_c b/game/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_die.vanim_c similarity index 100% rename from models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_die.vanim_c rename to game/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_die.vanim_c diff --git a/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_idle.vanim_c b/game/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_idle.vanim_c rename to game/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_idle.vanim_c diff --git a/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_spawn.vanim_c b/game/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_spawn.vanim_c similarity index 100% rename from models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_spawn.vanim_c rename to game/models/thd2/yukari/71464bb8/yukari_mmd_q_act_dota_spawn.vanim_c diff --git a/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_die.vanim_c b/game/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_die.vanim_c similarity index 100% rename from models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_die.vanim_c rename to game/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_die.vanim_c diff --git a/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_idle.vanim_c b/game/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_idle.vanim_c rename to game/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_idle.vanim_c diff --git a/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_spawn.vanim_c b/game/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_spawn.vanim_c similarity index 100% rename from models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_spawn.vanim_c rename to game/models/thd2/yukari/c40826c0/yukari_mmd_w_act_dota_spawn.vanim_c diff --git a/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_die.vanim_c b/game/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_die.vanim_c similarity index 100% rename from models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_die.vanim_c rename to game/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_die.vanim_c diff --git a/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_idle.vanim_c b/game/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_idle.vanim_c similarity index 100% rename from models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_idle.vanim_c rename to game/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_idle.vanim_c diff --git a/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_spawn.vanim_c b/game/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_spawn.vanim_c similarity index 100% rename from models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_spawn.vanim_c rename to game/models/thd2/yukari/f9e372b9/yukari_mmd_d_act_dota_spawn.vanim_c diff --git a/models/thd2/yukari/yukari_mmd_d.vmdl_c b/game/models/thd2/yukari/yukari_mmd_d.vmdl_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_d.vmdl_c rename to game/models/thd2/yukari/yukari_mmd_d.vmdl_c diff --git a/models/thd2/yukari/yukari_mmd_d.vmesh_c b/game/models/thd2/yukari/yukari_mmd_d.vmesh_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_d.vmesh_c rename to game/models/thd2/yukari/yukari_mmd_d.vmesh_c diff --git a/models/thd2/yukari/yukari_mmd_d_f9e372b9.vagrp_c b/game/models/thd2/yukari/yukari_mmd_d_f9e372b9.vagrp_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_d_f9e372b9.vagrp_c rename to game/models/thd2/yukari/yukari_mmd_d_f9e372b9.vagrp_c diff --git a/models/thd2/yukari/yukari_mmd_q.vmdl_c b/game/models/thd2/yukari/yukari_mmd_q.vmdl_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_q.vmdl_c rename to game/models/thd2/yukari/yukari_mmd_q.vmdl_c diff --git a/models/thd2/yukari/yukari_mmd_q.vmesh_c b/game/models/thd2/yukari/yukari_mmd_q.vmesh_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_q.vmesh_c rename to game/models/thd2/yukari/yukari_mmd_q.vmesh_c diff --git a/models/thd2/yukari/yukari_mmd_q_71464bb8.vagrp_c b/game/models/thd2/yukari/yukari_mmd_q_71464bb8.vagrp_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_q_71464bb8.vagrp_c rename to game/models/thd2/yukari/yukari_mmd_q_71464bb8.vagrp_c diff --git a/models/thd2/yukari/yukari_mmd_w.vmdl_c b/game/models/thd2/yukari/yukari_mmd_w.vmdl_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_w.vmdl_c rename to game/models/thd2/yukari/yukari_mmd_w.vmdl_c diff --git a/models/thd2/yukari/yukari_mmd_w.vmesh_c b/game/models/thd2/yukari/yukari_mmd_w.vmesh_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_w.vmesh_c rename to game/models/thd2/yukari/yukari_mmd_w.vmesh_c diff --git a/models/thd2/yukari/yukari_mmd_w_c40826c0.vagrp_c b/game/models/thd2/yukari/yukari_mmd_w_c40826c0.vagrp_c similarity index 100% rename from models/thd2/yukari/yukari_mmd_w_c40826c0.vagrp_c rename to game/models/thd2/yukari/yukari_mmd_w_c40826c0.vagrp_c diff --git a/models/thd2/yukkuri/58f96842/yukkuri_death.vanim_c b/game/models/thd2/yukkuri/58f96842/yukkuri_death.vanim_c similarity index 100% rename from models/thd2/yukkuri/58f96842/yukkuri_death.vanim_c rename to game/models/thd2/yukkuri/58f96842/yukkuri_death.vanim_c diff --git a/models/thd2/yukkuri/58f96842/yukkuri_stand.vanim_c b/game/models/thd2/yukkuri/58f96842/yukkuri_stand.vanim_c similarity index 100% rename from models/thd2/yukkuri/58f96842/yukkuri_stand.vanim_c rename to game/models/thd2/yukkuri/58f96842/yukkuri_stand.vanim_c diff --git a/models/thd2/yukkuri/58f96842/yukkuri_walk.vanim_c b/game/models/thd2/yukkuri/58f96842/yukkuri_walk.vanim_c similarity index 100% rename from models/thd2/yukkuri/58f96842/yukkuri_walk.vanim_c rename to game/models/thd2/yukkuri/58f96842/yukkuri_walk.vanim_c diff --git a/models/thd2/yukkuri/yukkuri.vmdl_c b/game/models/thd2/yukkuri/yukkuri.vmdl_c similarity index 100% rename from models/thd2/yukkuri/yukkuri.vmdl_c rename to game/models/thd2/yukkuri/yukkuri.vmdl_c diff --git a/models/thd2/yukkuri/yukkuri.vmesh_c b/game/models/thd2/yukkuri/yukkuri.vmesh_c similarity index 100% rename from models/thd2/yukkuri/yukkuri.vmesh_c rename to game/models/thd2/yukkuri/yukkuri.vmesh_c diff --git a/models/thd2/yukkuri/yukkuri_028944bc.vagrp_c b/game/models/thd2/yukkuri/yukkuri_028944bc.vagrp_c similarity index 100% rename from models/thd2/yukkuri/yukkuri_028944bc.vagrp_c rename to game/models/thd2/yukkuri/yukkuri_028944bc.vagrp_c diff --git a/models/thd2/yukkuri/yukkuri_58f96842.vagrp_c b/game/models/thd2/yukkuri/yukkuri_58f96842.vagrp_c similarity index 100% rename from models/thd2/yukkuri/yukkuri_58f96842.vagrp_c rename to game/models/thd2/yukkuri/yukkuri_58f96842.vagrp_c diff --git a/models/thd2/yuukaspark.vmdl_c b/game/models/thd2/yuukaspark.vmdl_c similarity index 100% rename from models/thd2/yuukaspark.vmdl_c rename to game/models/thd2/yuukaspark.vmdl_c diff --git a/models/thd2/yuyuko_fan.vmdl_c b/game/models/thd2/yuyuko_fan.vmdl_c similarity index 100% rename from models/thd2/yuyuko_fan.vmdl_c rename to game/models/thd2/yuyuko_fan.vmdl_c diff --git a/models/thd2/yuyuko_fan.vmesh_c b/game/models/thd2/yuyuko_fan.vmesh_c similarity index 100% rename from models/thd2/yuyuko_fan.vmesh_c rename to game/models/thd2/yuyuko_fan.vmesh_c diff --git a/models/thd2/yuyuko_fan_278b62ab.vagrp_c b/game/models/thd2/yuyuko_fan_278b62ab.vagrp_c similarity index 100% rename from models/thd2/yuyuko_fan_278b62ab.vagrp_c rename to game/models/thd2/yuyuko_fan_278b62ab.vagrp_c diff --git a/models/thd2/yuyuko_fan_2a7f126c.vagrp_c b/game/models/thd2/yuyuko_fan_2a7f126c.vagrp_c similarity index 100% rename from models/thd2/yuyuko_fan_2a7f126c.vagrp_c rename to game/models/thd2/yuyuko_fan_2a7f126c.vagrp_c diff --git a/models/thd_hero/alice/0c825569/attack1.vanim_c b/game/models/thd_hero/alice/0c825569/attack1.vanim_c similarity index 100% rename from models/thd_hero/alice/0c825569/attack1.vanim_c rename to game/models/thd_hero/alice/0c825569/attack1.vanim_c diff --git a/models/thd_hero/alice/0c825569/cast1.vanim_c b/game/models/thd_hero/alice/0c825569/cast1.vanim_c similarity index 100% rename from models/thd_hero/alice/0c825569/cast1.vanim_c rename to game/models/thd_hero/alice/0c825569/cast1.vanim_c diff --git a/models/thd_hero/alice/0c825569/cast2.vanim_c b/game/models/thd_hero/alice/0c825569/cast2.vanim_c similarity index 100% rename from models/thd_hero/alice/0c825569/cast2.vanim_c rename to game/models/thd_hero/alice/0c825569/cast2.vanim_c diff --git a/models/thd_hero/alice/0c825569/cast3.vanim_c b/game/models/thd_hero/alice/0c825569/cast3.vanim_c similarity index 100% rename from models/thd_hero/alice/0c825569/cast3.vanim_c rename to game/models/thd_hero/alice/0c825569/cast3.vanim_c diff --git a/models/thd_hero/alice/0c825569/idle.vanim_c b/game/models/thd_hero/alice/0c825569/idle.vanim_c similarity index 100% rename from models/thd_hero/alice/0c825569/idle.vanim_c rename to game/models/thd_hero/alice/0c825569/idle.vanim_c diff --git a/models/thd_hero/alice/0c825569/run.vanim_c b/game/models/thd_hero/alice/0c825569/run.vanim_c similarity index 100% rename from models/thd_hero/alice/0c825569/run.vanim_c rename to game/models/thd_hero/alice/0c825569/run.vanim_c diff --git a/models/thd_hero/alice/alice.vmdl_c b/game/models/thd_hero/alice/alice.vmdl_c similarity index 100% rename from models/thd_hero/alice/alice.vmdl_c rename to game/models/thd_hero/alice/alice.vmdl_c diff --git a/models/thd_hero/alice/alice.vmesh_c b/game/models/thd_hero/alice/alice.vmesh_c similarity index 100% rename from models/thd_hero/alice/alice.vmesh_c rename to game/models/thd_hero/alice/alice.vmesh_c diff --git a/models/thd_hero/alice/alice_0c825569.vagrp_c b/game/models/thd_hero/alice/alice_0c825569.vagrp_c similarity index 100% rename from models/thd_hero/alice/alice_0c825569.vagrp_c rename to game/models/thd_hero/alice/alice_0c825569.vagrp_c diff --git a/models/thd_hero/alice/item/alice.vmesh_c b/game/models/thd_hero/alice/item/alice.vmesh_c similarity index 100% rename from models/thd_hero/alice/item/alice.vmesh_c rename to game/models/thd_hero/alice/item/alice.vmesh_c diff --git a/models/thd_hero/alice/item/c1cd94c1/attack1.vanim_c b/game/models/thd_hero/alice/item/c1cd94c1/attack1.vanim_c similarity index 100% rename from models/thd_hero/alice/item/c1cd94c1/attack1.vanim_c rename to game/models/thd_hero/alice/item/c1cd94c1/attack1.vanim_c diff --git a/models/thd_hero/alice/item/c1cd94c1/cast1.vanim_c b/game/models/thd_hero/alice/item/c1cd94c1/cast1.vanim_c similarity index 100% rename from models/thd_hero/alice/item/c1cd94c1/cast1.vanim_c rename to game/models/thd_hero/alice/item/c1cd94c1/cast1.vanim_c diff --git a/models/thd_hero/alice/item/c1cd94c1/cast2.vanim_c b/game/models/thd_hero/alice/item/c1cd94c1/cast2.vanim_c similarity index 100% rename from models/thd_hero/alice/item/c1cd94c1/cast2.vanim_c rename to game/models/thd_hero/alice/item/c1cd94c1/cast2.vanim_c diff --git a/models/thd_hero/alice/item/c1cd94c1/cast3.vanim_c b/game/models/thd_hero/alice/item/c1cd94c1/cast3.vanim_c similarity index 100% rename from models/thd_hero/alice/item/c1cd94c1/cast3.vanim_c rename to game/models/thd_hero/alice/item/c1cd94c1/cast3.vanim_c diff --git a/models/thd_hero/alice/item/c1cd94c1/idle.vanim_c b/game/models/thd_hero/alice/item/c1cd94c1/idle.vanim_c similarity index 100% rename from models/thd_hero/alice/item/c1cd94c1/idle.vanim_c rename to game/models/thd_hero/alice/item/c1cd94c1/idle.vanim_c diff --git a/models/thd_hero/alice/item/c1cd94c1/run.vanim_c b/game/models/thd_hero/alice/item/c1cd94c1/run.vanim_c similarity index 100% rename from models/thd_hero/alice/item/c1cd94c1/run.vanim_c rename to game/models/thd_hero/alice/item/c1cd94c1/run.vanim_c diff --git a/models/thd_hero/alice/item/item_alice.vmdl_c b/game/models/thd_hero/alice/item/item_alice.vmdl_c similarity index 100% rename from models/thd_hero/alice/item/item_alice.vmdl_c rename to game/models/thd_hero/alice/item/item_alice.vmdl_c diff --git a/models/thd_hero/alice/item/item_alice_c1cd94c1.vagrp_c b/game/models/thd_hero/alice/item/item_alice_c1cd94c1.vagrp_c similarity index 100% rename from models/thd_hero/alice/item/item_alice_c1cd94c1.vagrp_c rename to game/models/thd_hero/alice/item/item_alice_c1cd94c1.vagrp_c diff --git a/models/thd_hero/aya/aya.vmdl_c b/game/models/thd_hero/aya/aya.vmdl_c similarity index 100% rename from models/thd_hero/aya/aya.vmdl_c rename to game/models/thd_hero/aya/aya.vmdl_c diff --git a/models/thd_hero/aya/aya.vmesh_c b/game/models/thd_hero/aya/aya.vmesh_c similarity index 100% rename from models/thd_hero/aya/aya.vmesh_c rename to game/models/thd_hero/aya/aya.vmesh_c diff --git a/models/thd_hero/aya/aya_e61a3819.vagrp_c b/game/models/thd_hero/aya/aya_e61a3819.vagrp_c similarity index 100% rename from models/thd_hero/aya/aya_e61a3819.vagrp_c rename to game/models/thd_hero/aya/aya_e61a3819.vagrp_c diff --git a/models/thd_hero/aya/e61a3819/attack.vanim_c b/game/models/thd_hero/aya/e61a3819/attack.vanim_c similarity index 100% rename from models/thd_hero/aya/e61a3819/attack.vanim_c rename to game/models/thd_hero/aya/e61a3819/attack.vanim_c diff --git a/models/thd_hero/aya/e61a3819/attack2.vanim_c b/game/models/thd_hero/aya/e61a3819/attack2.vanim_c similarity index 100% rename from models/thd_hero/aya/e61a3819/attack2.vanim_c rename to game/models/thd_hero/aya/e61a3819/attack2.vanim_c diff --git a/models/thd_hero/aya/e61a3819/aya_animation.vanim_c b/game/models/thd_hero/aya/e61a3819/aya_animation.vanim_c similarity index 100% rename from models/thd_hero/aya/e61a3819/aya_animation.vanim_c rename to game/models/thd_hero/aya/e61a3819/aya_animation.vanim_c diff --git a/models/thd_hero/aya/e61a3819/cast1.vanim_c b/game/models/thd_hero/aya/e61a3819/cast1.vanim_c similarity index 100% rename from models/thd_hero/aya/e61a3819/cast1.vanim_c rename to game/models/thd_hero/aya/e61a3819/cast1.vanim_c diff --git a/models/thd_hero/aya/e61a3819/idle.vanim_c b/game/models/thd_hero/aya/e61a3819/idle.vanim_c similarity index 100% rename from models/thd_hero/aya/e61a3819/idle.vanim_c rename to game/models/thd_hero/aya/e61a3819/idle.vanim_c diff --git a/models/thd_hero/aya/e61a3819/run.vanim_c b/game/models/thd_hero/aya/e61a3819/run.vanim_c similarity index 100% rename from models/thd_hero/aya/e61a3819/run.vanim_c rename to game/models/thd_hero/aya/e61a3819/run.vanim_c diff --git a/models/thd_hero/byakuren/5e9c9fb9/attack1.vanim_c b/game/models/thd_hero/byakuren/5e9c9fb9/attack1.vanim_c similarity index 100% rename from models/thd_hero/byakuren/5e9c9fb9/attack1.vanim_c rename to game/models/thd_hero/byakuren/5e9c9fb9/attack1.vanim_c diff --git a/models/thd_hero/byakuren/5e9c9fb9/byakuren_animation.vanim_c b/game/models/thd_hero/byakuren/5e9c9fb9/byakuren_animation.vanim_c similarity index 100% rename from models/thd_hero/byakuren/5e9c9fb9/byakuren_animation.vanim_c rename to game/models/thd_hero/byakuren/5e9c9fb9/byakuren_animation.vanim_c diff --git a/models/thd_hero/byakuren/5e9c9fb9/cast.vanim_c b/game/models/thd_hero/byakuren/5e9c9fb9/cast.vanim_c similarity index 100% rename from models/thd_hero/byakuren/5e9c9fb9/cast.vanim_c rename to game/models/thd_hero/byakuren/5e9c9fb9/cast.vanim_c diff --git a/models/thd_hero/byakuren/5e9c9fb9/cast2.vanim_c b/game/models/thd_hero/byakuren/5e9c9fb9/cast2.vanim_c similarity index 100% rename from models/thd_hero/byakuren/5e9c9fb9/cast2.vanim_c rename to game/models/thd_hero/byakuren/5e9c9fb9/cast2.vanim_c diff --git a/models/thd_hero/byakuren/5e9c9fb9/idle.vanim_c b/game/models/thd_hero/byakuren/5e9c9fb9/idle.vanim_c similarity index 100% rename from models/thd_hero/byakuren/5e9c9fb9/idle.vanim_c rename to game/models/thd_hero/byakuren/5e9c9fb9/idle.vanim_c diff --git a/models/thd_hero/byakuren/5e9c9fb9/run.vanim_c b/game/models/thd_hero/byakuren/5e9c9fb9/run.vanim_c similarity index 100% rename from models/thd_hero/byakuren/5e9c9fb9/run.vanim_c rename to game/models/thd_hero/byakuren/5e9c9fb9/run.vanim_c diff --git a/models/thd_hero/byakuren/byakuren.vmdl_c b/game/models/thd_hero/byakuren/byakuren.vmdl_c similarity index 100% rename from models/thd_hero/byakuren/byakuren.vmdl_c rename to game/models/thd_hero/byakuren/byakuren.vmdl_c diff --git a/models/thd_hero/byakuren/byakuren.vmesh_c b/game/models/thd_hero/byakuren/byakuren.vmesh_c similarity index 100% rename from models/thd_hero/byakuren/byakuren.vmesh_c rename to game/models/thd_hero/byakuren/byakuren.vmesh_c diff --git a/models/thd_hero/byakuren/byakuren_5e9c9fb9.vagrp_c b/game/models/thd_hero/byakuren/byakuren_5e9c9fb9.vagrp_c similarity index 100% rename from models/thd_hero/byakuren/byakuren_5e9c9fb9.vagrp_c rename to game/models/thd_hero/byakuren/byakuren_5e9c9fb9.vagrp_c diff --git a/models/thd_hero/byakuren/item/b2d8428d/attack1.vanim_c b/game/models/thd_hero/byakuren/item/b2d8428d/attack1.vanim_c similarity index 100% rename from models/thd_hero/byakuren/item/b2d8428d/attack1.vanim_c rename to game/models/thd_hero/byakuren/item/b2d8428d/attack1.vanim_c diff --git a/models/thd_hero/byakuren/item/b2d8428d/cast.vanim_c b/game/models/thd_hero/byakuren/item/b2d8428d/cast.vanim_c similarity index 100% rename from models/thd_hero/byakuren/item/b2d8428d/cast.vanim_c rename to game/models/thd_hero/byakuren/item/b2d8428d/cast.vanim_c diff --git a/models/thd_hero/byakuren/item/b2d8428d/cast2.vanim_c b/game/models/thd_hero/byakuren/item/b2d8428d/cast2.vanim_c similarity index 100% rename from models/thd_hero/byakuren/item/b2d8428d/cast2.vanim_c rename to game/models/thd_hero/byakuren/item/b2d8428d/cast2.vanim_c diff --git a/models/thd_hero/byakuren/item/b2d8428d/idle.vanim_c b/game/models/thd_hero/byakuren/item/b2d8428d/idle.vanim_c similarity index 100% rename from models/thd_hero/byakuren/item/b2d8428d/idle.vanim_c rename to game/models/thd_hero/byakuren/item/b2d8428d/idle.vanim_c diff --git a/models/thd_hero/byakuren/item/b2d8428d/run.vanim_c b/game/models/thd_hero/byakuren/item/b2d8428d/run.vanim_c similarity index 100% rename from models/thd_hero/byakuren/item/b2d8428d/run.vanim_c rename to game/models/thd_hero/byakuren/item/b2d8428d/run.vanim_c diff --git a/models/thd_hero/byakuren/item/byakuren.vmesh_c b/game/models/thd_hero/byakuren/item/byakuren.vmesh_c similarity index 100% rename from models/thd_hero/byakuren/item/byakuren.vmesh_c rename to game/models/thd_hero/byakuren/item/byakuren.vmesh_c diff --git a/models/thd_hero/byakuren/item/item_byakuren.vmdl_c b/game/models/thd_hero/byakuren/item/item_byakuren.vmdl_c similarity index 100% rename from models/thd_hero/byakuren/item/item_byakuren.vmdl_c rename to game/models/thd_hero/byakuren/item/item_byakuren.vmdl_c diff --git a/models/thd_hero/byakuren/item/item_byakuren_b2d8428d.vagrp_c b/game/models/thd_hero/byakuren/item/item_byakuren_b2d8428d.vagrp_c similarity index 100% rename from models/thd_hero/byakuren/item/item_byakuren_b2d8428d.vagrp_c rename to game/models/thd_hero/byakuren/item/item_byakuren_b2d8428d.vagrp_c diff --git a/models/thd_hero/chen/379c7b94/attack1.vanim_c b/game/models/thd_hero/chen/379c7b94/attack1.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/attack1.vanim_c rename to game/models/thd_hero/chen/379c7b94/attack1.vanim_c diff --git a/models/thd_hero/chen/379c7b94/attack2.vanim_c b/game/models/thd_hero/chen/379c7b94/attack2.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/attack2.vanim_c rename to game/models/thd_hero/chen/379c7b94/attack2.vanim_c diff --git a/models/thd_hero/chen/379c7b94/cast1.vanim_c b/game/models/thd_hero/chen/379c7b94/cast1.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/cast1.vanim_c rename to game/models/thd_hero/chen/379c7b94/cast1.vanim_c diff --git a/models/thd_hero/chen/379c7b94/cast2.vanim_c b/game/models/thd_hero/chen/379c7b94/cast2.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/cast2.vanim_c rename to game/models/thd_hero/chen/379c7b94/cast2.vanim_c diff --git a/models/thd_hero/chen/379c7b94/cast3.vanim_c b/game/models/thd_hero/chen/379c7b94/cast3.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/cast3.vanim_c rename to game/models/thd_hero/chen/379c7b94/cast3.vanim_c diff --git a/models/thd_hero/chen/379c7b94/cast4.vanim_c b/game/models/thd_hero/chen/379c7b94/cast4.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/cast4.vanim_c rename to game/models/thd_hero/chen/379c7b94/cast4.vanim_c diff --git a/models/thd_hero/chen/379c7b94/chen_animation.vanim_c b/game/models/thd_hero/chen/379c7b94/chen_animation.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/chen_animation.vanim_c rename to game/models/thd_hero/chen/379c7b94/chen_animation.vanim_c diff --git a/models/thd_hero/chen/379c7b94/idle1.vanim_c b/game/models/thd_hero/chen/379c7b94/idle1.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/idle1.vanim_c rename to game/models/thd_hero/chen/379c7b94/idle1.vanim_c diff --git a/models/thd_hero/chen/379c7b94/idle2.vanim_c b/game/models/thd_hero/chen/379c7b94/idle2.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/idle2.vanim_c rename to game/models/thd_hero/chen/379c7b94/idle2.vanim_c diff --git a/models/thd_hero/chen/379c7b94/idle3.vanim_c b/game/models/thd_hero/chen/379c7b94/idle3.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/idle3.vanim_c rename to game/models/thd_hero/chen/379c7b94/idle3.vanim_c diff --git a/models/thd_hero/chen/379c7b94/run1.vanim_c b/game/models/thd_hero/chen/379c7b94/run1.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/run1.vanim_c rename to game/models/thd_hero/chen/379c7b94/run1.vanim_c diff --git a/models/thd_hero/chen/379c7b94/run2.vanim_c b/game/models/thd_hero/chen/379c7b94/run2.vanim_c similarity index 100% rename from models/thd_hero/chen/379c7b94/run2.vanim_c rename to game/models/thd_hero/chen/379c7b94/run2.vanim_c diff --git a/models/thd_hero/chen/chen.vmdl_c b/game/models/thd_hero/chen/chen.vmdl_c similarity index 100% rename from models/thd_hero/chen/chen.vmdl_c rename to game/models/thd_hero/chen/chen.vmdl_c diff --git a/models/thd_hero/chen/chen.vmesh_c b/game/models/thd_hero/chen/chen.vmesh_c similarity index 100% rename from models/thd_hero/chen/chen.vmesh_c rename to game/models/thd_hero/chen/chen.vmesh_c diff --git a/models/thd_hero/chen/chen_379c7b94.vagrp_c b/game/models/thd_hero/chen/chen_379c7b94.vagrp_c similarity index 100% rename from models/thd_hero/chen/chen_379c7b94.vagrp_c rename to game/models/thd_hero/chen/chen_379c7b94.vagrp_c diff --git a/models/thd_hero/chen/item/chen.vmesh_c b/game/models/thd_hero/chen/item/chen.vmesh_c similarity index 100% rename from models/thd_hero/chen/item/chen.vmesh_c rename to game/models/thd_hero/chen/item/chen.vmesh_c diff --git a/models/thd_hero/chen/item/f52ca8b7/attack1.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/attack1.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/attack1.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/attack1.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/attack2.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/attack2.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/attack2.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/attack2.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/cast1.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/cast1.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/cast1.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/cast1.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/cast2.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/cast2.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/cast2.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/cast2.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/cast3.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/cast3.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/cast3.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/cast3.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/cast4.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/cast4.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/cast4.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/cast4.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/idle1.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/idle1.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/idle1.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/idle1.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/idle2.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/idle2.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/idle2.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/idle2.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/idle3.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/idle3.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/idle3.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/idle3.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/run1.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/run1.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/run1.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/run1.vanim_c diff --git a/models/thd_hero/chen/item/f52ca8b7/run2.vanim_c b/game/models/thd_hero/chen/item/f52ca8b7/run2.vanim_c similarity index 100% rename from models/thd_hero/chen/item/f52ca8b7/run2.vanim_c rename to game/models/thd_hero/chen/item/f52ca8b7/run2.vanim_c diff --git a/models/thd_hero/chen/item/item_chen.vmdl_c b/game/models/thd_hero/chen/item/item_chen.vmdl_c similarity index 100% rename from models/thd_hero/chen/item/item_chen.vmdl_c rename to game/models/thd_hero/chen/item/item_chen.vmdl_c diff --git a/models/thd_hero/chen/item/item_chen_f52ca8b7.vagrp_c b/game/models/thd_hero/chen/item/item_chen_f52ca8b7.vagrp_c similarity index 100% rename from models/thd_hero/chen/item/item_chen_f52ca8b7.vagrp_c rename to game/models/thd_hero/chen/item/item_chen_f52ca8b7.vagrp_c diff --git a/models/thd_hero/daiyousei/80b6ca11/attack1.vanim_c b/game/models/thd_hero/daiyousei/80b6ca11/attack1.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/80b6ca11/attack1.vanim_c rename to game/models/thd_hero/daiyousei/80b6ca11/attack1.vanim_c diff --git a/models/thd_hero/daiyousei/80b6ca11/attack2.vanim_c b/game/models/thd_hero/daiyousei/80b6ca11/attack2.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/80b6ca11/attack2.vanim_c rename to game/models/thd_hero/daiyousei/80b6ca11/attack2.vanim_c diff --git a/models/thd_hero/daiyousei/80b6ca11/cast1.vanim_c b/game/models/thd_hero/daiyousei/80b6ca11/cast1.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/80b6ca11/cast1.vanim_c rename to game/models/thd_hero/daiyousei/80b6ca11/cast1.vanim_c diff --git a/models/thd_hero/daiyousei/80b6ca11/cast2.vanim_c b/game/models/thd_hero/daiyousei/80b6ca11/cast2.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/80b6ca11/cast2.vanim_c rename to game/models/thd_hero/daiyousei/80b6ca11/cast2.vanim_c diff --git a/models/thd_hero/daiyousei/80b6ca11/idle.vanim_c b/game/models/thd_hero/daiyousei/80b6ca11/idle.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/80b6ca11/idle.vanim_c rename to game/models/thd_hero/daiyousei/80b6ca11/idle.vanim_c diff --git a/models/thd_hero/daiyousei/80b6ca11/por.vanim_c b/game/models/thd_hero/daiyousei/80b6ca11/por.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/80b6ca11/por.vanim_c rename to game/models/thd_hero/daiyousei/80b6ca11/por.vanim_c diff --git a/models/thd_hero/daiyousei/80b6ca11/run.vanim_c b/game/models/thd_hero/daiyousei/80b6ca11/run.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/80b6ca11/run.vanim_c rename to game/models/thd_hero/daiyousei/80b6ca11/run.vanim_c diff --git a/models/thd_hero/daiyousei/daiyousei.vmdl_c b/game/models/thd_hero/daiyousei/daiyousei.vmdl_c similarity index 100% rename from models/thd_hero/daiyousei/daiyousei.vmdl_c rename to game/models/thd_hero/daiyousei/daiyousei.vmdl_c diff --git a/models/thd_hero/daiyousei/daiyousei.vmesh_c b/game/models/thd_hero/daiyousei/daiyousei.vmesh_c similarity index 100% rename from models/thd_hero/daiyousei/daiyousei.vmesh_c rename to game/models/thd_hero/daiyousei/daiyousei.vmesh_c diff --git a/models/thd_hero/daiyousei/daiyousei_80b6ca11.vagrp_c b/game/models/thd_hero/daiyousei/daiyousei_80b6ca11.vagrp_c similarity index 100% rename from models/thd_hero/daiyousei/daiyousei_80b6ca11.vagrp_c rename to game/models/thd_hero/daiyousei/daiyousei_80b6ca11.vagrp_c diff --git a/models/thd_hero/daiyousei/item/20fcef8c/attack1.vanim_c b/game/models/thd_hero/daiyousei/item/20fcef8c/attack1.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/item/20fcef8c/attack1.vanim_c rename to game/models/thd_hero/daiyousei/item/20fcef8c/attack1.vanim_c diff --git a/models/thd_hero/daiyousei/item/20fcef8c/attack2.vanim_c b/game/models/thd_hero/daiyousei/item/20fcef8c/attack2.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/item/20fcef8c/attack2.vanim_c rename to game/models/thd_hero/daiyousei/item/20fcef8c/attack2.vanim_c diff --git a/models/thd_hero/daiyousei/item/20fcef8c/cast1.vanim_c b/game/models/thd_hero/daiyousei/item/20fcef8c/cast1.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/item/20fcef8c/cast1.vanim_c rename to game/models/thd_hero/daiyousei/item/20fcef8c/cast1.vanim_c diff --git a/models/thd_hero/daiyousei/item/20fcef8c/cast2.vanim_c b/game/models/thd_hero/daiyousei/item/20fcef8c/cast2.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/item/20fcef8c/cast2.vanim_c rename to game/models/thd_hero/daiyousei/item/20fcef8c/cast2.vanim_c diff --git a/models/thd_hero/daiyousei/item/20fcef8c/idle.vanim_c b/game/models/thd_hero/daiyousei/item/20fcef8c/idle.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/item/20fcef8c/idle.vanim_c rename to game/models/thd_hero/daiyousei/item/20fcef8c/idle.vanim_c diff --git a/models/thd_hero/daiyousei/item/20fcef8c/por.vanim_c b/game/models/thd_hero/daiyousei/item/20fcef8c/por.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/item/20fcef8c/por.vanim_c rename to game/models/thd_hero/daiyousei/item/20fcef8c/por.vanim_c diff --git a/models/thd_hero/daiyousei/item/20fcef8c/run.vanim_c b/game/models/thd_hero/daiyousei/item/20fcef8c/run.vanim_c similarity index 100% rename from models/thd_hero/daiyousei/item/20fcef8c/run.vanim_c rename to game/models/thd_hero/daiyousei/item/20fcef8c/run.vanim_c diff --git a/models/thd_hero/daiyousei/item/daiyousei.vmesh_c b/game/models/thd_hero/daiyousei/item/daiyousei.vmesh_c similarity index 100% rename from models/thd_hero/daiyousei/item/daiyousei.vmesh_c rename to game/models/thd_hero/daiyousei/item/daiyousei.vmesh_c diff --git a/models/thd_hero/daiyousei/item/item_daiyousei.vmdl_c b/game/models/thd_hero/daiyousei/item/item_daiyousei.vmdl_c similarity index 100% rename from models/thd_hero/daiyousei/item/item_daiyousei.vmdl_c rename to game/models/thd_hero/daiyousei/item/item_daiyousei.vmdl_c diff --git a/models/thd_hero/daiyousei/item/item_daiyousei_20fcef8c.vagrp_c b/game/models/thd_hero/daiyousei/item/item_daiyousei_20fcef8c.vagrp_c similarity index 100% rename from models/thd_hero/daiyousei/item/item_daiyousei_20fcef8c.vagrp_c rename to game/models/thd_hero/daiyousei/item/item_daiyousei_20fcef8c.vagrp_c diff --git a/models/thd_hero/eirin/db8a11be/attack.vanim_c b/game/models/thd_hero/eirin/db8a11be/attack.vanim_c similarity index 100% rename from models/thd_hero/eirin/db8a11be/attack.vanim_c rename to game/models/thd_hero/eirin/db8a11be/attack.vanim_c diff --git a/models/thd_hero/eirin/db8a11be/cast1.vanim_c b/game/models/thd_hero/eirin/db8a11be/cast1.vanim_c similarity index 100% rename from models/thd_hero/eirin/db8a11be/cast1.vanim_c rename to game/models/thd_hero/eirin/db8a11be/cast1.vanim_c diff --git a/models/thd_hero/eirin/db8a11be/cast2.vanim_c b/game/models/thd_hero/eirin/db8a11be/cast2.vanim_c similarity index 100% rename from models/thd_hero/eirin/db8a11be/cast2.vanim_c rename to game/models/thd_hero/eirin/db8a11be/cast2.vanim_c diff --git a/models/thd_hero/eirin/db8a11be/cast3.vanim_c b/game/models/thd_hero/eirin/db8a11be/cast3.vanim_c similarity index 100% rename from models/thd_hero/eirin/db8a11be/cast3.vanim_c rename to game/models/thd_hero/eirin/db8a11be/cast3.vanim_c diff --git a/models/thd_hero/eirin/db8a11be/cast4.vanim_c b/game/models/thd_hero/eirin/db8a11be/cast4.vanim_c similarity index 100% rename from models/thd_hero/eirin/db8a11be/cast4.vanim_c rename to game/models/thd_hero/eirin/db8a11be/cast4.vanim_c diff --git a/models/thd_hero/eirin/db8a11be/idle.vanim_c b/game/models/thd_hero/eirin/db8a11be/idle.vanim_c similarity index 100% rename from models/thd_hero/eirin/db8a11be/idle.vanim_c rename to game/models/thd_hero/eirin/db8a11be/idle.vanim_c diff --git a/models/thd_hero/eirin/db8a11be/run.vanim_c b/game/models/thd_hero/eirin/db8a11be/run.vanim_c similarity index 100% rename from models/thd_hero/eirin/db8a11be/run.vanim_c rename to game/models/thd_hero/eirin/db8a11be/run.vanim_c diff --git a/models/thd_hero/eirin/eirin.vmdl_c b/game/models/thd_hero/eirin/eirin.vmdl_c similarity index 100% rename from models/thd_hero/eirin/eirin.vmdl_c rename to game/models/thd_hero/eirin/eirin.vmdl_c diff --git a/models/thd_hero/eirin/eirin.vmesh_c b/game/models/thd_hero/eirin/eirin.vmesh_c similarity index 100% rename from models/thd_hero/eirin/eirin.vmesh_c rename to game/models/thd_hero/eirin/eirin.vmesh_c diff --git a/models/thd_hero/eirin/eirin_db8a11be.vagrp_c b/game/models/thd_hero/eirin/eirin_db8a11be.vagrp_c similarity index 100% rename from models/thd_hero/eirin/eirin_db8a11be.vagrp_c rename to game/models/thd_hero/eirin/eirin_db8a11be.vagrp_c diff --git a/models/thd_hero/eirin/item/543e10e3/attack.vanim_c b/game/models/thd_hero/eirin/item/543e10e3/attack.vanim_c similarity index 100% rename from models/thd_hero/eirin/item/543e10e3/attack.vanim_c rename to game/models/thd_hero/eirin/item/543e10e3/attack.vanim_c diff --git a/models/thd_hero/eirin/item/543e10e3/cast1.vanim_c b/game/models/thd_hero/eirin/item/543e10e3/cast1.vanim_c similarity index 100% rename from models/thd_hero/eirin/item/543e10e3/cast1.vanim_c rename to game/models/thd_hero/eirin/item/543e10e3/cast1.vanim_c diff --git a/models/thd_hero/eirin/item/543e10e3/cast2.vanim_c b/game/models/thd_hero/eirin/item/543e10e3/cast2.vanim_c similarity index 100% rename from models/thd_hero/eirin/item/543e10e3/cast2.vanim_c rename to game/models/thd_hero/eirin/item/543e10e3/cast2.vanim_c diff --git a/models/thd_hero/eirin/item/543e10e3/cast3.vanim_c b/game/models/thd_hero/eirin/item/543e10e3/cast3.vanim_c similarity index 100% rename from models/thd_hero/eirin/item/543e10e3/cast3.vanim_c rename to game/models/thd_hero/eirin/item/543e10e3/cast3.vanim_c diff --git a/models/thd_hero/eirin/item/543e10e3/cast4.vanim_c b/game/models/thd_hero/eirin/item/543e10e3/cast4.vanim_c similarity index 100% rename from models/thd_hero/eirin/item/543e10e3/cast4.vanim_c rename to game/models/thd_hero/eirin/item/543e10e3/cast4.vanim_c diff --git a/models/thd_hero/eirin/item/543e10e3/idle.vanim_c b/game/models/thd_hero/eirin/item/543e10e3/idle.vanim_c similarity index 100% rename from models/thd_hero/eirin/item/543e10e3/idle.vanim_c rename to game/models/thd_hero/eirin/item/543e10e3/idle.vanim_c diff --git a/models/thd_hero/eirin/item/543e10e3/run.vanim_c b/game/models/thd_hero/eirin/item/543e10e3/run.vanim_c similarity index 100% rename from models/thd_hero/eirin/item/543e10e3/run.vanim_c rename to game/models/thd_hero/eirin/item/543e10e3/run.vanim_c diff --git a/models/thd_hero/eirin/item/eirin.vmesh_c b/game/models/thd_hero/eirin/item/eirin.vmesh_c similarity index 100% rename from models/thd_hero/eirin/item/eirin.vmesh_c rename to game/models/thd_hero/eirin/item/eirin.vmesh_c diff --git a/models/thd_hero/eirin/item/item_eirin.vmdl_c b/game/models/thd_hero/eirin/item/item_eirin.vmdl_c similarity index 100% rename from models/thd_hero/eirin/item/item_eirin.vmdl_c rename to game/models/thd_hero/eirin/item/item_eirin.vmdl_c diff --git a/models/thd_hero/eirin/item/item_eirin_543e10e3.vagrp_c b/game/models/thd_hero/eirin/item/item_eirin_543e10e3.vagrp_c similarity index 100% rename from models/thd_hero/eirin/item/item_eirin_543e10e3.vagrp_c rename to game/models/thd_hero/eirin/item/item_eirin_543e10e3.vagrp_c diff --git a/models/thd_hero/futo/ccbb6ec0/1.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/1.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/1.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/1.vanim_c diff --git a/models/thd_hero/futo/ccbb6ec0/attack.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/attack.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/attack.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/attack.vanim_c diff --git a/models/thd_hero/futo/ccbb6ec0/cast.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/cast.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/cast.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/cast.vanim_c diff --git a/models/thd_hero/futo/ccbb6ec0/cast2.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/cast2.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/cast2.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/cast2.vanim_c diff --git a/models/thd_hero/futo/ccbb6ec0/cast4.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/cast4.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/cast4.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/cast4.vanim_c diff --git a/models/thd_hero/futo/ccbb6ec0/futo_animation.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/futo_animation.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/futo_animation.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/futo_animation.vanim_c diff --git a/models/thd_hero/futo/ccbb6ec0/idle.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/idle.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/idle.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/idle.vanim_c diff --git a/models/thd_hero/futo/ccbb6ec0/run.vanim_c b/game/models/thd_hero/futo/ccbb6ec0/run.vanim_c similarity index 100% rename from models/thd_hero/futo/ccbb6ec0/run.vanim_c rename to game/models/thd_hero/futo/ccbb6ec0/run.vanim_c diff --git a/models/thd_hero/futo/futo.vmdl_c b/game/models/thd_hero/futo/futo.vmdl_c similarity index 100% rename from models/thd_hero/futo/futo.vmdl_c rename to game/models/thd_hero/futo/futo.vmdl_c diff --git a/models/thd_hero/futo/futo.vmesh_c b/game/models/thd_hero/futo/futo.vmesh_c similarity index 100% rename from models/thd_hero/futo/futo.vmesh_c rename to game/models/thd_hero/futo/futo.vmesh_c diff --git a/models/thd_hero/futo/futo_ccbb6ec0.vagrp_c b/game/models/thd_hero/futo/futo_ccbb6ec0.vagrp_c similarity index 100% rename from models/thd_hero/futo/futo_ccbb6ec0.vagrp_c rename to game/models/thd_hero/futo/futo_ccbb6ec0.vagrp_c diff --git a/models/thd_hero/futo/futo_plate.vmdl_c b/game/models/thd_hero/futo/futo_plate.vmdl_c similarity index 100% rename from models/thd_hero/futo/futo_plate.vmdl_c rename to game/models/thd_hero/futo/futo_plate.vmdl_c diff --git a/models/thd_hero/futo/futo_plate.vmesh_c b/game/models/thd_hero/futo/futo_plate.vmesh_c similarity index 100% rename from models/thd_hero/futo/futo_plate.vmesh_c rename to game/models/thd_hero/futo/futo_plate.vmesh_c diff --git a/models/thd_hero/futo/item/09265e7b/1.vanim_c b/game/models/thd_hero/futo/item/09265e7b/1.vanim_c similarity index 100% rename from models/thd_hero/futo/item/09265e7b/1.vanim_c rename to game/models/thd_hero/futo/item/09265e7b/1.vanim_c diff --git a/models/thd_hero/futo/item/09265e7b/attack.vanim_c b/game/models/thd_hero/futo/item/09265e7b/attack.vanim_c similarity index 100% rename from models/thd_hero/futo/item/09265e7b/attack.vanim_c rename to game/models/thd_hero/futo/item/09265e7b/attack.vanim_c diff --git a/models/thd_hero/futo/item/09265e7b/cast.vanim_c b/game/models/thd_hero/futo/item/09265e7b/cast.vanim_c similarity index 100% rename from models/thd_hero/futo/item/09265e7b/cast.vanim_c rename to game/models/thd_hero/futo/item/09265e7b/cast.vanim_c diff --git a/models/thd_hero/futo/item/09265e7b/cast2.vanim_c b/game/models/thd_hero/futo/item/09265e7b/cast2.vanim_c similarity index 100% rename from models/thd_hero/futo/item/09265e7b/cast2.vanim_c rename to game/models/thd_hero/futo/item/09265e7b/cast2.vanim_c diff --git a/models/thd_hero/futo/item/09265e7b/idle.vanim_c b/game/models/thd_hero/futo/item/09265e7b/idle.vanim_c similarity index 100% rename from models/thd_hero/futo/item/09265e7b/idle.vanim_c rename to game/models/thd_hero/futo/item/09265e7b/idle.vanim_c diff --git a/models/thd_hero/futo/item/09265e7b/run.vanim_c b/game/models/thd_hero/futo/item/09265e7b/run.vanim_c similarity index 100% rename from models/thd_hero/futo/item/09265e7b/run.vanim_c rename to game/models/thd_hero/futo/item/09265e7b/run.vanim_c diff --git a/models/thd_hero/futo/item/futo.vmesh_c b/game/models/thd_hero/futo/item/futo.vmesh_c similarity index 100% rename from models/thd_hero/futo/item/futo.vmesh_c rename to game/models/thd_hero/futo/item/futo.vmesh_c diff --git a/models/thd_hero/futo/item/item_futo.vmdl_c b/game/models/thd_hero/futo/item/item_futo.vmdl_c similarity index 100% rename from models/thd_hero/futo/item/item_futo.vmdl_c rename to game/models/thd_hero/futo/item/item_futo.vmdl_c diff --git a/models/thd_hero/futo/item/item_futo_09265e7b.vagrp_c b/game/models/thd_hero/futo/item/item_futo_09265e7b.vagrp_c similarity index 100% rename from models/thd_hero/futo/item/item_futo_09265e7b.vagrp_c rename to game/models/thd_hero/futo/item/item_futo_09265e7b.vagrp_c diff --git a/models/thd_hero/hanadayousei/2b4cc7c2/attack.vanim_c b/game/models/thd_hero/hanadayousei/2b4cc7c2/attack.vanim_c similarity index 100% rename from models/thd_hero/hanadayousei/2b4cc7c2/attack.vanim_c rename to game/models/thd_hero/hanadayousei/2b4cc7c2/attack.vanim_c diff --git a/models/thd_hero/hanadayousei/2b4cc7c2/idle.vanim_c b/game/models/thd_hero/hanadayousei/2b4cc7c2/idle.vanim_c similarity index 100% rename from models/thd_hero/hanadayousei/2b4cc7c2/idle.vanim_c rename to game/models/thd_hero/hanadayousei/2b4cc7c2/idle.vanim_c diff --git a/models/thd_hero/hanadayousei/2b4cc7c2/run.vanim_c b/game/models/thd_hero/hanadayousei/2b4cc7c2/run.vanim_c similarity index 100% rename from models/thd_hero/hanadayousei/2b4cc7c2/run.vanim_c rename to game/models/thd_hero/hanadayousei/2b4cc7c2/run.vanim_c diff --git a/models/thd_hero/hanadayousei/hanadayousei.vmdl_c b/game/models/thd_hero/hanadayousei/hanadayousei.vmdl_c similarity index 100% rename from models/thd_hero/hanadayousei/hanadayousei.vmdl_c rename to game/models/thd_hero/hanadayousei/hanadayousei.vmdl_c diff --git a/models/thd_hero/hanadayousei/hanadayousei.vmesh_c b/game/models/thd_hero/hanadayousei/hanadayousei.vmesh_c similarity index 100% rename from models/thd_hero/hanadayousei/hanadayousei.vmesh_c rename to game/models/thd_hero/hanadayousei/hanadayousei.vmesh_c diff --git a/models/thd_hero/hanadayousei/hanadayousei_2b4cc7c2.vagrp_c b/game/models/thd_hero/hanadayousei/hanadayousei_2b4cc7c2.vagrp_c similarity index 100% rename from models/thd_hero/hanadayousei/hanadayousei_2b4cc7c2.vagrp_c rename to game/models/thd_hero/hanadayousei/hanadayousei_2b4cc7c2.vagrp_c diff --git a/models/thd_hero/hanadayousei/item/f6542b68/attack.vanim_c b/game/models/thd_hero/hanadayousei/item/f6542b68/attack.vanim_c similarity index 100% rename from models/thd_hero/hanadayousei/item/f6542b68/attack.vanim_c rename to game/models/thd_hero/hanadayousei/item/f6542b68/attack.vanim_c diff --git a/models/thd_hero/hanadayousei/item/f6542b68/idle.vanim_c b/game/models/thd_hero/hanadayousei/item/f6542b68/idle.vanim_c similarity index 100% rename from models/thd_hero/hanadayousei/item/f6542b68/idle.vanim_c rename to game/models/thd_hero/hanadayousei/item/f6542b68/idle.vanim_c diff --git a/models/thd_hero/hanadayousei/item/f6542b68/run.vanim_c b/game/models/thd_hero/hanadayousei/item/f6542b68/run.vanim_c similarity index 100% rename from models/thd_hero/hanadayousei/item/f6542b68/run.vanim_c rename to game/models/thd_hero/hanadayousei/item/f6542b68/run.vanim_c diff --git a/models/thd_hero/hanadayousei/item/hanadayousei.vmesh_c b/game/models/thd_hero/hanadayousei/item/hanadayousei.vmesh_c similarity index 100% rename from models/thd_hero/hanadayousei/item/hanadayousei.vmesh_c rename to game/models/thd_hero/hanadayousei/item/hanadayousei.vmesh_c diff --git a/models/thd_hero/hanadayousei/item/item_hanadayousei.vmdl_c b/game/models/thd_hero/hanadayousei/item/item_hanadayousei.vmdl_c similarity index 100% rename from models/thd_hero/hanadayousei/item/item_hanadayousei.vmdl_c rename to game/models/thd_hero/hanadayousei/item/item_hanadayousei.vmdl_c diff --git a/models/thd_hero/hanadayousei/item/item_hanadayousei_f6542b68.vagrp_c b/game/models/thd_hero/hanadayousei/item/item_hanadayousei_f6542b68.vagrp_c similarity index 100% rename from models/thd_hero/hanadayousei/item/item_hanadayousei_f6542b68.vagrp_c rename to game/models/thd_hero/hanadayousei/item/item_hanadayousei_f6542b68.vagrp_c diff --git a/models/thd_hero/hatate/10cd2518/attack1.vanim_c b/game/models/thd_hero/hatate/10cd2518/attack1.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/attack1.vanim_c rename to game/models/thd_hero/hatate/10cd2518/attack1.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/attack2.vanim_c b/game/models/thd_hero/hatate/10cd2518/attack2.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/attack2.vanim_c rename to game/models/thd_hero/hatate/10cd2518/attack2.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/cast1.vanim_c b/game/models/thd_hero/hatate/10cd2518/cast1.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/cast1.vanim_c rename to game/models/thd_hero/hatate/10cd2518/cast1.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/cast2.vanim_c b/game/models/thd_hero/hatate/10cd2518/cast2.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/cast2.vanim_c rename to game/models/thd_hero/hatate/10cd2518/cast2.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/cast3.vanim_c b/game/models/thd_hero/hatate/10cd2518/cast3.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/cast3.vanim_c rename to game/models/thd_hero/hatate/10cd2518/cast3.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/cast4.vanim_c b/game/models/thd_hero/hatate/10cd2518/cast4.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/cast4.vanim_c rename to game/models/thd_hero/hatate/10cd2518/cast4.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/hatate_animation.vanim_c b/game/models/thd_hero/hatate/10cd2518/hatate_animation.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/hatate_animation.vanim_c rename to game/models/thd_hero/hatate/10cd2518/hatate_animation.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/idle.vanim_c b/game/models/thd_hero/hatate/10cd2518/idle.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/idle.vanim_c rename to game/models/thd_hero/hatate/10cd2518/idle.vanim_c diff --git a/models/thd_hero/hatate/10cd2518/run.vanim_c b/game/models/thd_hero/hatate/10cd2518/run.vanim_c similarity index 100% rename from models/thd_hero/hatate/10cd2518/run.vanim_c rename to game/models/thd_hero/hatate/10cd2518/run.vanim_c diff --git a/models/thd_hero/hatate/hatate.vmdl_c b/game/models/thd_hero/hatate/hatate.vmdl_c similarity index 100% rename from models/thd_hero/hatate/hatate.vmdl_c rename to game/models/thd_hero/hatate/hatate.vmdl_c diff --git a/models/thd_hero/hatate/hatate.vmesh_c b/game/models/thd_hero/hatate/hatate.vmesh_c similarity index 100% rename from models/thd_hero/hatate/hatate.vmesh_c rename to game/models/thd_hero/hatate/hatate.vmesh_c diff --git a/models/thd_hero/hatate/hatate_10cd2518.vagrp_c b/game/models/thd_hero/hatate/hatate_10cd2518.vagrp_c similarity index 100% rename from models/thd_hero/hatate/hatate_10cd2518.vagrp_c rename to game/models/thd_hero/hatate/hatate_10cd2518.vagrp_c diff --git a/models/thd_hero/hatate/item/0d373159/attack1.vanim_c b/game/models/thd_hero/hatate/item/0d373159/attack1.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/attack1.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/attack1.vanim_c diff --git a/models/thd_hero/hatate/item/0d373159/attack2.vanim_c b/game/models/thd_hero/hatate/item/0d373159/attack2.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/attack2.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/attack2.vanim_c diff --git a/models/thd_hero/hatate/item/0d373159/cast1.vanim_c b/game/models/thd_hero/hatate/item/0d373159/cast1.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/cast1.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/cast1.vanim_c diff --git a/models/thd_hero/hatate/item/0d373159/cast2.vanim_c b/game/models/thd_hero/hatate/item/0d373159/cast2.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/cast2.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/cast2.vanim_c diff --git a/models/thd_hero/hatate/item/0d373159/cast3.vanim_c b/game/models/thd_hero/hatate/item/0d373159/cast3.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/cast3.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/cast3.vanim_c diff --git a/models/thd_hero/hatate/item/0d373159/cast4.vanim_c b/game/models/thd_hero/hatate/item/0d373159/cast4.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/cast4.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/cast4.vanim_c diff --git a/models/thd_hero/hatate/item/0d373159/idle.vanim_c b/game/models/thd_hero/hatate/item/0d373159/idle.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/idle.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/idle.vanim_c diff --git a/models/thd_hero/hatate/item/0d373159/run.vanim_c b/game/models/thd_hero/hatate/item/0d373159/run.vanim_c similarity index 100% rename from models/thd_hero/hatate/item/0d373159/run.vanim_c rename to game/models/thd_hero/hatate/item/0d373159/run.vanim_c diff --git a/models/thd_hero/hatate/item/hatate.vmesh_c b/game/models/thd_hero/hatate/item/hatate.vmesh_c similarity index 100% rename from models/thd_hero/hatate/item/hatate.vmesh_c rename to game/models/thd_hero/hatate/item/hatate.vmesh_c diff --git a/models/thd_hero/hatate/item/item_hatate.vmdl_c b/game/models/thd_hero/hatate/item/item_hatate.vmdl_c similarity index 100% rename from models/thd_hero/hatate/item/item_hatate.vmdl_c rename to game/models/thd_hero/hatate/item/item_hatate.vmdl_c diff --git a/models/thd_hero/hatate/item/item_hatate_0d373159.vagrp_c b/game/models/thd_hero/hatate/item/item_hatate_0d373159.vagrp_c similarity index 100% rename from models/thd_hero/hatate/item/item_hatate_0d373159.vagrp_c rename to game/models/thd_hero/hatate/item/item_hatate_0d373159.vagrp_c diff --git a/models/thd_hero/hina/b6cfd493/attack.vanim_c b/game/models/thd_hero/hina/b6cfd493/attack.vanim_c similarity index 100% rename from models/thd_hero/hina/b6cfd493/attack.vanim_c rename to game/models/thd_hero/hina/b6cfd493/attack.vanim_c diff --git a/models/thd_hero/hina/b6cfd493/cast4.vanim_c b/game/models/thd_hero/hina/b6cfd493/cast4.vanim_c similarity index 100% rename from models/thd_hero/hina/b6cfd493/cast4.vanim_c rename to game/models/thd_hero/hina/b6cfd493/cast4.vanim_c diff --git a/models/thd_hero/hina/b6cfd493/cast4_2.vanim_c b/game/models/thd_hero/hina/b6cfd493/cast4_2.vanim_c similarity index 100% rename from models/thd_hero/hina/b6cfd493/cast4_2.vanim_c rename to game/models/thd_hero/hina/b6cfd493/cast4_2.vanim_c diff --git a/models/thd_hero/hina/b6cfd493/hina_animation.vanim_c b/game/models/thd_hero/hina/b6cfd493/hina_animation.vanim_c similarity index 100% rename from models/thd_hero/hina/b6cfd493/hina_animation.vanim_c rename to game/models/thd_hero/hina/b6cfd493/hina_animation.vanim_c diff --git a/models/thd_hero/hina/b6cfd493/idle.vanim_c b/game/models/thd_hero/hina/b6cfd493/idle.vanim_c similarity index 100% rename from models/thd_hero/hina/b6cfd493/idle.vanim_c rename to game/models/thd_hero/hina/b6cfd493/idle.vanim_c diff --git a/models/thd_hero/hina/b6cfd493/run.vanim_c b/game/models/thd_hero/hina/b6cfd493/run.vanim_c similarity index 100% rename from models/thd_hero/hina/b6cfd493/run.vanim_c rename to game/models/thd_hero/hina/b6cfd493/run.vanim_c diff --git a/models/thd_hero/hina/hina.vmdl_c b/game/models/thd_hero/hina/hina.vmdl_c similarity index 100% rename from models/thd_hero/hina/hina.vmdl_c rename to game/models/thd_hero/hina/hina.vmdl_c diff --git a/models/thd_hero/hina/hina.vmesh_c b/game/models/thd_hero/hina/hina.vmesh_c similarity index 100% rename from models/thd_hero/hina/hina.vmesh_c rename to game/models/thd_hero/hina/hina.vmesh_c diff --git a/models/thd_hero/hina/hina_b6cfd493.vagrp_c b/game/models/thd_hero/hina/hina_b6cfd493.vagrp_c similarity index 100% rename from models/thd_hero/hina/hina_b6cfd493.vagrp_c rename to game/models/thd_hero/hina/hina_b6cfd493.vagrp_c diff --git a/models/thd_hero/hina/item/67053901/attack.vanim_c b/game/models/thd_hero/hina/item/67053901/attack.vanim_c similarity index 100% rename from models/thd_hero/hina/item/67053901/attack.vanim_c rename to game/models/thd_hero/hina/item/67053901/attack.vanim_c diff --git a/models/thd_hero/hina/item/67053901/cast4.vanim_c b/game/models/thd_hero/hina/item/67053901/cast4.vanim_c similarity index 100% rename from models/thd_hero/hina/item/67053901/cast4.vanim_c rename to game/models/thd_hero/hina/item/67053901/cast4.vanim_c diff --git a/models/thd_hero/hina/item/67053901/cast4_2.vanim_c b/game/models/thd_hero/hina/item/67053901/cast4_2.vanim_c similarity index 100% rename from models/thd_hero/hina/item/67053901/cast4_2.vanim_c rename to game/models/thd_hero/hina/item/67053901/cast4_2.vanim_c diff --git a/models/thd_hero/hina/item/67053901/idle.vanim_c b/game/models/thd_hero/hina/item/67053901/idle.vanim_c similarity index 100% rename from models/thd_hero/hina/item/67053901/idle.vanim_c rename to game/models/thd_hero/hina/item/67053901/idle.vanim_c diff --git a/models/thd_hero/hina/item/67053901/run.vanim_c b/game/models/thd_hero/hina/item/67053901/run.vanim_c similarity index 100% rename from models/thd_hero/hina/item/67053901/run.vanim_c rename to game/models/thd_hero/hina/item/67053901/run.vanim_c diff --git a/models/thd_hero/hina/item/hina.vmesh_c b/game/models/thd_hero/hina/item/hina.vmesh_c similarity index 100% rename from models/thd_hero/hina/item/hina.vmesh_c rename to game/models/thd_hero/hina/item/hina.vmesh_c diff --git a/models/thd_hero/hina/item/item_hina.vmdl_c b/game/models/thd_hero/hina/item/item_hina.vmdl_c similarity index 100% rename from models/thd_hero/hina/item/item_hina.vmdl_c rename to game/models/thd_hero/hina/item/item_hina.vmdl_c diff --git a/models/thd_hero/hina/item/item_hina_67053901.vagrp_c b/game/models/thd_hero/hina/item/item_hina_67053901.vagrp_c similarity index 100% rename from models/thd_hero/hina/item/item_hina_67053901.vagrp_c rename to game/models/thd_hero/hina/item/item_hina_67053901.vagrp_c diff --git a/models/thd_hero/hourainingyou/45498b0e/hourai_attack.vanim_c b/game/models/thd_hero/hourainingyou/45498b0e/hourai_attack.vanim_c similarity index 100% rename from models/thd_hero/hourainingyou/45498b0e/hourai_attack.vanim_c rename to game/models/thd_hero/hourainingyou/45498b0e/hourai_attack.vanim_c diff --git a/models/thd_hero/hourainingyou/45498b0e/hourai_idle.vanim_c b/game/models/thd_hero/hourainingyou/45498b0e/hourai_idle.vanim_c similarity index 100% rename from models/thd_hero/hourainingyou/45498b0e/hourai_idle.vanim_c rename to game/models/thd_hero/hourainingyou/45498b0e/hourai_idle.vanim_c diff --git a/models/thd_hero/hourainingyou/45498b0e/hourai_run.vanim_c b/game/models/thd_hero/hourainingyou/45498b0e/hourai_run.vanim_c similarity index 100% rename from models/thd_hero/hourainingyou/45498b0e/hourai_run.vanim_c rename to game/models/thd_hero/hourainingyou/45498b0e/hourai_run.vanim_c diff --git a/models/thd_hero/hourainingyou/hourainingyou.vmdl_c b/game/models/thd_hero/hourainingyou/hourainingyou.vmdl_c similarity index 100% rename from models/thd_hero/hourainingyou/hourainingyou.vmdl_c rename to game/models/thd_hero/hourainingyou/hourainingyou.vmdl_c diff --git a/models/thd_hero/hourainingyou/hourainingyou.vmesh_c b/game/models/thd_hero/hourainingyou/hourainingyou.vmesh_c similarity index 100% rename from models/thd_hero/hourainingyou/hourainingyou.vmesh_c rename to game/models/thd_hero/hourainingyou/hourainingyou.vmesh_c diff --git a/models/thd_hero/hourainingyou/hourainingyou_45498b0e.vagrp_c b/game/models/thd_hero/hourainingyou/hourainingyou_45498b0e.vagrp_c similarity index 100% rename from models/thd_hero/hourainingyou/hourainingyou_45498b0e.vagrp_c rename to game/models/thd_hero/hourainingyou/hourainingyou_45498b0e.vagrp_c diff --git a/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_attack.vanim_c b/game/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_attack.vanim_c similarity index 100% rename from models/thd_hero/hourainingyou/item/e0ced9c9/hourai_attack.vanim_c rename to game/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_attack.vanim_c diff --git a/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_idle.vanim_c b/game/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_idle.vanim_c similarity index 100% rename from models/thd_hero/hourainingyou/item/e0ced9c9/hourai_idle.vanim_c rename to game/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_idle.vanim_c diff --git a/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_run.vanim_c b/game/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_run.vanim_c similarity index 100% rename from models/thd_hero/hourainingyou/item/e0ced9c9/hourai_run.vanim_c rename to game/models/thd_hero/hourainingyou/item/e0ced9c9/hourai_run.vanim_c diff --git a/models/thd_hero/hourainingyou/item/hourainingyou.vmesh_c b/game/models/thd_hero/hourainingyou/item/hourainingyou.vmesh_c similarity index 100% rename from models/thd_hero/hourainingyou/item/hourainingyou.vmesh_c rename to game/models/thd_hero/hourainingyou/item/hourainingyou.vmesh_c diff --git a/models/thd_hero/hourainingyou/item/item_hourainingyou.vmdl_c b/game/models/thd_hero/hourainingyou/item/item_hourainingyou.vmdl_c similarity index 100% rename from models/thd_hero/hourainingyou/item/item_hourainingyou.vmdl_c rename to game/models/thd_hero/hourainingyou/item/item_hourainingyou.vmdl_c diff --git a/models/thd_hero/hourainingyou/item/item_hourainingyou_e0ced9c9.vagrp_c b/game/models/thd_hero/hourainingyou/item/item_hourainingyou_e0ced9c9.vagrp_c similarity index 100% rename from models/thd_hero/hourainingyou/item/item_hourainingyou_e0ced9c9.vagrp_c rename to game/models/thd_hero/hourainingyou/item/item_hourainingyou_e0ced9c9.vagrp_c diff --git a/models/thd_hero/iku/0e3b27b7/attack.vanim_c b/game/models/thd_hero/iku/0e3b27b7/attack.vanim_c similarity index 100% rename from models/thd_hero/iku/0e3b27b7/attack.vanim_c rename to game/models/thd_hero/iku/0e3b27b7/attack.vanim_c diff --git a/models/thd_hero/iku/0e3b27b7/cast.vanim_c b/game/models/thd_hero/iku/0e3b27b7/cast.vanim_c similarity index 100% rename from models/thd_hero/iku/0e3b27b7/cast.vanim_c rename to game/models/thd_hero/iku/0e3b27b7/cast.vanim_c diff --git a/models/thd_hero/iku/0e3b27b7/idle.vanim_c b/game/models/thd_hero/iku/0e3b27b7/idle.vanim_c similarity index 100% rename from models/thd_hero/iku/0e3b27b7/idle.vanim_c rename to game/models/thd_hero/iku/0e3b27b7/idle.vanim_c diff --git a/models/thd_hero/iku/0e3b27b7/por.vanim_c b/game/models/thd_hero/iku/0e3b27b7/por.vanim_c similarity index 100% rename from models/thd_hero/iku/0e3b27b7/por.vanim_c rename to game/models/thd_hero/iku/0e3b27b7/por.vanim_c diff --git a/models/thd_hero/iku/0e3b27b7/run.vanim_c b/game/models/thd_hero/iku/0e3b27b7/run.vanim_c similarity index 100% rename from models/thd_hero/iku/0e3b27b7/run.vanim_c rename to game/models/thd_hero/iku/0e3b27b7/run.vanim_c diff --git a/models/thd_hero/iku/iku.vmdl_c b/game/models/thd_hero/iku/iku.vmdl_c similarity index 100% rename from models/thd_hero/iku/iku.vmdl_c rename to game/models/thd_hero/iku/iku.vmdl_c diff --git a/models/thd_hero/iku/iku.vmesh_c b/game/models/thd_hero/iku/iku.vmesh_c similarity index 100% rename from models/thd_hero/iku/iku.vmesh_c rename to game/models/thd_hero/iku/iku.vmesh_c diff --git a/models/thd_hero/iku/iku_0e3b27b7.vagrp_c b/game/models/thd_hero/iku/iku_0e3b27b7.vagrp_c similarity index 100% rename from models/thd_hero/iku/iku_0e3b27b7.vagrp_c rename to game/models/thd_hero/iku/iku_0e3b27b7.vagrp_c diff --git a/models/thd_hero/iku/item/7d8f9427/attack.vanim_c b/game/models/thd_hero/iku/item/7d8f9427/attack.vanim_c similarity index 100% rename from models/thd_hero/iku/item/7d8f9427/attack.vanim_c rename to game/models/thd_hero/iku/item/7d8f9427/attack.vanim_c diff --git a/models/thd_hero/iku/item/7d8f9427/cast.vanim_c b/game/models/thd_hero/iku/item/7d8f9427/cast.vanim_c similarity index 100% rename from models/thd_hero/iku/item/7d8f9427/cast.vanim_c rename to game/models/thd_hero/iku/item/7d8f9427/cast.vanim_c diff --git a/models/thd_hero/iku/item/7d8f9427/idle.vanim_c b/game/models/thd_hero/iku/item/7d8f9427/idle.vanim_c similarity index 100% rename from models/thd_hero/iku/item/7d8f9427/idle.vanim_c rename to game/models/thd_hero/iku/item/7d8f9427/idle.vanim_c diff --git a/models/thd_hero/iku/item/7d8f9427/por.vanim_c b/game/models/thd_hero/iku/item/7d8f9427/por.vanim_c similarity index 100% rename from models/thd_hero/iku/item/7d8f9427/por.vanim_c rename to game/models/thd_hero/iku/item/7d8f9427/por.vanim_c diff --git a/models/thd_hero/iku/item/7d8f9427/run.vanim_c b/game/models/thd_hero/iku/item/7d8f9427/run.vanim_c similarity index 100% rename from models/thd_hero/iku/item/7d8f9427/run.vanim_c rename to game/models/thd_hero/iku/item/7d8f9427/run.vanim_c diff --git a/models/thd_hero/iku/item/iku.vmesh_c b/game/models/thd_hero/iku/item/iku.vmesh_c similarity index 100% rename from models/thd_hero/iku/item/iku.vmesh_c rename to game/models/thd_hero/iku/item/iku.vmesh_c diff --git a/models/thd_hero/iku/item/item_iku.vmdl_c b/game/models/thd_hero/iku/item/item_iku.vmdl_c similarity index 100% rename from models/thd_hero/iku/item/item_iku.vmdl_c rename to game/models/thd_hero/iku/item/item_iku.vmdl_c diff --git a/models/thd_hero/iku/item/item_iku_7d8f9427.vagrp_c b/game/models/thd_hero/iku/item/item_iku_7d8f9427.vagrp_c similarity index 100% rename from models/thd_hero/iku/item/item_iku_7d8f9427.vagrp_c rename to game/models/thd_hero/iku/item/item_iku_7d8f9427.vagrp_c diff --git a/models/thd_hero/kagerou/c02b613e/attack.vanim_c b/game/models/thd_hero/kagerou/c02b613e/attack.vanim_c similarity index 100% rename from models/thd_hero/kagerou/c02b613e/attack.vanim_c rename to game/models/thd_hero/kagerou/c02b613e/attack.vanim_c diff --git a/models/thd_hero/kagerou/c02b613e/attack2.vanim_c b/game/models/thd_hero/kagerou/c02b613e/attack2.vanim_c similarity index 100% rename from models/thd_hero/kagerou/c02b613e/attack2.vanim_c rename to game/models/thd_hero/kagerou/c02b613e/attack2.vanim_c diff --git a/models/thd_hero/kagerou/c02b613e/cast1.vanim_c b/game/models/thd_hero/kagerou/c02b613e/cast1.vanim_c similarity index 100% rename from models/thd_hero/kagerou/c02b613e/cast1.vanim_c rename to game/models/thd_hero/kagerou/c02b613e/cast1.vanim_c diff --git a/models/thd_hero/kagerou/c02b613e/cast2.vanim_c b/game/models/thd_hero/kagerou/c02b613e/cast2.vanim_c similarity index 100% rename from models/thd_hero/kagerou/c02b613e/cast2.vanim_c rename to game/models/thd_hero/kagerou/c02b613e/cast2.vanim_c diff --git a/models/thd_hero/kagerou/c02b613e/idle.vanim_c b/game/models/thd_hero/kagerou/c02b613e/idle.vanim_c similarity index 100% rename from models/thd_hero/kagerou/c02b613e/idle.vanim_c rename to game/models/thd_hero/kagerou/c02b613e/idle.vanim_c diff --git a/models/thd_hero/kagerou/c02b613e/kagerou_animation.vanim_c b/game/models/thd_hero/kagerou/c02b613e/kagerou_animation.vanim_c similarity index 100% rename from models/thd_hero/kagerou/c02b613e/kagerou_animation.vanim_c rename to game/models/thd_hero/kagerou/c02b613e/kagerou_animation.vanim_c diff --git a/models/thd_hero/kagerou/c02b613e/run.vanim_c b/game/models/thd_hero/kagerou/c02b613e/run.vanim_c similarity index 100% rename from models/thd_hero/kagerou/c02b613e/run.vanim_c rename to game/models/thd_hero/kagerou/c02b613e/run.vanim_c diff --git a/models/thd_hero/kagerou/item/ede6c57a/attack.vanim_c b/game/models/thd_hero/kagerou/item/ede6c57a/attack.vanim_c similarity index 100% rename from models/thd_hero/kagerou/item/ede6c57a/attack.vanim_c rename to game/models/thd_hero/kagerou/item/ede6c57a/attack.vanim_c diff --git a/models/thd_hero/kagerou/item/ede6c57a/attack2.vanim_c b/game/models/thd_hero/kagerou/item/ede6c57a/attack2.vanim_c similarity index 100% rename from models/thd_hero/kagerou/item/ede6c57a/attack2.vanim_c rename to game/models/thd_hero/kagerou/item/ede6c57a/attack2.vanim_c diff --git a/models/thd_hero/kagerou/item/ede6c57a/cast1.vanim_c b/game/models/thd_hero/kagerou/item/ede6c57a/cast1.vanim_c similarity index 100% rename from models/thd_hero/kagerou/item/ede6c57a/cast1.vanim_c rename to game/models/thd_hero/kagerou/item/ede6c57a/cast1.vanim_c diff --git a/models/thd_hero/kagerou/item/ede6c57a/cast2.vanim_c b/game/models/thd_hero/kagerou/item/ede6c57a/cast2.vanim_c similarity index 100% rename from models/thd_hero/kagerou/item/ede6c57a/cast2.vanim_c rename to game/models/thd_hero/kagerou/item/ede6c57a/cast2.vanim_c diff --git a/models/thd_hero/kagerou/item/ede6c57a/idle.vanim_c b/game/models/thd_hero/kagerou/item/ede6c57a/idle.vanim_c similarity index 100% rename from models/thd_hero/kagerou/item/ede6c57a/idle.vanim_c rename to game/models/thd_hero/kagerou/item/ede6c57a/idle.vanim_c diff --git a/models/thd_hero/kagerou/item/ede6c57a/run.vanim_c b/game/models/thd_hero/kagerou/item/ede6c57a/run.vanim_c similarity index 100% rename from models/thd_hero/kagerou/item/ede6c57a/run.vanim_c rename to game/models/thd_hero/kagerou/item/ede6c57a/run.vanim_c diff --git a/models/thd_hero/kagerou/item/item_kagerou.vmdl_c b/game/models/thd_hero/kagerou/item/item_kagerou.vmdl_c similarity index 100% rename from models/thd_hero/kagerou/item/item_kagerou.vmdl_c rename to game/models/thd_hero/kagerou/item/item_kagerou.vmdl_c diff --git a/models/thd_hero/kagerou/item/item_kagerou_ede6c57a.vagrp_c b/game/models/thd_hero/kagerou/item/item_kagerou_ede6c57a.vagrp_c similarity index 100% rename from models/thd_hero/kagerou/item/item_kagerou_ede6c57a.vagrp_c rename to game/models/thd_hero/kagerou/item/item_kagerou_ede6c57a.vagrp_c diff --git a/models/thd_hero/kagerou/item/kagerou.vmesh_c b/game/models/thd_hero/kagerou/item/kagerou.vmesh_c similarity index 100% rename from models/thd_hero/kagerou/item/kagerou.vmesh_c rename to game/models/thd_hero/kagerou/item/kagerou.vmesh_c diff --git a/models/thd_hero/kagerou/kagerou.vmdl_c b/game/models/thd_hero/kagerou/kagerou.vmdl_c similarity index 100% rename from models/thd_hero/kagerou/kagerou.vmdl_c rename to game/models/thd_hero/kagerou/kagerou.vmdl_c diff --git a/models/thd_hero/kagerou/kagerou.vmesh_c b/game/models/thd_hero/kagerou/kagerou.vmesh_c similarity index 100% rename from models/thd_hero/kagerou/kagerou.vmesh_c rename to game/models/thd_hero/kagerou/kagerou.vmesh_c diff --git a/models/thd_hero/kagerou/kagerou_c02b613e.vagrp_c b/game/models/thd_hero/kagerou/kagerou_c02b613e.vagrp_c similarity index 100% rename from models/thd_hero/kagerou/kagerou_c02b613e.vagrp_c rename to game/models/thd_hero/kagerou/kagerou_c02b613e.vagrp_c diff --git a/models/thd_hero/kaguya/d20d7029/attack.vanim_c b/game/models/thd_hero/kaguya/d20d7029/attack.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/attack.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/attack.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/cast1.vanim_c b/game/models/thd_hero/kaguya/d20d7029/cast1.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/cast1.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/cast1.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/cast2.vanim_c b/game/models/thd_hero/kaguya/d20d7029/cast2.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/cast2.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/cast2.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/cast3.vanim_c b/game/models/thd_hero/kaguya/d20d7029/cast3.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/cast3.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/cast3.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/cast4.vanim_c b/game/models/thd_hero/kaguya/d20d7029/cast4.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/cast4.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/cast4.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/die.vanim_c b/game/models/thd_hero/kaguya/d20d7029/die.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/die.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/die.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/idle.vanim_c b/game/models/thd_hero/kaguya/d20d7029/idle.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/idle.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/idle.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/kaguya_animation.vanim_c b/game/models/thd_hero/kaguya/d20d7029/kaguya_animation.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/kaguya_animation.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/kaguya_animation.vanim_c diff --git a/models/thd_hero/kaguya/d20d7029/run.vanim_c b/game/models/thd_hero/kaguya/d20d7029/run.vanim_c similarity index 100% rename from models/thd_hero/kaguya/d20d7029/run.vanim_c rename to game/models/thd_hero/kaguya/d20d7029/run.vanim_c diff --git a/models/thd_hero/kaguya/item/db953009/attack.vanim_c b/game/models/thd_hero/kaguya/item/db953009/attack.vanim_c similarity index 100% rename from models/thd_hero/kaguya/item/db953009/attack.vanim_c rename to game/models/thd_hero/kaguya/item/db953009/attack.vanim_c diff --git a/models/thd_hero/kaguya/item/db953009/cast1.vanim_c b/game/models/thd_hero/kaguya/item/db953009/cast1.vanim_c similarity index 100% rename from models/thd_hero/kaguya/item/db953009/cast1.vanim_c rename to game/models/thd_hero/kaguya/item/db953009/cast1.vanim_c diff --git a/models/thd_hero/kaguya/item/db953009/cast2.vanim_c b/game/models/thd_hero/kaguya/item/db953009/cast2.vanim_c similarity index 100% rename from models/thd_hero/kaguya/item/db953009/cast2.vanim_c rename to game/models/thd_hero/kaguya/item/db953009/cast2.vanim_c diff --git a/models/thd_hero/kaguya/item/db953009/cast3.vanim_c b/game/models/thd_hero/kaguya/item/db953009/cast3.vanim_c similarity index 100% rename from models/thd_hero/kaguya/item/db953009/cast3.vanim_c rename to game/models/thd_hero/kaguya/item/db953009/cast3.vanim_c diff --git a/models/thd_hero/kaguya/item/db953009/cast4.vanim_c b/game/models/thd_hero/kaguya/item/db953009/cast4.vanim_c similarity index 100% rename from models/thd_hero/kaguya/item/db953009/cast4.vanim_c rename to game/models/thd_hero/kaguya/item/db953009/cast4.vanim_c diff --git a/models/thd_hero/kaguya/item/db953009/idle.vanim_c b/game/models/thd_hero/kaguya/item/db953009/idle.vanim_c similarity index 100% rename from models/thd_hero/kaguya/item/db953009/idle.vanim_c rename to game/models/thd_hero/kaguya/item/db953009/idle.vanim_c diff --git a/models/thd_hero/kaguya/item/db953009/run.vanim_c b/game/models/thd_hero/kaguya/item/db953009/run.vanim_c similarity index 100% rename from models/thd_hero/kaguya/item/db953009/run.vanim_c rename to game/models/thd_hero/kaguya/item/db953009/run.vanim_c diff --git a/models/thd_hero/kaguya/item/item_kaguya.vmdl_c b/game/models/thd_hero/kaguya/item/item_kaguya.vmdl_c similarity index 100% rename from models/thd_hero/kaguya/item/item_kaguya.vmdl_c rename to game/models/thd_hero/kaguya/item/item_kaguya.vmdl_c diff --git a/models/thd_hero/kaguya/item/item_kaguya_db953009.vagrp_c b/game/models/thd_hero/kaguya/item/item_kaguya_db953009.vagrp_c similarity index 100% rename from models/thd_hero/kaguya/item/item_kaguya_db953009.vagrp_c rename to game/models/thd_hero/kaguya/item/item_kaguya_db953009.vagrp_c diff --git a/models/thd_hero/kaguya/item/kaguya.vmesh_c b/game/models/thd_hero/kaguya/item/kaguya.vmesh_c similarity index 100% rename from models/thd_hero/kaguya/item/kaguya.vmesh_c rename to game/models/thd_hero/kaguya/item/kaguya.vmesh_c diff --git a/models/thd_hero/kaguya/kaguya.vmdl_c b/game/models/thd_hero/kaguya/kaguya.vmdl_c similarity index 100% rename from models/thd_hero/kaguya/kaguya.vmdl_c rename to game/models/thd_hero/kaguya/kaguya.vmdl_c diff --git a/models/thd_hero/kaguya/kaguya.vmesh_c b/game/models/thd_hero/kaguya/kaguya.vmesh_c similarity index 100% rename from models/thd_hero/kaguya/kaguya.vmesh_c rename to game/models/thd_hero/kaguya/kaguya.vmesh_c diff --git a/models/thd_hero/kaguya/kaguya_d20d7029.vagrp_c b/game/models/thd_hero/kaguya/kaguya_d20d7029.vagrp_c similarity index 100% rename from models/thd_hero/kaguya/kaguya_d20d7029.vagrp_c rename to game/models/thd_hero/kaguya/kaguya_d20d7029.vagrp_c diff --git a/models/thd_hero/kanako/28c039ae/attack.vanim_c b/game/models/thd_hero/kanako/28c039ae/attack.vanim_c similarity index 100% rename from models/thd_hero/kanako/28c039ae/attack.vanim_c rename to game/models/thd_hero/kanako/28c039ae/attack.vanim_c diff --git a/models/thd_hero/kanako/28c039ae/idle.vanim_c b/game/models/thd_hero/kanako/28c039ae/idle.vanim_c similarity index 100% rename from models/thd_hero/kanako/28c039ae/idle.vanim_c rename to game/models/thd_hero/kanako/28c039ae/idle.vanim_c diff --git a/models/thd_hero/kanako/28c039ae/kanako_animation.vanim_c b/game/models/thd_hero/kanako/28c039ae/kanako_animation.vanim_c similarity index 100% rename from models/thd_hero/kanako/28c039ae/kanako_animation.vanim_c rename to game/models/thd_hero/kanako/28c039ae/kanako_animation.vanim_c diff --git a/models/thd_hero/kanako/28c039ae/run.vanim_c b/game/models/thd_hero/kanako/28c039ae/run.vanim_c similarity index 100% rename from models/thd_hero/kanako/28c039ae/run.vanim_c rename to game/models/thd_hero/kanako/28c039ae/run.vanim_c diff --git a/models/thd_hero/kanako/item/e21e90e0/attack.vanim_c b/game/models/thd_hero/kanako/item/e21e90e0/attack.vanim_c similarity index 100% rename from models/thd_hero/kanako/item/e21e90e0/attack.vanim_c rename to game/models/thd_hero/kanako/item/e21e90e0/attack.vanim_c diff --git a/models/thd_hero/kanako/item/e21e90e0/idle.vanim_c b/game/models/thd_hero/kanako/item/e21e90e0/idle.vanim_c similarity index 100% rename from models/thd_hero/kanako/item/e21e90e0/idle.vanim_c rename to game/models/thd_hero/kanako/item/e21e90e0/idle.vanim_c diff --git a/models/thd_hero/kanako/item/e21e90e0/run.vanim_c b/game/models/thd_hero/kanako/item/e21e90e0/run.vanim_c similarity index 100% rename from models/thd_hero/kanako/item/e21e90e0/run.vanim_c rename to game/models/thd_hero/kanako/item/e21e90e0/run.vanim_c diff --git a/models/thd_hero/kanako/item/item_kanako.vmdl_c b/game/models/thd_hero/kanako/item/item_kanako.vmdl_c similarity index 100% rename from models/thd_hero/kanako/item/item_kanako.vmdl_c rename to game/models/thd_hero/kanako/item/item_kanako.vmdl_c diff --git a/models/thd_hero/kanako/item/item_kanako_e21e90e0.vagrp_c b/game/models/thd_hero/kanako/item/item_kanako_e21e90e0.vagrp_c similarity index 100% rename from models/thd_hero/kanako/item/item_kanako_e21e90e0.vagrp_c rename to game/models/thd_hero/kanako/item/item_kanako_e21e90e0.vagrp_c diff --git a/models/thd_hero/kanako/item/kanako.vmesh_c b/game/models/thd_hero/kanako/item/kanako.vmesh_c similarity index 100% rename from models/thd_hero/kanako/item/kanako.vmesh_c rename to game/models/thd_hero/kanako/item/kanako.vmesh_c diff --git a/models/thd_hero/kanako/kanako.vmdl_c b/game/models/thd_hero/kanako/kanako.vmdl_c similarity index 100% rename from models/thd_hero/kanako/kanako.vmdl_c rename to game/models/thd_hero/kanako/kanako.vmdl_c diff --git a/models/thd_hero/kanako/kanako.vmesh_c b/game/models/thd_hero/kanako/kanako.vmesh_c similarity index 100% rename from models/thd_hero/kanako/kanako.vmesh_c rename to game/models/thd_hero/kanako/kanako.vmesh_c diff --git a/models/thd_hero/kanako/kanako_28c039ae.vagrp_c b/game/models/thd_hero/kanako/kanako_28c039ae.vagrp_c similarity index 100% rename from models/thd_hero/kanako/kanako_28c039ae.vagrp_c rename to game/models/thd_hero/kanako/kanako_28c039ae.vagrp_c diff --git a/models/thd_hero/keine/52b654ae/attack1.vanim_c b/game/models/thd_hero/keine/52b654ae/attack1.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/attack1.vanim_c rename to game/models/thd_hero/keine/52b654ae/attack1.vanim_c diff --git a/models/thd_hero/keine/52b654ae/attack2.vanim_c b/game/models/thd_hero/keine/52b654ae/attack2.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/attack2.vanim_c rename to game/models/thd_hero/keine/52b654ae/attack2.vanim_c diff --git a/models/thd_hero/keine/52b654ae/cast1.vanim_c b/game/models/thd_hero/keine/52b654ae/cast1.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/cast1.vanim_c rename to game/models/thd_hero/keine/52b654ae/cast1.vanim_c diff --git a/models/thd_hero/keine/52b654ae/cast3.vanim_c b/game/models/thd_hero/keine/52b654ae/cast3.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/cast3.vanim_c rename to game/models/thd_hero/keine/52b654ae/cast3.vanim_c diff --git a/models/thd_hero/keine/52b654ae/cast4.vanim_c b/game/models/thd_hero/keine/52b654ae/cast4.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/cast4.vanim_c rename to game/models/thd_hero/keine/52b654ae/cast4.vanim_c diff --git a/models/thd_hero/keine/52b654ae/idle.vanim_c b/game/models/thd_hero/keine/52b654ae/idle.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/idle.vanim_c rename to game/models/thd_hero/keine/52b654ae/idle.vanim_c diff --git a/models/thd_hero/keine/52b654ae/keine_animation.vanim_c b/game/models/thd_hero/keine/52b654ae/keine_animation.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/keine_animation.vanim_c rename to game/models/thd_hero/keine/52b654ae/keine_animation.vanim_c diff --git a/models/thd_hero/keine/52b654ae/run.vanim_c b/game/models/thd_hero/keine/52b654ae/run.vanim_c similarity index 100% rename from models/thd_hero/keine/52b654ae/run.vanim_c rename to game/models/thd_hero/keine/52b654ae/run.vanim_c diff --git a/models/thd_hero/keine/item/fbc01b08/attack1.vanim_c b/game/models/thd_hero/keine/item/fbc01b08/attack1.vanim_c similarity index 100% rename from models/thd_hero/keine/item/fbc01b08/attack1.vanim_c rename to game/models/thd_hero/keine/item/fbc01b08/attack1.vanim_c diff --git a/models/thd_hero/keine/item/fbc01b08/attack2.vanim_c b/game/models/thd_hero/keine/item/fbc01b08/attack2.vanim_c similarity index 100% rename from models/thd_hero/keine/item/fbc01b08/attack2.vanim_c rename to game/models/thd_hero/keine/item/fbc01b08/attack2.vanim_c diff --git a/models/thd_hero/keine/item/fbc01b08/cast1.vanim_c b/game/models/thd_hero/keine/item/fbc01b08/cast1.vanim_c similarity index 100% rename from models/thd_hero/keine/item/fbc01b08/cast1.vanim_c rename to game/models/thd_hero/keine/item/fbc01b08/cast1.vanim_c diff --git a/models/thd_hero/keine/item/fbc01b08/cast3.vanim_c b/game/models/thd_hero/keine/item/fbc01b08/cast3.vanim_c similarity index 100% rename from models/thd_hero/keine/item/fbc01b08/cast3.vanim_c rename to game/models/thd_hero/keine/item/fbc01b08/cast3.vanim_c diff --git a/models/thd_hero/keine/item/fbc01b08/cast4.vanim_c b/game/models/thd_hero/keine/item/fbc01b08/cast4.vanim_c similarity index 100% rename from models/thd_hero/keine/item/fbc01b08/cast4.vanim_c rename to game/models/thd_hero/keine/item/fbc01b08/cast4.vanim_c diff --git a/models/thd_hero/keine/item/fbc01b08/idle.vanim_c b/game/models/thd_hero/keine/item/fbc01b08/idle.vanim_c similarity index 100% rename from models/thd_hero/keine/item/fbc01b08/idle.vanim_c rename to game/models/thd_hero/keine/item/fbc01b08/idle.vanim_c diff --git a/models/thd_hero/keine/item/fbc01b08/run.vanim_c b/game/models/thd_hero/keine/item/fbc01b08/run.vanim_c similarity index 100% rename from models/thd_hero/keine/item/fbc01b08/run.vanim_c rename to game/models/thd_hero/keine/item/fbc01b08/run.vanim_c diff --git a/models/thd_hero/keine/item/item_keine.vmdl_c b/game/models/thd_hero/keine/item/item_keine.vmdl_c similarity index 100% rename from models/thd_hero/keine/item/item_keine.vmdl_c rename to game/models/thd_hero/keine/item/item_keine.vmdl_c diff --git a/models/thd_hero/keine/item/item_keine_fbc01b08.vagrp_c b/game/models/thd_hero/keine/item/item_keine_fbc01b08.vagrp_c similarity index 100% rename from models/thd_hero/keine/item/item_keine_fbc01b08.vagrp_c rename to game/models/thd_hero/keine/item/item_keine_fbc01b08.vagrp_c diff --git a/models/thd_hero/keine/item/keine.vmesh_c b/game/models/thd_hero/keine/item/keine.vmesh_c similarity index 100% rename from models/thd_hero/keine/item/keine.vmesh_c rename to game/models/thd_hero/keine/item/keine.vmesh_c diff --git a/models/thd_hero/keine/keine.vmdl_c b/game/models/thd_hero/keine/keine.vmdl_c similarity index 100% rename from models/thd_hero/keine/keine.vmdl_c rename to game/models/thd_hero/keine/keine.vmdl_c diff --git a/models/thd_hero/keine/keine.vmesh_c b/game/models/thd_hero/keine/keine.vmesh_c similarity index 100% rename from models/thd_hero/keine/keine.vmesh_c rename to game/models/thd_hero/keine/keine.vmesh_c diff --git a/models/thd_hero/keine/keine2/0281320c/attack1.vanim_c b/game/models/thd_hero/keine/keine2/0281320c/attack1.vanim_c similarity index 100% rename from models/thd_hero/keine/keine2/0281320c/attack1.vanim_c rename to game/models/thd_hero/keine/keine2/0281320c/attack1.vanim_c diff --git a/models/thd_hero/keine/keine2/0281320c/attack2.vanim_c b/game/models/thd_hero/keine/keine2/0281320c/attack2.vanim_c similarity index 100% rename from models/thd_hero/keine/keine2/0281320c/attack2.vanim_c rename to game/models/thd_hero/keine/keine2/0281320c/attack2.vanim_c diff --git a/models/thd_hero/keine/keine2/0281320c/cast1.vanim_c b/game/models/thd_hero/keine/keine2/0281320c/cast1.vanim_c similarity index 100% rename from models/thd_hero/keine/keine2/0281320c/cast1.vanim_c rename to game/models/thd_hero/keine/keine2/0281320c/cast1.vanim_c diff --git a/models/thd_hero/keine/keine2/0281320c/cast3.vanim_c b/game/models/thd_hero/keine/keine2/0281320c/cast3.vanim_c similarity index 100% rename from models/thd_hero/keine/keine2/0281320c/cast3.vanim_c rename to game/models/thd_hero/keine/keine2/0281320c/cast3.vanim_c diff --git a/models/thd_hero/keine/keine2/0281320c/cast4.vanim_c b/game/models/thd_hero/keine/keine2/0281320c/cast4.vanim_c similarity index 100% rename from models/thd_hero/keine/keine2/0281320c/cast4.vanim_c rename to game/models/thd_hero/keine/keine2/0281320c/cast4.vanim_c diff --git a/models/thd_hero/keine/keine2/0281320c/idle.vanim_c b/game/models/thd_hero/keine/keine2/0281320c/idle.vanim_c similarity index 100% rename from models/thd_hero/keine/keine2/0281320c/idle.vanim_c rename to game/models/thd_hero/keine/keine2/0281320c/idle.vanim_c diff --git a/models/thd_hero/keine/keine2/0281320c/run.vanim_c b/game/models/thd_hero/keine/keine2/0281320c/run.vanim_c similarity index 100% rename from models/thd_hero/keine/keine2/0281320c/run.vanim_c rename to game/models/thd_hero/keine/keine2/0281320c/run.vanim_c diff --git a/models/thd_hero/keine/keine2/keine.vmesh_c b/game/models/thd_hero/keine/keine2/keine.vmesh_c similarity index 100% rename from models/thd_hero/keine/keine2/keine.vmesh_c rename to game/models/thd_hero/keine/keine2/keine.vmesh_c diff --git a/models/thd_hero/keine/keine2/keine2.vmdl_c b/game/models/thd_hero/keine/keine2/keine2.vmdl_c similarity index 100% rename from models/thd_hero/keine/keine2/keine2.vmdl_c rename to game/models/thd_hero/keine/keine2/keine2.vmdl_c diff --git a/models/thd_hero/keine/keine2/keine2_0281320c.vagrp_c b/game/models/thd_hero/keine/keine2/keine2_0281320c.vagrp_c similarity index 100% rename from models/thd_hero/keine/keine2/keine2_0281320c.vagrp_c rename to game/models/thd_hero/keine/keine2/keine2_0281320c.vagrp_c diff --git a/models/thd_hero/keine/keine_52b654ae.vagrp_c b/game/models/thd_hero/keine/keine_52b654ae.vagrp_c similarity index 100% rename from models/thd_hero/keine/keine_52b654ae.vagrp_c rename to game/models/thd_hero/keine/keine_52b654ae.vagrp_c diff --git a/models/thd_hero/kisume/e543191c/attack1.vanim_c b/game/models/thd_hero/kisume/e543191c/attack1.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/attack1.vanim_c rename to game/models/thd_hero/kisume/e543191c/attack1.vanim_c diff --git a/models/thd_hero/kisume/e543191c/attack2.vanim_c b/game/models/thd_hero/kisume/e543191c/attack2.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/attack2.vanim_c rename to game/models/thd_hero/kisume/e543191c/attack2.vanim_c diff --git a/models/thd_hero/kisume/e543191c/cast1.vanim_c b/game/models/thd_hero/kisume/e543191c/cast1.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/cast1.vanim_c rename to game/models/thd_hero/kisume/e543191c/cast1.vanim_c diff --git a/models/thd_hero/kisume/e543191c/cast2_1.vanim_c b/game/models/thd_hero/kisume/e543191c/cast2_1.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/cast2_1.vanim_c rename to game/models/thd_hero/kisume/e543191c/cast2_1.vanim_c diff --git a/models/thd_hero/kisume/e543191c/cast2_2.vanim_c b/game/models/thd_hero/kisume/e543191c/cast2_2.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/cast2_2.vanim_c rename to game/models/thd_hero/kisume/e543191c/cast2_2.vanim_c diff --git a/models/thd_hero/kisume/e543191c/idle.vanim_c b/game/models/thd_hero/kisume/e543191c/idle.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/idle.vanim_c rename to game/models/thd_hero/kisume/e543191c/idle.vanim_c diff --git a/models/thd_hero/kisume/e543191c/kisume_animation.vanim_c b/game/models/thd_hero/kisume/e543191c/kisume_animation.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/kisume_animation.vanim_c rename to game/models/thd_hero/kisume/e543191c/kisume_animation.vanim_c diff --git a/models/thd_hero/kisume/e543191c/run.vanim_c b/game/models/thd_hero/kisume/e543191c/run.vanim_c similarity index 100% rename from models/thd_hero/kisume/e543191c/run.vanim_c rename to game/models/thd_hero/kisume/e543191c/run.vanim_c diff --git a/models/thd_hero/kisume/item/fe917d8e/attack1.vanim_c b/game/models/thd_hero/kisume/item/fe917d8e/attack1.vanim_c similarity index 100% rename from models/thd_hero/kisume/item/fe917d8e/attack1.vanim_c rename to game/models/thd_hero/kisume/item/fe917d8e/attack1.vanim_c diff --git a/models/thd_hero/kisume/item/fe917d8e/attack2.vanim_c b/game/models/thd_hero/kisume/item/fe917d8e/attack2.vanim_c similarity index 100% rename from models/thd_hero/kisume/item/fe917d8e/attack2.vanim_c rename to game/models/thd_hero/kisume/item/fe917d8e/attack2.vanim_c diff --git a/models/thd_hero/kisume/item/fe917d8e/cast1.vanim_c b/game/models/thd_hero/kisume/item/fe917d8e/cast1.vanim_c similarity index 100% rename from models/thd_hero/kisume/item/fe917d8e/cast1.vanim_c rename to game/models/thd_hero/kisume/item/fe917d8e/cast1.vanim_c diff --git a/models/thd_hero/kisume/item/fe917d8e/cast2_1.vanim_c b/game/models/thd_hero/kisume/item/fe917d8e/cast2_1.vanim_c similarity index 100% rename from models/thd_hero/kisume/item/fe917d8e/cast2_1.vanim_c rename to game/models/thd_hero/kisume/item/fe917d8e/cast2_1.vanim_c diff --git a/models/thd_hero/kisume/item/fe917d8e/cast2_2.vanim_c b/game/models/thd_hero/kisume/item/fe917d8e/cast2_2.vanim_c similarity index 100% rename from models/thd_hero/kisume/item/fe917d8e/cast2_2.vanim_c rename to game/models/thd_hero/kisume/item/fe917d8e/cast2_2.vanim_c diff --git a/models/thd_hero/kisume/item/fe917d8e/idle.vanim_c b/game/models/thd_hero/kisume/item/fe917d8e/idle.vanim_c similarity index 100% rename from models/thd_hero/kisume/item/fe917d8e/idle.vanim_c rename to game/models/thd_hero/kisume/item/fe917d8e/idle.vanim_c diff --git a/models/thd_hero/kisume/item/fe917d8e/run.vanim_c b/game/models/thd_hero/kisume/item/fe917d8e/run.vanim_c similarity index 100% rename from models/thd_hero/kisume/item/fe917d8e/run.vanim_c rename to game/models/thd_hero/kisume/item/fe917d8e/run.vanim_c diff --git a/models/thd_hero/kisume/item/item_kisume.vmdl_c b/game/models/thd_hero/kisume/item/item_kisume.vmdl_c similarity index 100% rename from models/thd_hero/kisume/item/item_kisume.vmdl_c rename to game/models/thd_hero/kisume/item/item_kisume.vmdl_c diff --git a/models/thd_hero/kisume/item/item_kisume_fe917d8e.vagrp_c b/game/models/thd_hero/kisume/item/item_kisume_fe917d8e.vagrp_c similarity index 100% rename from models/thd_hero/kisume/item/item_kisume_fe917d8e.vagrp_c rename to game/models/thd_hero/kisume/item/item_kisume_fe917d8e.vagrp_c diff --git a/models/thd_hero/kisume/item/kisume.vmesh_c b/game/models/thd_hero/kisume/item/kisume.vmesh_c similarity index 100% rename from models/thd_hero/kisume/item/kisume.vmesh_c rename to game/models/thd_hero/kisume/item/kisume.vmesh_c diff --git a/models/thd_hero/kisume/kisume.vmdl_c b/game/models/thd_hero/kisume/kisume.vmdl_c similarity index 100% rename from models/thd_hero/kisume/kisume.vmdl_c rename to game/models/thd_hero/kisume/kisume.vmdl_c diff --git a/models/thd_hero/kisume/kisume.vmesh_c b/game/models/thd_hero/kisume/kisume.vmesh_c similarity index 100% rename from models/thd_hero/kisume/kisume.vmesh_c rename to game/models/thd_hero/kisume/kisume.vmesh_c diff --git a/models/thd_hero/kisume/kisume_e543191c.vagrp_c b/game/models/thd_hero/kisume/kisume_e543191c.vagrp_c similarity index 100% rename from models/thd_hero/kisume/kisume_e543191c.vagrp_c rename to game/models/thd_hero/kisume/kisume_e543191c.vagrp_c diff --git a/models/thd_hero/koakuma/64145d25/_.vanim_c b/game/models/thd_hero/koakuma/64145d25/_.vanim_c similarity index 100% rename from models/thd_hero/koakuma/64145d25/_.vanim_c rename to game/models/thd_hero/koakuma/64145d25/_.vanim_c diff --git a/models/thd_hero/koakuma/64145d25/attack.vanim_c b/game/models/thd_hero/koakuma/64145d25/attack.vanim_c similarity index 100% rename from models/thd_hero/koakuma/64145d25/attack.vanim_c rename to game/models/thd_hero/koakuma/64145d25/attack.vanim_c diff --git a/models/thd_hero/koakuma/64145d25/attack2.vanim_c b/game/models/thd_hero/koakuma/64145d25/attack2.vanim_c similarity index 100% rename from models/thd_hero/koakuma/64145d25/attack2.vanim_c rename to game/models/thd_hero/koakuma/64145d25/attack2.vanim_c diff --git a/models/thd_hero/koakuma/64145d25/cast.vanim_c b/game/models/thd_hero/koakuma/64145d25/cast.vanim_c similarity index 100% rename from models/thd_hero/koakuma/64145d25/cast.vanim_c rename to game/models/thd_hero/koakuma/64145d25/cast.vanim_c diff --git a/models/thd_hero/koakuma/64145d25/idle.vanim_c b/game/models/thd_hero/koakuma/64145d25/idle.vanim_c similarity index 100% rename from models/thd_hero/koakuma/64145d25/idle.vanim_c rename to game/models/thd_hero/koakuma/64145d25/idle.vanim_c diff --git a/models/thd_hero/koakuma/64145d25/por.vanim_c b/game/models/thd_hero/koakuma/64145d25/por.vanim_c similarity index 100% rename from models/thd_hero/koakuma/64145d25/por.vanim_c rename to game/models/thd_hero/koakuma/64145d25/por.vanim_c diff --git a/models/thd_hero/koakuma/64145d25/run.vanim_c b/game/models/thd_hero/koakuma/64145d25/run.vanim_c similarity index 100% rename from models/thd_hero/koakuma/64145d25/run.vanim_c rename to game/models/thd_hero/koakuma/64145d25/run.vanim_c diff --git a/models/thd_hero/koakuma/item/408c35ae/_.vanim_c b/game/models/thd_hero/koakuma/item/408c35ae/_.vanim_c similarity index 100% rename from models/thd_hero/koakuma/item/408c35ae/_.vanim_c rename to game/models/thd_hero/koakuma/item/408c35ae/_.vanim_c diff --git a/models/thd_hero/koakuma/item/408c35ae/attack.vanim_c b/game/models/thd_hero/koakuma/item/408c35ae/attack.vanim_c similarity index 100% rename from models/thd_hero/koakuma/item/408c35ae/attack.vanim_c rename to game/models/thd_hero/koakuma/item/408c35ae/attack.vanim_c diff --git a/models/thd_hero/koakuma/item/408c35ae/attack2.vanim_c b/game/models/thd_hero/koakuma/item/408c35ae/attack2.vanim_c similarity index 100% rename from models/thd_hero/koakuma/item/408c35ae/attack2.vanim_c rename to game/models/thd_hero/koakuma/item/408c35ae/attack2.vanim_c diff --git a/models/thd_hero/koakuma/item/408c35ae/cast.vanim_c b/game/models/thd_hero/koakuma/item/408c35ae/cast.vanim_c similarity index 100% rename from models/thd_hero/koakuma/item/408c35ae/cast.vanim_c rename to game/models/thd_hero/koakuma/item/408c35ae/cast.vanim_c diff --git a/models/thd_hero/koakuma/item/408c35ae/idle.vanim_c b/game/models/thd_hero/koakuma/item/408c35ae/idle.vanim_c similarity index 100% rename from models/thd_hero/koakuma/item/408c35ae/idle.vanim_c rename to game/models/thd_hero/koakuma/item/408c35ae/idle.vanim_c diff --git a/models/thd_hero/koakuma/item/408c35ae/por.vanim_c b/game/models/thd_hero/koakuma/item/408c35ae/por.vanim_c similarity index 100% rename from models/thd_hero/koakuma/item/408c35ae/por.vanim_c rename to game/models/thd_hero/koakuma/item/408c35ae/por.vanim_c diff --git a/models/thd_hero/koakuma/item/408c35ae/run.vanim_c b/game/models/thd_hero/koakuma/item/408c35ae/run.vanim_c similarity index 100% rename from models/thd_hero/koakuma/item/408c35ae/run.vanim_c rename to game/models/thd_hero/koakuma/item/408c35ae/run.vanim_c diff --git a/models/thd_hero/koakuma/item/item_koakuma.vmdl_c b/game/models/thd_hero/koakuma/item/item_koakuma.vmdl_c similarity index 100% rename from models/thd_hero/koakuma/item/item_koakuma.vmdl_c rename to game/models/thd_hero/koakuma/item/item_koakuma.vmdl_c diff --git a/models/thd_hero/koakuma/item/item_koakuma_408c35ae.vagrp_c b/game/models/thd_hero/koakuma/item/item_koakuma_408c35ae.vagrp_c similarity index 100% rename from models/thd_hero/koakuma/item/item_koakuma_408c35ae.vagrp_c rename to game/models/thd_hero/koakuma/item/item_koakuma_408c35ae.vagrp_c diff --git a/models/thd_hero/koakuma/item/koakuma.vmesh_c b/game/models/thd_hero/koakuma/item/koakuma.vmesh_c similarity index 100% rename from models/thd_hero/koakuma/item/koakuma.vmesh_c rename to game/models/thd_hero/koakuma/item/koakuma.vmesh_c diff --git a/models/thd_hero/koakuma/koakuma.vmdl_c b/game/models/thd_hero/koakuma/koakuma.vmdl_c similarity index 100% rename from models/thd_hero/koakuma/koakuma.vmdl_c rename to game/models/thd_hero/koakuma/koakuma.vmdl_c diff --git a/models/thd_hero/koakuma/koakuma.vmesh_c b/game/models/thd_hero/koakuma/koakuma.vmesh_c similarity index 100% rename from models/thd_hero/koakuma/koakuma.vmesh_c rename to game/models/thd_hero/koakuma/koakuma.vmesh_c diff --git a/models/thd_hero/koakuma/koakuma_64145d25.vagrp_c b/game/models/thd_hero/koakuma/koakuma_64145d25.vagrp_c similarity index 100% rename from models/thd_hero/koakuma/koakuma_64145d25.vagrp_c rename to game/models/thd_hero/koakuma/koakuma_64145d25.vagrp_c diff --git a/models/thd_hero/kogasa/be2f9921/attack.vanim_c b/game/models/thd_hero/kogasa/be2f9921/attack.vanim_c similarity index 100% rename from models/thd_hero/kogasa/be2f9921/attack.vanim_c rename to game/models/thd_hero/kogasa/be2f9921/attack.vanim_c diff --git a/models/thd_hero/kogasa/be2f9921/cast.vanim_c b/game/models/thd_hero/kogasa/be2f9921/cast.vanim_c similarity index 100% rename from models/thd_hero/kogasa/be2f9921/cast.vanim_c rename to game/models/thd_hero/kogasa/be2f9921/cast.vanim_c diff --git a/models/thd_hero/kogasa/be2f9921/idle.vanim_c b/game/models/thd_hero/kogasa/be2f9921/idle.vanim_c similarity index 100% rename from models/thd_hero/kogasa/be2f9921/idle.vanim_c rename to game/models/thd_hero/kogasa/be2f9921/idle.vanim_c diff --git a/models/thd_hero/kogasa/be2f9921/por.vanim_c b/game/models/thd_hero/kogasa/be2f9921/por.vanim_c similarity index 100% rename from models/thd_hero/kogasa/be2f9921/por.vanim_c rename to game/models/thd_hero/kogasa/be2f9921/por.vanim_c diff --git a/models/thd_hero/kogasa/be2f9921/run.vanim_c b/game/models/thd_hero/kogasa/be2f9921/run.vanim_c similarity index 100% rename from models/thd_hero/kogasa/be2f9921/run.vanim_c rename to game/models/thd_hero/kogasa/be2f9921/run.vanim_c diff --git a/models/thd_hero/kogasa/item/f4232d51/attack.vanim_c b/game/models/thd_hero/kogasa/item/f4232d51/attack.vanim_c similarity index 100% rename from models/thd_hero/kogasa/item/f4232d51/attack.vanim_c rename to game/models/thd_hero/kogasa/item/f4232d51/attack.vanim_c diff --git a/models/thd_hero/kogasa/item/f4232d51/cast.vanim_c b/game/models/thd_hero/kogasa/item/f4232d51/cast.vanim_c similarity index 100% rename from models/thd_hero/kogasa/item/f4232d51/cast.vanim_c rename to game/models/thd_hero/kogasa/item/f4232d51/cast.vanim_c diff --git a/models/thd_hero/kogasa/item/f4232d51/idle.vanim_c b/game/models/thd_hero/kogasa/item/f4232d51/idle.vanim_c similarity index 100% rename from models/thd_hero/kogasa/item/f4232d51/idle.vanim_c rename to game/models/thd_hero/kogasa/item/f4232d51/idle.vanim_c diff --git a/models/thd_hero/kogasa/item/f4232d51/por.vanim_c b/game/models/thd_hero/kogasa/item/f4232d51/por.vanim_c similarity index 100% rename from models/thd_hero/kogasa/item/f4232d51/por.vanim_c rename to game/models/thd_hero/kogasa/item/f4232d51/por.vanim_c diff --git a/models/thd_hero/kogasa/item/f4232d51/run.vanim_c b/game/models/thd_hero/kogasa/item/f4232d51/run.vanim_c similarity index 100% rename from models/thd_hero/kogasa/item/f4232d51/run.vanim_c rename to game/models/thd_hero/kogasa/item/f4232d51/run.vanim_c diff --git a/models/thd_hero/kogasa/item/item_kogasa.vmdl_c b/game/models/thd_hero/kogasa/item/item_kogasa.vmdl_c similarity index 100% rename from models/thd_hero/kogasa/item/item_kogasa.vmdl_c rename to game/models/thd_hero/kogasa/item/item_kogasa.vmdl_c diff --git a/models/thd_hero/kogasa/item/item_kogasa_f4232d51.vagrp_c b/game/models/thd_hero/kogasa/item/item_kogasa_f4232d51.vagrp_c similarity index 100% rename from models/thd_hero/kogasa/item/item_kogasa_f4232d51.vagrp_c rename to game/models/thd_hero/kogasa/item/item_kogasa_f4232d51.vagrp_c diff --git a/models/thd_hero/kogasa/item/kogasa.vmesh_c b/game/models/thd_hero/kogasa/item/kogasa.vmesh_c similarity index 100% rename from models/thd_hero/kogasa/item/kogasa.vmesh_c rename to game/models/thd_hero/kogasa/item/kogasa.vmesh_c diff --git a/models/thd_hero/kogasa/kogasa.vmdl_c b/game/models/thd_hero/kogasa/kogasa.vmdl_c similarity index 100% rename from models/thd_hero/kogasa/kogasa.vmdl_c rename to game/models/thd_hero/kogasa/kogasa.vmdl_c diff --git a/models/thd_hero/kogasa/kogasa.vmesh_c b/game/models/thd_hero/kogasa/kogasa.vmesh_c similarity index 100% rename from models/thd_hero/kogasa/kogasa.vmesh_c rename to game/models/thd_hero/kogasa/kogasa.vmesh_c diff --git a/models/thd_hero/kogasa/kogasa_be2f9921.vagrp_c b/game/models/thd_hero/kogasa/kogasa_be2f9921.vagrp_c similarity index 100% rename from models/thd_hero/kogasa/kogasa_be2f9921.vagrp_c rename to game/models/thd_hero/kogasa/kogasa_be2f9921.vagrp_c diff --git a/models/thd_hero/kumoi/01ee6898/attack1.vanim_c b/game/models/thd_hero/kumoi/01ee6898/attack1.vanim_c similarity index 100% rename from models/thd_hero/kumoi/01ee6898/attack1.vanim_c rename to game/models/thd_hero/kumoi/01ee6898/attack1.vanim_c diff --git a/models/thd_hero/kumoi/01ee6898/cast.vanim_c b/game/models/thd_hero/kumoi/01ee6898/cast.vanim_c similarity index 100% rename from models/thd_hero/kumoi/01ee6898/cast.vanim_c rename to game/models/thd_hero/kumoi/01ee6898/cast.vanim_c diff --git a/models/thd_hero/kumoi/01ee6898/idle.vanim_c b/game/models/thd_hero/kumoi/01ee6898/idle.vanim_c similarity index 100% rename from models/thd_hero/kumoi/01ee6898/idle.vanim_c rename to game/models/thd_hero/kumoi/01ee6898/idle.vanim_c diff --git a/models/thd_hero/kumoi/01ee6898/kumoi_animation.vanim_c b/game/models/thd_hero/kumoi/01ee6898/kumoi_animation.vanim_c similarity index 100% rename from models/thd_hero/kumoi/01ee6898/kumoi_animation.vanim_c rename to game/models/thd_hero/kumoi/01ee6898/kumoi_animation.vanim_c diff --git a/models/thd_hero/kumoi/01ee6898/run.vanim_c b/game/models/thd_hero/kumoi/01ee6898/run.vanim_c similarity index 100% rename from models/thd_hero/kumoi/01ee6898/run.vanim_c rename to game/models/thd_hero/kumoi/01ee6898/run.vanim_c diff --git a/models/thd_hero/kumoi/kumoi.vmdl_c b/game/models/thd_hero/kumoi/kumoi.vmdl_c similarity index 100% rename from models/thd_hero/kumoi/kumoi.vmdl_c rename to game/models/thd_hero/kumoi/kumoi.vmdl_c diff --git a/models/thd_hero/kumoi/kumoi.vmesh_c b/game/models/thd_hero/kumoi/kumoi.vmesh_c similarity index 100% rename from models/thd_hero/kumoi/kumoi.vmesh_c rename to game/models/thd_hero/kumoi/kumoi.vmesh_c diff --git a/models/thd_hero/kumoi/kumoi_01ee6898.vagrp_c b/game/models/thd_hero/kumoi/kumoi_01ee6898.vagrp_c similarity index 100% rename from models/thd_hero/kumoi/kumoi_01ee6898.vagrp_c rename to game/models/thd_hero/kumoi/kumoi_01ee6898.vagrp_c diff --git a/models/thd_hero/kyouko/bb32365d/attack.vanim_c b/game/models/thd_hero/kyouko/bb32365d/attack.vanim_c similarity index 100% rename from models/thd_hero/kyouko/bb32365d/attack.vanim_c rename to game/models/thd_hero/kyouko/bb32365d/attack.vanim_c diff --git a/models/thd_hero/kyouko/bb32365d/idle.vanim_c b/game/models/thd_hero/kyouko/bb32365d/idle.vanim_c similarity index 100% rename from models/thd_hero/kyouko/bb32365d/idle.vanim_c rename to game/models/thd_hero/kyouko/bb32365d/idle.vanim_c diff --git a/models/thd_hero/kyouko/bb32365d/kyouko_animation.vanim_c b/game/models/thd_hero/kyouko/bb32365d/kyouko_animation.vanim_c similarity index 100% rename from models/thd_hero/kyouko/bb32365d/kyouko_animation.vanim_c rename to game/models/thd_hero/kyouko/bb32365d/kyouko_animation.vanim_c diff --git a/models/thd_hero/kyouko/bb32365d/run.vanim_c b/game/models/thd_hero/kyouko/bb32365d/run.vanim_c similarity index 100% rename from models/thd_hero/kyouko/bb32365d/run.vanim_c rename to game/models/thd_hero/kyouko/bb32365d/run.vanim_c diff --git a/models/thd_hero/kyouko/item/8d528671/attack.vanim_c b/game/models/thd_hero/kyouko/item/8d528671/attack.vanim_c similarity index 100% rename from models/thd_hero/kyouko/item/8d528671/attack.vanim_c rename to game/models/thd_hero/kyouko/item/8d528671/attack.vanim_c diff --git a/models/thd_hero/kyouko/item/8d528671/idle.vanim_c b/game/models/thd_hero/kyouko/item/8d528671/idle.vanim_c similarity index 100% rename from models/thd_hero/kyouko/item/8d528671/idle.vanim_c rename to game/models/thd_hero/kyouko/item/8d528671/idle.vanim_c diff --git a/models/thd_hero/kyouko/item/8d528671/run.vanim_c b/game/models/thd_hero/kyouko/item/8d528671/run.vanim_c similarity index 100% rename from models/thd_hero/kyouko/item/8d528671/run.vanim_c rename to game/models/thd_hero/kyouko/item/8d528671/run.vanim_c diff --git a/models/thd_hero/kyouko/item/item_kyouko.vmdl_c b/game/models/thd_hero/kyouko/item/item_kyouko.vmdl_c similarity index 100% rename from models/thd_hero/kyouko/item/item_kyouko.vmdl_c rename to game/models/thd_hero/kyouko/item/item_kyouko.vmdl_c diff --git a/models/thd_hero/kyouko/item/item_kyouko_8d528671.vagrp_c b/game/models/thd_hero/kyouko/item/item_kyouko_8d528671.vagrp_c similarity index 100% rename from models/thd_hero/kyouko/item/item_kyouko_8d528671.vagrp_c rename to game/models/thd_hero/kyouko/item/item_kyouko_8d528671.vagrp_c diff --git a/models/thd_hero/kyouko/item/kyouko.vmesh_c b/game/models/thd_hero/kyouko/item/kyouko.vmesh_c similarity index 100% rename from models/thd_hero/kyouko/item/kyouko.vmesh_c rename to game/models/thd_hero/kyouko/item/kyouko.vmesh_c diff --git a/models/thd_hero/kyouko/kyouko.vmdl_c b/game/models/thd_hero/kyouko/kyouko.vmdl_c similarity index 100% rename from models/thd_hero/kyouko/kyouko.vmdl_c rename to game/models/thd_hero/kyouko/kyouko.vmdl_c diff --git a/models/thd_hero/kyouko/kyouko.vmesh_c b/game/models/thd_hero/kyouko/kyouko.vmesh_c similarity index 100% rename from models/thd_hero/kyouko/kyouko.vmesh_c rename to game/models/thd_hero/kyouko/kyouko.vmesh_c diff --git a/models/thd_hero/kyouko/kyouko_bb32365d.vagrp_c b/game/models/thd_hero/kyouko/kyouko_bb32365d.vagrp_c similarity index 100% rename from models/thd_hero/kyouko/kyouko_bb32365d.vagrp_c rename to game/models/thd_hero/kyouko/kyouko_bb32365d.vagrp_c diff --git a/models/thd_hero/letty/199a2e08/attack.vanim_c b/game/models/thd_hero/letty/199a2e08/attack.vanim_c similarity index 100% rename from models/thd_hero/letty/199a2e08/attack.vanim_c rename to game/models/thd_hero/letty/199a2e08/attack.vanim_c diff --git a/models/thd_hero/letty/199a2e08/cast.vanim_c b/game/models/thd_hero/letty/199a2e08/cast.vanim_c similarity index 100% rename from models/thd_hero/letty/199a2e08/cast.vanim_c rename to game/models/thd_hero/letty/199a2e08/cast.vanim_c diff --git a/models/thd_hero/letty/199a2e08/idle.vanim_c b/game/models/thd_hero/letty/199a2e08/idle.vanim_c similarity index 100% rename from models/thd_hero/letty/199a2e08/idle.vanim_c rename to game/models/thd_hero/letty/199a2e08/idle.vanim_c diff --git a/models/thd_hero/letty/199a2e08/por.vanim_c b/game/models/thd_hero/letty/199a2e08/por.vanim_c similarity index 100% rename from models/thd_hero/letty/199a2e08/por.vanim_c rename to game/models/thd_hero/letty/199a2e08/por.vanim_c diff --git a/models/thd_hero/letty/199a2e08/run.vanim_c b/game/models/thd_hero/letty/199a2e08/run.vanim_c similarity index 100% rename from models/thd_hero/letty/199a2e08/run.vanim_c rename to game/models/thd_hero/letty/199a2e08/run.vanim_c diff --git a/models/thd_hero/letty/item/a7a8e685/attack.vanim_c b/game/models/thd_hero/letty/item/a7a8e685/attack.vanim_c similarity index 100% rename from models/thd_hero/letty/item/a7a8e685/attack.vanim_c rename to game/models/thd_hero/letty/item/a7a8e685/attack.vanim_c diff --git a/models/thd_hero/letty/item/a7a8e685/cast.vanim_c b/game/models/thd_hero/letty/item/a7a8e685/cast.vanim_c similarity index 100% rename from models/thd_hero/letty/item/a7a8e685/cast.vanim_c rename to game/models/thd_hero/letty/item/a7a8e685/cast.vanim_c diff --git a/models/thd_hero/letty/item/a7a8e685/idle.vanim_c b/game/models/thd_hero/letty/item/a7a8e685/idle.vanim_c similarity index 100% rename from models/thd_hero/letty/item/a7a8e685/idle.vanim_c rename to game/models/thd_hero/letty/item/a7a8e685/idle.vanim_c diff --git a/models/thd_hero/letty/item/a7a8e685/por.vanim_c b/game/models/thd_hero/letty/item/a7a8e685/por.vanim_c similarity index 100% rename from models/thd_hero/letty/item/a7a8e685/por.vanim_c rename to game/models/thd_hero/letty/item/a7a8e685/por.vanim_c diff --git a/models/thd_hero/letty/item/a7a8e685/run.vanim_c b/game/models/thd_hero/letty/item/a7a8e685/run.vanim_c similarity index 100% rename from models/thd_hero/letty/item/a7a8e685/run.vanim_c rename to game/models/thd_hero/letty/item/a7a8e685/run.vanim_c diff --git a/models/thd_hero/letty/item/item_letty.vmdl_c b/game/models/thd_hero/letty/item/item_letty.vmdl_c similarity index 100% rename from models/thd_hero/letty/item/item_letty.vmdl_c rename to game/models/thd_hero/letty/item/item_letty.vmdl_c diff --git a/models/thd_hero/letty/item/item_letty_a7a8e685.vagrp_c b/game/models/thd_hero/letty/item/item_letty_a7a8e685.vagrp_c similarity index 100% rename from models/thd_hero/letty/item/item_letty_a7a8e685.vagrp_c rename to game/models/thd_hero/letty/item/item_letty_a7a8e685.vagrp_c diff --git a/models/thd_hero/letty/item/letty.vmesh_c b/game/models/thd_hero/letty/item/letty.vmesh_c similarity index 100% rename from models/thd_hero/letty/item/letty.vmesh_c rename to game/models/thd_hero/letty/item/letty.vmesh_c diff --git a/models/thd_hero/letty/letty.vmdl_c b/game/models/thd_hero/letty/letty.vmdl_c similarity index 100% rename from models/thd_hero/letty/letty.vmdl_c rename to game/models/thd_hero/letty/letty.vmdl_c diff --git a/models/thd_hero/letty/letty.vmesh_c b/game/models/thd_hero/letty/letty.vmesh_c similarity index 100% rename from models/thd_hero/letty/letty.vmesh_c rename to game/models/thd_hero/letty/letty.vmesh_c diff --git a/models/thd_hero/letty/letty_199a2e08.vagrp_c b/game/models/thd_hero/letty/letty_199a2e08.vagrp_c similarity index 100% rename from models/thd_hero/letty/letty_199a2e08.vagrp_c rename to game/models/thd_hero/letty/letty_199a2e08.vagrp_c diff --git a/models/thd_hero/lily_white/df0791ee/attack.vanim_c b/game/models/thd_hero/lily_white/df0791ee/attack.vanim_c similarity index 100% rename from models/thd_hero/lily_white/df0791ee/attack.vanim_c rename to game/models/thd_hero/lily_white/df0791ee/attack.vanim_c diff --git a/models/thd_hero/lily_white/df0791ee/cast.vanim_c b/game/models/thd_hero/lily_white/df0791ee/cast.vanim_c similarity index 100% rename from models/thd_hero/lily_white/df0791ee/cast.vanim_c rename to game/models/thd_hero/lily_white/df0791ee/cast.vanim_c diff --git a/models/thd_hero/lily_white/df0791ee/idle.vanim_c b/game/models/thd_hero/lily_white/df0791ee/idle.vanim_c similarity index 100% rename from models/thd_hero/lily_white/df0791ee/idle.vanim_c rename to game/models/thd_hero/lily_white/df0791ee/idle.vanim_c diff --git a/models/thd_hero/lily_white/df0791ee/por.vanim_c b/game/models/thd_hero/lily_white/df0791ee/por.vanim_c similarity index 100% rename from models/thd_hero/lily_white/df0791ee/por.vanim_c rename to game/models/thd_hero/lily_white/df0791ee/por.vanim_c diff --git a/models/thd_hero/lily_white/df0791ee/run.vanim_c b/game/models/thd_hero/lily_white/df0791ee/run.vanim_c similarity index 100% rename from models/thd_hero/lily_white/df0791ee/run.vanim_c rename to game/models/thd_hero/lily_white/df0791ee/run.vanim_c diff --git a/models/thd_hero/lily_white/item/936a4206/attack.vanim_c b/game/models/thd_hero/lily_white/item/936a4206/attack.vanim_c similarity index 100% rename from models/thd_hero/lily_white/item/936a4206/attack.vanim_c rename to game/models/thd_hero/lily_white/item/936a4206/attack.vanim_c diff --git a/models/thd_hero/lily_white/item/936a4206/cast.vanim_c b/game/models/thd_hero/lily_white/item/936a4206/cast.vanim_c similarity index 100% rename from models/thd_hero/lily_white/item/936a4206/cast.vanim_c rename to game/models/thd_hero/lily_white/item/936a4206/cast.vanim_c diff --git a/models/thd_hero/lily_white/item/936a4206/idle.vanim_c b/game/models/thd_hero/lily_white/item/936a4206/idle.vanim_c similarity index 100% rename from models/thd_hero/lily_white/item/936a4206/idle.vanim_c rename to game/models/thd_hero/lily_white/item/936a4206/idle.vanim_c diff --git a/models/thd_hero/lily_white/item/936a4206/por.vanim_c b/game/models/thd_hero/lily_white/item/936a4206/por.vanim_c similarity index 100% rename from models/thd_hero/lily_white/item/936a4206/por.vanim_c rename to game/models/thd_hero/lily_white/item/936a4206/por.vanim_c diff --git a/models/thd_hero/lily_white/item/936a4206/run.vanim_c b/game/models/thd_hero/lily_white/item/936a4206/run.vanim_c similarity index 100% rename from models/thd_hero/lily_white/item/936a4206/run.vanim_c rename to game/models/thd_hero/lily_white/item/936a4206/run.vanim_c diff --git a/models/thd_hero/lily_white/item/item_lily_white.vmdl_c b/game/models/thd_hero/lily_white/item/item_lily_white.vmdl_c similarity index 100% rename from models/thd_hero/lily_white/item/item_lily_white.vmdl_c rename to game/models/thd_hero/lily_white/item/item_lily_white.vmdl_c diff --git a/models/thd_hero/lily_white/item/item_lily_white_936a4206.vagrp_c b/game/models/thd_hero/lily_white/item/item_lily_white_936a4206.vagrp_c similarity index 100% rename from models/thd_hero/lily_white/item/item_lily_white_936a4206.vagrp_c rename to game/models/thd_hero/lily_white/item/item_lily_white_936a4206.vagrp_c diff --git a/models/thd_hero/lily_white/item/lily_white.vmesh_c b/game/models/thd_hero/lily_white/item/lily_white.vmesh_c similarity index 100% rename from models/thd_hero/lily_white/item/lily_white.vmesh_c rename to game/models/thd_hero/lily_white/item/lily_white.vmesh_c diff --git a/models/thd_hero/lily_white/lily_white.vmdl_c b/game/models/thd_hero/lily_white/lily_white.vmdl_c similarity index 100% rename from models/thd_hero/lily_white/lily_white.vmdl_c rename to game/models/thd_hero/lily_white/lily_white.vmdl_c diff --git a/models/thd_hero/lily_white/lily_white.vmesh_c b/game/models/thd_hero/lily_white/lily_white.vmesh_c similarity index 100% rename from models/thd_hero/lily_white/lily_white.vmesh_c rename to game/models/thd_hero/lily_white/lily_white.vmesh_c diff --git a/models/thd_hero/lily_white/lily_white_df0791ee.vagrp_c b/game/models/thd_hero/lily_white/lily_white_df0791ee.vagrp_c similarity index 100% rename from models/thd_hero/lily_white/lily_white_df0791ee.vagrp_c rename to game/models/thd_hero/lily_white/lily_white_df0791ee.vagrp_c diff --git a/models/thd_hero/luna/91193f3e/attack1.vanim_c b/game/models/thd_hero/luna/91193f3e/attack1.vanim_c similarity index 100% rename from models/thd_hero/luna/91193f3e/attack1.vanim_c rename to game/models/thd_hero/luna/91193f3e/attack1.vanim_c diff --git a/models/thd_hero/luna/91193f3e/cast.vanim_c b/game/models/thd_hero/luna/91193f3e/cast.vanim_c similarity index 100% rename from models/thd_hero/luna/91193f3e/cast.vanim_c rename to game/models/thd_hero/luna/91193f3e/cast.vanim_c diff --git a/models/thd_hero/luna/91193f3e/cast4.vanim_c b/game/models/thd_hero/luna/91193f3e/cast4.vanim_c similarity index 100% rename from models/thd_hero/luna/91193f3e/cast4.vanim_c rename to game/models/thd_hero/luna/91193f3e/cast4.vanim_c diff --git a/models/thd_hero/luna/91193f3e/idle.vanim_c b/game/models/thd_hero/luna/91193f3e/idle.vanim_c similarity index 100% rename from models/thd_hero/luna/91193f3e/idle.vanim_c rename to game/models/thd_hero/luna/91193f3e/idle.vanim_c diff --git a/models/thd_hero/luna/91193f3e/luna_animation.vanim_c b/game/models/thd_hero/luna/91193f3e/luna_animation.vanim_c similarity index 100% rename from models/thd_hero/luna/91193f3e/luna_animation.vanim_c rename to game/models/thd_hero/luna/91193f3e/luna_animation.vanim_c diff --git a/models/thd_hero/luna/91193f3e/run.vanim_c b/game/models/thd_hero/luna/91193f3e/run.vanim_c similarity index 100% rename from models/thd_hero/luna/91193f3e/run.vanim_c rename to game/models/thd_hero/luna/91193f3e/run.vanim_c diff --git a/models/thd_hero/luna/item/8a6ab363/attack1.vanim_c b/game/models/thd_hero/luna/item/8a6ab363/attack1.vanim_c similarity index 100% rename from models/thd_hero/luna/item/8a6ab363/attack1.vanim_c rename to game/models/thd_hero/luna/item/8a6ab363/attack1.vanim_c diff --git a/models/thd_hero/luna/item/8a6ab363/cast.vanim_c b/game/models/thd_hero/luna/item/8a6ab363/cast.vanim_c similarity index 100% rename from models/thd_hero/luna/item/8a6ab363/cast.vanim_c rename to game/models/thd_hero/luna/item/8a6ab363/cast.vanim_c diff --git a/models/thd_hero/luna/item/8a6ab363/cast4.vanim_c b/game/models/thd_hero/luna/item/8a6ab363/cast4.vanim_c similarity index 100% rename from models/thd_hero/luna/item/8a6ab363/cast4.vanim_c rename to game/models/thd_hero/luna/item/8a6ab363/cast4.vanim_c diff --git a/models/thd_hero/luna/item/8a6ab363/idle.vanim_c b/game/models/thd_hero/luna/item/8a6ab363/idle.vanim_c similarity index 100% rename from models/thd_hero/luna/item/8a6ab363/idle.vanim_c rename to game/models/thd_hero/luna/item/8a6ab363/idle.vanim_c diff --git a/models/thd_hero/luna/item/8a6ab363/run.vanim_c b/game/models/thd_hero/luna/item/8a6ab363/run.vanim_c similarity index 100% rename from models/thd_hero/luna/item/8a6ab363/run.vanim_c rename to game/models/thd_hero/luna/item/8a6ab363/run.vanim_c diff --git a/models/thd_hero/luna/item/item_luna.vmdl_c b/game/models/thd_hero/luna/item/item_luna.vmdl_c similarity index 100% rename from models/thd_hero/luna/item/item_luna.vmdl_c rename to game/models/thd_hero/luna/item/item_luna.vmdl_c diff --git a/models/thd_hero/luna/item/item_luna_8a6ab363.vagrp_c b/game/models/thd_hero/luna/item/item_luna_8a6ab363.vagrp_c similarity index 100% rename from models/thd_hero/luna/item/item_luna_8a6ab363.vagrp_c rename to game/models/thd_hero/luna/item/item_luna_8a6ab363.vagrp_c diff --git a/models/thd_hero/luna/item/luna.vmesh_c b/game/models/thd_hero/luna/item/luna.vmesh_c similarity index 100% rename from models/thd_hero/luna/item/luna.vmesh_c rename to game/models/thd_hero/luna/item/luna.vmesh_c diff --git a/models/thd_hero/luna/luna.vmdl_c b/game/models/thd_hero/luna/luna.vmdl_c similarity index 100% rename from models/thd_hero/luna/luna.vmdl_c rename to game/models/thd_hero/luna/luna.vmdl_c diff --git a/models/thd_hero/luna/luna.vmesh_c b/game/models/thd_hero/luna/luna.vmesh_c similarity index 100% rename from models/thd_hero/luna/luna.vmesh_c rename to game/models/thd_hero/luna/luna.vmesh_c diff --git a/models/thd_hero/luna/luna_91193f3e.vagrp_c b/game/models/thd_hero/luna/luna_91193f3e.vagrp_c similarity index 100% rename from models/thd_hero/luna/luna_91193f3e.vagrp_c rename to game/models/thd_hero/luna/luna_91193f3e.vagrp_c diff --git a/models/thd_hero/lunasa_prismriver/30834cef/attack.vanim_c b/game/models/thd_hero/lunasa_prismriver/30834cef/attack.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/30834cef/attack.vanim_c rename to game/models/thd_hero/lunasa_prismriver/30834cef/attack.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/30834cef/attack2.vanim_c b/game/models/thd_hero/lunasa_prismriver/30834cef/attack2.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/30834cef/attack2.vanim_c rename to game/models/thd_hero/lunasa_prismriver/30834cef/attack2.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/30834cef/cast.vanim_c b/game/models/thd_hero/lunasa_prismriver/30834cef/cast.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/30834cef/cast.vanim_c rename to game/models/thd_hero/lunasa_prismriver/30834cef/cast.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/30834cef/idle.vanim_c b/game/models/thd_hero/lunasa_prismriver/30834cef/idle.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/30834cef/idle.vanim_c rename to game/models/thd_hero/lunasa_prismriver/30834cef/idle.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/30834cef/por.vanim_c b/game/models/thd_hero/lunasa_prismriver/30834cef/por.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/30834cef/por.vanim_c rename to game/models/thd_hero/lunasa_prismriver/30834cef/por.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/30834cef/run.vanim_c b/game/models/thd_hero/lunasa_prismriver/30834cef/run.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/30834cef/run.vanim_c rename to game/models/thd_hero/lunasa_prismriver/30834cef/run.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/item/714e55a4/attack.vanim_c b/game/models/thd_hero/lunasa_prismriver/item/714e55a4/attack.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/714e55a4/attack.vanim_c rename to game/models/thd_hero/lunasa_prismriver/item/714e55a4/attack.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/item/714e55a4/attack2.vanim_c b/game/models/thd_hero/lunasa_prismriver/item/714e55a4/attack2.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/714e55a4/attack2.vanim_c rename to game/models/thd_hero/lunasa_prismriver/item/714e55a4/attack2.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/item/714e55a4/cast.vanim_c b/game/models/thd_hero/lunasa_prismriver/item/714e55a4/cast.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/714e55a4/cast.vanim_c rename to game/models/thd_hero/lunasa_prismriver/item/714e55a4/cast.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/item/714e55a4/idle.vanim_c b/game/models/thd_hero/lunasa_prismriver/item/714e55a4/idle.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/714e55a4/idle.vanim_c rename to game/models/thd_hero/lunasa_prismriver/item/714e55a4/idle.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/item/714e55a4/por.vanim_c b/game/models/thd_hero/lunasa_prismriver/item/714e55a4/por.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/714e55a4/por.vanim_c rename to game/models/thd_hero/lunasa_prismriver/item/714e55a4/por.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/item/714e55a4/run.vanim_c b/game/models/thd_hero/lunasa_prismriver/item/714e55a4/run.vanim_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/714e55a4/run.vanim_c rename to game/models/thd_hero/lunasa_prismriver/item/714e55a4/run.vanim_c diff --git a/models/thd_hero/lunasa_prismriver/item/item_lunasa.vmdl_c b/game/models/thd_hero/lunasa_prismriver/item/item_lunasa.vmdl_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/item_lunasa.vmdl_c rename to game/models/thd_hero/lunasa_prismriver/item/item_lunasa.vmdl_c diff --git a/models/thd_hero/lunasa_prismriver/item/item_lunasa_714e55a4.vagrp_c b/game/models/thd_hero/lunasa_prismriver/item/item_lunasa_714e55a4.vagrp_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/item_lunasa_714e55a4.vagrp_c rename to game/models/thd_hero/lunasa_prismriver/item/item_lunasa_714e55a4.vagrp_c diff --git a/models/thd_hero/lunasa_prismriver/item/lunasa.vmesh_c b/game/models/thd_hero/lunasa_prismriver/item/lunasa.vmesh_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/item/lunasa.vmesh_c rename to game/models/thd_hero/lunasa_prismriver/item/lunasa.vmesh_c diff --git a/models/thd_hero/lunasa_prismriver/lunasa.vmdl_c b/game/models/thd_hero/lunasa_prismriver/lunasa.vmdl_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/lunasa.vmdl_c rename to game/models/thd_hero/lunasa_prismriver/lunasa.vmdl_c diff --git a/models/thd_hero/lunasa_prismriver/lunasa.vmesh_c b/game/models/thd_hero/lunasa_prismriver/lunasa.vmesh_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/lunasa.vmesh_c rename to game/models/thd_hero/lunasa_prismriver/lunasa.vmesh_c diff --git a/models/thd_hero/lunasa_prismriver/lunasa_30834cef.vagrp_c b/game/models/thd_hero/lunasa_prismriver/lunasa_30834cef.vagrp_c similarity index 100% rename from models/thd_hero/lunasa_prismriver/lunasa_30834cef.vagrp_c rename to game/models/thd_hero/lunasa_prismriver/lunasa_30834cef.vagrp_c diff --git a/models/thd_hero/lyrica_prismriver/72c27d16/attack1.vanim_c b/game/models/thd_hero/lyrica_prismriver/72c27d16/attack1.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/72c27d16/attack1.vanim_c rename to game/models/thd_hero/lyrica_prismriver/72c27d16/attack1.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/72c27d16/attack2.vanim_c b/game/models/thd_hero/lyrica_prismriver/72c27d16/attack2.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/72c27d16/attack2.vanim_c rename to game/models/thd_hero/lyrica_prismriver/72c27d16/attack2.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/72c27d16/cast.vanim_c b/game/models/thd_hero/lyrica_prismriver/72c27d16/cast.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/72c27d16/cast.vanim_c rename to game/models/thd_hero/lyrica_prismriver/72c27d16/cast.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/72c27d16/idle.vanim_c b/game/models/thd_hero/lyrica_prismriver/72c27d16/idle.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/72c27d16/idle.vanim_c rename to game/models/thd_hero/lyrica_prismriver/72c27d16/idle.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/72c27d16/por.vanim_c b/game/models/thd_hero/lyrica_prismriver/72c27d16/por.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/72c27d16/por.vanim_c rename to game/models/thd_hero/lyrica_prismriver/72c27d16/por.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/72c27d16/run.vanim_c b/game/models/thd_hero/lyrica_prismriver/72c27d16/run.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/72c27d16/run.vanim_c rename to game/models/thd_hero/lyrica_prismriver/72c27d16/run.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack1.vanim_c b/game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack1.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack1.vanim_c rename to game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack1.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack2.vanim_c b/game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack2.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack2.vanim_c rename to game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/attack2.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/item/f67a3eb6/cast.vanim_c b/game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/cast.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/f67a3eb6/cast.vanim_c rename to game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/cast.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/item/f67a3eb6/idle.vanim_c b/game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/idle.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/f67a3eb6/idle.vanim_c rename to game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/idle.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/item/f67a3eb6/por.vanim_c b/game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/por.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/f67a3eb6/por.vanim_c rename to game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/por.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/item/f67a3eb6/run.vanim_c b/game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/run.vanim_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/f67a3eb6/run.vanim_c rename to game/models/thd_hero/lyrica_prismriver/item/f67a3eb6/run.vanim_c diff --git a/models/thd_hero/lyrica_prismriver/item/item_lyrica.vmdl_c b/game/models/thd_hero/lyrica_prismriver/item/item_lyrica.vmdl_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/item_lyrica.vmdl_c rename to game/models/thd_hero/lyrica_prismriver/item/item_lyrica.vmdl_c diff --git a/models/thd_hero/lyrica_prismriver/item/item_lyrica_f67a3eb6.vagrp_c b/game/models/thd_hero/lyrica_prismriver/item/item_lyrica_f67a3eb6.vagrp_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/item_lyrica_f67a3eb6.vagrp_c rename to game/models/thd_hero/lyrica_prismriver/item/item_lyrica_f67a3eb6.vagrp_c diff --git a/models/thd_hero/lyrica_prismriver/item/lyrica.vmesh_c b/game/models/thd_hero/lyrica_prismriver/item/lyrica.vmesh_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/item/lyrica.vmesh_c rename to game/models/thd_hero/lyrica_prismriver/item/lyrica.vmesh_c diff --git a/models/thd_hero/lyrica_prismriver/lyrica.vmdl_c b/game/models/thd_hero/lyrica_prismriver/lyrica.vmdl_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/lyrica.vmdl_c rename to game/models/thd_hero/lyrica_prismriver/lyrica.vmdl_c diff --git a/models/thd_hero/lyrica_prismriver/lyrica.vmesh_c b/game/models/thd_hero/lyrica_prismriver/lyrica.vmesh_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/lyrica.vmesh_c rename to game/models/thd_hero/lyrica_prismriver/lyrica.vmesh_c diff --git a/models/thd_hero/lyrica_prismriver/lyrica_72c27d16.vagrp_c b/game/models/thd_hero/lyrica_prismriver/lyrica_72c27d16.vagrp_c similarity index 100% rename from models/thd_hero/lyrica_prismriver/lyrica_72c27d16.vagrp_c rename to game/models/thd_hero/lyrica_prismriver/lyrica_72c27d16.vagrp_c diff --git a/models/thd_hero/maidyousei/2c300868/attack.vanim_c b/game/models/thd_hero/maidyousei/2c300868/attack.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/2c300868/attack.vanim_c rename to game/models/thd_hero/maidyousei/2c300868/attack.vanim_c diff --git a/models/thd_hero/maidyousei/2c300868/attack2.vanim_c b/game/models/thd_hero/maidyousei/2c300868/attack2.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/2c300868/attack2.vanim_c rename to game/models/thd_hero/maidyousei/2c300868/attack2.vanim_c diff --git a/models/thd_hero/maidyousei/2c300868/attack3.vanim_c b/game/models/thd_hero/maidyousei/2c300868/attack3.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/2c300868/attack3.vanim_c rename to game/models/thd_hero/maidyousei/2c300868/attack3.vanim_c diff --git a/models/thd_hero/maidyousei/2c300868/die.vanim_c b/game/models/thd_hero/maidyousei/2c300868/die.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/2c300868/die.vanim_c rename to game/models/thd_hero/maidyousei/2c300868/die.vanim_c diff --git a/models/thd_hero/maidyousei/2c300868/idle.vanim_c b/game/models/thd_hero/maidyousei/2c300868/idle.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/2c300868/idle.vanim_c rename to game/models/thd_hero/maidyousei/2c300868/idle.vanim_c diff --git a/models/thd_hero/maidyousei/2c300868/por.vanim_c b/game/models/thd_hero/maidyousei/2c300868/por.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/2c300868/por.vanim_c rename to game/models/thd_hero/maidyousei/2c300868/por.vanim_c diff --git a/models/thd_hero/maidyousei/2c300868/run.vanim_c b/game/models/thd_hero/maidyousei/2c300868/run.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/2c300868/run.vanim_c rename to game/models/thd_hero/maidyousei/2c300868/run.vanim_c diff --git a/models/thd_hero/maidyousei/item/606a8a11/attack.vanim_c b/game/models/thd_hero/maidyousei/item/606a8a11/attack.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/item/606a8a11/attack.vanim_c rename to game/models/thd_hero/maidyousei/item/606a8a11/attack.vanim_c diff --git a/models/thd_hero/maidyousei/item/606a8a11/attack2.vanim_c b/game/models/thd_hero/maidyousei/item/606a8a11/attack2.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/item/606a8a11/attack2.vanim_c rename to game/models/thd_hero/maidyousei/item/606a8a11/attack2.vanim_c diff --git a/models/thd_hero/maidyousei/item/606a8a11/attack3.vanim_c b/game/models/thd_hero/maidyousei/item/606a8a11/attack3.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/item/606a8a11/attack3.vanim_c rename to game/models/thd_hero/maidyousei/item/606a8a11/attack3.vanim_c diff --git a/models/thd_hero/maidyousei/item/606a8a11/die.vanim_c b/game/models/thd_hero/maidyousei/item/606a8a11/die.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/item/606a8a11/die.vanim_c rename to game/models/thd_hero/maidyousei/item/606a8a11/die.vanim_c diff --git a/models/thd_hero/maidyousei/item/606a8a11/idle.vanim_c b/game/models/thd_hero/maidyousei/item/606a8a11/idle.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/item/606a8a11/idle.vanim_c rename to game/models/thd_hero/maidyousei/item/606a8a11/idle.vanim_c diff --git a/models/thd_hero/maidyousei/item/606a8a11/por.vanim_c b/game/models/thd_hero/maidyousei/item/606a8a11/por.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/item/606a8a11/por.vanim_c rename to game/models/thd_hero/maidyousei/item/606a8a11/por.vanim_c diff --git a/models/thd_hero/maidyousei/item/606a8a11/run.vanim_c b/game/models/thd_hero/maidyousei/item/606a8a11/run.vanim_c similarity index 100% rename from models/thd_hero/maidyousei/item/606a8a11/run.vanim_c rename to game/models/thd_hero/maidyousei/item/606a8a11/run.vanim_c diff --git a/models/thd_hero/maidyousei/item/item_maidyousei.vmdl_c b/game/models/thd_hero/maidyousei/item/item_maidyousei.vmdl_c similarity index 100% rename from models/thd_hero/maidyousei/item/item_maidyousei.vmdl_c rename to game/models/thd_hero/maidyousei/item/item_maidyousei.vmdl_c diff --git a/models/thd_hero/maidyousei/item/item_maidyousei_606a8a11.vagrp_c b/game/models/thd_hero/maidyousei/item/item_maidyousei_606a8a11.vagrp_c similarity index 100% rename from models/thd_hero/maidyousei/item/item_maidyousei_606a8a11.vagrp_c rename to game/models/thd_hero/maidyousei/item/item_maidyousei_606a8a11.vagrp_c diff --git a/models/thd_hero/maidyousei/item/maidyousei.vmesh_c b/game/models/thd_hero/maidyousei/item/maidyousei.vmesh_c similarity index 100% rename from models/thd_hero/maidyousei/item/maidyousei.vmesh_c rename to game/models/thd_hero/maidyousei/item/maidyousei.vmesh_c diff --git a/models/thd_hero/maidyousei/maidyousei.vmdl_c b/game/models/thd_hero/maidyousei/maidyousei.vmdl_c similarity index 100% rename from models/thd_hero/maidyousei/maidyousei.vmdl_c rename to game/models/thd_hero/maidyousei/maidyousei.vmdl_c diff --git a/models/thd_hero/maidyousei/maidyousei.vmesh_c b/game/models/thd_hero/maidyousei/maidyousei.vmesh_c similarity index 100% rename from models/thd_hero/maidyousei/maidyousei.vmesh_c rename to game/models/thd_hero/maidyousei/maidyousei.vmesh_c diff --git a/models/thd_hero/maidyousei/maidyousei_2c300868.vagrp_c b/game/models/thd_hero/maidyousei/maidyousei_2c300868.vagrp_c similarity index 100% rename from models/thd_hero/maidyousei/maidyousei_2c300868.vagrp_c rename to game/models/thd_hero/maidyousei/maidyousei_2c300868.vagrp_c diff --git a/models/thd_hero/medicine/67868622/attack1.vanim_c b/game/models/thd_hero/medicine/67868622/attack1.vanim_c similarity index 100% rename from models/thd_hero/medicine/67868622/attack1.vanim_c rename to game/models/thd_hero/medicine/67868622/attack1.vanim_c diff --git a/models/thd_hero/medicine/67868622/idle.vanim_c b/game/models/thd_hero/medicine/67868622/idle.vanim_c similarity index 100% rename from models/thd_hero/medicine/67868622/idle.vanim_c rename to game/models/thd_hero/medicine/67868622/idle.vanim_c diff --git a/models/thd_hero/medicine/67868622/medicine_animation.vanim_c b/game/models/thd_hero/medicine/67868622/medicine_animation.vanim_c similarity index 100% rename from models/thd_hero/medicine/67868622/medicine_animation.vanim_c rename to game/models/thd_hero/medicine/67868622/medicine_animation.vanim_c diff --git a/models/thd_hero/medicine/67868622/run.vanim_c b/game/models/thd_hero/medicine/67868622/run.vanim_c similarity index 100% rename from models/thd_hero/medicine/67868622/run.vanim_c rename to game/models/thd_hero/medicine/67868622/run.vanim_c diff --git a/models/thd_hero/medicine/item/81531353/attack1.vanim_c b/game/models/thd_hero/medicine/item/81531353/attack1.vanim_c similarity index 100% rename from models/thd_hero/medicine/item/81531353/attack1.vanim_c rename to game/models/thd_hero/medicine/item/81531353/attack1.vanim_c diff --git a/models/thd_hero/medicine/item/81531353/idle.vanim_c b/game/models/thd_hero/medicine/item/81531353/idle.vanim_c similarity index 100% rename from models/thd_hero/medicine/item/81531353/idle.vanim_c rename to game/models/thd_hero/medicine/item/81531353/idle.vanim_c diff --git a/models/thd_hero/medicine/item/81531353/run.vanim_c b/game/models/thd_hero/medicine/item/81531353/run.vanim_c similarity index 100% rename from models/thd_hero/medicine/item/81531353/run.vanim_c rename to game/models/thd_hero/medicine/item/81531353/run.vanim_c diff --git a/models/thd_hero/medicine/item/item_medicine.vmdl_c b/game/models/thd_hero/medicine/item/item_medicine.vmdl_c similarity index 100% rename from models/thd_hero/medicine/item/item_medicine.vmdl_c rename to game/models/thd_hero/medicine/item/item_medicine.vmdl_c diff --git a/models/thd_hero/medicine/item/item_medicine_81531353.vagrp_c b/game/models/thd_hero/medicine/item/item_medicine_81531353.vagrp_c similarity index 100% rename from models/thd_hero/medicine/item/item_medicine_81531353.vagrp_c rename to game/models/thd_hero/medicine/item/item_medicine_81531353.vagrp_c diff --git a/models/thd_hero/medicine/item/medicine.vmesh_c b/game/models/thd_hero/medicine/item/medicine.vmesh_c similarity index 100% rename from models/thd_hero/medicine/item/medicine.vmesh_c rename to game/models/thd_hero/medicine/item/medicine.vmesh_c diff --git a/models/thd_hero/medicine/medicine.vmdl_c b/game/models/thd_hero/medicine/medicine.vmdl_c similarity index 100% rename from models/thd_hero/medicine/medicine.vmdl_c rename to game/models/thd_hero/medicine/medicine.vmdl_c diff --git a/models/thd_hero/medicine/medicine.vmesh_c b/game/models/thd_hero/medicine/medicine.vmesh_c similarity index 100% rename from models/thd_hero/medicine/medicine.vmesh_c rename to game/models/thd_hero/medicine/medicine.vmesh_c diff --git a/models/thd_hero/medicine/medicine_67868622.vagrp_c b/game/models/thd_hero/medicine/medicine_67868622.vagrp_c similarity index 100% rename from models/thd_hero/medicine/medicine_67868622.vagrp_c rename to game/models/thd_hero/medicine/medicine_67868622.vagrp_c diff --git a/models/thd_hero/meirin/b62c8868/attack1.vanim_c b/game/models/thd_hero/meirin/b62c8868/attack1.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/attack1.vanim_c rename to game/models/thd_hero/meirin/b62c8868/attack1.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/attack2.vanim_c b/game/models/thd_hero/meirin/b62c8868/attack2.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/attack2.vanim_c rename to game/models/thd_hero/meirin/b62c8868/attack2.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/cast1.vanim_c b/game/models/thd_hero/meirin/b62c8868/cast1.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/cast1.vanim_c rename to game/models/thd_hero/meirin/b62c8868/cast1.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/cast3.vanim_c b/game/models/thd_hero/meirin/b62c8868/cast3.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/cast3.vanim_c rename to game/models/thd_hero/meirin/b62c8868/cast3.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/cast4.vanim_c b/game/models/thd_hero/meirin/b62c8868/cast4.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/cast4.vanim_c rename to game/models/thd_hero/meirin/b62c8868/cast4.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/cast4_2.vanim_c b/game/models/thd_hero/meirin/b62c8868/cast4_2.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/cast4_2.vanim_c rename to game/models/thd_hero/meirin/b62c8868/cast4_2.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/cast4_3.vanim_c b/game/models/thd_hero/meirin/b62c8868/cast4_3.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/cast4_3.vanim_c rename to game/models/thd_hero/meirin/b62c8868/cast4_3.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/idle.vanim_c b/game/models/thd_hero/meirin/b62c8868/idle.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/idle.vanim_c rename to game/models/thd_hero/meirin/b62c8868/idle.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/meirin_animation.vanim_c b/game/models/thd_hero/meirin/b62c8868/meirin_animation.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/meirin_animation.vanim_c rename to game/models/thd_hero/meirin/b62c8868/meirin_animation.vanim_c diff --git a/models/thd_hero/meirin/b62c8868/run.vanim_c b/game/models/thd_hero/meirin/b62c8868/run.vanim_c similarity index 100% rename from models/thd_hero/meirin/b62c8868/run.vanim_c rename to game/models/thd_hero/meirin/b62c8868/run.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/2.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/2.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/2.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/2.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/attack1.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/attack1.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/attack1.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/attack1.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/attack2.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/attack2.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/attack2.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/attack2.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/cast1.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/cast1.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/cast1.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/cast1.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/cast3.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/cast3.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/cast3.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/cast3.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/cast4.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/cast4.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/cast4.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/cast4.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/cast4_2.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/cast4_2.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/cast4_2.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/cast4_2.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/cast4_3.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/cast4_3.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/cast4_3.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/cast4_3.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/idle.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/idle.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/idle.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/idle.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/meirin_cloth01_animation.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/meirin_cloth01_animation.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/meirin_cloth01_animation.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/meirin_cloth01_animation.vanim_c diff --git a/models/thd_hero/meirin/cloth01/95c78aa6/run.vanim_c b/game/models/thd_hero/meirin/cloth01/95c78aa6/run.vanim_c similarity index 100% rename from models/thd_hero/meirin/cloth01/95c78aa6/run.vanim_c rename to game/models/thd_hero/meirin/cloth01/95c78aa6/run.vanim_c diff --git a/models/thd_hero/meirin/cloth01/meirin_cloth01.vmdl_c b/game/models/thd_hero/meirin/cloth01/meirin_cloth01.vmdl_c similarity index 100% rename from models/thd_hero/meirin/cloth01/meirin_cloth01.vmdl_c rename to game/models/thd_hero/meirin/cloth01/meirin_cloth01.vmdl_c diff --git a/models/thd_hero/meirin/cloth01/meirin_cloth01.vmesh_c b/game/models/thd_hero/meirin/cloth01/meirin_cloth01.vmesh_c similarity index 100% rename from models/thd_hero/meirin/cloth01/meirin_cloth01.vmesh_c rename to game/models/thd_hero/meirin/cloth01/meirin_cloth01.vmesh_c diff --git a/models/thd_hero/meirin/cloth01/meirin_cloth01_95c78aa6.vagrp_c b/game/models/thd_hero/meirin/cloth01/meirin_cloth01_95c78aa6.vagrp_c similarity index 100% rename from models/thd_hero/meirin/cloth01/meirin_cloth01_95c78aa6.vagrp_c rename to game/models/thd_hero/meirin/cloth01/meirin_cloth01_95c78aa6.vagrp_c diff --git a/models/thd_hero/meirin/item/8987cc8f/attack1.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/attack1.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/attack1.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/attack1.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/attack2.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/attack2.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/attack2.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/attack2.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/cast1.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/cast1.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/cast1.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/cast1.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/cast3.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/cast3.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/cast3.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/cast3.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/cast4.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/cast4.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/cast4.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/cast4.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/cast4_2.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/cast4_2.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/cast4_2.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/cast4_2.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/cast4_3.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/cast4_3.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/cast4_3.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/cast4_3.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/idle.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/idle.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/idle.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/idle.vanim_c diff --git a/models/thd_hero/meirin/item/8987cc8f/run.vanim_c b/game/models/thd_hero/meirin/item/8987cc8f/run.vanim_c similarity index 100% rename from models/thd_hero/meirin/item/8987cc8f/run.vanim_c rename to game/models/thd_hero/meirin/item/8987cc8f/run.vanim_c diff --git a/models/thd_hero/meirin/item/item_meirin.vmdl_c b/game/models/thd_hero/meirin/item/item_meirin.vmdl_c similarity index 100% rename from models/thd_hero/meirin/item/item_meirin.vmdl_c rename to game/models/thd_hero/meirin/item/item_meirin.vmdl_c diff --git a/models/thd_hero/meirin/item/item_meirin_8987cc8f.vagrp_c b/game/models/thd_hero/meirin/item/item_meirin_8987cc8f.vagrp_c similarity index 100% rename from models/thd_hero/meirin/item/item_meirin_8987cc8f.vagrp_c rename to game/models/thd_hero/meirin/item/item_meirin_8987cc8f.vagrp_c diff --git a/models/thd_hero/meirin/item/meirin.vmesh_c b/game/models/thd_hero/meirin/item/meirin.vmesh_c similarity index 100% rename from models/thd_hero/meirin/item/meirin.vmesh_c rename to game/models/thd_hero/meirin/item/meirin.vmesh_c diff --git a/models/thd_hero/meirin/meirin.vmdl_c b/game/models/thd_hero/meirin/meirin.vmdl_c similarity index 100% rename from models/thd_hero/meirin/meirin.vmdl_c rename to game/models/thd_hero/meirin/meirin.vmdl_c diff --git a/models/thd_hero/meirin/meirin.vmesh_c b/game/models/thd_hero/meirin/meirin.vmesh_c similarity index 100% rename from models/thd_hero/meirin/meirin.vmesh_c rename to game/models/thd_hero/meirin/meirin.vmesh_c diff --git a/models/thd_hero/meirin/meirin_b62c8868.vagrp_c b/game/models/thd_hero/meirin/meirin_b62c8868.vagrp_c similarity index 100% rename from models/thd_hero/meirin/meirin_b62c8868.vagrp_c rename to game/models/thd_hero/meirin/meirin_b62c8868.vagrp_c diff --git a/models/thd_hero/merlin_prismriver/ec4560c0/attack.vanim_c b/game/models/thd_hero/merlin_prismriver/ec4560c0/attack.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/ec4560c0/attack.vanim_c rename to game/models/thd_hero/merlin_prismriver/ec4560c0/attack.vanim_c diff --git a/models/thd_hero/merlin_prismriver/ec4560c0/attack2.vanim_c b/game/models/thd_hero/merlin_prismriver/ec4560c0/attack2.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/ec4560c0/attack2.vanim_c rename to game/models/thd_hero/merlin_prismriver/ec4560c0/attack2.vanim_c diff --git a/models/thd_hero/merlin_prismriver/ec4560c0/cast.vanim_c b/game/models/thd_hero/merlin_prismriver/ec4560c0/cast.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/ec4560c0/cast.vanim_c rename to game/models/thd_hero/merlin_prismriver/ec4560c0/cast.vanim_c diff --git a/models/thd_hero/merlin_prismriver/ec4560c0/idle.vanim_c b/game/models/thd_hero/merlin_prismriver/ec4560c0/idle.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/ec4560c0/idle.vanim_c rename to game/models/thd_hero/merlin_prismriver/ec4560c0/idle.vanim_c diff --git a/models/thd_hero/merlin_prismriver/ec4560c0/por.vanim_c b/game/models/thd_hero/merlin_prismriver/ec4560c0/por.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/ec4560c0/por.vanim_c rename to game/models/thd_hero/merlin_prismriver/ec4560c0/por.vanim_c diff --git a/models/thd_hero/merlin_prismriver/ec4560c0/run.vanim_c b/game/models/thd_hero/merlin_prismriver/ec4560c0/run.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/ec4560c0/run.vanim_c rename to game/models/thd_hero/merlin_prismriver/ec4560c0/run.vanim_c diff --git a/models/thd_hero/merlin_prismriver/item/db3d994d/attack.vanim_c b/game/models/thd_hero/merlin_prismriver/item/db3d994d/attack.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/db3d994d/attack.vanim_c rename to game/models/thd_hero/merlin_prismriver/item/db3d994d/attack.vanim_c diff --git a/models/thd_hero/merlin_prismriver/item/db3d994d/attack2.vanim_c b/game/models/thd_hero/merlin_prismriver/item/db3d994d/attack2.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/db3d994d/attack2.vanim_c rename to game/models/thd_hero/merlin_prismriver/item/db3d994d/attack2.vanim_c diff --git a/models/thd_hero/merlin_prismriver/item/db3d994d/cast.vanim_c b/game/models/thd_hero/merlin_prismriver/item/db3d994d/cast.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/db3d994d/cast.vanim_c rename to game/models/thd_hero/merlin_prismriver/item/db3d994d/cast.vanim_c diff --git a/models/thd_hero/merlin_prismriver/item/db3d994d/idle.vanim_c b/game/models/thd_hero/merlin_prismriver/item/db3d994d/idle.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/db3d994d/idle.vanim_c rename to game/models/thd_hero/merlin_prismriver/item/db3d994d/idle.vanim_c diff --git a/models/thd_hero/merlin_prismriver/item/db3d994d/por.vanim_c b/game/models/thd_hero/merlin_prismriver/item/db3d994d/por.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/db3d994d/por.vanim_c rename to game/models/thd_hero/merlin_prismriver/item/db3d994d/por.vanim_c diff --git a/models/thd_hero/merlin_prismriver/item/db3d994d/run.vanim_c b/game/models/thd_hero/merlin_prismriver/item/db3d994d/run.vanim_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/db3d994d/run.vanim_c rename to game/models/thd_hero/merlin_prismriver/item/db3d994d/run.vanim_c diff --git a/models/thd_hero/merlin_prismriver/item/item_merlin.vmdl_c b/game/models/thd_hero/merlin_prismriver/item/item_merlin.vmdl_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/item_merlin.vmdl_c rename to game/models/thd_hero/merlin_prismriver/item/item_merlin.vmdl_c diff --git a/models/thd_hero/merlin_prismriver/item/item_merlin_db3d994d.vagrp_c b/game/models/thd_hero/merlin_prismriver/item/item_merlin_db3d994d.vagrp_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/item_merlin_db3d994d.vagrp_c rename to game/models/thd_hero/merlin_prismriver/item/item_merlin_db3d994d.vagrp_c diff --git a/models/thd_hero/merlin_prismriver/item/merlin.vmesh_c b/game/models/thd_hero/merlin_prismriver/item/merlin.vmesh_c similarity index 100% rename from models/thd_hero/merlin_prismriver/item/merlin.vmesh_c rename to game/models/thd_hero/merlin_prismriver/item/merlin.vmesh_c diff --git a/models/thd_hero/merlin_prismriver/merlin.vmdl_c b/game/models/thd_hero/merlin_prismriver/merlin.vmdl_c similarity index 100% rename from models/thd_hero/merlin_prismriver/merlin.vmdl_c rename to game/models/thd_hero/merlin_prismriver/merlin.vmdl_c diff --git a/models/thd_hero/merlin_prismriver/merlin.vmesh_c b/game/models/thd_hero/merlin_prismriver/merlin.vmesh_c similarity index 100% rename from models/thd_hero/merlin_prismriver/merlin.vmesh_c rename to game/models/thd_hero/merlin_prismriver/merlin.vmesh_c diff --git a/models/thd_hero/merlin_prismriver/merlin_ec4560c0.vagrp_c b/game/models/thd_hero/merlin_prismriver/merlin_ec4560c0.vagrp_c similarity index 100% rename from models/thd_hero/merlin_prismriver/merlin_ec4560c0.vagrp_c rename to game/models/thd_hero/merlin_prismriver/merlin_ec4560c0.vagrp_c diff --git a/models/thd_hero/miko/6fbdbd69/attack1.vanim_c b/game/models/thd_hero/miko/6fbdbd69/attack1.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/attack1.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/attack1.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/attack2.vanim_c b/game/models/thd_hero/miko/6fbdbd69/attack2.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/attack2.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/attack2.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/capture.vanim_c b/game/models/thd_hero/miko/6fbdbd69/capture.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/capture.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/capture.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/cast1.vanim_c b/game/models/thd_hero/miko/6fbdbd69/cast1.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/cast1.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/cast1.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/cast1_b.vanim_c b/game/models/thd_hero/miko/6fbdbd69/cast1_b.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/cast1_b.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/cast1_b.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/cast1_c.vanim_c b/game/models/thd_hero/miko/6fbdbd69/cast1_c.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/cast1_c.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/cast1_c.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/cast2.vanim_c b/game/models/thd_hero/miko/6fbdbd69/cast2.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/cast2.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/cast2.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/cast4.vanim_c b/game/models/thd_hero/miko/6fbdbd69/cast4.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/cast4.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/cast4.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/idle.vanim_c b/game/models/thd_hero/miko/6fbdbd69/idle.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/idle.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/idle.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/miko_animation.vanim_c b/game/models/thd_hero/miko/6fbdbd69/miko_animation.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/miko_animation.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/miko_animation.vanim_c diff --git a/models/thd_hero/miko/6fbdbd69/run.vanim_c b/game/models/thd_hero/miko/6fbdbd69/run.vanim_c similarity index 100% rename from models/thd_hero/miko/6fbdbd69/run.vanim_c rename to game/models/thd_hero/miko/6fbdbd69/run.vanim_c diff --git a/models/thd_hero/miko/item/ae849235/attack1.vanim_c b/game/models/thd_hero/miko/item/ae849235/attack1.vanim_c similarity index 100% rename from models/thd_hero/miko/item/ae849235/attack1.vanim_c rename to game/models/thd_hero/miko/item/ae849235/attack1.vanim_c diff --git a/models/thd_hero/miko/item/ae849235/attack2.vanim_c b/game/models/thd_hero/miko/item/ae849235/attack2.vanim_c similarity index 100% rename from models/thd_hero/miko/item/ae849235/attack2.vanim_c rename to game/models/thd_hero/miko/item/ae849235/attack2.vanim_c diff --git a/models/thd_hero/miko/item/ae849235/cast1.vanim_c b/game/models/thd_hero/miko/item/ae849235/cast1.vanim_c similarity index 100% rename from models/thd_hero/miko/item/ae849235/cast1.vanim_c rename to game/models/thd_hero/miko/item/ae849235/cast1.vanim_c diff --git a/models/thd_hero/miko/item/ae849235/cast2.vanim_c b/game/models/thd_hero/miko/item/ae849235/cast2.vanim_c similarity index 100% rename from models/thd_hero/miko/item/ae849235/cast2.vanim_c rename to game/models/thd_hero/miko/item/ae849235/cast2.vanim_c diff --git a/models/thd_hero/miko/item/ae849235/idle.vanim_c b/game/models/thd_hero/miko/item/ae849235/idle.vanim_c similarity index 100% rename from models/thd_hero/miko/item/ae849235/idle.vanim_c rename to game/models/thd_hero/miko/item/ae849235/idle.vanim_c diff --git a/models/thd_hero/miko/item/ae849235/run.vanim_c b/game/models/thd_hero/miko/item/ae849235/run.vanim_c similarity index 100% rename from models/thd_hero/miko/item/ae849235/run.vanim_c rename to game/models/thd_hero/miko/item/ae849235/run.vanim_c diff --git a/models/thd_hero/miko/item/item_miko.vmdl_c b/game/models/thd_hero/miko/item/item_miko.vmdl_c similarity index 100% rename from models/thd_hero/miko/item/item_miko.vmdl_c rename to game/models/thd_hero/miko/item/item_miko.vmdl_c diff --git a/models/thd_hero/miko/item/item_miko_ae849235.vagrp_c b/game/models/thd_hero/miko/item/item_miko_ae849235.vagrp_c similarity index 100% rename from models/thd_hero/miko/item/item_miko_ae849235.vagrp_c rename to game/models/thd_hero/miko/item/item_miko_ae849235.vagrp_c diff --git a/models/thd_hero/miko/item/miko.vmesh_c b/game/models/thd_hero/miko/item/miko.vmesh_c similarity index 100% rename from models/thd_hero/miko/item/miko.vmesh_c rename to game/models/thd_hero/miko/item/miko.vmesh_c diff --git a/models/thd_hero/miko/miko.vmdl_c b/game/models/thd_hero/miko/miko.vmdl_c similarity index 100% rename from models/thd_hero/miko/miko.vmdl_c rename to game/models/thd_hero/miko/miko.vmdl_c diff --git a/models/thd_hero/miko/miko.vmesh_c b/game/models/thd_hero/miko/miko.vmesh_c similarity index 100% rename from models/thd_hero/miko/miko.vmesh_c rename to game/models/thd_hero/miko/miko.vmesh_c diff --git a/models/thd_hero/miko/miko_6fbdbd69.vagrp_c b/game/models/thd_hero/miko/miko_6fbdbd69.vagrp_c similarity index 100% rename from models/thd_hero/miko/miko_6fbdbd69.vagrp_c rename to game/models/thd_hero/miko/miko_6fbdbd69.vagrp_c diff --git a/models/thd_hero/minamitsu/5ce57e51/attack1.vanim_c b/game/models/thd_hero/minamitsu/5ce57e51/attack1.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/5ce57e51/attack1.vanim_c rename to game/models/thd_hero/minamitsu/5ce57e51/attack1.vanim_c diff --git a/models/thd_hero/minamitsu/5ce57e51/attack2.vanim_c b/game/models/thd_hero/minamitsu/5ce57e51/attack2.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/5ce57e51/attack2.vanim_c rename to game/models/thd_hero/minamitsu/5ce57e51/attack2.vanim_c diff --git a/models/thd_hero/minamitsu/5ce57e51/cast.vanim_c b/game/models/thd_hero/minamitsu/5ce57e51/cast.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/5ce57e51/cast.vanim_c rename to game/models/thd_hero/minamitsu/5ce57e51/cast.vanim_c diff --git a/models/thd_hero/minamitsu/5ce57e51/cast_end.vanim_c b/game/models/thd_hero/minamitsu/5ce57e51/cast_end.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/5ce57e51/cast_end.vanim_c rename to game/models/thd_hero/minamitsu/5ce57e51/cast_end.vanim_c diff --git a/models/thd_hero/minamitsu/5ce57e51/idle.vanim_c b/game/models/thd_hero/minamitsu/5ce57e51/idle.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/5ce57e51/idle.vanim_c rename to game/models/thd_hero/minamitsu/5ce57e51/idle.vanim_c diff --git a/models/thd_hero/minamitsu/5ce57e51/minamitsu_animation.vanim_c b/game/models/thd_hero/minamitsu/5ce57e51/minamitsu_animation.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/5ce57e51/minamitsu_animation.vanim_c rename to game/models/thd_hero/minamitsu/5ce57e51/minamitsu_animation.vanim_c diff --git a/models/thd_hero/minamitsu/5ce57e51/run.vanim_c b/game/models/thd_hero/minamitsu/5ce57e51/run.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/5ce57e51/run.vanim_c rename to game/models/thd_hero/minamitsu/5ce57e51/run.vanim_c diff --git a/models/thd_hero/minamitsu/item/3389a848/attack1.vanim_c b/game/models/thd_hero/minamitsu/item/3389a848/attack1.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/item/3389a848/attack1.vanim_c rename to game/models/thd_hero/minamitsu/item/3389a848/attack1.vanim_c diff --git a/models/thd_hero/minamitsu/item/3389a848/attack2.vanim_c b/game/models/thd_hero/minamitsu/item/3389a848/attack2.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/item/3389a848/attack2.vanim_c rename to game/models/thd_hero/minamitsu/item/3389a848/attack2.vanim_c diff --git a/models/thd_hero/minamitsu/item/3389a848/cast.vanim_c b/game/models/thd_hero/minamitsu/item/3389a848/cast.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/item/3389a848/cast.vanim_c rename to game/models/thd_hero/minamitsu/item/3389a848/cast.vanim_c diff --git a/models/thd_hero/minamitsu/item/3389a848/cast_end.vanim_c b/game/models/thd_hero/minamitsu/item/3389a848/cast_end.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/item/3389a848/cast_end.vanim_c rename to game/models/thd_hero/minamitsu/item/3389a848/cast_end.vanim_c diff --git a/models/thd_hero/minamitsu/item/3389a848/idle.vanim_c b/game/models/thd_hero/minamitsu/item/3389a848/idle.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/item/3389a848/idle.vanim_c rename to game/models/thd_hero/minamitsu/item/3389a848/idle.vanim_c diff --git a/models/thd_hero/minamitsu/item/3389a848/run.vanim_c b/game/models/thd_hero/minamitsu/item/3389a848/run.vanim_c similarity index 100% rename from models/thd_hero/minamitsu/item/3389a848/run.vanim_c rename to game/models/thd_hero/minamitsu/item/3389a848/run.vanim_c diff --git a/models/thd_hero/minamitsu/item/item_minamitsu.vmdl_c b/game/models/thd_hero/minamitsu/item/item_minamitsu.vmdl_c similarity index 100% rename from models/thd_hero/minamitsu/item/item_minamitsu.vmdl_c rename to game/models/thd_hero/minamitsu/item/item_minamitsu.vmdl_c diff --git a/models/thd_hero/minamitsu/item/item_minamitsu_3389a848.vagrp_c b/game/models/thd_hero/minamitsu/item/item_minamitsu_3389a848.vagrp_c similarity index 100% rename from models/thd_hero/minamitsu/item/item_minamitsu_3389a848.vagrp_c rename to game/models/thd_hero/minamitsu/item/item_minamitsu_3389a848.vagrp_c diff --git a/models/thd_hero/minamitsu/item/minamitsu.vmesh_c b/game/models/thd_hero/minamitsu/item/minamitsu.vmesh_c similarity index 100% rename from models/thd_hero/minamitsu/item/minamitsu.vmesh_c rename to game/models/thd_hero/minamitsu/item/minamitsu.vmesh_c diff --git a/models/thd_hero/minamitsu/minamitsu.vmdl_c b/game/models/thd_hero/minamitsu/minamitsu.vmdl_c similarity index 100% rename from models/thd_hero/minamitsu/minamitsu.vmdl_c rename to game/models/thd_hero/minamitsu/minamitsu.vmdl_c diff --git a/models/thd_hero/minamitsu/minamitsu.vmesh_c b/game/models/thd_hero/minamitsu/minamitsu.vmesh_c similarity index 100% rename from models/thd_hero/minamitsu/minamitsu.vmesh_c rename to game/models/thd_hero/minamitsu/minamitsu.vmesh_c diff --git a/models/thd_hero/minamitsu/minamitsu_5ce57e51.vagrp_c b/game/models/thd_hero/minamitsu/minamitsu_5ce57e51.vagrp_c similarity index 100% rename from models/thd_hero/minamitsu/minamitsu_5ce57e51.vagrp_c rename to game/models/thd_hero/minamitsu/minamitsu_5ce57e51.vagrp_c diff --git a/models/thd_hero/minoriko/2861a990/attack.vanim_c b/game/models/thd_hero/minoriko/2861a990/attack.vanim_c similarity index 100% rename from models/thd_hero/minoriko/2861a990/attack.vanim_c rename to game/models/thd_hero/minoriko/2861a990/attack.vanim_c diff --git a/models/thd_hero/minoriko/2861a990/cast1.vanim_c b/game/models/thd_hero/minoriko/2861a990/cast1.vanim_c similarity index 100% rename from models/thd_hero/minoriko/2861a990/cast1.vanim_c rename to game/models/thd_hero/minoriko/2861a990/cast1.vanim_c diff --git a/models/thd_hero/minoriko/2861a990/idle.vanim_c b/game/models/thd_hero/minoriko/2861a990/idle.vanim_c similarity index 100% rename from models/thd_hero/minoriko/2861a990/idle.vanim_c rename to game/models/thd_hero/minoriko/2861a990/idle.vanim_c diff --git a/models/thd_hero/minoriko/2861a990/idle2.vanim_c b/game/models/thd_hero/minoriko/2861a990/idle2.vanim_c similarity index 100% rename from models/thd_hero/minoriko/2861a990/idle2.vanim_c rename to game/models/thd_hero/minoriko/2861a990/idle2.vanim_c diff --git a/models/thd_hero/minoriko/2861a990/por.vanim_c b/game/models/thd_hero/minoriko/2861a990/por.vanim_c similarity index 100% rename from models/thd_hero/minoriko/2861a990/por.vanim_c rename to game/models/thd_hero/minoriko/2861a990/por.vanim_c diff --git a/models/thd_hero/minoriko/2861a990/run.vanim_c b/game/models/thd_hero/minoriko/2861a990/run.vanim_c similarity index 100% rename from models/thd_hero/minoriko/2861a990/run.vanim_c rename to game/models/thd_hero/minoriko/2861a990/run.vanim_c diff --git a/models/thd_hero/minoriko/2861a990/start.vanim_c b/game/models/thd_hero/minoriko/2861a990/start.vanim_c similarity index 100% rename from models/thd_hero/minoriko/2861a990/start.vanim_c rename to game/models/thd_hero/minoriko/2861a990/start.vanim_c diff --git a/models/thd_hero/minoriko/item/4bf31d79/attack.vanim_c b/game/models/thd_hero/minoriko/item/4bf31d79/attack.vanim_c similarity index 100% rename from models/thd_hero/minoriko/item/4bf31d79/attack.vanim_c rename to game/models/thd_hero/minoriko/item/4bf31d79/attack.vanim_c diff --git a/models/thd_hero/minoriko/item/4bf31d79/cast1.vanim_c b/game/models/thd_hero/minoriko/item/4bf31d79/cast1.vanim_c similarity index 100% rename from models/thd_hero/minoriko/item/4bf31d79/cast1.vanim_c rename to game/models/thd_hero/minoriko/item/4bf31d79/cast1.vanim_c diff --git a/models/thd_hero/minoriko/item/4bf31d79/idle.vanim_c b/game/models/thd_hero/minoriko/item/4bf31d79/idle.vanim_c similarity index 100% rename from models/thd_hero/minoriko/item/4bf31d79/idle.vanim_c rename to game/models/thd_hero/minoriko/item/4bf31d79/idle.vanim_c diff --git a/models/thd_hero/minoriko/item/4bf31d79/idle2.vanim_c b/game/models/thd_hero/minoriko/item/4bf31d79/idle2.vanim_c similarity index 100% rename from models/thd_hero/minoriko/item/4bf31d79/idle2.vanim_c rename to game/models/thd_hero/minoriko/item/4bf31d79/idle2.vanim_c diff --git a/models/thd_hero/minoriko/item/4bf31d79/por.vanim_c b/game/models/thd_hero/minoriko/item/4bf31d79/por.vanim_c similarity index 100% rename from models/thd_hero/minoriko/item/4bf31d79/por.vanim_c rename to game/models/thd_hero/minoriko/item/4bf31d79/por.vanim_c diff --git a/models/thd_hero/minoriko/item/4bf31d79/run.vanim_c b/game/models/thd_hero/minoriko/item/4bf31d79/run.vanim_c similarity index 100% rename from models/thd_hero/minoriko/item/4bf31d79/run.vanim_c rename to game/models/thd_hero/minoriko/item/4bf31d79/run.vanim_c diff --git a/models/thd_hero/minoriko/item/4bf31d79/start.vanim_c b/game/models/thd_hero/minoriko/item/4bf31d79/start.vanim_c similarity index 100% rename from models/thd_hero/minoriko/item/4bf31d79/start.vanim_c rename to game/models/thd_hero/minoriko/item/4bf31d79/start.vanim_c diff --git a/models/thd_hero/minoriko/item/item_minoriko.vmdl_c b/game/models/thd_hero/minoriko/item/item_minoriko.vmdl_c similarity index 100% rename from models/thd_hero/minoriko/item/item_minoriko.vmdl_c rename to game/models/thd_hero/minoriko/item/item_minoriko.vmdl_c diff --git a/models/thd_hero/minoriko/item/item_minoriko_4bf31d79.vagrp_c b/game/models/thd_hero/minoriko/item/item_minoriko_4bf31d79.vagrp_c similarity index 100% rename from models/thd_hero/minoriko/item/item_minoriko_4bf31d79.vagrp_c rename to game/models/thd_hero/minoriko/item/item_minoriko_4bf31d79.vagrp_c diff --git a/models/thd_hero/minoriko/item/minoriko.vmesh_c b/game/models/thd_hero/minoriko/item/minoriko.vmesh_c similarity index 100% rename from models/thd_hero/minoriko/item/minoriko.vmesh_c rename to game/models/thd_hero/minoriko/item/minoriko.vmesh_c diff --git a/models/thd_hero/minoriko/minoriko.vmdl_c b/game/models/thd_hero/minoriko/minoriko.vmdl_c similarity index 100% rename from models/thd_hero/minoriko/minoriko.vmdl_c rename to game/models/thd_hero/minoriko/minoriko.vmdl_c diff --git a/models/thd_hero/minoriko/minoriko.vmesh_c b/game/models/thd_hero/minoriko/minoriko.vmesh_c similarity index 100% rename from models/thd_hero/minoriko/minoriko.vmesh_c rename to game/models/thd_hero/minoriko/minoriko.vmesh_c diff --git a/models/thd_hero/minoriko/minoriko_2861a990.vagrp_c b/game/models/thd_hero/minoriko/minoriko_2861a990.vagrp_c similarity index 100% rename from models/thd_hero/minoriko/minoriko_2861a990.vagrp_c rename to game/models/thd_hero/minoriko/minoriko_2861a990.vagrp_c diff --git a/models/thd_hero/mokou/92c561d5/attack.vanim_c b/game/models/thd_hero/mokou/92c561d5/attack.vanim_c similarity index 100% rename from models/thd_hero/mokou/92c561d5/attack.vanim_c rename to game/models/thd_hero/mokou/92c561d5/attack.vanim_c diff --git a/models/thd_hero/mokou/92c561d5/attack1.vanim_c b/game/models/thd_hero/mokou/92c561d5/attack1.vanim_c similarity index 100% rename from models/thd_hero/mokou/92c561d5/attack1.vanim_c rename to game/models/thd_hero/mokou/92c561d5/attack1.vanim_c diff --git a/models/thd_hero/mokou/92c561d5/attack2.vanim_c b/game/models/thd_hero/mokou/92c561d5/attack2.vanim_c similarity index 100% rename from models/thd_hero/mokou/92c561d5/attack2.vanim_c rename to game/models/thd_hero/mokou/92c561d5/attack2.vanim_c diff --git a/models/thd_hero/mokou/92c561d5/high_run.vanim_c b/game/models/thd_hero/mokou/92c561d5/high_run.vanim_c similarity index 100% rename from models/thd_hero/mokou/92c561d5/high_run.vanim_c rename to game/models/thd_hero/mokou/92c561d5/high_run.vanim_c diff --git a/models/thd_hero/mokou/92c561d5/idle.vanim_c b/game/models/thd_hero/mokou/92c561d5/idle.vanim_c similarity index 100% rename from models/thd_hero/mokou/92c561d5/idle.vanim_c rename to game/models/thd_hero/mokou/92c561d5/idle.vanim_c diff --git a/models/thd_hero/mokou/92c561d5/mokou_animation.vanim_c b/game/models/thd_hero/mokou/92c561d5/mokou_animation.vanim_c similarity index 100% rename from models/thd_hero/mokou/92c561d5/mokou_animation.vanim_c rename to game/models/thd_hero/mokou/92c561d5/mokou_animation.vanim_c diff --git a/models/thd_hero/mokou/92c561d5/run.vanim_c b/game/models/thd_hero/mokou/92c561d5/run.vanim_c similarity index 100% rename from models/thd_hero/mokou/92c561d5/run.vanim_c rename to game/models/thd_hero/mokou/92c561d5/run.vanim_c diff --git a/models/thd_hero/mokou/item/1ab3c4e0/attack.vanim_c b/game/models/thd_hero/mokou/item/1ab3c4e0/attack.vanim_c similarity index 100% rename from models/thd_hero/mokou/item/1ab3c4e0/attack.vanim_c rename to game/models/thd_hero/mokou/item/1ab3c4e0/attack.vanim_c diff --git a/models/thd_hero/mokou/item/1ab3c4e0/attack1.vanim_c b/game/models/thd_hero/mokou/item/1ab3c4e0/attack1.vanim_c similarity index 100% rename from models/thd_hero/mokou/item/1ab3c4e0/attack1.vanim_c rename to game/models/thd_hero/mokou/item/1ab3c4e0/attack1.vanim_c diff --git a/models/thd_hero/mokou/item/1ab3c4e0/attack2.vanim_c b/game/models/thd_hero/mokou/item/1ab3c4e0/attack2.vanim_c similarity index 100% rename from models/thd_hero/mokou/item/1ab3c4e0/attack2.vanim_c rename to game/models/thd_hero/mokou/item/1ab3c4e0/attack2.vanim_c diff --git a/models/thd_hero/mokou/item/1ab3c4e0/high_run.vanim_c b/game/models/thd_hero/mokou/item/1ab3c4e0/high_run.vanim_c similarity index 100% rename from models/thd_hero/mokou/item/1ab3c4e0/high_run.vanim_c rename to game/models/thd_hero/mokou/item/1ab3c4e0/high_run.vanim_c diff --git a/models/thd_hero/mokou/item/1ab3c4e0/idle.vanim_c b/game/models/thd_hero/mokou/item/1ab3c4e0/idle.vanim_c similarity index 100% rename from models/thd_hero/mokou/item/1ab3c4e0/idle.vanim_c rename to game/models/thd_hero/mokou/item/1ab3c4e0/idle.vanim_c diff --git a/models/thd_hero/mokou/item/1ab3c4e0/run.vanim_c b/game/models/thd_hero/mokou/item/1ab3c4e0/run.vanim_c similarity index 100% rename from models/thd_hero/mokou/item/1ab3c4e0/run.vanim_c rename to game/models/thd_hero/mokou/item/1ab3c4e0/run.vanim_c diff --git a/models/thd_hero/mokou/item/item_mokou.vmdl_c b/game/models/thd_hero/mokou/item/item_mokou.vmdl_c similarity index 100% rename from models/thd_hero/mokou/item/item_mokou.vmdl_c rename to game/models/thd_hero/mokou/item/item_mokou.vmdl_c diff --git a/models/thd_hero/mokou/item/item_mokou_1ab3c4e0.vagrp_c b/game/models/thd_hero/mokou/item/item_mokou_1ab3c4e0.vagrp_c similarity index 100% rename from models/thd_hero/mokou/item/item_mokou_1ab3c4e0.vagrp_c rename to game/models/thd_hero/mokou/item/item_mokou_1ab3c4e0.vagrp_c diff --git a/models/thd_hero/mokou/item/mokou.vmesh_c b/game/models/thd_hero/mokou/item/mokou.vmesh_c similarity index 100% rename from models/thd_hero/mokou/item/mokou.vmesh_c rename to game/models/thd_hero/mokou/item/mokou.vmesh_c diff --git a/models/thd_hero/mokou/mokou.vmdl_c b/game/models/thd_hero/mokou/mokou.vmdl_c similarity index 100% rename from models/thd_hero/mokou/mokou.vmdl_c rename to game/models/thd_hero/mokou/mokou.vmdl_c diff --git a/models/thd_hero/mokou/mokou.vmesh_c b/game/models/thd_hero/mokou/mokou.vmesh_c similarity index 100% rename from models/thd_hero/mokou/mokou.vmesh_c rename to game/models/thd_hero/mokou/mokou.vmesh_c diff --git a/models/thd_hero/mokou/mokou_92c561d5.vagrp_c b/game/models/thd_hero/mokou/mokou_92c561d5.vagrp_c similarity index 100% rename from models/thd_hero/mokou/mokou_92c561d5.vagrp_c rename to game/models/thd_hero/mokou/mokou_92c561d5.vagrp_c diff --git a/models/thd_hero/mokou/moukou.vmesh_c b/game/models/thd_hero/mokou/moukou.vmesh_c similarity index 100% rename from models/thd_hero/mokou/moukou.vmesh_c rename to game/models/thd_hero/mokou/moukou.vmesh_c diff --git a/models/thd_hero/momiji/7fdbf2eb/attack1.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/attack1.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/attack1.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/attack1.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/attack2.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/attack2.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/attack2.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/attack2.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/cast1.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/cast1.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/cast1.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/cast1.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/cast2.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/cast2.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/cast2.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/cast2.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/cast3.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/cast3.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/cast3.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/cast3.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/cast4.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/cast4.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/cast4.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/cast4.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/idle.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/idle.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/idle.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/idle.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/momiji_animation.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/momiji_animation.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/momiji_animation.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/momiji_animation.vanim_c diff --git a/models/thd_hero/momiji/7fdbf2eb/run.vanim_c b/game/models/thd_hero/momiji/7fdbf2eb/run.vanim_c similarity index 100% rename from models/thd_hero/momiji/7fdbf2eb/run.vanim_c rename to game/models/thd_hero/momiji/7fdbf2eb/run.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/attack1.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/attack1.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/attack1.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/attack1.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/attack2.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/attack2.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/attack2.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/attack2.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/cast1.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/cast1.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/cast1.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/cast1.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/cast2.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/cast2.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/cast2.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/cast2.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/cast3.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/cast3.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/cast3.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/cast3.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/cast4.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/cast4.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/cast4.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/cast4.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/idle.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/idle.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/idle.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/idle.vanim_c diff --git a/models/thd_hero/momiji/item/96d96cac/run.vanim_c b/game/models/thd_hero/momiji/item/96d96cac/run.vanim_c similarity index 100% rename from models/thd_hero/momiji/item/96d96cac/run.vanim_c rename to game/models/thd_hero/momiji/item/96d96cac/run.vanim_c diff --git a/models/thd_hero/momiji/item/item_momiji.vmdl_c b/game/models/thd_hero/momiji/item/item_momiji.vmdl_c similarity index 100% rename from models/thd_hero/momiji/item/item_momiji.vmdl_c rename to game/models/thd_hero/momiji/item/item_momiji.vmdl_c diff --git a/models/thd_hero/momiji/item/item_momiji_96d96cac.vagrp_c b/game/models/thd_hero/momiji/item/item_momiji_96d96cac.vagrp_c similarity index 100% rename from models/thd_hero/momiji/item/item_momiji_96d96cac.vagrp_c rename to game/models/thd_hero/momiji/item/item_momiji_96d96cac.vagrp_c diff --git a/models/thd_hero/momiji/item/momiji.vmesh_c b/game/models/thd_hero/momiji/item/momiji.vmesh_c similarity index 100% rename from models/thd_hero/momiji/item/momiji.vmesh_c rename to game/models/thd_hero/momiji/item/momiji.vmesh_c diff --git a/models/thd_hero/momiji/momiji.vmdl_c b/game/models/thd_hero/momiji/momiji.vmdl_c similarity index 100% rename from models/thd_hero/momiji/momiji.vmdl_c rename to game/models/thd_hero/momiji/momiji.vmdl_c diff --git a/models/thd_hero/momiji/momiji.vmesh_c b/game/models/thd_hero/momiji/momiji.vmesh_c similarity index 100% rename from models/thd_hero/momiji/momiji.vmesh_c rename to game/models/thd_hero/momiji/momiji.vmesh_c diff --git a/models/thd_hero/momiji/momiji_7fdbf2eb.vagrp_c b/game/models/thd_hero/momiji/momiji_7fdbf2eb.vagrp_c similarity index 100% rename from models/thd_hero/momiji/momiji_7fdbf2eb.vagrp_c rename to game/models/thd_hero/momiji/momiji_7fdbf2eb.vagrp_c diff --git a/models/thd_hero/mugiyousei/07581c5b/attack.vanim_c b/game/models/thd_hero/mugiyousei/07581c5b/attack.vanim_c similarity index 100% rename from models/thd_hero/mugiyousei/07581c5b/attack.vanim_c rename to game/models/thd_hero/mugiyousei/07581c5b/attack.vanim_c diff --git a/models/thd_hero/mugiyousei/07581c5b/idle.vanim_c b/game/models/thd_hero/mugiyousei/07581c5b/idle.vanim_c similarity index 100% rename from models/thd_hero/mugiyousei/07581c5b/idle.vanim_c rename to game/models/thd_hero/mugiyousei/07581c5b/idle.vanim_c diff --git a/models/thd_hero/mugiyousei/07581c5b/run.vanim_c b/game/models/thd_hero/mugiyousei/07581c5b/run.vanim_c similarity index 100% rename from models/thd_hero/mugiyousei/07581c5b/run.vanim_c rename to game/models/thd_hero/mugiyousei/07581c5b/run.vanim_c diff --git a/models/thd_hero/mugiyousei/item/50928cdf/attack.vanim_c b/game/models/thd_hero/mugiyousei/item/50928cdf/attack.vanim_c similarity index 100% rename from models/thd_hero/mugiyousei/item/50928cdf/attack.vanim_c rename to game/models/thd_hero/mugiyousei/item/50928cdf/attack.vanim_c diff --git a/models/thd_hero/mugiyousei/item/50928cdf/idle.vanim_c b/game/models/thd_hero/mugiyousei/item/50928cdf/idle.vanim_c similarity index 100% rename from models/thd_hero/mugiyousei/item/50928cdf/idle.vanim_c rename to game/models/thd_hero/mugiyousei/item/50928cdf/idle.vanim_c diff --git a/models/thd_hero/mugiyousei/item/50928cdf/run.vanim_c b/game/models/thd_hero/mugiyousei/item/50928cdf/run.vanim_c similarity index 100% rename from models/thd_hero/mugiyousei/item/50928cdf/run.vanim_c rename to game/models/thd_hero/mugiyousei/item/50928cdf/run.vanim_c diff --git a/models/thd_hero/mugiyousei/item/item_mujiyousei.vmdl_c b/game/models/thd_hero/mugiyousei/item/item_mujiyousei.vmdl_c similarity index 100% rename from models/thd_hero/mugiyousei/item/item_mujiyousei.vmdl_c rename to game/models/thd_hero/mugiyousei/item/item_mujiyousei.vmdl_c diff --git a/models/thd_hero/mugiyousei/item/item_mujiyousei_50928cdf.vagrp_c b/game/models/thd_hero/mugiyousei/item/item_mujiyousei_50928cdf.vagrp_c similarity index 100% rename from models/thd_hero/mugiyousei/item/item_mujiyousei_50928cdf.vagrp_c rename to game/models/thd_hero/mugiyousei/item/item_mujiyousei_50928cdf.vagrp_c diff --git a/models/thd_hero/mugiyousei/item/mugiyousei.vmesh_c b/game/models/thd_hero/mugiyousei/item/mugiyousei.vmesh_c similarity index 100% rename from models/thd_hero/mugiyousei/item/mugiyousei.vmesh_c rename to game/models/thd_hero/mugiyousei/item/mugiyousei.vmesh_c diff --git a/models/thd_hero/mugiyousei/mugiyousei.vmdl_c b/game/models/thd_hero/mugiyousei/mugiyousei.vmdl_c similarity index 100% rename from models/thd_hero/mugiyousei/mugiyousei.vmdl_c rename to game/models/thd_hero/mugiyousei/mugiyousei.vmdl_c diff --git a/models/thd_hero/mugiyousei/mugiyousei.vmesh_c b/game/models/thd_hero/mugiyousei/mugiyousei.vmesh_c similarity index 100% rename from models/thd_hero/mugiyousei/mugiyousei.vmesh_c rename to game/models/thd_hero/mugiyousei/mugiyousei.vmesh_c diff --git a/models/thd_hero/mugiyousei/mugiyousei_07581c5b.vagrp_c b/game/models/thd_hero/mugiyousei/mugiyousei_07581c5b.vagrp_c similarity index 100% rename from models/thd_hero/mugiyousei/mugiyousei_07581c5b.vagrp_c rename to game/models/thd_hero/mugiyousei/mugiyousei_07581c5b.vagrp_c diff --git a/models/thd_hero/mystia/5f6879ca/attack.vanim_c b/game/models/thd_hero/mystia/5f6879ca/attack.vanim_c similarity index 100% rename from models/thd_hero/mystia/5f6879ca/attack.vanim_c rename to game/models/thd_hero/mystia/5f6879ca/attack.vanim_c diff --git a/models/thd_hero/mystia/5f6879ca/attack2.vanim_c b/game/models/thd_hero/mystia/5f6879ca/attack2.vanim_c similarity index 100% rename from models/thd_hero/mystia/5f6879ca/attack2.vanim_c rename to game/models/thd_hero/mystia/5f6879ca/attack2.vanim_c diff --git a/models/thd_hero/mystia/5f6879ca/cast.vanim_c b/game/models/thd_hero/mystia/5f6879ca/cast.vanim_c similarity index 100% rename from models/thd_hero/mystia/5f6879ca/cast.vanim_c rename to game/models/thd_hero/mystia/5f6879ca/cast.vanim_c diff --git a/models/thd_hero/mystia/5f6879ca/idle.vanim_c b/game/models/thd_hero/mystia/5f6879ca/idle.vanim_c similarity index 100% rename from models/thd_hero/mystia/5f6879ca/idle.vanim_c rename to game/models/thd_hero/mystia/5f6879ca/idle.vanim_c diff --git a/models/thd_hero/mystia/5f6879ca/por.vanim_c b/game/models/thd_hero/mystia/5f6879ca/por.vanim_c similarity index 100% rename from models/thd_hero/mystia/5f6879ca/por.vanim_c rename to game/models/thd_hero/mystia/5f6879ca/por.vanim_c diff --git a/models/thd_hero/mystia/5f6879ca/run.vanim_c b/game/models/thd_hero/mystia/5f6879ca/run.vanim_c similarity index 100% rename from models/thd_hero/mystia/5f6879ca/run.vanim_c rename to game/models/thd_hero/mystia/5f6879ca/run.vanim_c diff --git a/models/thd_hero/mystia/cloth01/65ea72fa/attack1.vanim_c b/game/models/thd_hero/mystia/cloth01/65ea72fa/attack1.vanim_c similarity index 100% rename from models/thd_hero/mystia/cloth01/65ea72fa/attack1.vanim_c rename to game/models/thd_hero/mystia/cloth01/65ea72fa/attack1.vanim_c diff --git a/models/thd_hero/mystia/cloth01/65ea72fa/attack2.vanim_c b/game/models/thd_hero/mystia/cloth01/65ea72fa/attack2.vanim_c similarity index 100% rename from models/thd_hero/mystia/cloth01/65ea72fa/attack2.vanim_c rename to game/models/thd_hero/mystia/cloth01/65ea72fa/attack2.vanim_c diff --git a/models/thd_hero/mystia/cloth01/65ea72fa/cast.vanim_c b/game/models/thd_hero/mystia/cloth01/65ea72fa/cast.vanim_c similarity index 100% rename from models/thd_hero/mystia/cloth01/65ea72fa/cast.vanim_c rename to game/models/thd_hero/mystia/cloth01/65ea72fa/cast.vanim_c diff --git a/models/thd_hero/mystia/cloth01/65ea72fa/idle.vanim_c b/game/models/thd_hero/mystia/cloth01/65ea72fa/idle.vanim_c similarity index 100% rename from models/thd_hero/mystia/cloth01/65ea72fa/idle.vanim_c rename to game/models/thd_hero/mystia/cloth01/65ea72fa/idle.vanim_c diff --git a/models/thd_hero/mystia/cloth01/65ea72fa/mystia_cloth01_animation.vanim_c b/game/models/thd_hero/mystia/cloth01/65ea72fa/mystia_cloth01_animation.vanim_c similarity index 100% rename from models/thd_hero/mystia/cloth01/65ea72fa/mystia_cloth01_animation.vanim_c rename to game/models/thd_hero/mystia/cloth01/65ea72fa/mystia_cloth01_animation.vanim_c diff --git a/models/thd_hero/mystia/cloth01/65ea72fa/run.vanim_c b/game/models/thd_hero/mystia/cloth01/65ea72fa/run.vanim_c similarity index 100% rename from models/thd_hero/mystia/cloth01/65ea72fa/run.vanim_c rename to game/models/thd_hero/mystia/cloth01/65ea72fa/run.vanim_c diff --git a/models/thd_hero/mystia/cloth01/mystia_cloth01.vmdl_c b/game/models/thd_hero/mystia/cloth01/mystia_cloth01.vmdl_c similarity index 100% rename from models/thd_hero/mystia/cloth01/mystia_cloth01.vmdl_c rename to game/models/thd_hero/mystia/cloth01/mystia_cloth01.vmdl_c diff --git a/models/thd_hero/mystia/cloth01/mystia_cloth01.vmesh_c b/game/models/thd_hero/mystia/cloth01/mystia_cloth01.vmesh_c similarity index 100% rename from models/thd_hero/mystia/cloth01/mystia_cloth01.vmesh_c rename to game/models/thd_hero/mystia/cloth01/mystia_cloth01.vmesh_c diff --git a/models/thd_hero/mystia/cloth01/mystia_cloth01_65ea72fa.vagrp_c b/game/models/thd_hero/mystia/cloth01/mystia_cloth01_65ea72fa.vagrp_c similarity index 100% rename from models/thd_hero/mystia/cloth01/mystia_cloth01_65ea72fa.vagrp_c rename to game/models/thd_hero/mystia/cloth01/mystia_cloth01_65ea72fa.vagrp_c diff --git a/models/thd_hero/mystia/item/3af1049e/attack.vanim_c b/game/models/thd_hero/mystia/item/3af1049e/attack.vanim_c similarity index 100% rename from models/thd_hero/mystia/item/3af1049e/attack.vanim_c rename to game/models/thd_hero/mystia/item/3af1049e/attack.vanim_c diff --git a/models/thd_hero/mystia/item/3af1049e/attack2.vanim_c b/game/models/thd_hero/mystia/item/3af1049e/attack2.vanim_c similarity index 100% rename from models/thd_hero/mystia/item/3af1049e/attack2.vanim_c rename to game/models/thd_hero/mystia/item/3af1049e/attack2.vanim_c diff --git a/models/thd_hero/mystia/item/3af1049e/cast.vanim_c b/game/models/thd_hero/mystia/item/3af1049e/cast.vanim_c similarity index 100% rename from models/thd_hero/mystia/item/3af1049e/cast.vanim_c rename to game/models/thd_hero/mystia/item/3af1049e/cast.vanim_c diff --git a/models/thd_hero/mystia/item/3af1049e/idle.vanim_c b/game/models/thd_hero/mystia/item/3af1049e/idle.vanim_c similarity index 100% rename from models/thd_hero/mystia/item/3af1049e/idle.vanim_c rename to game/models/thd_hero/mystia/item/3af1049e/idle.vanim_c diff --git a/models/thd_hero/mystia/item/3af1049e/por.vanim_c b/game/models/thd_hero/mystia/item/3af1049e/por.vanim_c similarity index 100% rename from models/thd_hero/mystia/item/3af1049e/por.vanim_c rename to game/models/thd_hero/mystia/item/3af1049e/por.vanim_c diff --git a/models/thd_hero/mystia/item/3af1049e/run.vanim_c b/game/models/thd_hero/mystia/item/3af1049e/run.vanim_c similarity index 100% rename from models/thd_hero/mystia/item/3af1049e/run.vanim_c rename to game/models/thd_hero/mystia/item/3af1049e/run.vanim_c diff --git a/models/thd_hero/mystia/item/item_mystia.vmdl_c b/game/models/thd_hero/mystia/item/item_mystia.vmdl_c similarity index 100% rename from models/thd_hero/mystia/item/item_mystia.vmdl_c rename to game/models/thd_hero/mystia/item/item_mystia.vmdl_c diff --git a/models/thd_hero/mystia/item/item_mystia_3af1049e.vagrp_c b/game/models/thd_hero/mystia/item/item_mystia_3af1049e.vagrp_c similarity index 100% rename from models/thd_hero/mystia/item/item_mystia_3af1049e.vagrp_c rename to game/models/thd_hero/mystia/item/item_mystia_3af1049e.vagrp_c diff --git a/models/thd_hero/mystia/item/mystia.vmesh_c b/game/models/thd_hero/mystia/item/mystia.vmesh_c similarity index 100% rename from models/thd_hero/mystia/item/mystia.vmesh_c rename to game/models/thd_hero/mystia/item/mystia.vmesh_c diff --git a/models/thd_hero/mystia/mystia.vmdl_c b/game/models/thd_hero/mystia/mystia.vmdl_c similarity index 100% rename from models/thd_hero/mystia/mystia.vmdl_c rename to game/models/thd_hero/mystia/mystia.vmdl_c diff --git a/models/thd_hero/mystia/mystia.vmesh_c b/game/models/thd_hero/mystia/mystia.vmesh_c similarity index 100% rename from models/thd_hero/mystia/mystia.vmesh_c rename to game/models/thd_hero/mystia/mystia.vmesh_c diff --git a/models/thd_hero/mystia/mystia_5f6879ca.vagrp_c b/game/models/thd_hero/mystia/mystia_5f6879ca.vagrp_c similarity index 100% rename from models/thd_hero/mystia/mystia_5f6879ca.vagrp_c rename to game/models/thd_hero/mystia/mystia_5f6879ca.vagrp_c diff --git a/models/thd_hero/nazrin/c19f0afb/attack1.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/attack1.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/attack1.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/attack1.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/attack2.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/attack2.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/attack2.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/attack2.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/attack3.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/attack3.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/attack3.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/attack3.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/cast1.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/cast1.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/cast1.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/cast1.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/cast2.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/cast2.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/cast2.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/cast2.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/idle.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/idle.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/idle.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/idle.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/idle2.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/idle2.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/idle2.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/idle2.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/impatient.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/impatient.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/impatient.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/impatient.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/por.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/por.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/por.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/por.vanim_c diff --git a/models/thd_hero/nazrin/c19f0afb/run.vanim_c b/game/models/thd_hero/nazrin/c19f0afb/run.vanim_c similarity index 100% rename from models/thd_hero/nazrin/c19f0afb/run.vanim_c rename to game/models/thd_hero/nazrin/c19f0afb/run.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/attack1.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/attack1.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/attack1.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/attack1.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/attack2.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/attack2.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/attack2.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/attack2.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/attack3.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/attack3.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/attack3.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/attack3.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/cast1.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/cast1.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/cast1.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/cast1.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/cast2.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/cast2.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/cast2.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/cast2.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/idle.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/idle.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/idle.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/idle.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/idle2.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/idle2.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/idle2.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/idle2.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/impatient.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/impatient.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/impatient.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/impatient.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/por.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/por.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/por.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/por.vanim_c diff --git a/models/thd_hero/nazrin/item/2cc35bc7/run.vanim_c b/game/models/thd_hero/nazrin/item/2cc35bc7/run.vanim_c similarity index 100% rename from models/thd_hero/nazrin/item/2cc35bc7/run.vanim_c rename to game/models/thd_hero/nazrin/item/2cc35bc7/run.vanim_c diff --git a/models/thd_hero/nazrin/item/item_nazrin.vmdl_c b/game/models/thd_hero/nazrin/item/item_nazrin.vmdl_c similarity index 100% rename from models/thd_hero/nazrin/item/item_nazrin.vmdl_c rename to game/models/thd_hero/nazrin/item/item_nazrin.vmdl_c diff --git a/models/thd_hero/nazrin/item/item_nazrin_2cc35bc7.vagrp_c b/game/models/thd_hero/nazrin/item/item_nazrin_2cc35bc7.vagrp_c similarity index 100% rename from models/thd_hero/nazrin/item/item_nazrin_2cc35bc7.vagrp_c rename to game/models/thd_hero/nazrin/item/item_nazrin_2cc35bc7.vagrp_c diff --git a/models/thd_hero/nazrin/item/nazrin.vmesh_c b/game/models/thd_hero/nazrin/item/nazrin.vmesh_c similarity index 100% rename from models/thd_hero/nazrin/item/nazrin.vmesh_c rename to game/models/thd_hero/nazrin/item/nazrin.vmesh_c diff --git a/models/thd_hero/nazrin/nazrin.vmdl_c b/game/models/thd_hero/nazrin/nazrin.vmdl_c similarity index 100% rename from models/thd_hero/nazrin/nazrin.vmdl_c rename to game/models/thd_hero/nazrin/nazrin.vmdl_c diff --git a/models/thd_hero/nazrin/nazrin.vmesh_c b/game/models/thd_hero/nazrin/nazrin.vmesh_c similarity index 100% rename from models/thd_hero/nazrin/nazrin.vmesh_c rename to game/models/thd_hero/nazrin/nazrin.vmesh_c diff --git a/models/thd_hero/nazrin/nazrin_c19f0afb.vagrp_c b/game/models/thd_hero/nazrin/nazrin_c19f0afb.vagrp_c similarity index 100% rename from models/thd_hero/nazrin/nazrin_c19f0afb.vagrp_c rename to game/models/thd_hero/nazrin/nazrin_c19f0afb.vagrp_c diff --git a/models/thd_hero/nitori/5cad6d1c/attack.vanim_c b/game/models/thd_hero/nitori/5cad6d1c/attack.vanim_c similarity index 100% rename from models/thd_hero/nitori/5cad6d1c/attack.vanim_c rename to game/models/thd_hero/nitori/5cad6d1c/attack.vanim_c diff --git a/models/thd_hero/nitori/5cad6d1c/attack12.vanim_c b/game/models/thd_hero/nitori/5cad6d1c/attack12.vanim_c similarity index 100% rename from models/thd_hero/nitori/5cad6d1c/attack12.vanim_c rename to game/models/thd_hero/nitori/5cad6d1c/attack12.vanim_c diff --git a/models/thd_hero/nitori/5cad6d1c/attack2.vanim_c b/game/models/thd_hero/nitori/5cad6d1c/attack2.vanim_c similarity index 100% rename from models/thd_hero/nitori/5cad6d1c/attack2.vanim_c rename to game/models/thd_hero/nitori/5cad6d1c/attack2.vanim_c diff --git a/models/thd_hero/nitori/5cad6d1c/idle.vanim_c b/game/models/thd_hero/nitori/5cad6d1c/idle.vanim_c similarity index 100% rename from models/thd_hero/nitori/5cad6d1c/idle.vanim_c rename to game/models/thd_hero/nitori/5cad6d1c/idle.vanim_c diff --git a/models/thd_hero/nitori/5cad6d1c/idle2.vanim_c b/game/models/thd_hero/nitori/5cad6d1c/idle2.vanim_c similarity index 100% rename from models/thd_hero/nitori/5cad6d1c/idle2.vanim_c rename to game/models/thd_hero/nitori/5cad6d1c/idle2.vanim_c diff --git a/models/thd_hero/nitori/5cad6d1c/nitori_animation.vanim_c b/game/models/thd_hero/nitori/5cad6d1c/nitori_animation.vanim_c similarity index 100% rename from models/thd_hero/nitori/5cad6d1c/nitori_animation.vanim_c rename to game/models/thd_hero/nitori/5cad6d1c/nitori_animation.vanim_c diff --git a/models/thd_hero/nitori/5cad6d1c/run.vanim_c b/game/models/thd_hero/nitori/5cad6d1c/run.vanim_c similarity index 100% rename from models/thd_hero/nitori/5cad6d1c/run.vanim_c rename to game/models/thd_hero/nitori/5cad6d1c/run.vanim_c diff --git a/models/thd_hero/nitori/item/e33bf670/attack.vanim_c b/game/models/thd_hero/nitori/item/e33bf670/attack.vanim_c similarity index 100% rename from models/thd_hero/nitori/item/e33bf670/attack.vanim_c rename to game/models/thd_hero/nitori/item/e33bf670/attack.vanim_c diff --git a/models/thd_hero/nitori/item/e33bf670/attack12.vanim_c b/game/models/thd_hero/nitori/item/e33bf670/attack12.vanim_c similarity index 100% rename from models/thd_hero/nitori/item/e33bf670/attack12.vanim_c rename to game/models/thd_hero/nitori/item/e33bf670/attack12.vanim_c diff --git a/models/thd_hero/nitori/item/e33bf670/attack2.vanim_c b/game/models/thd_hero/nitori/item/e33bf670/attack2.vanim_c similarity index 100% rename from models/thd_hero/nitori/item/e33bf670/attack2.vanim_c rename to game/models/thd_hero/nitori/item/e33bf670/attack2.vanim_c diff --git a/models/thd_hero/nitori/item/e33bf670/idle.vanim_c b/game/models/thd_hero/nitori/item/e33bf670/idle.vanim_c similarity index 100% rename from models/thd_hero/nitori/item/e33bf670/idle.vanim_c rename to game/models/thd_hero/nitori/item/e33bf670/idle.vanim_c diff --git a/models/thd_hero/nitori/item/e33bf670/idle2.vanim_c b/game/models/thd_hero/nitori/item/e33bf670/idle2.vanim_c similarity index 100% rename from models/thd_hero/nitori/item/e33bf670/idle2.vanim_c rename to game/models/thd_hero/nitori/item/e33bf670/idle2.vanim_c diff --git a/models/thd_hero/nitori/item/e33bf670/run.vanim_c b/game/models/thd_hero/nitori/item/e33bf670/run.vanim_c similarity index 100% rename from models/thd_hero/nitori/item/e33bf670/run.vanim_c rename to game/models/thd_hero/nitori/item/e33bf670/run.vanim_c diff --git a/models/thd_hero/nitori/item/item_nitori.vmdl_c b/game/models/thd_hero/nitori/item/item_nitori.vmdl_c similarity index 100% rename from models/thd_hero/nitori/item/item_nitori.vmdl_c rename to game/models/thd_hero/nitori/item/item_nitori.vmdl_c diff --git a/models/thd_hero/nitori/item/item_nitori_e33bf670.vagrp_c b/game/models/thd_hero/nitori/item/item_nitori_e33bf670.vagrp_c similarity index 100% rename from models/thd_hero/nitori/item/item_nitori_e33bf670.vagrp_c rename to game/models/thd_hero/nitori/item/item_nitori_e33bf670.vagrp_c diff --git a/models/thd_hero/nitori/item/nitori.vmesh_c b/game/models/thd_hero/nitori/item/nitori.vmesh_c similarity index 100% rename from models/thd_hero/nitori/item/nitori.vmesh_c rename to game/models/thd_hero/nitori/item/nitori.vmesh_c diff --git a/models/thd_hero/nitori/nitori.vmdl_c b/game/models/thd_hero/nitori/nitori.vmdl_c similarity index 100% rename from models/thd_hero/nitori/nitori.vmdl_c rename to game/models/thd_hero/nitori/nitori.vmdl_c diff --git a/models/thd_hero/nitori/nitori.vmesh_c b/game/models/thd_hero/nitori/nitori.vmesh_c similarity index 100% rename from models/thd_hero/nitori/nitori.vmesh_c rename to game/models/thd_hero/nitori/nitori.vmesh_c diff --git a/models/thd_hero/nitori/nitori_5cad6d1c.vagrp_c b/game/models/thd_hero/nitori/nitori_5cad6d1c.vagrp_c similarity index 100% rename from models/thd_hero/nitori/nitori_5cad6d1c.vagrp_c rename to game/models/thd_hero/nitori/nitori_5cad6d1c.vagrp_c diff --git a/models/thd_hero/nue/510a20a7/attack.vanim_c b/game/models/thd_hero/nue/510a20a7/attack.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/attack.vanim_c rename to game/models/thd_hero/nue/510a20a7/attack.vanim_c diff --git a/models/thd_hero/nue/510a20a7/cast1.vanim_c b/game/models/thd_hero/nue/510a20a7/cast1.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/cast1.vanim_c rename to game/models/thd_hero/nue/510a20a7/cast1.vanim_c diff --git a/models/thd_hero/nue/510a20a7/cast2.vanim_c b/game/models/thd_hero/nue/510a20a7/cast2.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/cast2.vanim_c rename to game/models/thd_hero/nue/510a20a7/cast2.vanim_c diff --git a/models/thd_hero/nue/510a20a7/idle.vanim_c b/game/models/thd_hero/nue/510a20a7/idle.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/idle.vanim_c rename to game/models/thd_hero/nue/510a20a7/idle.vanim_c diff --git a/models/thd_hero/nue/510a20a7/idle2.vanim_c b/game/models/thd_hero/nue/510a20a7/idle2.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/idle2.vanim_c rename to game/models/thd_hero/nue/510a20a7/idle2.vanim_c diff --git a/models/thd_hero/nue/510a20a7/nue_animation.vanim_c b/game/models/thd_hero/nue/510a20a7/nue_animation.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/nue_animation.vanim_c rename to game/models/thd_hero/nue/510a20a7/nue_animation.vanim_c diff --git a/models/thd_hero/nue/510a20a7/ready_idle.vanim_c b/game/models/thd_hero/nue/510a20a7/ready_idle.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/ready_idle.vanim_c rename to game/models/thd_hero/nue/510a20a7/ready_idle.vanim_c diff --git a/models/thd_hero/nue/510a20a7/run.vanim_c b/game/models/thd_hero/nue/510a20a7/run.vanim_c similarity index 100% rename from models/thd_hero/nue/510a20a7/run.vanim_c rename to game/models/thd_hero/nue/510a20a7/run.vanim_c diff --git a/models/thd_hero/nue/item/bdcc2cb1/attack.vanim_c b/game/models/thd_hero/nue/item/bdcc2cb1/attack.vanim_c similarity index 100% rename from models/thd_hero/nue/item/bdcc2cb1/attack.vanim_c rename to game/models/thd_hero/nue/item/bdcc2cb1/attack.vanim_c diff --git a/models/thd_hero/nue/item/bdcc2cb1/cast1.vanim_c b/game/models/thd_hero/nue/item/bdcc2cb1/cast1.vanim_c similarity index 100% rename from models/thd_hero/nue/item/bdcc2cb1/cast1.vanim_c rename to game/models/thd_hero/nue/item/bdcc2cb1/cast1.vanim_c diff --git a/models/thd_hero/nue/item/bdcc2cb1/cast2.vanim_c b/game/models/thd_hero/nue/item/bdcc2cb1/cast2.vanim_c similarity index 100% rename from models/thd_hero/nue/item/bdcc2cb1/cast2.vanim_c rename to game/models/thd_hero/nue/item/bdcc2cb1/cast2.vanim_c diff --git a/models/thd_hero/nue/item/bdcc2cb1/idle.vanim_c b/game/models/thd_hero/nue/item/bdcc2cb1/idle.vanim_c similarity index 100% rename from models/thd_hero/nue/item/bdcc2cb1/idle.vanim_c rename to game/models/thd_hero/nue/item/bdcc2cb1/idle.vanim_c diff --git a/models/thd_hero/nue/item/bdcc2cb1/idle2.vanim_c b/game/models/thd_hero/nue/item/bdcc2cb1/idle2.vanim_c similarity index 100% rename from models/thd_hero/nue/item/bdcc2cb1/idle2.vanim_c rename to game/models/thd_hero/nue/item/bdcc2cb1/idle2.vanim_c diff --git a/models/thd_hero/nue/item/bdcc2cb1/ready_idle.vanim_c b/game/models/thd_hero/nue/item/bdcc2cb1/ready_idle.vanim_c similarity index 100% rename from models/thd_hero/nue/item/bdcc2cb1/ready_idle.vanim_c rename to game/models/thd_hero/nue/item/bdcc2cb1/ready_idle.vanim_c diff --git a/models/thd_hero/nue/item/bdcc2cb1/run.vanim_c b/game/models/thd_hero/nue/item/bdcc2cb1/run.vanim_c similarity index 100% rename from models/thd_hero/nue/item/bdcc2cb1/run.vanim_c rename to game/models/thd_hero/nue/item/bdcc2cb1/run.vanim_c diff --git a/models/thd_hero/nue/item/item_nue.vmdl_c b/game/models/thd_hero/nue/item/item_nue.vmdl_c similarity index 100% rename from models/thd_hero/nue/item/item_nue.vmdl_c rename to game/models/thd_hero/nue/item/item_nue.vmdl_c diff --git a/models/thd_hero/nue/item/item_nue_bdcc2cb1.vagrp_c b/game/models/thd_hero/nue/item/item_nue_bdcc2cb1.vagrp_c similarity index 100% rename from models/thd_hero/nue/item/item_nue_bdcc2cb1.vagrp_c rename to game/models/thd_hero/nue/item/item_nue_bdcc2cb1.vagrp_c diff --git a/models/thd_hero/nue/item/nue.vmesh_c b/game/models/thd_hero/nue/item/nue.vmesh_c similarity index 100% rename from models/thd_hero/nue/item/nue.vmesh_c rename to game/models/thd_hero/nue/item/nue.vmesh_c diff --git a/models/thd_hero/nue/nue.vmdl_c b/game/models/thd_hero/nue/nue.vmdl_c similarity index 100% rename from models/thd_hero/nue/nue.vmdl_c rename to game/models/thd_hero/nue/nue.vmdl_c diff --git a/models/thd_hero/nue/nue.vmesh_c b/game/models/thd_hero/nue/nue.vmesh_c similarity index 100% rename from models/thd_hero/nue/nue.vmesh_c rename to game/models/thd_hero/nue/nue.vmesh_c diff --git a/models/thd_hero/nue/nue_510a20a7.vagrp_c b/game/models/thd_hero/nue/nue_510a20a7.vagrp_c similarity index 100% rename from models/thd_hero/nue/nue_510a20a7.vagrp_c rename to game/models/thd_hero/nue/nue_510a20a7.vagrp_c diff --git a/models/thd_hero/parsee/e7bb2331/attack1.vanim_c b/game/models/thd_hero/parsee/e7bb2331/attack1.vanim_c similarity index 100% rename from models/thd_hero/parsee/e7bb2331/attack1.vanim_c rename to game/models/thd_hero/parsee/e7bb2331/attack1.vanim_c diff --git a/models/thd_hero/parsee/e7bb2331/attack2.vanim_c b/game/models/thd_hero/parsee/e7bb2331/attack2.vanim_c similarity index 100% rename from models/thd_hero/parsee/e7bb2331/attack2.vanim_c rename to game/models/thd_hero/parsee/e7bb2331/attack2.vanim_c diff --git a/models/thd_hero/parsee/e7bb2331/cast.vanim_c b/game/models/thd_hero/parsee/e7bb2331/cast.vanim_c similarity index 100% rename from models/thd_hero/parsee/e7bb2331/cast.vanim_c rename to game/models/thd_hero/parsee/e7bb2331/cast.vanim_c diff --git a/models/thd_hero/parsee/e7bb2331/idle.vanim_c b/game/models/thd_hero/parsee/e7bb2331/idle.vanim_c similarity index 100% rename from models/thd_hero/parsee/e7bb2331/idle.vanim_c rename to game/models/thd_hero/parsee/e7bb2331/idle.vanim_c diff --git a/models/thd_hero/parsee/e7bb2331/parsee_animation.vanim_c b/game/models/thd_hero/parsee/e7bb2331/parsee_animation.vanim_c similarity index 100% rename from models/thd_hero/parsee/e7bb2331/parsee_animation.vanim_c rename to game/models/thd_hero/parsee/e7bb2331/parsee_animation.vanim_c diff --git a/models/thd_hero/parsee/e7bb2331/run.vanim_c b/game/models/thd_hero/parsee/e7bb2331/run.vanim_c similarity index 100% rename from models/thd_hero/parsee/e7bb2331/run.vanim_c rename to game/models/thd_hero/parsee/e7bb2331/run.vanim_c diff --git a/models/thd_hero/parsee/item/90179073/attack1.vanim_c b/game/models/thd_hero/parsee/item/90179073/attack1.vanim_c similarity index 100% rename from models/thd_hero/parsee/item/90179073/attack1.vanim_c rename to game/models/thd_hero/parsee/item/90179073/attack1.vanim_c diff --git a/models/thd_hero/parsee/item/90179073/attack2.vanim_c b/game/models/thd_hero/parsee/item/90179073/attack2.vanim_c similarity index 100% rename from models/thd_hero/parsee/item/90179073/attack2.vanim_c rename to game/models/thd_hero/parsee/item/90179073/attack2.vanim_c diff --git a/models/thd_hero/parsee/item/90179073/cast.vanim_c b/game/models/thd_hero/parsee/item/90179073/cast.vanim_c similarity index 100% rename from models/thd_hero/parsee/item/90179073/cast.vanim_c rename to game/models/thd_hero/parsee/item/90179073/cast.vanim_c diff --git a/models/thd_hero/parsee/item/90179073/idle.vanim_c b/game/models/thd_hero/parsee/item/90179073/idle.vanim_c similarity index 100% rename from models/thd_hero/parsee/item/90179073/idle.vanim_c rename to game/models/thd_hero/parsee/item/90179073/idle.vanim_c diff --git a/models/thd_hero/parsee/item/90179073/run.vanim_c b/game/models/thd_hero/parsee/item/90179073/run.vanim_c similarity index 100% rename from models/thd_hero/parsee/item/90179073/run.vanim_c rename to game/models/thd_hero/parsee/item/90179073/run.vanim_c diff --git a/models/thd_hero/parsee/item/item_parsee.vmdl_c b/game/models/thd_hero/parsee/item/item_parsee.vmdl_c similarity index 100% rename from models/thd_hero/parsee/item/item_parsee.vmdl_c rename to game/models/thd_hero/parsee/item/item_parsee.vmdl_c diff --git a/models/thd_hero/parsee/item/item_parsee_90179073.vagrp_c b/game/models/thd_hero/parsee/item/item_parsee_90179073.vagrp_c similarity index 100% rename from models/thd_hero/parsee/item/item_parsee_90179073.vagrp_c rename to game/models/thd_hero/parsee/item/item_parsee_90179073.vagrp_c diff --git a/models/thd_hero/parsee/item/parsee.vmesh_c b/game/models/thd_hero/parsee/item/parsee.vmesh_c similarity index 100% rename from models/thd_hero/parsee/item/parsee.vmesh_c rename to game/models/thd_hero/parsee/item/parsee.vmesh_c diff --git a/models/thd_hero/parsee/parsee.vmdl_c b/game/models/thd_hero/parsee/parsee.vmdl_c similarity index 100% rename from models/thd_hero/parsee/parsee.vmdl_c rename to game/models/thd_hero/parsee/parsee.vmdl_c diff --git a/models/thd_hero/parsee/parsee.vmesh_c b/game/models/thd_hero/parsee/parsee.vmesh_c similarity index 100% rename from models/thd_hero/parsee/parsee.vmesh_c rename to game/models/thd_hero/parsee/parsee.vmesh_c diff --git a/models/thd_hero/parsee/parsee_e7bb2331.vagrp_c b/game/models/thd_hero/parsee/parsee_e7bb2331.vagrp_c similarity index 100% rename from models/thd_hero/parsee/parsee_e7bb2331.vagrp_c rename to game/models/thd_hero/parsee/parsee_e7bb2331.vagrp_c diff --git a/models/thd_hero/ran/5ab147cc/attack1.vanim_c b/game/models/thd_hero/ran/5ab147cc/attack1.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/attack1.vanim_c rename to game/models/thd_hero/ran/5ab147cc/attack1.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/attack2.vanim_c b/game/models/thd_hero/ran/5ab147cc/attack2.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/attack2.vanim_c rename to game/models/thd_hero/ran/5ab147cc/attack2.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/cast.vanim_c b/game/models/thd_hero/ran/5ab147cc/cast.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/cast.vanim_c rename to game/models/thd_hero/ran/5ab147cc/cast.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/cast1.vanim_c b/game/models/thd_hero/ran/5ab147cc/cast1.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/cast1.vanim_c rename to game/models/thd_hero/ran/5ab147cc/cast1.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/cast2.vanim_c b/game/models/thd_hero/ran/5ab147cc/cast2.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/cast2.vanim_c rename to game/models/thd_hero/ran/5ab147cc/cast2.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/cast3.vanim_c b/game/models/thd_hero/ran/5ab147cc/cast3.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/cast3.vanim_c rename to game/models/thd_hero/ran/5ab147cc/cast3.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/cast4.vanim_c b/game/models/thd_hero/ran/5ab147cc/cast4.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/cast4.vanim_c rename to game/models/thd_hero/ran/5ab147cc/cast4.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/idle.vanim_c b/game/models/thd_hero/ran/5ab147cc/idle.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/idle.vanim_c rename to game/models/thd_hero/ran/5ab147cc/idle.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/ran_animation.vanim_c b/game/models/thd_hero/ran/5ab147cc/ran_animation.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/ran_animation.vanim_c rename to game/models/thd_hero/ran/5ab147cc/ran_animation.vanim_c diff --git a/models/thd_hero/ran/5ab147cc/run.vanim_c b/game/models/thd_hero/ran/5ab147cc/run.vanim_c similarity index 100% rename from models/thd_hero/ran/5ab147cc/run.vanim_c rename to game/models/thd_hero/ran/5ab147cc/run.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/attack1.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/attack1.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/attack1.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/attack1.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/attack2.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/attack2.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/attack2.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/attack2.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/cast1.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/cast1.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/cast1.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/cast1.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/cast2.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/cast2.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/cast2.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/cast2.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/cast3.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/cast3.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/cast3.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/cast3.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/cast4.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/cast4.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/cast4.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/cast4.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/idle.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/idle.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/idle.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/idle.vanim_c diff --git a/models/thd_hero/ran/item/b2bd1e4f/run.vanim_c b/game/models/thd_hero/ran/item/b2bd1e4f/run.vanim_c similarity index 100% rename from models/thd_hero/ran/item/b2bd1e4f/run.vanim_c rename to game/models/thd_hero/ran/item/b2bd1e4f/run.vanim_c diff --git a/models/thd_hero/ran/item/item_ran.vmdl_c b/game/models/thd_hero/ran/item/item_ran.vmdl_c similarity index 100% rename from models/thd_hero/ran/item/item_ran.vmdl_c rename to game/models/thd_hero/ran/item/item_ran.vmdl_c diff --git a/models/thd_hero/ran/item/item_ran_b2bd1e4f.vagrp_c b/game/models/thd_hero/ran/item/item_ran_b2bd1e4f.vagrp_c similarity index 100% rename from models/thd_hero/ran/item/item_ran_b2bd1e4f.vagrp_c rename to game/models/thd_hero/ran/item/item_ran_b2bd1e4f.vagrp_c diff --git a/models/thd_hero/ran/item/ran.vmesh_c b/game/models/thd_hero/ran/item/ran.vmesh_c similarity index 100% rename from models/thd_hero/ran/item/ran.vmesh_c rename to game/models/thd_hero/ran/item/ran.vmesh_c diff --git a/models/thd_hero/ran/ran.vmdl_c b/game/models/thd_hero/ran/ran.vmdl_c similarity index 100% rename from models/thd_hero/ran/ran.vmdl_c rename to game/models/thd_hero/ran/ran.vmdl_c diff --git a/models/thd_hero/ran/ran.vmesh_c b/game/models/thd_hero/ran/ran.vmesh_c similarity index 100% rename from models/thd_hero/ran/ran.vmesh_c rename to game/models/thd_hero/ran/ran.vmesh_c diff --git a/models/thd_hero/ran/ran_5ab147cc.vagrp_c b/game/models/thd_hero/ran/ran_5ab147cc.vagrp_c similarity index 100% rename from models/thd_hero/ran/ran_5ab147cc.vagrp_c rename to game/models/thd_hero/ran/ran_5ab147cc.vagrp_c diff --git a/models/thd_hero/reisen/cloth01/60c74576/attack.vanim_c b/game/models/thd_hero/reisen/cloth01/60c74576/attack.vanim_c similarity index 100% rename from models/thd_hero/reisen/cloth01/60c74576/attack.vanim_c rename to game/models/thd_hero/reisen/cloth01/60c74576/attack.vanim_c diff --git a/models/thd_hero/reisen/cloth01/60c74576/cast1.vanim_c b/game/models/thd_hero/reisen/cloth01/60c74576/cast1.vanim_c similarity index 100% rename from models/thd_hero/reisen/cloth01/60c74576/cast1.vanim_c rename to game/models/thd_hero/reisen/cloth01/60c74576/cast1.vanim_c diff --git a/models/thd_hero/reisen/cloth01/60c74576/cast3.vanim_c b/game/models/thd_hero/reisen/cloth01/60c74576/cast3.vanim_c similarity index 100% rename from models/thd_hero/reisen/cloth01/60c74576/cast3.vanim_c rename to game/models/thd_hero/reisen/cloth01/60c74576/cast3.vanim_c diff --git a/models/thd_hero/reisen/cloth01/60c74576/cast4.vanim_c b/game/models/thd_hero/reisen/cloth01/60c74576/cast4.vanim_c similarity index 100% rename from models/thd_hero/reisen/cloth01/60c74576/cast4.vanim_c rename to game/models/thd_hero/reisen/cloth01/60c74576/cast4.vanim_c diff --git a/models/thd_hero/reisen/cloth01/60c74576/idle.vanim_c b/game/models/thd_hero/reisen/cloth01/60c74576/idle.vanim_c similarity index 100% rename from models/thd_hero/reisen/cloth01/60c74576/idle.vanim_c rename to game/models/thd_hero/reisen/cloth01/60c74576/idle.vanim_c diff --git a/models/thd_hero/reisen/cloth01/60c74576/reisen_cloth01_animation.vanim_c b/game/models/thd_hero/reisen/cloth01/60c74576/reisen_cloth01_animation.vanim_c similarity index 100% rename from models/thd_hero/reisen/cloth01/60c74576/reisen_cloth01_animation.vanim_c rename to game/models/thd_hero/reisen/cloth01/60c74576/reisen_cloth01_animation.vanim_c diff --git a/models/thd_hero/reisen/cloth01/60c74576/run.vanim_c b/game/models/thd_hero/reisen/cloth01/60c74576/run.vanim_c similarity index 100% rename from models/thd_hero/reisen/cloth01/60c74576/run.vanim_c rename to game/models/thd_hero/reisen/cloth01/60c74576/run.vanim_c diff --git a/models/thd_hero/reisen/cloth01/reisen_cloth01.vmdl_c b/game/models/thd_hero/reisen/cloth01/reisen_cloth01.vmdl_c similarity index 100% rename from models/thd_hero/reisen/cloth01/reisen_cloth01.vmdl_c rename to game/models/thd_hero/reisen/cloth01/reisen_cloth01.vmdl_c diff --git a/models/thd_hero/reisen/cloth01/reisen_cloth01.vmesh_c b/game/models/thd_hero/reisen/cloth01/reisen_cloth01.vmesh_c similarity index 100% rename from models/thd_hero/reisen/cloth01/reisen_cloth01.vmesh_c rename to game/models/thd_hero/reisen/cloth01/reisen_cloth01.vmesh_c diff --git a/models/thd_hero/reisen/cloth01/reisen_cloth01_60c74576.vagrp_c b/game/models/thd_hero/reisen/cloth01/reisen_cloth01_60c74576.vagrp_c similarity index 100% rename from models/thd_hero/reisen/cloth01/reisen_cloth01_60c74576.vagrp_c rename to game/models/thd_hero/reisen/cloth01/reisen_cloth01_60c74576.vagrp_c diff --git a/models/thd_hero/reisen/d4066086/attack.vanim_c b/game/models/thd_hero/reisen/d4066086/attack.vanim_c similarity index 100% rename from models/thd_hero/reisen/d4066086/attack.vanim_c rename to game/models/thd_hero/reisen/d4066086/attack.vanim_c diff --git a/models/thd_hero/reisen/d4066086/cast1.vanim_c b/game/models/thd_hero/reisen/d4066086/cast1.vanim_c similarity index 100% rename from models/thd_hero/reisen/d4066086/cast1.vanim_c rename to game/models/thd_hero/reisen/d4066086/cast1.vanim_c diff --git a/models/thd_hero/reisen/d4066086/idle.vanim_c b/game/models/thd_hero/reisen/d4066086/idle.vanim_c similarity index 100% rename from models/thd_hero/reisen/d4066086/idle.vanim_c rename to game/models/thd_hero/reisen/d4066086/idle.vanim_c diff --git a/models/thd_hero/reisen/d4066086/por.vanim_c b/game/models/thd_hero/reisen/d4066086/por.vanim_c similarity index 100% rename from models/thd_hero/reisen/d4066086/por.vanim_c rename to game/models/thd_hero/reisen/d4066086/por.vanim_c diff --git a/models/thd_hero/reisen/d4066086/run.vanim_c b/game/models/thd_hero/reisen/d4066086/run.vanim_c similarity index 100% rename from models/thd_hero/reisen/d4066086/run.vanim_c rename to game/models/thd_hero/reisen/d4066086/run.vanim_c diff --git a/models/thd_hero/reisen/item/61a3e1a4/attack.vanim_c b/game/models/thd_hero/reisen/item/61a3e1a4/attack.vanim_c similarity index 100% rename from models/thd_hero/reisen/item/61a3e1a4/attack.vanim_c rename to game/models/thd_hero/reisen/item/61a3e1a4/attack.vanim_c diff --git a/models/thd_hero/reisen/item/61a3e1a4/cast1.vanim_c b/game/models/thd_hero/reisen/item/61a3e1a4/cast1.vanim_c similarity index 100% rename from models/thd_hero/reisen/item/61a3e1a4/cast1.vanim_c rename to game/models/thd_hero/reisen/item/61a3e1a4/cast1.vanim_c diff --git a/models/thd_hero/reisen/item/61a3e1a4/idle.vanim_c b/game/models/thd_hero/reisen/item/61a3e1a4/idle.vanim_c similarity index 100% rename from models/thd_hero/reisen/item/61a3e1a4/idle.vanim_c rename to game/models/thd_hero/reisen/item/61a3e1a4/idle.vanim_c diff --git a/models/thd_hero/reisen/item/61a3e1a4/por.vanim_c b/game/models/thd_hero/reisen/item/61a3e1a4/por.vanim_c similarity index 100% rename from models/thd_hero/reisen/item/61a3e1a4/por.vanim_c rename to game/models/thd_hero/reisen/item/61a3e1a4/por.vanim_c diff --git a/models/thd_hero/reisen/item/61a3e1a4/run.vanim_c b/game/models/thd_hero/reisen/item/61a3e1a4/run.vanim_c similarity index 100% rename from models/thd_hero/reisen/item/61a3e1a4/run.vanim_c rename to game/models/thd_hero/reisen/item/61a3e1a4/run.vanim_c diff --git a/models/thd_hero/reisen/item/item_reisen.vmdl_c b/game/models/thd_hero/reisen/item/item_reisen.vmdl_c similarity index 100% rename from models/thd_hero/reisen/item/item_reisen.vmdl_c rename to game/models/thd_hero/reisen/item/item_reisen.vmdl_c diff --git a/models/thd_hero/reisen/item/item_reisen_61a3e1a4.vagrp_c b/game/models/thd_hero/reisen/item/item_reisen_61a3e1a4.vagrp_c similarity index 100% rename from models/thd_hero/reisen/item/item_reisen_61a3e1a4.vagrp_c rename to game/models/thd_hero/reisen/item/item_reisen_61a3e1a4.vagrp_c diff --git a/models/thd_hero/reisen/item/reisen.vmesh_c b/game/models/thd_hero/reisen/item/reisen.vmesh_c similarity index 100% rename from models/thd_hero/reisen/item/reisen.vmesh_c rename to game/models/thd_hero/reisen/item/reisen.vmesh_c diff --git a/models/thd_hero/reisen/reisen.vmdl_c b/game/models/thd_hero/reisen/reisen.vmdl_c similarity index 100% rename from models/thd_hero/reisen/reisen.vmdl_c rename to game/models/thd_hero/reisen/reisen.vmdl_c diff --git a/models/thd_hero/reisen/reisen.vmesh_c b/game/models/thd_hero/reisen/reisen.vmesh_c similarity index 100% rename from models/thd_hero/reisen/reisen.vmesh_c rename to game/models/thd_hero/reisen/reisen.vmesh_c diff --git a/models/thd_hero/reisen/reisen_d4066086.vagrp_c b/game/models/thd_hero/reisen/reisen_d4066086.vagrp_c similarity index 100% rename from models/thd_hero/reisen/reisen_d4066086.vagrp_c rename to game/models/thd_hero/reisen/reisen_d4066086.vagrp_c diff --git a/models/thd_hero/rin/71971624/attack.vanim_c b/game/models/thd_hero/rin/71971624/attack.vanim_c similarity index 100% rename from models/thd_hero/rin/71971624/attack.vanim_c rename to game/models/thd_hero/rin/71971624/attack.vanim_c diff --git a/models/thd_hero/rin/71971624/attack2.vanim_c b/game/models/thd_hero/rin/71971624/attack2.vanim_c similarity index 100% rename from models/thd_hero/rin/71971624/attack2.vanim_c rename to game/models/thd_hero/rin/71971624/attack2.vanim_c diff --git a/models/thd_hero/rin/71971624/cast1.vanim_c b/game/models/thd_hero/rin/71971624/cast1.vanim_c similarity index 100% rename from models/thd_hero/rin/71971624/cast1.vanim_c rename to game/models/thd_hero/rin/71971624/cast1.vanim_c diff --git a/models/thd_hero/rin/71971624/cast2.vanim_c b/game/models/thd_hero/rin/71971624/cast2.vanim_c similarity index 100% rename from models/thd_hero/rin/71971624/cast2.vanim_c rename to game/models/thd_hero/rin/71971624/cast2.vanim_c diff --git a/models/thd_hero/rin/71971624/idle.vanim_c b/game/models/thd_hero/rin/71971624/idle.vanim_c similarity index 100% rename from models/thd_hero/rin/71971624/idle.vanim_c rename to game/models/thd_hero/rin/71971624/idle.vanim_c diff --git a/models/thd_hero/rin/71971624/por.vanim_c b/game/models/thd_hero/rin/71971624/por.vanim_c similarity index 100% rename from models/thd_hero/rin/71971624/por.vanim_c rename to game/models/thd_hero/rin/71971624/por.vanim_c diff --git a/models/thd_hero/rin/71971624/run.vanim_c b/game/models/thd_hero/rin/71971624/run.vanim_c similarity index 100% rename from models/thd_hero/rin/71971624/run.vanim_c rename to game/models/thd_hero/rin/71971624/run.vanim_c diff --git a/models/thd_hero/rin/item/6aaefc41/attack.vanim_c b/game/models/thd_hero/rin/item/6aaefc41/attack.vanim_c similarity index 100% rename from models/thd_hero/rin/item/6aaefc41/attack.vanim_c rename to game/models/thd_hero/rin/item/6aaefc41/attack.vanim_c diff --git a/models/thd_hero/rin/item/6aaefc41/attack2.vanim_c b/game/models/thd_hero/rin/item/6aaefc41/attack2.vanim_c similarity index 100% rename from models/thd_hero/rin/item/6aaefc41/attack2.vanim_c rename to game/models/thd_hero/rin/item/6aaefc41/attack2.vanim_c diff --git a/models/thd_hero/rin/item/6aaefc41/cast1.vanim_c b/game/models/thd_hero/rin/item/6aaefc41/cast1.vanim_c similarity index 100% rename from models/thd_hero/rin/item/6aaefc41/cast1.vanim_c rename to game/models/thd_hero/rin/item/6aaefc41/cast1.vanim_c diff --git a/models/thd_hero/rin/item/6aaefc41/cast2.vanim_c b/game/models/thd_hero/rin/item/6aaefc41/cast2.vanim_c similarity index 100% rename from models/thd_hero/rin/item/6aaefc41/cast2.vanim_c rename to game/models/thd_hero/rin/item/6aaefc41/cast2.vanim_c diff --git a/models/thd_hero/rin/item/6aaefc41/idle.vanim_c b/game/models/thd_hero/rin/item/6aaefc41/idle.vanim_c similarity index 100% rename from models/thd_hero/rin/item/6aaefc41/idle.vanim_c rename to game/models/thd_hero/rin/item/6aaefc41/idle.vanim_c diff --git a/models/thd_hero/rin/item/6aaefc41/por.vanim_c b/game/models/thd_hero/rin/item/6aaefc41/por.vanim_c similarity index 100% rename from models/thd_hero/rin/item/6aaefc41/por.vanim_c rename to game/models/thd_hero/rin/item/6aaefc41/por.vanim_c diff --git a/models/thd_hero/rin/item/6aaefc41/run.vanim_c b/game/models/thd_hero/rin/item/6aaefc41/run.vanim_c similarity index 100% rename from models/thd_hero/rin/item/6aaefc41/run.vanim_c rename to game/models/thd_hero/rin/item/6aaefc41/run.vanim_c diff --git a/models/thd_hero/rin/item/item_rin.vmdl_c b/game/models/thd_hero/rin/item/item_rin.vmdl_c similarity index 100% rename from models/thd_hero/rin/item/item_rin.vmdl_c rename to game/models/thd_hero/rin/item/item_rin.vmdl_c diff --git a/models/thd_hero/rin/item/item_rin_6aaefc41.vagrp_c b/game/models/thd_hero/rin/item/item_rin_6aaefc41.vagrp_c similarity index 100% rename from models/thd_hero/rin/item/item_rin_6aaefc41.vagrp_c rename to game/models/thd_hero/rin/item/item_rin_6aaefc41.vagrp_c diff --git a/models/thd_hero/rin/item/rin.vmesh_c b/game/models/thd_hero/rin/item/rin.vmesh_c similarity index 100% rename from models/thd_hero/rin/item/rin.vmesh_c rename to game/models/thd_hero/rin/item/rin.vmesh_c diff --git a/models/thd_hero/rin/rin.vmdl_c b/game/models/thd_hero/rin/rin.vmdl_c similarity index 100% rename from models/thd_hero/rin/rin.vmdl_c rename to game/models/thd_hero/rin/rin.vmdl_c diff --git a/models/thd_hero/rin/rin.vmesh_c b/game/models/thd_hero/rin/rin.vmesh_c similarity index 100% rename from models/thd_hero/rin/rin.vmesh_c rename to game/models/thd_hero/rin/rin.vmesh_c diff --git a/models/thd_hero/rin/rin_71971624.vagrp_c b/game/models/thd_hero/rin/rin_71971624.vagrp_c similarity index 100% rename from models/thd_hero/rin/rin_71971624.vagrp_c rename to game/models/thd_hero/rin/rin_71971624.vagrp_c diff --git a/models/thd_hero/rumia/64c7d6a3/attack.vanim_c b/game/models/thd_hero/rumia/64c7d6a3/attack.vanim_c similarity index 100% rename from models/thd_hero/rumia/64c7d6a3/attack.vanim_c rename to game/models/thd_hero/rumia/64c7d6a3/attack.vanim_c diff --git a/models/thd_hero/rumia/64c7d6a3/cast.vanim_c b/game/models/thd_hero/rumia/64c7d6a3/cast.vanim_c similarity index 100% rename from models/thd_hero/rumia/64c7d6a3/cast.vanim_c rename to game/models/thd_hero/rumia/64c7d6a3/cast.vanim_c diff --git a/models/thd_hero/rumia/64c7d6a3/idle.vanim_c b/game/models/thd_hero/rumia/64c7d6a3/idle.vanim_c similarity index 100% rename from models/thd_hero/rumia/64c7d6a3/idle.vanim_c rename to game/models/thd_hero/rumia/64c7d6a3/idle.vanim_c diff --git a/models/thd_hero/rumia/64c7d6a3/por.vanim_c b/game/models/thd_hero/rumia/64c7d6a3/por.vanim_c similarity index 100% rename from models/thd_hero/rumia/64c7d6a3/por.vanim_c rename to game/models/thd_hero/rumia/64c7d6a3/por.vanim_c diff --git a/models/thd_hero/rumia/64c7d6a3/run.vanim_c b/game/models/thd_hero/rumia/64c7d6a3/run.vanim_c similarity index 100% rename from models/thd_hero/rumia/64c7d6a3/run.vanim_c rename to game/models/thd_hero/rumia/64c7d6a3/run.vanim_c diff --git a/models/thd_hero/rumia/item/0ddc64ce/attack.vanim_c b/game/models/thd_hero/rumia/item/0ddc64ce/attack.vanim_c similarity index 100% rename from models/thd_hero/rumia/item/0ddc64ce/attack.vanim_c rename to game/models/thd_hero/rumia/item/0ddc64ce/attack.vanim_c diff --git a/models/thd_hero/rumia/item/0ddc64ce/cast.vanim_c b/game/models/thd_hero/rumia/item/0ddc64ce/cast.vanim_c similarity index 100% rename from models/thd_hero/rumia/item/0ddc64ce/cast.vanim_c rename to game/models/thd_hero/rumia/item/0ddc64ce/cast.vanim_c diff --git a/models/thd_hero/rumia/item/0ddc64ce/idle.vanim_c b/game/models/thd_hero/rumia/item/0ddc64ce/idle.vanim_c similarity index 100% rename from models/thd_hero/rumia/item/0ddc64ce/idle.vanim_c rename to game/models/thd_hero/rumia/item/0ddc64ce/idle.vanim_c diff --git a/models/thd_hero/rumia/item/0ddc64ce/por.vanim_c b/game/models/thd_hero/rumia/item/0ddc64ce/por.vanim_c similarity index 100% rename from models/thd_hero/rumia/item/0ddc64ce/por.vanim_c rename to game/models/thd_hero/rumia/item/0ddc64ce/por.vanim_c diff --git a/models/thd_hero/rumia/item/0ddc64ce/run.vanim_c b/game/models/thd_hero/rumia/item/0ddc64ce/run.vanim_c similarity index 100% rename from models/thd_hero/rumia/item/0ddc64ce/run.vanim_c rename to game/models/thd_hero/rumia/item/0ddc64ce/run.vanim_c diff --git a/models/thd_hero/rumia/item/item_rumia.vmdl_c b/game/models/thd_hero/rumia/item/item_rumia.vmdl_c similarity index 100% rename from models/thd_hero/rumia/item/item_rumia.vmdl_c rename to game/models/thd_hero/rumia/item/item_rumia.vmdl_c diff --git a/models/thd_hero/rumia/item/item_rumia_0ddc64ce.vagrp_c b/game/models/thd_hero/rumia/item/item_rumia_0ddc64ce.vagrp_c similarity index 100% rename from models/thd_hero/rumia/item/item_rumia_0ddc64ce.vagrp_c rename to game/models/thd_hero/rumia/item/item_rumia_0ddc64ce.vagrp_c diff --git a/models/thd_hero/rumia/item/rumia.vmesh_c b/game/models/thd_hero/rumia/item/rumia.vmesh_c similarity index 100% rename from models/thd_hero/rumia/item/rumia.vmesh_c rename to game/models/thd_hero/rumia/item/rumia.vmesh_c diff --git a/models/thd_hero/rumia/rumia.vmdl_c b/game/models/thd_hero/rumia/rumia.vmdl_c similarity index 100% rename from models/thd_hero/rumia/rumia.vmdl_c rename to game/models/thd_hero/rumia/rumia.vmdl_c diff --git a/models/thd_hero/rumia/rumia.vmesh_c b/game/models/thd_hero/rumia/rumia.vmesh_c similarity index 100% rename from models/thd_hero/rumia/rumia.vmesh_c rename to game/models/thd_hero/rumia/rumia.vmesh_c diff --git a/models/thd_hero/rumia/rumia_64c7d6a3.vagrp_c b/game/models/thd_hero/rumia/rumia_64c7d6a3.vagrp_c similarity index 100% rename from models/thd_hero/rumia/rumia_64c7d6a3.vagrp_c rename to game/models/thd_hero/rumia/rumia_64c7d6a3.vagrp_c diff --git a/models/thd_hero/sanae/5a6c8925/attack.vanim_c b/game/models/thd_hero/sanae/5a6c8925/attack.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/attack.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/attack.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/cast.vanim_c b/game/models/thd_hero/sanae/5a6c8925/cast.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/cast.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/cast.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/cast1.vanim_c b/game/models/thd_hero/sanae/5a6c8925/cast1.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/cast1.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/cast1.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/cast2.vanim_c b/game/models/thd_hero/sanae/5a6c8925/cast2.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/cast2.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/cast2.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/cast3.vanim_c b/game/models/thd_hero/sanae/5a6c8925/cast3.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/cast3.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/cast3.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/cast4.vanim_c b/game/models/thd_hero/sanae/5a6c8925/cast4.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/cast4.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/cast4.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/idle.vanim_c b/game/models/thd_hero/sanae/5a6c8925/idle.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/idle.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/idle.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/run.vanim_c b/game/models/thd_hero/sanae/5a6c8925/run.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/run.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/run.vanim_c diff --git a/models/thd_hero/sanae/5a6c8925/sanae_animation.vanim_c b/game/models/thd_hero/sanae/5a6c8925/sanae_animation.vanim_c similarity index 100% rename from models/thd_hero/sanae/5a6c8925/sanae_animation.vanim_c rename to game/models/thd_hero/sanae/5a6c8925/sanae_animation.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/attack1.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/attack1.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/attack1.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/attack1.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/cast.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/cast.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/cast.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/cast.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/cast2.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/cast2.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/cast2.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/cast2.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/cast3.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/cast3.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/cast3.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/cast3.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/cast4.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/cast4.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/cast4.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/cast4.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/idle.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/idle.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/idle.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/idle.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/run.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/run.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/run.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/run.vanim_c diff --git a/models/thd_hero/sanae/cloth01/0d8eabdb/sanae_jk_animation.vanim_c b/game/models/thd_hero/sanae/cloth01/0d8eabdb/sanae_jk_animation.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/0d8eabdb/sanae_jk_animation.vanim_c rename to game/models/thd_hero/sanae/cloth01/0d8eabdb/sanae_jk_animation.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/5ae06ad8/attack1.vanim_c b/game/models/thd_hero/sanae/cloth01/item/5ae06ad8/attack1.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/5ae06ad8/attack1.vanim_c rename to game/models/thd_hero/sanae/cloth01/item/5ae06ad8/attack1.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast.vanim_c b/game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/5ae06ad8/cast.vanim_c rename to game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast2.vanim_c b/game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast2.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/5ae06ad8/cast2.vanim_c rename to game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast2.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast3.vanim_c b/game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast3.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/5ae06ad8/cast3.vanim_c rename to game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast3.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast4.vanim_c b/game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast4.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/5ae06ad8/cast4.vanim_c rename to game/models/thd_hero/sanae/cloth01/item/5ae06ad8/cast4.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/5ae06ad8/idle.vanim_c b/game/models/thd_hero/sanae/cloth01/item/5ae06ad8/idle.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/5ae06ad8/idle.vanim_c rename to game/models/thd_hero/sanae/cloth01/item/5ae06ad8/idle.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/5ae06ad8/run.vanim_c b/game/models/thd_hero/sanae/cloth01/item/5ae06ad8/run.vanim_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/5ae06ad8/run.vanim_c rename to game/models/thd_hero/sanae/cloth01/item/5ae06ad8/run.vanim_c diff --git a/models/thd_hero/sanae/cloth01/item/item_sanae_jk.vmdl_c b/game/models/thd_hero/sanae/cloth01/item/item_sanae_jk.vmdl_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/item_sanae_jk.vmdl_c rename to game/models/thd_hero/sanae/cloth01/item/item_sanae_jk.vmdl_c diff --git a/models/thd_hero/sanae/cloth01/item/item_sanae_jk_5ae06ad8.vagrp_c b/game/models/thd_hero/sanae/cloth01/item/item_sanae_jk_5ae06ad8.vagrp_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/item_sanae_jk_5ae06ad8.vagrp_c rename to game/models/thd_hero/sanae/cloth01/item/item_sanae_jk_5ae06ad8.vagrp_c diff --git a/models/thd_hero/sanae/cloth01/item/sanae_jk.vmesh_c b/game/models/thd_hero/sanae/cloth01/item/sanae_jk.vmesh_c similarity index 100% rename from models/thd_hero/sanae/cloth01/item/sanae_jk.vmesh_c rename to game/models/thd_hero/sanae/cloth01/item/sanae_jk.vmesh_c diff --git a/models/thd_hero/sanae/cloth01/sanae_jk.vmdl_c b/game/models/thd_hero/sanae/cloth01/sanae_jk.vmdl_c similarity index 100% rename from models/thd_hero/sanae/cloth01/sanae_jk.vmdl_c rename to game/models/thd_hero/sanae/cloth01/sanae_jk.vmdl_c diff --git a/models/thd_hero/sanae/cloth01/sanae_jk.vmesh_c b/game/models/thd_hero/sanae/cloth01/sanae_jk.vmesh_c similarity index 100% rename from models/thd_hero/sanae/cloth01/sanae_jk.vmesh_c rename to game/models/thd_hero/sanae/cloth01/sanae_jk.vmesh_c diff --git a/models/thd_hero/sanae/cloth01/sanae_jk_0d8eabdb.vagrp_c b/game/models/thd_hero/sanae/cloth01/sanae_jk_0d8eabdb.vagrp_c similarity index 100% rename from models/thd_hero/sanae/cloth01/sanae_jk_0d8eabdb.vagrp_c rename to game/models/thd_hero/sanae/cloth01/sanae_jk_0d8eabdb.vagrp_c diff --git a/models/thd_hero/sanae/item/b85e7a35/attack.vanim_c b/game/models/thd_hero/sanae/item/b85e7a35/attack.vanim_c similarity index 100% rename from models/thd_hero/sanae/item/b85e7a35/attack.vanim_c rename to game/models/thd_hero/sanae/item/b85e7a35/attack.vanim_c diff --git a/models/thd_hero/sanae/item/b85e7a35/cast1.vanim_c b/game/models/thd_hero/sanae/item/b85e7a35/cast1.vanim_c similarity index 100% rename from models/thd_hero/sanae/item/b85e7a35/cast1.vanim_c rename to game/models/thd_hero/sanae/item/b85e7a35/cast1.vanim_c diff --git a/models/thd_hero/sanae/item/b85e7a35/cast2.vanim_c b/game/models/thd_hero/sanae/item/b85e7a35/cast2.vanim_c similarity index 100% rename from models/thd_hero/sanae/item/b85e7a35/cast2.vanim_c rename to game/models/thd_hero/sanae/item/b85e7a35/cast2.vanim_c diff --git a/models/thd_hero/sanae/item/b85e7a35/cast3.vanim_c b/game/models/thd_hero/sanae/item/b85e7a35/cast3.vanim_c similarity index 100% rename from models/thd_hero/sanae/item/b85e7a35/cast3.vanim_c rename to game/models/thd_hero/sanae/item/b85e7a35/cast3.vanim_c diff --git a/models/thd_hero/sanae/item/b85e7a35/cast4.vanim_c b/game/models/thd_hero/sanae/item/b85e7a35/cast4.vanim_c similarity index 100% rename from models/thd_hero/sanae/item/b85e7a35/cast4.vanim_c rename to game/models/thd_hero/sanae/item/b85e7a35/cast4.vanim_c diff --git a/models/thd_hero/sanae/item/b85e7a35/idle.vanim_c b/game/models/thd_hero/sanae/item/b85e7a35/idle.vanim_c similarity index 100% rename from models/thd_hero/sanae/item/b85e7a35/idle.vanim_c rename to game/models/thd_hero/sanae/item/b85e7a35/idle.vanim_c diff --git a/models/thd_hero/sanae/item/b85e7a35/run.vanim_c b/game/models/thd_hero/sanae/item/b85e7a35/run.vanim_c similarity index 100% rename from models/thd_hero/sanae/item/b85e7a35/run.vanim_c rename to game/models/thd_hero/sanae/item/b85e7a35/run.vanim_c diff --git a/models/thd_hero/sanae/item/item_sanae.vmdl_c b/game/models/thd_hero/sanae/item/item_sanae.vmdl_c similarity index 100% rename from models/thd_hero/sanae/item/item_sanae.vmdl_c rename to game/models/thd_hero/sanae/item/item_sanae.vmdl_c diff --git a/models/thd_hero/sanae/item/item_sanae_b85e7a35.vagrp_c b/game/models/thd_hero/sanae/item/item_sanae_b85e7a35.vagrp_c similarity index 100% rename from models/thd_hero/sanae/item/item_sanae_b85e7a35.vagrp_c rename to game/models/thd_hero/sanae/item/item_sanae_b85e7a35.vagrp_c diff --git a/models/thd_hero/sanae/item/sanae.vmesh_c b/game/models/thd_hero/sanae/item/sanae.vmesh_c similarity index 100% rename from models/thd_hero/sanae/item/sanae.vmesh_c rename to game/models/thd_hero/sanae/item/sanae.vmesh_c diff --git a/models/thd_hero/sanae/sanae.vmdl_c b/game/models/thd_hero/sanae/sanae.vmdl_c similarity index 100% rename from models/thd_hero/sanae/sanae.vmdl_c rename to game/models/thd_hero/sanae/sanae.vmdl_c diff --git a/models/thd_hero/sanae/sanae.vmesh_c b/game/models/thd_hero/sanae/sanae.vmesh_c similarity index 100% rename from models/thd_hero/sanae/sanae.vmesh_c rename to game/models/thd_hero/sanae/sanae.vmesh_c diff --git a/models/thd_hero/sanae/sanae_5a6c8925.vagrp_c b/game/models/thd_hero/sanae/sanae_5a6c8925.vagrp_c similarity index 100% rename from models/thd_hero/sanae/sanae_5a6c8925.vagrp_c rename to game/models/thd_hero/sanae/sanae_5a6c8925.vagrp_c diff --git a/models/thd_hero/seiga/7530c0b4/attack.vanim_c b/game/models/thd_hero/seiga/7530c0b4/attack.vanim_c similarity index 100% rename from models/thd_hero/seiga/7530c0b4/attack.vanim_c rename to game/models/thd_hero/seiga/7530c0b4/attack.vanim_c diff --git a/models/thd_hero/seiga/7530c0b4/cast.vanim_c b/game/models/thd_hero/seiga/7530c0b4/cast.vanim_c similarity index 100% rename from models/thd_hero/seiga/7530c0b4/cast.vanim_c rename to game/models/thd_hero/seiga/7530c0b4/cast.vanim_c diff --git a/models/thd_hero/seiga/7530c0b4/cast_4.vanim_c b/game/models/thd_hero/seiga/7530c0b4/cast_4.vanim_c similarity index 100% rename from models/thd_hero/seiga/7530c0b4/cast_4.vanim_c rename to game/models/thd_hero/seiga/7530c0b4/cast_4.vanim_c diff --git a/models/thd_hero/seiga/7530c0b4/idle.vanim_c b/game/models/thd_hero/seiga/7530c0b4/idle.vanim_c similarity index 100% rename from models/thd_hero/seiga/7530c0b4/idle.vanim_c rename to game/models/thd_hero/seiga/7530c0b4/idle.vanim_c diff --git a/models/thd_hero/seiga/7530c0b4/run.vanim_c b/game/models/thd_hero/seiga/7530c0b4/run.vanim_c similarity index 100% rename from models/thd_hero/seiga/7530c0b4/run.vanim_c rename to game/models/thd_hero/seiga/7530c0b4/run.vanim_c diff --git a/models/thd_hero/seiga/7530c0b4/seiga_animation.vanim_c b/game/models/thd_hero/seiga/7530c0b4/seiga_animation.vanim_c similarity index 100% rename from models/thd_hero/seiga/7530c0b4/seiga_animation.vanim_c rename to game/models/thd_hero/seiga/7530c0b4/seiga_animation.vanim_c diff --git a/models/thd_hero/seiga/item/ff15f8c4/attack.vanim_c b/game/models/thd_hero/seiga/item/ff15f8c4/attack.vanim_c similarity index 100% rename from models/thd_hero/seiga/item/ff15f8c4/attack.vanim_c rename to game/models/thd_hero/seiga/item/ff15f8c4/attack.vanim_c diff --git a/models/thd_hero/seiga/item/ff15f8c4/cast.vanim_c b/game/models/thd_hero/seiga/item/ff15f8c4/cast.vanim_c similarity index 100% rename from models/thd_hero/seiga/item/ff15f8c4/cast.vanim_c rename to game/models/thd_hero/seiga/item/ff15f8c4/cast.vanim_c diff --git a/models/thd_hero/seiga/item/ff15f8c4/idle.vanim_c b/game/models/thd_hero/seiga/item/ff15f8c4/idle.vanim_c similarity index 100% rename from models/thd_hero/seiga/item/ff15f8c4/idle.vanim_c rename to game/models/thd_hero/seiga/item/ff15f8c4/idle.vanim_c diff --git a/models/thd_hero/seiga/item/ff15f8c4/run.vanim_c b/game/models/thd_hero/seiga/item/ff15f8c4/run.vanim_c similarity index 100% rename from models/thd_hero/seiga/item/ff15f8c4/run.vanim_c rename to game/models/thd_hero/seiga/item/ff15f8c4/run.vanim_c diff --git a/models/thd_hero/seiga/item/item_seiga.vmdl_c b/game/models/thd_hero/seiga/item/item_seiga.vmdl_c similarity index 100% rename from models/thd_hero/seiga/item/item_seiga.vmdl_c rename to game/models/thd_hero/seiga/item/item_seiga.vmdl_c diff --git a/models/thd_hero/seiga/item/item_seiga_ff15f8c4.vagrp_c b/game/models/thd_hero/seiga/item/item_seiga_ff15f8c4.vagrp_c similarity index 100% rename from models/thd_hero/seiga/item/item_seiga_ff15f8c4.vagrp_c rename to game/models/thd_hero/seiga/item/item_seiga_ff15f8c4.vagrp_c diff --git a/models/thd_hero/seiga/item/seiga.vmesh_c b/game/models/thd_hero/seiga/item/seiga.vmesh_c similarity index 100% rename from models/thd_hero/seiga/item/seiga.vmesh_c rename to game/models/thd_hero/seiga/item/seiga.vmesh_c diff --git a/models/thd_hero/seiga/seiga.vmdl_c b/game/models/thd_hero/seiga/seiga.vmdl_c similarity index 100% rename from models/thd_hero/seiga/seiga.vmdl_c rename to game/models/thd_hero/seiga/seiga.vmdl_c diff --git a/models/thd_hero/seiga/seiga.vmesh_c b/game/models/thd_hero/seiga/seiga.vmesh_c similarity index 100% rename from models/thd_hero/seiga/seiga.vmesh_c rename to game/models/thd_hero/seiga/seiga.vmesh_c diff --git a/models/thd_hero/seiga/seiga_7530c0b4.vagrp_c b/game/models/thd_hero/seiga/seiga_7530c0b4.vagrp_c similarity index 100% rename from models/thd_hero/seiga/seiga_7530c0b4.vagrp_c rename to game/models/thd_hero/seiga/seiga_7530c0b4.vagrp_c diff --git a/models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack.vanim_c b/game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack.vanim_c rename to game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack.vanim_c diff --git a/models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack2.vanim_c b/game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack2.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack2.vanim_c rename to game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_attack2.vanim_c diff --git a/models/thd_hero/shanghainingyou/5bfb7966/shanghai_idle.vanim_c b/game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_idle.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/5bfb7966/shanghai_idle.vanim_c rename to game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_idle.vanim_c diff --git a/models/thd_hero/shanghainingyou/5bfb7966/shanghai_run.vanim_c b/game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_run.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/5bfb7966/shanghai_run.vanim_c rename to game/models/thd_hero/shanghainingyou/5bfb7966/shanghai_run.vanim_c diff --git a/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack.vanim_c b/game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack.vanim_c rename to game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack.vanim_c diff --git a/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack2.vanim_c b/game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack2.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack2.vanim_c rename to game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_attack2.vanim_c diff --git a/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_idle.vanim_c b/game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_idle.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_idle.vanim_c rename to game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_idle.vanim_c diff --git a/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_run.vanim_c b/game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_run.vanim_c similarity index 100% rename from models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_run.vanim_c rename to game/models/thd_hero/shanghainingyou/item/bdfafa0f/shanghai_run.vanim_c diff --git a/models/thd_hero/shanghainingyou/item/item_shanghainingyou.vmdl_c b/game/models/thd_hero/shanghainingyou/item/item_shanghainingyou.vmdl_c similarity index 100% rename from models/thd_hero/shanghainingyou/item/item_shanghainingyou.vmdl_c rename to game/models/thd_hero/shanghainingyou/item/item_shanghainingyou.vmdl_c diff --git a/models/thd_hero/shanghainingyou/item/item_shanghainingyou_bdfafa0f.vagrp_c b/game/models/thd_hero/shanghainingyou/item/item_shanghainingyou_bdfafa0f.vagrp_c similarity index 100% rename from models/thd_hero/shanghainingyou/item/item_shanghainingyou_bdfafa0f.vagrp_c rename to game/models/thd_hero/shanghainingyou/item/item_shanghainingyou_bdfafa0f.vagrp_c diff --git a/models/thd_hero/shanghainingyou/item/shanghainingyou.vmesh_c b/game/models/thd_hero/shanghainingyou/item/shanghainingyou.vmesh_c similarity index 100% rename from models/thd_hero/shanghainingyou/item/shanghainingyou.vmesh_c rename to game/models/thd_hero/shanghainingyou/item/shanghainingyou.vmesh_c diff --git a/models/thd_hero/shanghainingyou/shanghainingyou.vmdl_c b/game/models/thd_hero/shanghainingyou/shanghainingyou.vmdl_c similarity index 100% rename from models/thd_hero/shanghainingyou/shanghainingyou.vmdl_c rename to game/models/thd_hero/shanghainingyou/shanghainingyou.vmdl_c diff --git a/models/thd_hero/shanghainingyou/shanghainingyou.vmesh_c b/game/models/thd_hero/shanghainingyou/shanghainingyou.vmesh_c similarity index 100% rename from models/thd_hero/shanghainingyou/shanghainingyou.vmesh_c rename to game/models/thd_hero/shanghainingyou/shanghainingyou.vmesh_c diff --git a/models/thd_hero/shanghainingyou/shanghainingyou_5bfb7966.vagrp_c b/game/models/thd_hero/shanghainingyou/shanghainingyou_5bfb7966.vagrp_c similarity index 100% rename from models/thd_hero/shanghainingyou/shanghainingyou_5bfb7966.vagrp_c rename to game/models/thd_hero/shanghainingyou/shanghainingyou_5bfb7966.vagrp_c diff --git a/models/thd_hero/sizuha/7fa045fb/attack1.vanim_c b/game/models/thd_hero/sizuha/7fa045fb/attack1.vanim_c similarity index 100% rename from models/thd_hero/sizuha/7fa045fb/attack1.vanim_c rename to game/models/thd_hero/sizuha/7fa045fb/attack1.vanim_c diff --git a/models/thd_hero/sizuha/7fa045fb/cast.vanim_c b/game/models/thd_hero/sizuha/7fa045fb/cast.vanim_c similarity index 100% rename from models/thd_hero/sizuha/7fa045fb/cast.vanim_c rename to game/models/thd_hero/sizuha/7fa045fb/cast.vanim_c diff --git a/models/thd_hero/sizuha/7fa045fb/idle.vanim_c b/game/models/thd_hero/sizuha/7fa045fb/idle.vanim_c similarity index 100% rename from models/thd_hero/sizuha/7fa045fb/idle.vanim_c rename to game/models/thd_hero/sizuha/7fa045fb/idle.vanim_c diff --git a/models/thd_hero/sizuha/7fa045fb/run.vanim_c b/game/models/thd_hero/sizuha/7fa045fb/run.vanim_c similarity index 100% rename from models/thd_hero/sizuha/7fa045fb/run.vanim_c rename to game/models/thd_hero/sizuha/7fa045fb/run.vanim_c diff --git a/models/thd_hero/sizuha/7fa045fb/sizuha_animation.vanim_c b/game/models/thd_hero/sizuha/7fa045fb/sizuha_animation.vanim_c similarity index 100% rename from models/thd_hero/sizuha/7fa045fb/sizuha_animation.vanim_c rename to game/models/thd_hero/sizuha/7fa045fb/sizuha_animation.vanim_c diff --git a/models/thd_hero/sizuha/item/2cf60b98/attack1.vanim_c b/game/models/thd_hero/sizuha/item/2cf60b98/attack1.vanim_c similarity index 100% rename from models/thd_hero/sizuha/item/2cf60b98/attack1.vanim_c rename to game/models/thd_hero/sizuha/item/2cf60b98/attack1.vanim_c diff --git a/models/thd_hero/sizuha/item/2cf60b98/cast.vanim_c b/game/models/thd_hero/sizuha/item/2cf60b98/cast.vanim_c similarity index 100% rename from models/thd_hero/sizuha/item/2cf60b98/cast.vanim_c rename to game/models/thd_hero/sizuha/item/2cf60b98/cast.vanim_c diff --git a/models/thd_hero/sizuha/item/2cf60b98/idle.vanim_c b/game/models/thd_hero/sizuha/item/2cf60b98/idle.vanim_c similarity index 100% rename from models/thd_hero/sizuha/item/2cf60b98/idle.vanim_c rename to game/models/thd_hero/sizuha/item/2cf60b98/idle.vanim_c diff --git a/models/thd_hero/sizuha/item/2cf60b98/run.vanim_c b/game/models/thd_hero/sizuha/item/2cf60b98/run.vanim_c similarity index 100% rename from models/thd_hero/sizuha/item/2cf60b98/run.vanim_c rename to game/models/thd_hero/sizuha/item/2cf60b98/run.vanim_c diff --git a/models/thd_hero/sizuha/item/item_sizuha.vmdl_c b/game/models/thd_hero/sizuha/item/item_sizuha.vmdl_c similarity index 100% rename from models/thd_hero/sizuha/item/item_sizuha.vmdl_c rename to game/models/thd_hero/sizuha/item/item_sizuha.vmdl_c diff --git a/models/thd_hero/sizuha/item/item_sizuha_2cf60b98.vagrp_c b/game/models/thd_hero/sizuha/item/item_sizuha_2cf60b98.vagrp_c similarity index 100% rename from models/thd_hero/sizuha/item/item_sizuha_2cf60b98.vagrp_c rename to game/models/thd_hero/sizuha/item/item_sizuha_2cf60b98.vagrp_c diff --git a/models/thd_hero/sizuha/item/sizuha.vmesh_c b/game/models/thd_hero/sizuha/item/sizuha.vmesh_c similarity index 100% rename from models/thd_hero/sizuha/item/sizuha.vmesh_c rename to game/models/thd_hero/sizuha/item/sizuha.vmesh_c diff --git a/models/thd_hero/sizuha/sizuha.vmdl_c b/game/models/thd_hero/sizuha/sizuha.vmdl_c similarity index 100% rename from models/thd_hero/sizuha/sizuha.vmdl_c rename to game/models/thd_hero/sizuha/sizuha.vmdl_c diff --git a/models/thd_hero/sizuha/sizuha.vmesh_c b/game/models/thd_hero/sizuha/sizuha.vmesh_c similarity index 100% rename from models/thd_hero/sizuha/sizuha.vmesh_c rename to game/models/thd_hero/sizuha/sizuha.vmesh_c diff --git a/models/thd_hero/sizuha/sizuha_7fa045fb.vagrp_c b/game/models/thd_hero/sizuha/sizuha_7fa045fb.vagrp_c similarity index 100% rename from models/thd_hero/sizuha/sizuha_7fa045fb.vagrp_c rename to game/models/thd_hero/sizuha/sizuha_7fa045fb.vagrp_c diff --git a/models/thd_hero/soga/2c74cc4a/attack.vanim_c b/game/models/thd_hero/soga/2c74cc4a/attack.vanim_c similarity index 100% rename from models/thd_hero/soga/2c74cc4a/attack.vanim_c rename to game/models/thd_hero/soga/2c74cc4a/attack.vanim_c diff --git a/models/thd_hero/soga/2c74cc4a/cast.vanim_c b/game/models/thd_hero/soga/2c74cc4a/cast.vanim_c similarity index 100% rename from models/thd_hero/soga/2c74cc4a/cast.vanim_c rename to game/models/thd_hero/soga/2c74cc4a/cast.vanim_c diff --git a/models/thd_hero/soga/2c74cc4a/cast4.vanim_c b/game/models/thd_hero/soga/2c74cc4a/cast4.vanim_c similarity index 100% rename from models/thd_hero/soga/2c74cc4a/cast4.vanim_c rename to game/models/thd_hero/soga/2c74cc4a/cast4.vanim_c diff --git a/models/thd_hero/soga/2c74cc4a/idle.vanim_c b/game/models/thd_hero/soga/2c74cc4a/idle.vanim_c similarity index 100% rename from models/thd_hero/soga/2c74cc4a/idle.vanim_c rename to game/models/thd_hero/soga/2c74cc4a/idle.vanim_c diff --git a/models/thd_hero/soga/2c74cc4a/run.vanim_c b/game/models/thd_hero/soga/2c74cc4a/run.vanim_c similarity index 100% rename from models/thd_hero/soga/2c74cc4a/run.vanim_c rename to game/models/thd_hero/soga/2c74cc4a/run.vanim_c diff --git a/models/thd_hero/soga/2c74cc4a/soga_animation.vanim_c b/game/models/thd_hero/soga/2c74cc4a/soga_animation.vanim_c similarity index 100% rename from models/thd_hero/soga/2c74cc4a/soga_animation.vanim_c rename to game/models/thd_hero/soga/2c74cc4a/soga_animation.vanim_c diff --git a/models/thd_hero/soga/item/6f9630fe/attack.vanim_c b/game/models/thd_hero/soga/item/6f9630fe/attack.vanim_c similarity index 100% rename from models/thd_hero/soga/item/6f9630fe/attack.vanim_c rename to game/models/thd_hero/soga/item/6f9630fe/attack.vanim_c diff --git a/models/thd_hero/soga/item/6f9630fe/cast.vanim_c b/game/models/thd_hero/soga/item/6f9630fe/cast.vanim_c similarity index 100% rename from models/thd_hero/soga/item/6f9630fe/cast.vanim_c rename to game/models/thd_hero/soga/item/6f9630fe/cast.vanim_c diff --git a/models/thd_hero/soga/item/6f9630fe/idle.vanim_c b/game/models/thd_hero/soga/item/6f9630fe/idle.vanim_c similarity index 100% rename from models/thd_hero/soga/item/6f9630fe/idle.vanim_c rename to game/models/thd_hero/soga/item/6f9630fe/idle.vanim_c diff --git a/models/thd_hero/soga/item/6f9630fe/run.vanim_c b/game/models/thd_hero/soga/item/6f9630fe/run.vanim_c similarity index 100% rename from models/thd_hero/soga/item/6f9630fe/run.vanim_c rename to game/models/thd_hero/soga/item/6f9630fe/run.vanim_c diff --git a/models/thd_hero/soga/item/item_soga.vmdl_c b/game/models/thd_hero/soga/item/item_soga.vmdl_c similarity index 100% rename from models/thd_hero/soga/item/item_soga.vmdl_c rename to game/models/thd_hero/soga/item/item_soga.vmdl_c diff --git a/models/thd_hero/soga/item/item_soga_6f9630fe.vagrp_c b/game/models/thd_hero/soga/item/item_soga_6f9630fe.vagrp_c similarity index 100% rename from models/thd_hero/soga/item/item_soga_6f9630fe.vagrp_c rename to game/models/thd_hero/soga/item/item_soga_6f9630fe.vagrp_c diff --git a/models/thd_hero/soga/item/soga.vmesh_c b/game/models/thd_hero/soga/item/soga.vmesh_c similarity index 100% rename from models/thd_hero/soga/item/soga.vmesh_c rename to game/models/thd_hero/soga/item/soga.vmesh_c diff --git a/models/thd_hero/soga/soga.vmdl_c b/game/models/thd_hero/soga/soga.vmdl_c similarity index 100% rename from models/thd_hero/soga/soga.vmdl_c rename to game/models/thd_hero/soga/soga.vmdl_c diff --git a/models/thd_hero/soga/soga.vmesh_c b/game/models/thd_hero/soga/soga.vmesh_c similarity index 100% rename from models/thd_hero/soga/soga.vmesh_c rename to game/models/thd_hero/soga/soga.vmesh_c diff --git a/models/thd_hero/soga/soga_2c74cc4a.vagrp_c b/game/models/thd_hero/soga/soga_2c74cc4a.vagrp_c similarity index 100% rename from models/thd_hero/soga/soga_2c74cc4a.vagrp_c rename to game/models/thd_hero/soga/soga_2c74cc4a.vagrp_c diff --git a/models/thd_hero/star/90348ef2/attack.vanim_c b/game/models/thd_hero/star/90348ef2/attack.vanim_c similarity index 100% rename from models/thd_hero/star/90348ef2/attack.vanim_c rename to game/models/thd_hero/star/90348ef2/attack.vanim_c diff --git a/models/thd_hero/star/90348ef2/cast.vanim_c b/game/models/thd_hero/star/90348ef2/cast.vanim_c similarity index 100% rename from models/thd_hero/star/90348ef2/cast.vanim_c rename to game/models/thd_hero/star/90348ef2/cast.vanim_c diff --git a/models/thd_hero/star/90348ef2/cast1.vanim_c b/game/models/thd_hero/star/90348ef2/cast1.vanim_c similarity index 100% rename from models/thd_hero/star/90348ef2/cast1.vanim_c rename to game/models/thd_hero/star/90348ef2/cast1.vanim_c diff --git a/models/thd_hero/star/90348ef2/cast2.vanim_c b/game/models/thd_hero/star/90348ef2/cast2.vanim_c similarity index 100% rename from models/thd_hero/star/90348ef2/cast2.vanim_c rename to game/models/thd_hero/star/90348ef2/cast2.vanim_c diff --git a/models/thd_hero/star/90348ef2/idle.vanim_c b/game/models/thd_hero/star/90348ef2/idle.vanim_c similarity index 100% rename from models/thd_hero/star/90348ef2/idle.vanim_c rename to game/models/thd_hero/star/90348ef2/idle.vanim_c diff --git a/models/thd_hero/star/90348ef2/run.vanim_c b/game/models/thd_hero/star/90348ef2/run.vanim_c similarity index 100% rename from models/thd_hero/star/90348ef2/run.vanim_c rename to game/models/thd_hero/star/90348ef2/run.vanim_c diff --git a/models/thd_hero/star/90348ef2/star_animation.vanim_c b/game/models/thd_hero/star/90348ef2/star_animation.vanim_c similarity index 100% rename from models/thd_hero/star/90348ef2/star_animation.vanim_c rename to game/models/thd_hero/star/90348ef2/star_animation.vanim_c diff --git a/models/thd_hero/star/item/d0190302/attack.vanim_c b/game/models/thd_hero/star/item/d0190302/attack.vanim_c similarity index 100% rename from models/thd_hero/star/item/d0190302/attack.vanim_c rename to game/models/thd_hero/star/item/d0190302/attack.vanim_c diff --git a/models/thd_hero/star/item/d0190302/cast1.vanim_c b/game/models/thd_hero/star/item/d0190302/cast1.vanim_c similarity index 100% rename from models/thd_hero/star/item/d0190302/cast1.vanim_c rename to game/models/thd_hero/star/item/d0190302/cast1.vanim_c diff --git a/models/thd_hero/star/item/d0190302/cast2.vanim_c b/game/models/thd_hero/star/item/d0190302/cast2.vanim_c similarity index 100% rename from models/thd_hero/star/item/d0190302/cast2.vanim_c rename to game/models/thd_hero/star/item/d0190302/cast2.vanim_c diff --git a/models/thd_hero/star/item/d0190302/idle.vanim_c b/game/models/thd_hero/star/item/d0190302/idle.vanim_c similarity index 100% rename from models/thd_hero/star/item/d0190302/idle.vanim_c rename to game/models/thd_hero/star/item/d0190302/idle.vanim_c diff --git a/models/thd_hero/star/item/d0190302/run.vanim_c b/game/models/thd_hero/star/item/d0190302/run.vanim_c similarity index 100% rename from models/thd_hero/star/item/d0190302/run.vanim_c rename to game/models/thd_hero/star/item/d0190302/run.vanim_c diff --git a/models/thd_hero/star/item/item_star.vmdl_c b/game/models/thd_hero/star/item/item_star.vmdl_c similarity index 100% rename from models/thd_hero/star/item/item_star.vmdl_c rename to game/models/thd_hero/star/item/item_star.vmdl_c diff --git a/models/thd_hero/star/item/item_star_d0190302.vagrp_c b/game/models/thd_hero/star/item/item_star_d0190302.vagrp_c similarity index 100% rename from models/thd_hero/star/item/item_star_d0190302.vagrp_c rename to game/models/thd_hero/star/item/item_star_d0190302.vagrp_c diff --git a/models/thd_hero/star/item/star.vmesh_c b/game/models/thd_hero/star/item/star.vmesh_c similarity index 100% rename from models/thd_hero/star/item/star.vmesh_c rename to game/models/thd_hero/star/item/star.vmesh_c diff --git a/models/thd_hero/star/star.vmdl_c b/game/models/thd_hero/star/star.vmdl_c similarity index 100% rename from models/thd_hero/star/star.vmdl_c rename to game/models/thd_hero/star/star.vmdl_c diff --git a/models/thd_hero/star/star.vmesh_c b/game/models/thd_hero/star/star.vmesh_c similarity index 100% rename from models/thd_hero/star/star.vmesh_c rename to game/models/thd_hero/star/star.vmesh_c diff --git a/models/thd_hero/star/star_90348ef2.vagrp_c b/game/models/thd_hero/star/star_90348ef2.vagrp_c similarity index 100% rename from models/thd_hero/star/star_90348ef2.vagrp_c rename to game/models/thd_hero/star/star_90348ef2.vagrp_c diff --git a/models/thd_hero/suika/72304f25/1.vanim_c b/game/models/thd_hero/suika/72304f25/1.vanim_c similarity index 100% rename from models/thd_hero/suika/72304f25/1.vanim_c rename to game/models/thd_hero/suika/72304f25/1.vanim_c diff --git a/models/thd_hero/suika/72304f25/attack.vanim_c b/game/models/thd_hero/suika/72304f25/attack.vanim_c similarity index 100% rename from models/thd_hero/suika/72304f25/attack.vanim_c rename to game/models/thd_hero/suika/72304f25/attack.vanim_c diff --git a/models/thd_hero/suika/72304f25/cast.vanim_c b/game/models/thd_hero/suika/72304f25/cast.vanim_c similarity index 100% rename from models/thd_hero/suika/72304f25/cast.vanim_c rename to game/models/thd_hero/suika/72304f25/cast.vanim_c diff --git a/models/thd_hero/suika/72304f25/idle.vanim_c b/game/models/thd_hero/suika/72304f25/idle.vanim_c similarity index 100% rename from models/thd_hero/suika/72304f25/idle.vanim_c rename to game/models/thd_hero/suika/72304f25/idle.vanim_c diff --git a/models/thd_hero/suika/72304f25/run.vanim_c b/game/models/thd_hero/suika/72304f25/run.vanim_c similarity index 100% rename from models/thd_hero/suika/72304f25/run.vanim_c rename to game/models/thd_hero/suika/72304f25/run.vanim_c diff --git a/models/thd_hero/suika/72304f25/suika_animation.vanim_c b/game/models/thd_hero/suika/72304f25/suika_animation.vanim_c similarity index 100% rename from models/thd_hero/suika/72304f25/suika_animation.vanim_c rename to game/models/thd_hero/suika/72304f25/suika_animation.vanim_c diff --git a/models/thd_hero/suika/item/0467a7b1/1.vanim_c b/game/models/thd_hero/suika/item/0467a7b1/1.vanim_c similarity index 100% rename from models/thd_hero/suika/item/0467a7b1/1.vanim_c rename to game/models/thd_hero/suika/item/0467a7b1/1.vanim_c diff --git a/models/thd_hero/suika/item/0467a7b1/attack.vanim_c b/game/models/thd_hero/suika/item/0467a7b1/attack.vanim_c similarity index 100% rename from models/thd_hero/suika/item/0467a7b1/attack.vanim_c rename to game/models/thd_hero/suika/item/0467a7b1/attack.vanim_c diff --git a/models/thd_hero/suika/item/0467a7b1/cast.vanim_c b/game/models/thd_hero/suika/item/0467a7b1/cast.vanim_c similarity index 100% rename from models/thd_hero/suika/item/0467a7b1/cast.vanim_c rename to game/models/thd_hero/suika/item/0467a7b1/cast.vanim_c diff --git a/models/thd_hero/suika/item/0467a7b1/idle.vanim_c b/game/models/thd_hero/suika/item/0467a7b1/idle.vanim_c similarity index 100% rename from models/thd_hero/suika/item/0467a7b1/idle.vanim_c rename to game/models/thd_hero/suika/item/0467a7b1/idle.vanim_c diff --git a/models/thd_hero/suika/item/0467a7b1/run.vanim_c b/game/models/thd_hero/suika/item/0467a7b1/run.vanim_c similarity index 100% rename from models/thd_hero/suika/item/0467a7b1/run.vanim_c rename to game/models/thd_hero/suika/item/0467a7b1/run.vanim_c diff --git a/models/thd_hero/suika/item/item_suika.vmdl_c b/game/models/thd_hero/suika/item/item_suika.vmdl_c similarity index 100% rename from models/thd_hero/suika/item/item_suika.vmdl_c rename to game/models/thd_hero/suika/item/item_suika.vmdl_c diff --git a/models/thd_hero/suika/item/item_suika_0467a7b1.vagrp_c b/game/models/thd_hero/suika/item/item_suika_0467a7b1.vagrp_c similarity index 100% rename from models/thd_hero/suika/item/item_suika_0467a7b1.vagrp_c rename to game/models/thd_hero/suika/item/item_suika_0467a7b1.vagrp_c diff --git a/models/thd_hero/suika/item/suika.vmesh_c b/game/models/thd_hero/suika/item/suika.vmesh_c similarity index 100% rename from models/thd_hero/suika/item/suika.vmesh_c rename to game/models/thd_hero/suika/item/suika.vmesh_c diff --git a/models/thd_hero/suika/suika.vmdl_c b/game/models/thd_hero/suika/suika.vmdl_c similarity index 100% rename from models/thd_hero/suika/suika.vmdl_c rename to game/models/thd_hero/suika/suika.vmdl_c diff --git a/models/thd_hero/suika/suika.vmesh_c b/game/models/thd_hero/suika/suika.vmesh_c similarity index 100% rename from models/thd_hero/suika/suika.vmesh_c rename to game/models/thd_hero/suika/suika.vmesh_c diff --git a/models/thd_hero/suika/suika_72304f25.vagrp_c b/game/models/thd_hero/suika/suika_72304f25.vagrp_c similarity index 100% rename from models/thd_hero/suika/suika_72304f25.vagrp_c rename to game/models/thd_hero/suika/suika_72304f25.vagrp_c diff --git a/models/thd_hero/sunny/63e4853b/attack.vanim_c b/game/models/thd_hero/sunny/63e4853b/attack.vanim_c similarity index 100% rename from models/thd_hero/sunny/63e4853b/attack.vanim_c rename to game/models/thd_hero/sunny/63e4853b/attack.vanim_c diff --git a/models/thd_hero/sunny/63e4853b/cast.vanim_c b/game/models/thd_hero/sunny/63e4853b/cast.vanim_c similarity index 100% rename from models/thd_hero/sunny/63e4853b/cast.vanim_c rename to game/models/thd_hero/sunny/63e4853b/cast.vanim_c diff --git a/models/thd_hero/sunny/63e4853b/idle.vanim_c b/game/models/thd_hero/sunny/63e4853b/idle.vanim_c similarity index 100% rename from models/thd_hero/sunny/63e4853b/idle.vanim_c rename to game/models/thd_hero/sunny/63e4853b/idle.vanim_c diff --git a/models/thd_hero/sunny/63e4853b/run.vanim_c b/game/models/thd_hero/sunny/63e4853b/run.vanim_c similarity index 100% rename from models/thd_hero/sunny/63e4853b/run.vanim_c rename to game/models/thd_hero/sunny/63e4853b/run.vanim_c diff --git a/models/thd_hero/sunny/63e4853b/sunny_animation.vanim_c b/game/models/thd_hero/sunny/63e4853b/sunny_animation.vanim_c similarity index 100% rename from models/thd_hero/sunny/63e4853b/sunny_animation.vanim_c rename to game/models/thd_hero/sunny/63e4853b/sunny_animation.vanim_c diff --git a/models/thd_hero/sunny/item/f1d06bc1/attack.vanim_c b/game/models/thd_hero/sunny/item/f1d06bc1/attack.vanim_c similarity index 100% rename from models/thd_hero/sunny/item/f1d06bc1/attack.vanim_c rename to game/models/thd_hero/sunny/item/f1d06bc1/attack.vanim_c diff --git a/models/thd_hero/sunny/item/f1d06bc1/cast.vanim_c b/game/models/thd_hero/sunny/item/f1d06bc1/cast.vanim_c similarity index 100% rename from models/thd_hero/sunny/item/f1d06bc1/cast.vanim_c rename to game/models/thd_hero/sunny/item/f1d06bc1/cast.vanim_c diff --git a/models/thd_hero/sunny/item/f1d06bc1/idle.vanim_c b/game/models/thd_hero/sunny/item/f1d06bc1/idle.vanim_c similarity index 100% rename from models/thd_hero/sunny/item/f1d06bc1/idle.vanim_c rename to game/models/thd_hero/sunny/item/f1d06bc1/idle.vanim_c diff --git a/models/thd_hero/sunny/item/f1d06bc1/run.vanim_c b/game/models/thd_hero/sunny/item/f1d06bc1/run.vanim_c similarity index 100% rename from models/thd_hero/sunny/item/f1d06bc1/run.vanim_c rename to game/models/thd_hero/sunny/item/f1d06bc1/run.vanim_c diff --git a/models/thd_hero/sunny/item/item_sunny.vmdl_c b/game/models/thd_hero/sunny/item/item_sunny.vmdl_c similarity index 100% rename from models/thd_hero/sunny/item/item_sunny.vmdl_c rename to game/models/thd_hero/sunny/item/item_sunny.vmdl_c diff --git a/models/thd_hero/sunny/item/item_sunny_f1d06bc1.vagrp_c b/game/models/thd_hero/sunny/item/item_sunny_f1d06bc1.vagrp_c similarity index 100% rename from models/thd_hero/sunny/item/item_sunny_f1d06bc1.vagrp_c rename to game/models/thd_hero/sunny/item/item_sunny_f1d06bc1.vagrp_c diff --git a/models/thd_hero/sunny/item/sunny.vmesh_c b/game/models/thd_hero/sunny/item/sunny.vmesh_c similarity index 100% rename from models/thd_hero/sunny/item/sunny.vmesh_c rename to game/models/thd_hero/sunny/item/sunny.vmesh_c diff --git a/models/thd_hero/sunny/sunny.vmdl_c b/game/models/thd_hero/sunny/sunny.vmdl_c similarity index 100% rename from models/thd_hero/sunny/sunny.vmdl_c rename to game/models/thd_hero/sunny/sunny.vmdl_c diff --git a/models/thd_hero/sunny/sunny.vmesh_c b/game/models/thd_hero/sunny/sunny.vmesh_c similarity index 100% rename from models/thd_hero/sunny/sunny.vmesh_c rename to game/models/thd_hero/sunny/sunny.vmesh_c diff --git a/models/thd_hero/sunny/sunny_63e4853b.vagrp_c b/game/models/thd_hero/sunny/sunny_63e4853b.vagrp_c similarity index 100% rename from models/thd_hero/sunny/sunny_63e4853b.vagrp_c rename to game/models/thd_hero/sunny/sunny_63e4853b.vagrp_c diff --git a/models/thd_hero/suwako/0f13e432/attack.vanim_c b/game/models/thd_hero/suwako/0f13e432/attack.vanim_c similarity index 100% rename from models/thd_hero/suwako/0f13e432/attack.vanim_c rename to game/models/thd_hero/suwako/0f13e432/attack.vanim_c diff --git a/models/thd_hero/suwako/0f13e432/cast.vanim_c b/game/models/thd_hero/suwako/0f13e432/cast.vanim_c similarity index 100% rename from models/thd_hero/suwako/0f13e432/cast.vanim_c rename to game/models/thd_hero/suwako/0f13e432/cast.vanim_c diff --git a/models/thd_hero/suwako/0f13e432/idle.vanim_c b/game/models/thd_hero/suwako/0f13e432/idle.vanim_c similarity index 100% rename from models/thd_hero/suwako/0f13e432/idle.vanim_c rename to game/models/thd_hero/suwako/0f13e432/idle.vanim_c diff --git a/models/thd_hero/suwako/0f13e432/run.vanim_c b/game/models/thd_hero/suwako/0f13e432/run.vanim_c similarity index 100% rename from models/thd_hero/suwako/0f13e432/run.vanim_c rename to game/models/thd_hero/suwako/0f13e432/run.vanim_c diff --git a/models/thd_hero/suwako/0f13e432/suwako_animation.vanim_c b/game/models/thd_hero/suwako/0f13e432/suwako_animation.vanim_c similarity index 100% rename from models/thd_hero/suwako/0f13e432/suwako_animation.vanim_c rename to game/models/thd_hero/suwako/0f13e432/suwako_animation.vanim_c diff --git a/models/thd_hero/suwako/cloth01/a8514d45/attack.vanim_c b/game/models/thd_hero/suwako/cloth01/a8514d45/attack.vanim_c similarity index 100% rename from models/thd_hero/suwako/cloth01/a8514d45/attack.vanim_c rename to game/models/thd_hero/suwako/cloth01/a8514d45/attack.vanim_c diff --git a/models/thd_hero/suwako/cloth01/a8514d45/cast.vanim_c b/game/models/thd_hero/suwako/cloth01/a8514d45/cast.vanim_c similarity index 100% rename from models/thd_hero/suwako/cloth01/a8514d45/cast.vanim_c rename to game/models/thd_hero/suwako/cloth01/a8514d45/cast.vanim_c diff --git a/models/thd_hero/suwako/cloth01/a8514d45/idle.vanim_c b/game/models/thd_hero/suwako/cloth01/a8514d45/idle.vanim_c similarity index 100% rename from models/thd_hero/suwako/cloth01/a8514d45/idle.vanim_c rename to game/models/thd_hero/suwako/cloth01/a8514d45/idle.vanim_c diff --git a/models/thd_hero/suwako/cloth01/a8514d45/run.vanim_c b/game/models/thd_hero/suwako/cloth01/a8514d45/run.vanim_c similarity index 100% rename from models/thd_hero/suwako/cloth01/a8514d45/run.vanim_c rename to game/models/thd_hero/suwako/cloth01/a8514d45/run.vanim_c diff --git a/models/thd_hero/suwako/cloth01/a8514d45/suwako_cloth01_animation.vanim_c b/game/models/thd_hero/suwako/cloth01/a8514d45/suwako_cloth01_animation.vanim_c similarity index 100% rename from models/thd_hero/suwako/cloth01/a8514d45/suwako_cloth01_animation.vanim_c rename to game/models/thd_hero/suwako/cloth01/a8514d45/suwako_cloth01_animation.vanim_c diff --git a/models/thd_hero/suwako/cloth01/suwako_cloth01.vmdl_c b/game/models/thd_hero/suwako/cloth01/suwako_cloth01.vmdl_c similarity index 100% rename from models/thd_hero/suwako/cloth01/suwako_cloth01.vmdl_c rename to game/models/thd_hero/suwako/cloth01/suwako_cloth01.vmdl_c diff --git a/models/thd_hero/suwako/cloth01/suwako_cloth01.vmesh_c b/game/models/thd_hero/suwako/cloth01/suwako_cloth01.vmesh_c similarity index 100% rename from models/thd_hero/suwako/cloth01/suwako_cloth01.vmesh_c rename to game/models/thd_hero/suwako/cloth01/suwako_cloth01.vmesh_c diff --git a/models/thd_hero/suwako/cloth01/suwako_cloth01_a8514d45.vagrp_c b/game/models/thd_hero/suwako/cloth01/suwako_cloth01_a8514d45.vagrp_c similarity index 100% rename from models/thd_hero/suwako/cloth01/suwako_cloth01_a8514d45.vagrp_c rename to game/models/thd_hero/suwako/cloth01/suwako_cloth01_a8514d45.vagrp_c diff --git a/models/thd_hero/suwako/item/c9449a02/attack.vanim_c b/game/models/thd_hero/suwako/item/c9449a02/attack.vanim_c similarity index 100% rename from models/thd_hero/suwako/item/c9449a02/attack.vanim_c rename to game/models/thd_hero/suwako/item/c9449a02/attack.vanim_c diff --git a/models/thd_hero/suwako/item/c9449a02/cast.vanim_c b/game/models/thd_hero/suwako/item/c9449a02/cast.vanim_c similarity index 100% rename from models/thd_hero/suwako/item/c9449a02/cast.vanim_c rename to game/models/thd_hero/suwako/item/c9449a02/cast.vanim_c diff --git a/models/thd_hero/suwako/item/c9449a02/idle.vanim_c b/game/models/thd_hero/suwako/item/c9449a02/idle.vanim_c similarity index 100% rename from models/thd_hero/suwako/item/c9449a02/idle.vanim_c rename to game/models/thd_hero/suwako/item/c9449a02/idle.vanim_c diff --git a/models/thd_hero/suwako/item/c9449a02/run.vanim_c b/game/models/thd_hero/suwako/item/c9449a02/run.vanim_c similarity index 100% rename from models/thd_hero/suwako/item/c9449a02/run.vanim_c rename to game/models/thd_hero/suwako/item/c9449a02/run.vanim_c diff --git a/models/thd_hero/suwako/item/item_suwako.vmdl_c b/game/models/thd_hero/suwako/item/item_suwako.vmdl_c similarity index 100% rename from models/thd_hero/suwako/item/item_suwako.vmdl_c rename to game/models/thd_hero/suwako/item/item_suwako.vmdl_c diff --git a/models/thd_hero/suwako/item/item_suwako_c9449a02.vagrp_c b/game/models/thd_hero/suwako/item/item_suwako_c9449a02.vagrp_c similarity index 100% rename from models/thd_hero/suwako/item/item_suwako_c9449a02.vagrp_c rename to game/models/thd_hero/suwako/item/item_suwako_c9449a02.vagrp_c diff --git a/models/thd_hero/suwako/item/suwako.vmesh_c b/game/models/thd_hero/suwako/item/suwako.vmesh_c similarity index 100% rename from models/thd_hero/suwako/item/suwako.vmesh_c rename to game/models/thd_hero/suwako/item/suwako.vmesh_c diff --git a/models/thd_hero/suwako/suwako.vmdl_c b/game/models/thd_hero/suwako/suwako.vmdl_c similarity index 100% rename from models/thd_hero/suwako/suwako.vmdl_c rename to game/models/thd_hero/suwako/suwako.vmdl_c diff --git a/models/thd_hero/suwako/suwako.vmesh_c b/game/models/thd_hero/suwako/suwako.vmesh_c similarity index 100% rename from models/thd_hero/suwako/suwako.vmesh_c rename to game/models/thd_hero/suwako/suwako.vmesh_c diff --git a/models/thd_hero/suwako/suwako_0f13e432.vagrp_c b/game/models/thd_hero/suwako/suwako_0f13e432.vagrp_c similarity index 100% rename from models/thd_hero/suwako/suwako_0f13e432.vagrp_c rename to game/models/thd_hero/suwako/suwako_0f13e432.vagrp_c diff --git a/models/thd_hero/toramarushou/18724460/attack1.vanim_c b/game/models/thd_hero/toramarushou/18724460/attack1.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/18724460/attack1.vanim_c rename to game/models/thd_hero/toramarushou/18724460/attack1.vanim_c diff --git a/models/thd_hero/toramarushou/18724460/attack2.vanim_c b/game/models/thd_hero/toramarushou/18724460/attack2.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/18724460/attack2.vanim_c rename to game/models/thd_hero/toramarushou/18724460/attack2.vanim_c diff --git a/models/thd_hero/toramarushou/18724460/cast1.vanim_c b/game/models/thd_hero/toramarushou/18724460/cast1.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/18724460/cast1.vanim_c rename to game/models/thd_hero/toramarushou/18724460/cast1.vanim_c diff --git a/models/thd_hero/toramarushou/18724460/cast4.vanim_c b/game/models/thd_hero/toramarushou/18724460/cast4.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/18724460/cast4.vanim_c rename to game/models/thd_hero/toramarushou/18724460/cast4.vanim_c diff --git a/models/thd_hero/toramarushou/18724460/idle.vanim_c b/game/models/thd_hero/toramarushou/18724460/idle.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/18724460/idle.vanim_c rename to game/models/thd_hero/toramarushou/18724460/idle.vanim_c diff --git a/models/thd_hero/toramarushou/18724460/run.vanim_c b/game/models/thd_hero/toramarushou/18724460/run.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/18724460/run.vanim_c rename to game/models/thd_hero/toramarushou/18724460/run.vanim_c diff --git a/models/thd_hero/toramarushou/item/42cccd21/attack1.vanim_c b/game/models/thd_hero/toramarushou/item/42cccd21/attack1.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/item/42cccd21/attack1.vanim_c rename to game/models/thd_hero/toramarushou/item/42cccd21/attack1.vanim_c diff --git a/models/thd_hero/toramarushou/item/42cccd21/attack2.vanim_c b/game/models/thd_hero/toramarushou/item/42cccd21/attack2.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/item/42cccd21/attack2.vanim_c rename to game/models/thd_hero/toramarushou/item/42cccd21/attack2.vanim_c diff --git a/models/thd_hero/toramarushou/item/42cccd21/cast1.vanim_c b/game/models/thd_hero/toramarushou/item/42cccd21/cast1.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/item/42cccd21/cast1.vanim_c rename to game/models/thd_hero/toramarushou/item/42cccd21/cast1.vanim_c diff --git a/models/thd_hero/toramarushou/item/42cccd21/cast4.vanim_c b/game/models/thd_hero/toramarushou/item/42cccd21/cast4.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/item/42cccd21/cast4.vanim_c rename to game/models/thd_hero/toramarushou/item/42cccd21/cast4.vanim_c diff --git a/models/thd_hero/toramarushou/item/42cccd21/idle.vanim_c b/game/models/thd_hero/toramarushou/item/42cccd21/idle.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/item/42cccd21/idle.vanim_c rename to game/models/thd_hero/toramarushou/item/42cccd21/idle.vanim_c diff --git a/models/thd_hero/toramarushou/item/42cccd21/run.vanim_c b/game/models/thd_hero/toramarushou/item/42cccd21/run.vanim_c similarity index 100% rename from models/thd_hero/toramarushou/item/42cccd21/run.vanim_c rename to game/models/thd_hero/toramarushou/item/42cccd21/run.vanim_c diff --git a/models/thd_hero/toramarushou/item/item_toramarushou.vmdl_c b/game/models/thd_hero/toramarushou/item/item_toramarushou.vmdl_c similarity index 100% rename from models/thd_hero/toramarushou/item/item_toramarushou.vmdl_c rename to game/models/thd_hero/toramarushou/item/item_toramarushou.vmdl_c diff --git a/models/thd_hero/toramarushou/item/item_toramarushou_42cccd21.vagrp_c b/game/models/thd_hero/toramarushou/item/item_toramarushou_42cccd21.vagrp_c similarity index 100% rename from models/thd_hero/toramarushou/item/item_toramarushou_42cccd21.vagrp_c rename to game/models/thd_hero/toramarushou/item/item_toramarushou_42cccd21.vagrp_c diff --git a/models/thd_hero/toramarushou/item/toramarushou.vmesh_c b/game/models/thd_hero/toramarushou/item/toramarushou.vmesh_c similarity index 100% rename from models/thd_hero/toramarushou/item/toramarushou.vmesh_c rename to game/models/thd_hero/toramarushou/item/toramarushou.vmesh_c diff --git a/models/thd_hero/toramarushou/toramarushou.vmdl_c b/game/models/thd_hero/toramarushou/toramarushou.vmdl_c similarity index 100% rename from models/thd_hero/toramarushou/toramarushou.vmdl_c rename to game/models/thd_hero/toramarushou/toramarushou.vmdl_c diff --git a/models/thd_hero/toramarushou/toramarushou.vmesh_c b/game/models/thd_hero/toramarushou/toramarushou.vmesh_c similarity index 100% rename from models/thd_hero/toramarushou/toramarushou.vmesh_c rename to game/models/thd_hero/toramarushou/toramarushou.vmesh_c diff --git a/models/thd_hero/toramarushou/toramarushou_18724460.vagrp_c b/game/models/thd_hero/toramarushou/toramarushou_18724460.vagrp_c similarity index 100% rename from models/thd_hero/toramarushou/toramarushou_18724460.vagrp_c rename to game/models/thd_hero/toramarushou/toramarushou_18724460.vagrp_c diff --git a/models/thd_hero/utsuho/10bc5e91/attack.vanim_c b/game/models/thd_hero/utsuho/10bc5e91/attack.vanim_c similarity index 100% rename from models/thd_hero/utsuho/10bc5e91/attack.vanim_c rename to game/models/thd_hero/utsuho/10bc5e91/attack.vanim_c diff --git a/models/thd_hero/utsuho/10bc5e91/cast1.vanim_c b/game/models/thd_hero/utsuho/10bc5e91/cast1.vanim_c similarity index 100% rename from models/thd_hero/utsuho/10bc5e91/cast1.vanim_c rename to game/models/thd_hero/utsuho/10bc5e91/cast1.vanim_c diff --git a/models/thd_hero/utsuho/10bc5e91/cast3.vanim_c b/game/models/thd_hero/utsuho/10bc5e91/cast3.vanim_c similarity index 100% rename from models/thd_hero/utsuho/10bc5e91/cast3.vanim_c rename to game/models/thd_hero/utsuho/10bc5e91/cast3.vanim_c diff --git a/models/thd_hero/utsuho/10bc5e91/cast4.vanim_c b/game/models/thd_hero/utsuho/10bc5e91/cast4.vanim_c similarity index 100% rename from models/thd_hero/utsuho/10bc5e91/cast4.vanim_c rename to game/models/thd_hero/utsuho/10bc5e91/cast4.vanim_c diff --git a/models/thd_hero/utsuho/10bc5e91/idle.vanim_c b/game/models/thd_hero/utsuho/10bc5e91/idle.vanim_c similarity index 100% rename from models/thd_hero/utsuho/10bc5e91/idle.vanim_c rename to game/models/thd_hero/utsuho/10bc5e91/idle.vanim_c diff --git a/models/thd_hero/utsuho/10bc5e91/por.vanim_c b/game/models/thd_hero/utsuho/10bc5e91/por.vanim_c similarity index 100% rename from models/thd_hero/utsuho/10bc5e91/por.vanim_c rename to game/models/thd_hero/utsuho/10bc5e91/por.vanim_c diff --git a/models/thd_hero/utsuho/10bc5e91/run.vanim_c b/game/models/thd_hero/utsuho/10bc5e91/run.vanim_c similarity index 100% rename from models/thd_hero/utsuho/10bc5e91/run.vanim_c rename to game/models/thd_hero/utsuho/10bc5e91/run.vanim_c diff --git a/models/thd_hero/utsuho/item/423c2a71/idle.vanim_c b/game/models/thd_hero/utsuho/item/423c2a71/idle.vanim_c similarity index 100% rename from models/thd_hero/utsuho/item/423c2a71/idle.vanim_c rename to game/models/thd_hero/utsuho/item/423c2a71/idle.vanim_c diff --git a/models/thd_hero/utsuho/item/423c2a71/por.vanim_c b/game/models/thd_hero/utsuho/item/423c2a71/por.vanim_c similarity index 100% rename from models/thd_hero/utsuho/item/423c2a71/por.vanim_c rename to game/models/thd_hero/utsuho/item/423c2a71/por.vanim_c diff --git a/models/thd_hero/utsuho/item/item_utsuho.vmdl_c b/game/models/thd_hero/utsuho/item/item_utsuho.vmdl_c similarity index 100% rename from models/thd_hero/utsuho/item/item_utsuho.vmdl_c rename to game/models/thd_hero/utsuho/item/item_utsuho.vmdl_c diff --git a/models/thd_hero/utsuho/item/item_utsuho_423c2a71.vagrp_c b/game/models/thd_hero/utsuho/item/item_utsuho_423c2a71.vagrp_c similarity index 100% rename from models/thd_hero/utsuho/item/item_utsuho_423c2a71.vagrp_c rename to game/models/thd_hero/utsuho/item/item_utsuho_423c2a71.vagrp_c diff --git a/models/thd_hero/utsuho/item/utsuho.vmesh_c b/game/models/thd_hero/utsuho/item/utsuho.vmesh_c similarity index 100% rename from models/thd_hero/utsuho/item/utsuho.vmesh_c rename to game/models/thd_hero/utsuho/item/utsuho.vmesh_c diff --git a/models/thd_hero/utsuho/utsuho.vmdl_c b/game/models/thd_hero/utsuho/utsuho.vmdl_c similarity index 100% rename from models/thd_hero/utsuho/utsuho.vmdl_c rename to game/models/thd_hero/utsuho/utsuho.vmdl_c diff --git a/models/thd_hero/utsuho/utsuho.vmesh_c b/game/models/thd_hero/utsuho/utsuho.vmesh_c similarity index 100% rename from models/thd_hero/utsuho/utsuho.vmesh_c rename to game/models/thd_hero/utsuho/utsuho.vmesh_c diff --git a/models/thd_hero/utsuho/utsuho_10bc5e91.vagrp_c b/game/models/thd_hero/utsuho/utsuho_10bc5e91.vagrp_c similarity index 100% rename from models/thd_hero/utsuho/utsuho_10bc5e91.vagrp_c rename to game/models/thd_hero/utsuho/utsuho_10bc5e91.vagrp_c diff --git a/models/thd_hero/wakasagihime/e08c99de/attack.vanim_c b/game/models/thd_hero/wakasagihime/e08c99de/attack.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/e08c99de/attack.vanim_c rename to game/models/thd_hero/wakasagihime/e08c99de/attack.vanim_c diff --git a/models/thd_hero/wakasagihime/e08c99de/cast.vanim_c b/game/models/thd_hero/wakasagihime/e08c99de/cast.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/e08c99de/cast.vanim_c rename to game/models/thd_hero/wakasagihime/e08c99de/cast.vanim_c diff --git a/models/thd_hero/wakasagihime/e08c99de/idle.vanim_c b/game/models/thd_hero/wakasagihime/e08c99de/idle.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/e08c99de/idle.vanim_c rename to game/models/thd_hero/wakasagihime/e08c99de/idle.vanim_c diff --git a/models/thd_hero/wakasagihime/e08c99de/run.vanim_c b/game/models/thd_hero/wakasagihime/e08c99de/run.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/e08c99de/run.vanim_c rename to game/models/thd_hero/wakasagihime/e08c99de/run.vanim_c diff --git a/models/thd_hero/wakasagihime/e08c99de/wakasagihime_animation.vanim_c b/game/models/thd_hero/wakasagihime/e08c99de/wakasagihime_animation.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/e08c99de/wakasagihime_animation.vanim_c rename to game/models/thd_hero/wakasagihime/e08c99de/wakasagihime_animation.vanim_c diff --git a/models/thd_hero/wakasagihime/item/2a889b2d/attack.vanim_c b/game/models/thd_hero/wakasagihime/item/2a889b2d/attack.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/item/2a889b2d/attack.vanim_c rename to game/models/thd_hero/wakasagihime/item/2a889b2d/attack.vanim_c diff --git a/models/thd_hero/wakasagihime/item/2a889b2d/cast.vanim_c b/game/models/thd_hero/wakasagihime/item/2a889b2d/cast.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/item/2a889b2d/cast.vanim_c rename to game/models/thd_hero/wakasagihime/item/2a889b2d/cast.vanim_c diff --git a/models/thd_hero/wakasagihime/item/2a889b2d/idle.vanim_c b/game/models/thd_hero/wakasagihime/item/2a889b2d/idle.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/item/2a889b2d/idle.vanim_c rename to game/models/thd_hero/wakasagihime/item/2a889b2d/idle.vanim_c diff --git a/models/thd_hero/wakasagihime/item/2a889b2d/run.vanim_c b/game/models/thd_hero/wakasagihime/item/2a889b2d/run.vanim_c similarity index 100% rename from models/thd_hero/wakasagihime/item/2a889b2d/run.vanim_c rename to game/models/thd_hero/wakasagihime/item/2a889b2d/run.vanim_c diff --git a/models/thd_hero/wakasagihime/item/item_wakasagihime.vmdl_c b/game/models/thd_hero/wakasagihime/item/item_wakasagihime.vmdl_c similarity index 100% rename from models/thd_hero/wakasagihime/item/item_wakasagihime.vmdl_c rename to game/models/thd_hero/wakasagihime/item/item_wakasagihime.vmdl_c diff --git a/models/thd_hero/wakasagihime/item/item_wakasagihime_2a889b2d.vagrp_c b/game/models/thd_hero/wakasagihime/item/item_wakasagihime_2a889b2d.vagrp_c similarity index 100% rename from models/thd_hero/wakasagihime/item/item_wakasagihime_2a889b2d.vagrp_c rename to game/models/thd_hero/wakasagihime/item/item_wakasagihime_2a889b2d.vagrp_c diff --git a/models/thd_hero/wakasagihime/item/wakasagihime.vmesh_c b/game/models/thd_hero/wakasagihime/item/wakasagihime.vmesh_c similarity index 100% rename from models/thd_hero/wakasagihime/item/wakasagihime.vmesh_c rename to game/models/thd_hero/wakasagihime/item/wakasagihime.vmesh_c diff --git a/models/thd_hero/wakasagihime/wakasagihime.vmdl_c b/game/models/thd_hero/wakasagihime/wakasagihime.vmdl_c similarity index 100% rename from models/thd_hero/wakasagihime/wakasagihime.vmdl_c rename to game/models/thd_hero/wakasagihime/wakasagihime.vmdl_c diff --git a/models/thd_hero/wakasagihime/wakasagihime.vmesh_c b/game/models/thd_hero/wakasagihime/wakasagihime.vmesh_c similarity index 100% rename from models/thd_hero/wakasagihime/wakasagihime.vmesh_c rename to game/models/thd_hero/wakasagihime/wakasagihime.vmesh_c diff --git a/models/thd_hero/wakasagihime/wakasagihime_e08c99de.vagrp_c b/game/models/thd_hero/wakasagihime/wakasagihime_e08c99de.vagrp_c similarity index 100% rename from models/thd_hero/wakasagihime/wakasagihime_e08c99de.vagrp_c rename to game/models/thd_hero/wakasagihime/wakasagihime_e08c99de.vagrp_c diff --git a/models/thd_hero/wiggle/d704dc4f/attack.vanim_c b/game/models/thd_hero/wiggle/d704dc4f/attack.vanim_c similarity index 100% rename from models/thd_hero/wiggle/d704dc4f/attack.vanim_c rename to game/models/thd_hero/wiggle/d704dc4f/attack.vanim_c diff --git a/models/thd_hero/wiggle/d704dc4f/idle.vanim_c b/game/models/thd_hero/wiggle/d704dc4f/idle.vanim_c similarity index 100% rename from models/thd_hero/wiggle/d704dc4f/idle.vanim_c rename to game/models/thd_hero/wiggle/d704dc4f/idle.vanim_c diff --git a/models/thd_hero/wiggle/d704dc4f/run.vanim_c b/game/models/thd_hero/wiggle/d704dc4f/run.vanim_c similarity index 100% rename from models/thd_hero/wiggle/d704dc4f/run.vanim_c rename to game/models/thd_hero/wiggle/d704dc4f/run.vanim_c diff --git a/models/thd_hero/wiggle/d704dc4f/wriggle_animation.vanim_c b/game/models/thd_hero/wiggle/d704dc4f/wriggle_animation.vanim_c similarity index 100% rename from models/thd_hero/wiggle/d704dc4f/wriggle_animation.vanim_c rename to game/models/thd_hero/wiggle/d704dc4f/wriggle_animation.vanim_c diff --git a/models/thd_hero/wiggle/item/32810c6f/attack.vanim_c b/game/models/thd_hero/wiggle/item/32810c6f/attack.vanim_c similarity index 100% rename from models/thd_hero/wiggle/item/32810c6f/attack.vanim_c rename to game/models/thd_hero/wiggle/item/32810c6f/attack.vanim_c diff --git a/models/thd_hero/wiggle/item/32810c6f/idle.vanim_c b/game/models/thd_hero/wiggle/item/32810c6f/idle.vanim_c similarity index 100% rename from models/thd_hero/wiggle/item/32810c6f/idle.vanim_c rename to game/models/thd_hero/wiggle/item/32810c6f/idle.vanim_c diff --git a/models/thd_hero/wiggle/item/32810c6f/run.vanim_c b/game/models/thd_hero/wiggle/item/32810c6f/run.vanim_c similarity index 100% rename from models/thd_hero/wiggle/item/32810c6f/run.vanim_c rename to game/models/thd_hero/wiggle/item/32810c6f/run.vanim_c diff --git a/models/thd_hero/wiggle/item/item_wiggle.vmdl_c b/game/models/thd_hero/wiggle/item/item_wiggle.vmdl_c similarity index 100% rename from models/thd_hero/wiggle/item/item_wiggle.vmdl_c rename to game/models/thd_hero/wiggle/item/item_wiggle.vmdl_c diff --git a/models/thd_hero/wiggle/item/item_wiggle_32810c6f.vagrp_c b/game/models/thd_hero/wiggle/item/item_wiggle_32810c6f.vagrp_c similarity index 100% rename from models/thd_hero/wiggle/item/item_wiggle_32810c6f.vagrp_c rename to game/models/thd_hero/wiggle/item/item_wiggle_32810c6f.vagrp_c diff --git a/models/thd_hero/wiggle/item/wriggle.vmesh_c b/game/models/thd_hero/wiggle/item/wriggle.vmesh_c similarity index 100% rename from models/thd_hero/wiggle/item/wriggle.vmesh_c rename to game/models/thd_hero/wiggle/item/wriggle.vmesh_c diff --git a/models/thd_hero/wiggle/wriggle.vmdl_c b/game/models/thd_hero/wiggle/wriggle.vmdl_c similarity index 100% rename from models/thd_hero/wiggle/wriggle.vmdl_c rename to game/models/thd_hero/wiggle/wriggle.vmdl_c diff --git a/models/thd_hero/wiggle/wriggle.vmesh_c b/game/models/thd_hero/wiggle/wriggle.vmesh_c similarity index 100% rename from models/thd_hero/wiggle/wriggle.vmesh_c rename to game/models/thd_hero/wiggle/wriggle.vmesh_c diff --git a/models/thd_hero/wiggle/wriggle_d704dc4f.vagrp_c b/game/models/thd_hero/wiggle/wriggle_d704dc4f.vagrp_c similarity index 100% rename from models/thd_hero/wiggle/wriggle_d704dc4f.vagrp_c rename to game/models/thd_hero/wiggle/wriggle_d704dc4f.vagrp_c diff --git a/models/thd_hero/yamame/58bda2ce/attack.vanim_c b/game/models/thd_hero/yamame/58bda2ce/attack.vanim_c similarity index 100% rename from models/thd_hero/yamame/58bda2ce/attack.vanim_c rename to game/models/thd_hero/yamame/58bda2ce/attack.vanim_c diff --git a/models/thd_hero/yamame/58bda2ce/attack2.vanim_c b/game/models/thd_hero/yamame/58bda2ce/attack2.vanim_c similarity index 100% rename from models/thd_hero/yamame/58bda2ce/attack2.vanim_c rename to game/models/thd_hero/yamame/58bda2ce/attack2.vanim_c diff --git a/models/thd_hero/yamame/58bda2ce/cast.vanim_c b/game/models/thd_hero/yamame/58bda2ce/cast.vanim_c similarity index 100% rename from models/thd_hero/yamame/58bda2ce/cast.vanim_c rename to game/models/thd_hero/yamame/58bda2ce/cast.vanim_c diff --git a/models/thd_hero/yamame/58bda2ce/idle.vanim_c b/game/models/thd_hero/yamame/58bda2ce/idle.vanim_c similarity index 100% rename from models/thd_hero/yamame/58bda2ce/idle.vanim_c rename to game/models/thd_hero/yamame/58bda2ce/idle.vanim_c diff --git a/models/thd_hero/yamame/58bda2ce/run.vanim_c b/game/models/thd_hero/yamame/58bda2ce/run.vanim_c similarity index 100% rename from models/thd_hero/yamame/58bda2ce/run.vanim_c rename to game/models/thd_hero/yamame/58bda2ce/run.vanim_c diff --git a/models/thd_hero/yamame/58bda2ce/yamame_animation.vanim_c b/game/models/thd_hero/yamame/58bda2ce/yamame_animation.vanim_c similarity index 100% rename from models/thd_hero/yamame/58bda2ce/yamame_animation.vanim_c rename to game/models/thd_hero/yamame/58bda2ce/yamame_animation.vanim_c diff --git a/models/thd_hero/yamame/item/d658577f/attack.vanim_c b/game/models/thd_hero/yamame/item/d658577f/attack.vanim_c similarity index 100% rename from models/thd_hero/yamame/item/d658577f/attack.vanim_c rename to game/models/thd_hero/yamame/item/d658577f/attack.vanim_c diff --git a/models/thd_hero/yamame/item/d658577f/attack2.vanim_c b/game/models/thd_hero/yamame/item/d658577f/attack2.vanim_c similarity index 100% rename from models/thd_hero/yamame/item/d658577f/attack2.vanim_c rename to game/models/thd_hero/yamame/item/d658577f/attack2.vanim_c diff --git a/models/thd_hero/yamame/item/d658577f/cast.vanim_c b/game/models/thd_hero/yamame/item/d658577f/cast.vanim_c similarity index 100% rename from models/thd_hero/yamame/item/d658577f/cast.vanim_c rename to game/models/thd_hero/yamame/item/d658577f/cast.vanim_c diff --git a/models/thd_hero/yamame/item/d658577f/idle.vanim_c b/game/models/thd_hero/yamame/item/d658577f/idle.vanim_c similarity index 100% rename from models/thd_hero/yamame/item/d658577f/idle.vanim_c rename to game/models/thd_hero/yamame/item/d658577f/idle.vanim_c diff --git a/models/thd_hero/yamame/item/d658577f/run.vanim_c b/game/models/thd_hero/yamame/item/d658577f/run.vanim_c similarity index 100% rename from models/thd_hero/yamame/item/d658577f/run.vanim_c rename to game/models/thd_hero/yamame/item/d658577f/run.vanim_c diff --git a/models/thd_hero/yamame/item/item_yamame.vmdl_c b/game/models/thd_hero/yamame/item/item_yamame.vmdl_c similarity index 100% rename from models/thd_hero/yamame/item/item_yamame.vmdl_c rename to game/models/thd_hero/yamame/item/item_yamame.vmdl_c diff --git a/models/thd_hero/yamame/item/item_yamame_d658577f.vagrp_c b/game/models/thd_hero/yamame/item/item_yamame_d658577f.vagrp_c similarity index 100% rename from models/thd_hero/yamame/item/item_yamame_d658577f.vagrp_c rename to game/models/thd_hero/yamame/item/item_yamame_d658577f.vagrp_c diff --git a/models/thd_hero/yamame/item/yamame.vmesh_c b/game/models/thd_hero/yamame/item/yamame.vmesh_c similarity index 100% rename from models/thd_hero/yamame/item/yamame.vmesh_c rename to game/models/thd_hero/yamame/item/yamame.vmesh_c diff --git a/models/thd_hero/yamame/yamame.vmdl_c b/game/models/thd_hero/yamame/yamame.vmdl_c similarity index 100% rename from models/thd_hero/yamame/yamame.vmdl_c rename to game/models/thd_hero/yamame/yamame.vmdl_c diff --git a/models/thd_hero/yamame/yamame.vmesh_c b/game/models/thd_hero/yamame/yamame.vmesh_c similarity index 100% rename from models/thd_hero/yamame/yamame.vmesh_c rename to game/models/thd_hero/yamame/yamame.vmesh_c diff --git a/models/thd_hero/yamame/yamame_58bda2ce.vagrp_c b/game/models/thd_hero/yamame/yamame_58bda2ce.vagrp_c similarity index 100% rename from models/thd_hero/yamame/yamame_58bda2ce.vagrp_c rename to game/models/thd_hero/yamame/yamame_58bda2ce.vagrp_c diff --git a/models/thd_hero/yoshika/f6ad9668/attack.vanim_c b/game/models/thd_hero/yoshika/f6ad9668/attack.vanim_c similarity index 100% rename from models/thd_hero/yoshika/f6ad9668/attack.vanim_c rename to game/models/thd_hero/yoshika/f6ad9668/attack.vanim_c diff --git a/models/thd_hero/yoshika/f6ad9668/cast_4.vanim_c b/game/models/thd_hero/yoshika/f6ad9668/cast_4.vanim_c similarity index 100% rename from models/thd_hero/yoshika/f6ad9668/cast_4.vanim_c rename to game/models/thd_hero/yoshika/f6ad9668/cast_4.vanim_c diff --git a/models/thd_hero/yoshika/f6ad9668/idle.vanim_c b/game/models/thd_hero/yoshika/f6ad9668/idle.vanim_c similarity index 100% rename from models/thd_hero/yoshika/f6ad9668/idle.vanim_c rename to game/models/thd_hero/yoshika/f6ad9668/idle.vanim_c diff --git a/models/thd_hero/yoshika/f6ad9668/run.vanim_c b/game/models/thd_hero/yoshika/f6ad9668/run.vanim_c similarity index 100% rename from models/thd_hero/yoshika/f6ad9668/run.vanim_c rename to game/models/thd_hero/yoshika/f6ad9668/run.vanim_c diff --git a/models/thd_hero/yoshika/f6ad9668/yoshika_animation.vanim_c b/game/models/thd_hero/yoshika/f6ad9668/yoshika_animation.vanim_c similarity index 100% rename from models/thd_hero/yoshika/f6ad9668/yoshika_animation.vanim_c rename to game/models/thd_hero/yoshika/f6ad9668/yoshika_animation.vanim_c diff --git a/models/thd_hero/yoshika/item/7d9a3c1e/attack.vanim_c b/game/models/thd_hero/yoshika/item/7d9a3c1e/attack.vanim_c similarity index 100% rename from models/thd_hero/yoshika/item/7d9a3c1e/attack.vanim_c rename to game/models/thd_hero/yoshika/item/7d9a3c1e/attack.vanim_c diff --git a/models/thd_hero/yoshika/item/7d9a3c1e/idle.vanim_c b/game/models/thd_hero/yoshika/item/7d9a3c1e/idle.vanim_c similarity index 100% rename from models/thd_hero/yoshika/item/7d9a3c1e/idle.vanim_c rename to game/models/thd_hero/yoshika/item/7d9a3c1e/idle.vanim_c diff --git a/models/thd_hero/yoshika/item/7d9a3c1e/run.vanim_c b/game/models/thd_hero/yoshika/item/7d9a3c1e/run.vanim_c similarity index 100% rename from models/thd_hero/yoshika/item/7d9a3c1e/run.vanim_c rename to game/models/thd_hero/yoshika/item/7d9a3c1e/run.vanim_c diff --git a/models/thd_hero/yoshika/item/item_yoshika.vmdl_c b/game/models/thd_hero/yoshika/item/item_yoshika.vmdl_c similarity index 100% rename from models/thd_hero/yoshika/item/item_yoshika.vmdl_c rename to game/models/thd_hero/yoshika/item/item_yoshika.vmdl_c diff --git a/models/thd_hero/yoshika/item/item_yoshika_7d9a3c1e.vagrp_c b/game/models/thd_hero/yoshika/item/item_yoshika_7d9a3c1e.vagrp_c similarity index 100% rename from models/thd_hero/yoshika/item/item_yoshika_7d9a3c1e.vagrp_c rename to game/models/thd_hero/yoshika/item/item_yoshika_7d9a3c1e.vagrp_c diff --git a/models/thd_hero/yoshika/item/yoshika.vmesh_c b/game/models/thd_hero/yoshika/item/yoshika.vmesh_c similarity index 100% rename from models/thd_hero/yoshika/item/yoshika.vmesh_c rename to game/models/thd_hero/yoshika/item/yoshika.vmesh_c diff --git a/models/thd_hero/yoshika/yoshika.vmdl_c b/game/models/thd_hero/yoshika/yoshika.vmdl_c similarity index 100% rename from models/thd_hero/yoshika/yoshika.vmdl_c rename to game/models/thd_hero/yoshika/yoshika.vmdl_c diff --git a/models/thd_hero/yoshika/yoshika.vmesh_c b/game/models/thd_hero/yoshika/yoshika.vmesh_c similarity index 100% rename from models/thd_hero/yoshika/yoshika.vmesh_c rename to game/models/thd_hero/yoshika/yoshika.vmesh_c diff --git a/models/thd_hero/yoshika/yoshika_f6ad9668.vagrp_c b/game/models/thd_hero/yoshika/yoshika_f6ad9668.vagrp_c similarity index 100% rename from models/thd_hero/yoshika/yoshika_f6ad9668.vagrp_c rename to game/models/thd_hero/yoshika/yoshika_f6ad9668.vagrp_c diff --git a/models/thd_hero/yuugi/da83a462/attack1.vanim_c b/game/models/thd_hero/yuugi/da83a462/attack1.vanim_c similarity index 100% rename from models/thd_hero/yuugi/da83a462/attack1.vanim_c rename to game/models/thd_hero/yuugi/da83a462/attack1.vanim_c diff --git a/models/thd_hero/yuugi/da83a462/attack2.vanim_c b/game/models/thd_hero/yuugi/da83a462/attack2.vanim_c similarity index 100% rename from models/thd_hero/yuugi/da83a462/attack2.vanim_c rename to game/models/thd_hero/yuugi/da83a462/attack2.vanim_c diff --git a/models/thd_hero/yuugi/da83a462/cast1.vanim_c b/game/models/thd_hero/yuugi/da83a462/cast1.vanim_c similarity index 100% rename from models/thd_hero/yuugi/da83a462/cast1.vanim_c rename to game/models/thd_hero/yuugi/da83a462/cast1.vanim_c diff --git a/models/thd_hero/yuugi/da83a462/cast3.vanim_c b/game/models/thd_hero/yuugi/da83a462/cast3.vanim_c similarity index 100% rename from models/thd_hero/yuugi/da83a462/cast3.vanim_c rename to game/models/thd_hero/yuugi/da83a462/cast3.vanim_c diff --git a/models/thd_hero/yuugi/da83a462/idle.vanim_c b/game/models/thd_hero/yuugi/da83a462/idle.vanim_c similarity index 100% rename from models/thd_hero/yuugi/da83a462/idle.vanim_c rename to game/models/thd_hero/yuugi/da83a462/idle.vanim_c diff --git a/models/thd_hero/yuugi/da83a462/run.vanim_c b/game/models/thd_hero/yuugi/da83a462/run.vanim_c similarity index 100% rename from models/thd_hero/yuugi/da83a462/run.vanim_c rename to game/models/thd_hero/yuugi/da83a462/run.vanim_c diff --git a/models/thd_hero/yuugi/da83a462/yuugi_animation.vanim_c b/game/models/thd_hero/yuugi/da83a462/yuugi_animation.vanim_c similarity index 100% rename from models/thd_hero/yuugi/da83a462/yuugi_animation.vanim_c rename to game/models/thd_hero/yuugi/da83a462/yuugi_animation.vanim_c diff --git a/models/thd_hero/yuugi/item/193b38a0/attack1.vanim_c b/game/models/thd_hero/yuugi/item/193b38a0/attack1.vanim_c similarity index 100% rename from models/thd_hero/yuugi/item/193b38a0/attack1.vanim_c rename to game/models/thd_hero/yuugi/item/193b38a0/attack1.vanim_c diff --git a/models/thd_hero/yuugi/item/193b38a0/attack2.vanim_c b/game/models/thd_hero/yuugi/item/193b38a0/attack2.vanim_c similarity index 100% rename from models/thd_hero/yuugi/item/193b38a0/attack2.vanim_c rename to game/models/thd_hero/yuugi/item/193b38a0/attack2.vanim_c diff --git a/models/thd_hero/yuugi/item/193b38a0/cast1.vanim_c b/game/models/thd_hero/yuugi/item/193b38a0/cast1.vanim_c similarity index 100% rename from models/thd_hero/yuugi/item/193b38a0/cast1.vanim_c rename to game/models/thd_hero/yuugi/item/193b38a0/cast1.vanim_c diff --git a/models/thd_hero/yuugi/item/193b38a0/cast3.vanim_c b/game/models/thd_hero/yuugi/item/193b38a0/cast3.vanim_c similarity index 100% rename from models/thd_hero/yuugi/item/193b38a0/cast3.vanim_c rename to game/models/thd_hero/yuugi/item/193b38a0/cast3.vanim_c diff --git a/models/thd_hero/yuugi/item/193b38a0/idle.vanim_c b/game/models/thd_hero/yuugi/item/193b38a0/idle.vanim_c similarity index 100% rename from models/thd_hero/yuugi/item/193b38a0/idle.vanim_c rename to game/models/thd_hero/yuugi/item/193b38a0/idle.vanim_c diff --git a/models/thd_hero/yuugi/item/193b38a0/run.vanim_c b/game/models/thd_hero/yuugi/item/193b38a0/run.vanim_c similarity index 100% rename from models/thd_hero/yuugi/item/193b38a0/run.vanim_c rename to game/models/thd_hero/yuugi/item/193b38a0/run.vanim_c diff --git a/models/thd_hero/yuugi/item/item_yuugi.vmdl_c b/game/models/thd_hero/yuugi/item/item_yuugi.vmdl_c similarity index 100% rename from models/thd_hero/yuugi/item/item_yuugi.vmdl_c rename to game/models/thd_hero/yuugi/item/item_yuugi.vmdl_c diff --git a/models/thd_hero/yuugi/item/item_yuugi_193b38a0.vagrp_c b/game/models/thd_hero/yuugi/item/item_yuugi_193b38a0.vagrp_c similarity index 100% rename from models/thd_hero/yuugi/item/item_yuugi_193b38a0.vagrp_c rename to game/models/thd_hero/yuugi/item/item_yuugi_193b38a0.vagrp_c diff --git a/models/thd_hero/yuugi/item/yuugi.vmesh_c b/game/models/thd_hero/yuugi/item/yuugi.vmesh_c similarity index 100% rename from models/thd_hero/yuugi/item/yuugi.vmesh_c rename to game/models/thd_hero/yuugi/item/yuugi.vmesh_c diff --git a/models/thd_hero/yuugi/yuugi.vmdl_c b/game/models/thd_hero/yuugi/yuugi.vmdl_c similarity index 100% rename from models/thd_hero/yuugi/yuugi.vmdl_c rename to game/models/thd_hero/yuugi/yuugi.vmdl_c diff --git a/models/thd_hero/yuugi/yuugi.vmesh_c b/game/models/thd_hero/yuugi/yuugi.vmesh_c similarity index 100% rename from models/thd_hero/yuugi/yuugi.vmesh_c rename to game/models/thd_hero/yuugi/yuugi.vmesh_c diff --git a/models/thd_hero/yuugi/yuugi_da83a462.vagrp_c b/game/models/thd_hero/yuugi/yuugi_da83a462.vagrp_c similarity index 100% rename from models/thd_hero/yuugi/yuugi_da83a462.vagrp_c rename to game/models/thd_hero/yuugi/yuugi_da83a462.vagrp_c diff --git a/models/thd_hero/yuyuko/0d01273b/attack.vanim_c b/game/models/thd_hero/yuyuko/0d01273b/attack.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/0d01273b/attack.vanim_c rename to game/models/thd_hero/yuyuko/0d01273b/attack.vanim_c diff --git a/models/thd_hero/yuyuko/0d01273b/cast1.vanim_c b/game/models/thd_hero/yuyuko/0d01273b/cast1.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/0d01273b/cast1.vanim_c rename to game/models/thd_hero/yuyuko/0d01273b/cast1.vanim_c diff --git a/models/thd_hero/yuyuko/0d01273b/cast2.vanim_c b/game/models/thd_hero/yuyuko/0d01273b/cast2.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/0d01273b/cast2.vanim_c rename to game/models/thd_hero/yuyuko/0d01273b/cast2.vanim_c diff --git a/models/thd_hero/yuyuko/0d01273b/idle.vanim_c b/game/models/thd_hero/yuyuko/0d01273b/idle.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/0d01273b/idle.vanim_c rename to game/models/thd_hero/yuyuko/0d01273b/idle.vanim_c diff --git a/models/thd_hero/yuyuko/0d01273b/por.vanim_c b/game/models/thd_hero/yuyuko/0d01273b/por.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/0d01273b/por.vanim_c rename to game/models/thd_hero/yuyuko/0d01273b/por.vanim_c diff --git a/models/thd_hero/yuyuko/0d01273b/run.vanim_c b/game/models/thd_hero/yuyuko/0d01273b/run.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/0d01273b/run.vanim_c rename to game/models/thd_hero/yuyuko/0d01273b/run.vanim_c diff --git a/models/thd_hero/yuyuko/item/785d0770/attack.vanim_c b/game/models/thd_hero/yuyuko/item/785d0770/attack.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/item/785d0770/attack.vanim_c rename to game/models/thd_hero/yuyuko/item/785d0770/attack.vanim_c diff --git a/models/thd_hero/yuyuko/item/785d0770/cast1.vanim_c b/game/models/thd_hero/yuyuko/item/785d0770/cast1.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/item/785d0770/cast1.vanim_c rename to game/models/thd_hero/yuyuko/item/785d0770/cast1.vanim_c diff --git a/models/thd_hero/yuyuko/item/785d0770/cast2.vanim_c b/game/models/thd_hero/yuyuko/item/785d0770/cast2.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/item/785d0770/cast2.vanim_c rename to game/models/thd_hero/yuyuko/item/785d0770/cast2.vanim_c diff --git a/models/thd_hero/yuyuko/item/785d0770/idle.vanim_c b/game/models/thd_hero/yuyuko/item/785d0770/idle.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/item/785d0770/idle.vanim_c rename to game/models/thd_hero/yuyuko/item/785d0770/idle.vanim_c diff --git a/models/thd_hero/yuyuko/item/785d0770/por.vanim_c b/game/models/thd_hero/yuyuko/item/785d0770/por.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/item/785d0770/por.vanim_c rename to game/models/thd_hero/yuyuko/item/785d0770/por.vanim_c diff --git a/models/thd_hero/yuyuko/item/785d0770/run.vanim_c b/game/models/thd_hero/yuyuko/item/785d0770/run.vanim_c similarity index 100% rename from models/thd_hero/yuyuko/item/785d0770/run.vanim_c rename to game/models/thd_hero/yuyuko/item/785d0770/run.vanim_c diff --git a/models/thd_hero/yuyuko/item/item_yuyuko.vmdl_c b/game/models/thd_hero/yuyuko/item/item_yuyuko.vmdl_c similarity index 100% rename from models/thd_hero/yuyuko/item/item_yuyuko.vmdl_c rename to game/models/thd_hero/yuyuko/item/item_yuyuko.vmdl_c diff --git a/models/thd_hero/yuyuko/item/item_yuyuko_785d0770.vagrp_c b/game/models/thd_hero/yuyuko/item/item_yuyuko_785d0770.vagrp_c similarity index 100% rename from models/thd_hero/yuyuko/item/item_yuyuko_785d0770.vagrp_c rename to game/models/thd_hero/yuyuko/item/item_yuyuko_785d0770.vagrp_c diff --git a/models/thd_hero/yuyuko/item/yuyuko.vmesh_c b/game/models/thd_hero/yuyuko/item/yuyuko.vmesh_c similarity index 100% rename from models/thd_hero/yuyuko/item/yuyuko.vmesh_c rename to game/models/thd_hero/yuyuko/item/yuyuko.vmesh_c diff --git a/models/thd_hero/yuyuko/yuyuko.vmdl_c b/game/models/thd_hero/yuyuko/yuyuko.vmdl_c similarity index 100% rename from models/thd_hero/yuyuko/yuyuko.vmdl_c rename to game/models/thd_hero/yuyuko/yuyuko.vmdl_c diff --git a/models/thd_hero/yuyuko/yuyuko.vmesh_c b/game/models/thd_hero/yuyuko/yuyuko.vmesh_c similarity index 100% rename from models/thd_hero/yuyuko/yuyuko.vmesh_c rename to game/models/thd_hero/yuyuko/yuyuko.vmesh_c diff --git a/models/thd_hero/yuyuko/yuyuko_0d01273b.vagrp_c b/game/models/thd_hero/yuyuko/yuyuko_0d01273b.vagrp_c similarity index 100% rename from models/thd_hero/yuyuko/yuyuko_0d01273b.vagrp_c rename to game/models/thd_hero/yuyuko/yuyuko_0d01273b.vagrp_c diff --git a/panorama/images/custom_game/alipay_png.vtex_c b/game/panorama/images/custom_game/alipay_png.vtex_c similarity index 100% rename from panorama/images/custom_game/alipay_png.vtex_c rename to game/panorama/images/custom_game/alipay_png.vtex_c diff --git a/panorama/images/custom_game/attacking_time_bg_png.vtex_c b/game/panorama/images/custom_game/attacking_time_bg_png.vtex_c similarity index 100% rename from panorama/images/custom_game/attacking_time_bg_png.vtex_c rename to game/panorama/images/custom_game/attacking_time_bg_png.vtex_c diff --git a/panorama/images/custom_game/cards/alice_big_png.vtex_c b/game/panorama/images/custom_game/cards/alice_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/alice_big_png.vtex_c rename to game/panorama/images/custom_game/cards/alice_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/alice_name_png.vtex_c b/game/panorama/images/custom_game/cards/alice_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/alice_name_png.vtex_c rename to game/panorama/images/custom_game/cards/alice_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/alice_png.vtex_c b/game/panorama/images/custom_game/cards/alice_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/alice_png.vtex_c rename to game/panorama/images/custom_game/cards/alice_png.vtex_c diff --git a/panorama/images/custom_game/cards/aya_big_png.vtex_c b/game/panorama/images/custom_game/cards/aya_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/aya_big_png.vtex_c rename to game/panorama/images/custom_game/cards/aya_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/aya_name_png.vtex_c b/game/panorama/images/custom_game/cards/aya_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/aya_name_png.vtex_c rename to game/panorama/images/custom_game/cards/aya_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/aya_png.vtex_c b/game/panorama/images/custom_game/cards/aya_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/aya_png.vtex_c rename to game/panorama/images/custom_game/cards/aya_png.vtex_c diff --git a/panorama/images/custom_game/cards/byakuren_big_png.vtex_c b/game/panorama/images/custom_game/cards/byakuren_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/byakuren_big_png.vtex_c rename to game/panorama/images/custom_game/cards/byakuren_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/byakuren_name_png.vtex_c b/game/panorama/images/custom_game/cards/byakuren_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/byakuren_name_png.vtex_c rename to game/panorama/images/custom_game/cards/byakuren_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/byakuren_png.vtex_c b/game/panorama/images/custom_game/cards/byakuren_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/byakuren_png.vtex_c rename to game/panorama/images/custom_game/cards/byakuren_png.vtex_c diff --git a/panorama/images/custom_game/cards/chen_big_png.vtex_c b/game/panorama/images/custom_game/cards/chen_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/chen_big_png.vtex_c rename to game/panorama/images/custom_game/cards/chen_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/chen_name_png.vtex_c b/game/panorama/images/custom_game/cards/chen_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/chen_name_png.vtex_c rename to game/panorama/images/custom_game/cards/chen_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/chen_png.vtex_c b/game/panorama/images/custom_game/cards/chen_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/chen_png.vtex_c rename to game/panorama/images/custom_game/cards/chen_png.vtex_c diff --git a/panorama/images/custom_game/cards/cirno_big_png.vtex_c b/game/panorama/images/custom_game/cards/cirno_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/cirno_big_png.vtex_c rename to game/panorama/images/custom_game/cards/cirno_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/cirno_name_png.vtex_c b/game/panorama/images/custom_game/cards/cirno_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/cirno_name_png.vtex_c rename to game/panorama/images/custom_game/cards/cirno_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/cirno_png.vtex_c b/game/panorama/images/custom_game/cards/cirno_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/cirno_png.vtex_c rename to game/panorama/images/custom_game/cards/cirno_png.vtex_c diff --git a/panorama/images/custom_game/cards/clownpiece_big_png.vtex_c b/game/panorama/images/custom_game/cards/clownpiece_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/clownpiece_big_png.vtex_c rename to game/panorama/images/custom_game/cards/clownpiece_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/clownpiece_name_png.vtex_c b/game/panorama/images/custom_game/cards/clownpiece_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/clownpiece_name_png.vtex_c rename to game/panorama/images/custom_game/cards/clownpiece_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/clownpiece_png.vtex_c b/game/panorama/images/custom_game/cards/clownpiece_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/clownpiece_png.vtex_c rename to game/panorama/images/custom_game/cards/clownpiece_png.vtex_c diff --git a/panorama/images/custom_game/cards/daiyousei_big_png.vtex_c b/game/panorama/images/custom_game/cards/daiyousei_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/daiyousei_big_png.vtex_c rename to game/panorama/images/custom_game/cards/daiyousei_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/daiyousei_name_png.vtex_c b/game/panorama/images/custom_game/cards/daiyousei_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/daiyousei_name_png.vtex_c rename to game/panorama/images/custom_game/cards/daiyousei_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/daiyousei_png.vtex_c b/game/panorama/images/custom_game/cards/daiyousei_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/daiyousei_png.vtex_c rename to game/panorama/images/custom_game/cards/daiyousei_png.vtex_c diff --git a/panorama/images/custom_game/cards/eirin_big_png.vtex_c b/game/panorama/images/custom_game/cards/eirin_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/eirin_big_png.vtex_c rename to game/panorama/images/custom_game/cards/eirin_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/eirin_name_png.vtex_c b/game/panorama/images/custom_game/cards/eirin_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/eirin_name_png.vtex_c rename to game/panorama/images/custom_game/cards/eirin_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/eirin_png.vtex_c b/game/panorama/images/custom_game/cards/eirin_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/eirin_png.vtex_c rename to game/panorama/images/custom_game/cards/eirin_png.vtex_c diff --git a/panorama/images/custom_game/cards/elly_big_png.vtex_c b/game/panorama/images/custom_game/cards/elly_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/elly_big_png.vtex_c rename to game/panorama/images/custom_game/cards/elly_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/elly_name_png.vtex_c b/game/panorama/images/custom_game/cards/elly_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/elly_name_png.vtex_c rename to game/panorama/images/custom_game/cards/elly_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/elly_png.vtex_c b/game/panorama/images/custom_game/cards/elly_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/elly_png.vtex_c rename to game/panorama/images/custom_game/cards/elly_png.vtex_c diff --git a/panorama/images/custom_game/cards/flandre_big_png.vtex_c b/game/panorama/images/custom_game/cards/flandre_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/flandre_big_png.vtex_c rename to game/panorama/images/custom_game/cards/flandre_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/flandre_name_png.vtex_c b/game/panorama/images/custom_game/cards/flandre_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/flandre_name_png.vtex_c rename to game/panorama/images/custom_game/cards/flandre_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/flandre_png.vtex_c b/game/panorama/images/custom_game/cards/flandre_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/flandre_png.vtex_c rename to game/panorama/images/custom_game/cards/flandre_png.vtex_c diff --git a/panorama/images/custom_game/cards/futo_big_png.vtex_c b/game/panorama/images/custom_game/cards/futo_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/futo_big_png.vtex_c rename to game/panorama/images/custom_game/cards/futo_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/futo_name_png.vtex_c b/game/panorama/images/custom_game/cards/futo_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/futo_name_png.vtex_c rename to game/panorama/images/custom_game/cards/futo_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/futo_png.vtex_c b/game/panorama/images/custom_game/cards/futo_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/futo_png.vtex_c rename to game/panorama/images/custom_game/cards/futo_png.vtex_c diff --git a/panorama/images/custom_game/cards/gengetu_big_png.vtex_c b/game/panorama/images/custom_game/cards/gengetu_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/gengetu_big_png.vtex_c rename to game/panorama/images/custom_game/cards/gengetu_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/gengetu_name_png.vtex_c b/game/panorama/images/custom_game/cards/gengetu_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/gengetu_name_png.vtex_c rename to game/panorama/images/custom_game/cards/gengetu_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/gengetu_png.vtex_c b/game/panorama/images/custom_game/cards/gengetu_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/gengetu_png.vtex_c rename to game/panorama/images/custom_game/cards/gengetu_png.vtex_c diff --git a/panorama/images/custom_game/cards/hanadayousei_big_png.vtex_c b/game/panorama/images/custom_game/cards/hanadayousei_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hanadayousei_big_png.vtex_c rename to game/panorama/images/custom_game/cards/hanadayousei_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/hanadayousei_name_png.vtex_c b/game/panorama/images/custom_game/cards/hanadayousei_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hanadayousei_name_png.vtex_c rename to game/panorama/images/custom_game/cards/hanadayousei_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/hanadayousei_png.vtex_c b/game/panorama/images/custom_game/cards/hanadayousei_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hanadayousei_png.vtex_c rename to game/panorama/images/custom_game/cards/hanadayousei_png.vtex_c diff --git a/panorama/images/custom_game/cards/hatate_big_png.vtex_c b/game/panorama/images/custom_game/cards/hatate_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hatate_big_png.vtex_c rename to game/panorama/images/custom_game/cards/hatate_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/hatate_name_png.vtex_c b/game/panorama/images/custom_game/cards/hatate_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hatate_name_png.vtex_c rename to game/panorama/images/custom_game/cards/hatate_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/hatate_png.vtex_c b/game/panorama/images/custom_game/cards/hatate_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hatate_png.vtex_c rename to game/panorama/images/custom_game/cards/hatate_png.vtex_c diff --git a/panorama/images/custom_game/cards/hecatia_big_png.vtex_c b/game/panorama/images/custom_game/cards/hecatia_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hecatia_big_png.vtex_c rename to game/panorama/images/custom_game/cards/hecatia_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/hecatia_name_png.vtex_c b/game/panorama/images/custom_game/cards/hecatia_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hecatia_name_png.vtex_c rename to game/panorama/images/custom_game/cards/hecatia_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/hecatia_png.vtex_c b/game/panorama/images/custom_game/cards/hecatia_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hecatia_png.vtex_c rename to game/panorama/images/custom_game/cards/hecatia_png.vtex_c diff --git a/panorama/images/custom_game/cards/hina_big_png.vtex_c b/game/panorama/images/custom_game/cards/hina_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hina_big_png.vtex_c rename to game/panorama/images/custom_game/cards/hina_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/hina_name_png.vtex_c b/game/panorama/images/custom_game/cards/hina_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hina_name_png.vtex_c rename to game/panorama/images/custom_game/cards/hina_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/hina_png.vtex_c b/game/panorama/images/custom_game/cards/hina_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hina_png.vtex_c rename to game/panorama/images/custom_game/cards/hina_png.vtex_c diff --git a/panorama/images/custom_game/cards/hourainingyou_big_png.vtex_c b/game/panorama/images/custom_game/cards/hourainingyou_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hourainingyou_big_png.vtex_c rename to game/panorama/images/custom_game/cards/hourainingyou_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/hourainingyou_name_png.vtex_c b/game/panorama/images/custom_game/cards/hourainingyou_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hourainingyou_name_png.vtex_c rename to game/panorama/images/custom_game/cards/hourainingyou_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/hourainingyou_png.vtex_c b/game/panorama/images/custom_game/cards/hourainingyou_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/hourainingyou_png.vtex_c rename to game/panorama/images/custom_game/cards/hourainingyou_png.vtex_c diff --git a/panorama/images/custom_game/cards/iku_big_png.vtex_c b/game/panorama/images/custom_game/cards/iku_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/iku_big_png.vtex_c rename to game/panorama/images/custom_game/cards/iku_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/iku_name_png.vtex_c b/game/panorama/images/custom_game/cards/iku_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/iku_name_png.vtex_c rename to game/panorama/images/custom_game/cards/iku_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/iku_png.vtex_c b/game/panorama/images/custom_game/cards/iku_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/iku_png.vtex_c rename to game/panorama/images/custom_game/cards/iku_png.vtex_c diff --git a/panorama/images/custom_game/cards/inaba_big_png.vtex_c b/game/panorama/images/custom_game/cards/inaba_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/inaba_big_png.vtex_c rename to game/panorama/images/custom_game/cards/inaba_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/inaba_name_png.vtex_c b/game/panorama/images/custom_game/cards/inaba_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/inaba_name_png.vtex_c rename to game/panorama/images/custom_game/cards/inaba_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/inaba_png.vtex_c b/game/panorama/images/custom_game/cards/inaba_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/inaba_png.vtex_c rename to game/panorama/images/custom_game/cards/inaba_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2001_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2001_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2001_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2001_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2001_png.vtex_c b/game/panorama/images/custom_game/cards/item_2001_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2001_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2001_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2002_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2002_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2002_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2002_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2002_png.vtex_c b/game/panorama/images/custom_game/cards/item_2002_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2002_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2002_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2003_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2003_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2003_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2003_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2003_png.vtex_c b/game/panorama/images/custom_game/cards/item_2003_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2003_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2003_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2004_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2004_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2004_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2004_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2004_png.vtex_c b/game/panorama/images/custom_game/cards/item_2004_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2004_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2004_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2005_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2005_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2005_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2005_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2005_png.vtex_c b/game/panorama/images/custom_game/cards/item_2005_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2005_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2005_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2006_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2006_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2006_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2006_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2006_png.vtex_c b/game/panorama/images/custom_game/cards/item_2006_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2006_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2006_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2007_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2007_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2007_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2007_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2007_png.vtex_c b/game/panorama/images/custom_game/cards/item_2007_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2007_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2007_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2008_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2008_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2008_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2008_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2008_png.vtex_c b/game/panorama/images/custom_game/cards/item_2008_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2008_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2008_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2009_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2009_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2009_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2009_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2009_png.vtex_c b/game/panorama/images/custom_game/cards/item_2009_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2009_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2009_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2010_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2010_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2010_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2010_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2010_png.vtex_c b/game/panorama/images/custom_game/cards/item_2010_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2010_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2010_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2011_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2011_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2011_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2011_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2011_png.vtex_c b/game/panorama/images/custom_game/cards/item_2011_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2011_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2011_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2012_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2012_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2012_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2012_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2012_png.vtex_c b/game/panorama/images/custom_game/cards/item_2012_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2012_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2012_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2013_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2013_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2013_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2013_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2013_png.vtex_c b/game/panorama/images/custom_game/cards/item_2013_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2013_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2013_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2014_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2014_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2014_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2014_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2014_png.vtex_c b/game/panorama/images/custom_game/cards/item_2014_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2014_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2014_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2015_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2015_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2015_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2015_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2015_png.vtex_c b/game/panorama/images/custom_game/cards/item_2015_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2015_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2015_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2016_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2016_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2016_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2016_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2016_png.vtex_c b/game/panorama/images/custom_game/cards/item_2016_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2016_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2016_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2017_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2017_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2017_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2017_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2017_png.vtex_c b/game/panorama/images/custom_game/cards/item_2017_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2017_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2017_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2018_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2018_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2018_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2018_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2018_png.vtex_c b/game/panorama/images/custom_game/cards/item_2018_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2018_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2018_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2019_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2019_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2019_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2019_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2019_png.vtex_c b/game/panorama/images/custom_game/cards/item_2019_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2019_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2019_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2020_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2020_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2020_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2020_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2020_png.vtex_c b/game/panorama/images/custom_game/cards/item_2020_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2020_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2020_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2021_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2021_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2021_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2021_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2021_png.vtex_c b/game/panorama/images/custom_game/cards/item_2021_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2021_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2021_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2022_name_png.vtex_c b/game/panorama/images/custom_game/cards/item_2022_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2022_name_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2022_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_2022_png.vtex_c b/game/panorama/images/custom_game/cards/item_2022_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_2022_png.vtex_c rename to game/panorama/images/custom_game/cards/item_2022_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3011_png.vtex_c b/game/panorama/images/custom_game/cards/item_3011_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3011_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3011_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3012_png.vtex_c b/game/panorama/images/custom_game/cards/item_3012_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3012_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3012_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3013_png.vtex_c b/game/panorama/images/custom_game/cards/item_3013_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3013_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3013_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3014_png.vtex_c b/game/panorama/images/custom_game/cards/item_3014_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3014_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3014_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3015_png.vtex_c b/game/panorama/images/custom_game/cards/item_3015_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3015_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3015_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3016_png.vtex_c b/game/panorama/images/custom_game/cards/item_3016_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3016_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3016_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3017_png.vtex_c b/game/panorama/images/custom_game/cards/item_3017_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3017_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3017_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3018_png.vtex_c b/game/panorama/images/custom_game/cards/item_3018_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3018_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3018_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3019_png.vtex_c b/game/panorama/images/custom_game/cards/item_3019_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3019_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3019_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3020_png.vtex_c b/game/panorama/images/custom_game/cards/item_3020_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3020_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3020_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3021_png.vtex_c b/game/panorama/images/custom_game/cards/item_3021_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3021_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3021_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3022_png.vtex_c b/game/panorama/images/custom_game/cards/item_3022_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3022_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3022_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3023_png.vtex_c b/game/panorama/images/custom_game/cards/item_3023_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3023_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3023_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3024_png.vtex_c b/game/panorama/images/custom_game/cards/item_3024_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3024_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3024_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3025_png.vtex_c b/game/panorama/images/custom_game/cards/item_3025_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3025_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3025_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3026_png.vtex_c b/game/panorama/images/custom_game/cards/item_3026_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3026_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3026_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3027_png.vtex_c b/game/panorama/images/custom_game/cards/item_3027_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3027_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3027_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3028_png.vtex_c b/game/panorama/images/custom_game/cards/item_3028_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3028_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3028_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3029_png.vtex_c b/game/panorama/images/custom_game/cards/item_3029_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3029_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3029_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3030_png.vtex_c b/game/panorama/images/custom_game/cards/item_3030_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3030_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3030_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3031_png.vtex_c b/game/panorama/images/custom_game/cards/item_3031_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3031_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3031_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3050_png.vtex_c b/game/panorama/images/custom_game/cards/item_3050_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3050_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3050_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3149_png.vtex_c b/game/panorama/images/custom_game/cards/item_3149_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3149_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3149_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3150_png.vtex_c b/game/panorama/images/custom_game/cards/item_3150_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3150_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3150_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3151_png.vtex_c b/game/panorama/images/custom_game/cards/item_3151_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3151_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3151_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3152_png.vtex_c b/game/panorama/images/custom_game/cards/item_3152_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3152_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3152_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_3153_png.vtex_c b/game/panorama/images/custom_game/cards/item_3153_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_3153_png.vtex_c rename to game/panorama/images/custom_game/cards/item_3153_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_n_png.vtex_c b/game/panorama/images/custom_game/cards/item_n_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_n_png.vtex_c rename to game/panorama/images/custom_game/cards/item_n_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_r_png.vtex_c b/game/panorama/images/custom_game/cards/item_r_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_r_png.vtex_c rename to game/panorama/images/custom_game/cards/item_r_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_sr_png.vtex_c b/game/panorama/images/custom_game/cards/item_sr_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_sr_png.vtex_c rename to game/panorama/images/custom_game/cards/item_sr_png.vtex_c diff --git a/panorama/images/custom_game/cards/item_ssr_png.vtex_c b/game/panorama/images/custom_game/cards/item_ssr_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/item_ssr_png.vtex_c rename to game/panorama/images/custom_game/cards/item_ssr_png.vtex_c diff --git a/panorama/images/custom_game/cards/junko_big_png.vtex_c b/game/panorama/images/custom_game/cards/junko_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/junko_big_png.vtex_c rename to game/panorama/images/custom_game/cards/junko_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/junko_name_png.vtex_c b/game/panorama/images/custom_game/cards/junko_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/junko_name_png.vtex_c rename to game/panorama/images/custom_game/cards/junko_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/junko_png.vtex_c b/game/panorama/images/custom_game/cards/junko_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/junko_png.vtex_c rename to game/panorama/images/custom_game/cards/junko_png.vtex_c diff --git a/panorama/images/custom_game/cards/kagerou_big_png.vtex_c b/game/panorama/images/custom_game/cards/kagerou_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kagerou_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kagerou_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kagerou_name_png.vtex_c b/game/panorama/images/custom_game/cards/kagerou_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kagerou_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kagerou_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kagerou_png.vtex_c b/game/panorama/images/custom_game/cards/kagerou_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kagerou_png.vtex_c rename to game/panorama/images/custom_game/cards/kagerou_png.vtex_c diff --git a/panorama/images/custom_game/cards/kaguya_big_png.vtex_c b/game/panorama/images/custom_game/cards/kaguya_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kaguya_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kaguya_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kaguya_name_png.vtex_c b/game/panorama/images/custom_game/cards/kaguya_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kaguya_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kaguya_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kaguya_png.vtex_c b/game/panorama/images/custom_game/cards/kaguya_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kaguya_png.vtex_c rename to game/panorama/images/custom_game/cards/kaguya_png.vtex_c diff --git a/panorama/images/custom_game/cards/kanako_big_png.vtex_c b/game/panorama/images/custom_game/cards/kanako_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kanako_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kanako_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kanako_name_png.vtex_c b/game/panorama/images/custom_game/cards/kanako_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kanako_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kanako_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kanako_png.vtex_c b/game/panorama/images/custom_game/cards/kanako_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kanako_png.vtex_c rename to game/panorama/images/custom_game/cards/kanako_png.vtex_c diff --git a/panorama/images/custom_game/cards/keine_big_png.vtex_c b/game/panorama/images/custom_game/cards/keine_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/keine_big_png.vtex_c rename to game/panorama/images/custom_game/cards/keine_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/keine_name_png.vtex_c b/game/panorama/images/custom_game/cards/keine_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/keine_name_png.vtex_c rename to game/panorama/images/custom_game/cards/keine_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/keine_png.vtex_c b/game/panorama/images/custom_game/cards/keine_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/keine_png.vtex_c rename to game/panorama/images/custom_game/cards/keine_png.vtex_c diff --git a/panorama/images/custom_game/cards/kishin_big_png.vtex_c b/game/panorama/images/custom_game/cards/kishin_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kishin_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kishin_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kishin_name_png.vtex_c b/game/panorama/images/custom_game/cards/kishin_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kishin_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kishin_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kishin_png.vtex_c b/game/panorama/images/custom_game/cards/kishin_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kishin_png.vtex_c rename to game/panorama/images/custom_game/cards/kishin_png.vtex_c diff --git a/panorama/images/custom_game/cards/kisume_big_png.vtex_c b/game/panorama/images/custom_game/cards/kisume_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kisume_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kisume_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kisume_name_png.vtex_c b/game/panorama/images/custom_game/cards/kisume_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kisume_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kisume_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kisume_png.vtex_c b/game/panorama/images/custom_game/cards/kisume_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kisume_png.vtex_c rename to game/panorama/images/custom_game/cards/kisume_png.vtex_c diff --git a/panorama/images/custom_game/cards/koakuma_big_png.vtex_c b/game/panorama/images/custom_game/cards/koakuma_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/koakuma_big_png.vtex_c rename to game/panorama/images/custom_game/cards/koakuma_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/koakuma_name_png.vtex_c b/game/panorama/images/custom_game/cards/koakuma_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/koakuma_name_png.vtex_c rename to game/panorama/images/custom_game/cards/koakuma_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/koakuma_png.vtex_c b/game/panorama/images/custom_game/cards/koakuma_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/koakuma_png.vtex_c rename to game/panorama/images/custom_game/cards/koakuma_png.vtex_c diff --git a/panorama/images/custom_game/cards/kogasa_big_png.vtex_c b/game/panorama/images/custom_game/cards/kogasa_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kogasa_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kogasa_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kogasa_name_png.vtex_c b/game/panorama/images/custom_game/cards/kogasa_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kogasa_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kogasa_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kogasa_png.vtex_c b/game/panorama/images/custom_game/cards/kogasa_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kogasa_png.vtex_c rename to game/panorama/images/custom_game/cards/kogasa_png.vtex_c diff --git a/panorama/images/custom_game/cards/koishi_big_png.vtex_c b/game/panorama/images/custom_game/cards/koishi_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/koishi_big_png.vtex_c rename to game/panorama/images/custom_game/cards/koishi_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/koishi_name_png.vtex_c b/game/panorama/images/custom_game/cards/koishi_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/koishi_name_png.vtex_c rename to game/panorama/images/custom_game/cards/koishi_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/koishi_png.vtex_c b/game/panorama/images/custom_game/cards/koishi_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/koishi_png.vtex_c rename to game/panorama/images/custom_game/cards/koishi_png.vtex_c diff --git a/panorama/images/custom_game/cards/kokoro_big_png.vtex_c b/game/panorama/images/custom_game/cards/kokoro_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kokoro_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kokoro_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kokoro_name_png.vtex_c b/game/panorama/images/custom_game/cards/kokoro_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kokoro_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kokoro_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kokoro_png.vtex_c b/game/panorama/images/custom_game/cards/kokoro_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kokoro_png.vtex_c rename to game/panorama/images/custom_game/cards/kokoro_png.vtex_c diff --git a/panorama/images/custom_game/cards/komachi_big_png.vtex_c b/game/panorama/images/custom_game/cards/komachi_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/komachi_big_png.vtex_c rename to game/panorama/images/custom_game/cards/komachi_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/komachi_name_png.vtex_c b/game/panorama/images/custom_game/cards/komachi_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/komachi_name_png.vtex_c rename to game/panorama/images/custom_game/cards/komachi_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/komachi_png.vtex_c b/game/panorama/images/custom_game/cards/komachi_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/komachi_png.vtex_c rename to game/panorama/images/custom_game/cards/komachi_png.vtex_c diff --git a/panorama/images/custom_game/cards/kyouko_big_png.vtex_c b/game/panorama/images/custom_game/cards/kyouko_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kyouko_big_png.vtex_c rename to game/panorama/images/custom_game/cards/kyouko_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/kyouko_name_png.vtex_c b/game/panorama/images/custom_game/cards/kyouko_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kyouko_name_png.vtex_c rename to game/panorama/images/custom_game/cards/kyouko_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/kyouko_png.vtex_c b/game/panorama/images/custom_game/cards/kyouko_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/kyouko_png.vtex_c rename to game/panorama/images/custom_game/cards/kyouko_png.vtex_c diff --git a/panorama/images/custom_game/cards/letty_big_png.vtex_c b/game/panorama/images/custom_game/cards/letty_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/letty_big_png.vtex_c rename to game/panorama/images/custom_game/cards/letty_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/letty_name_png.vtex_c b/game/panorama/images/custom_game/cards/letty_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/letty_name_png.vtex_c rename to game/panorama/images/custom_game/cards/letty_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/letty_png.vtex_c b/game/panorama/images/custom_game/cards/letty_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/letty_png.vtex_c rename to game/panorama/images/custom_game/cards/letty_png.vtex_c diff --git a/panorama/images/custom_game/cards/lily_big_png.vtex_c b/game/panorama/images/custom_game/cards/lily_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lily_big_png.vtex_c rename to game/panorama/images/custom_game/cards/lily_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/lily_name_png.vtex_c b/game/panorama/images/custom_game/cards/lily_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lily_name_png.vtex_c rename to game/panorama/images/custom_game/cards/lily_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/lily_png.vtex_c b/game/panorama/images/custom_game/cards/lily_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lily_png.vtex_c rename to game/panorama/images/custom_game/cards/lily_png.vtex_c diff --git a/panorama/images/custom_game/cards/luck_png.vtex_c b/game/panorama/images/custom_game/cards/luck_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/luck_png.vtex_c rename to game/panorama/images/custom_game/cards/luck_png.vtex_c diff --git a/panorama/images/custom_game/cards/luna_big_png.vtex_c b/game/panorama/images/custom_game/cards/luna_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/luna_big_png.vtex_c rename to game/panorama/images/custom_game/cards/luna_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/luna_name_png.vtex_c b/game/panorama/images/custom_game/cards/luna_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/luna_name_png.vtex_c rename to game/panorama/images/custom_game/cards/luna_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/luna_png.vtex_c b/game/panorama/images/custom_game/cards/luna_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/luna_png.vtex_c rename to game/panorama/images/custom_game/cards/luna_png.vtex_c diff --git a/panorama/images/custom_game/cards/lunasa_big_png.vtex_c b/game/panorama/images/custom_game/cards/lunasa_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lunasa_big_png.vtex_c rename to game/panorama/images/custom_game/cards/lunasa_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/lunasa_name_png.vtex_c b/game/panorama/images/custom_game/cards/lunasa_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lunasa_name_png.vtex_c rename to game/panorama/images/custom_game/cards/lunasa_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/lunasa_png.vtex_c b/game/panorama/images/custom_game/cards/lunasa_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lunasa_png.vtex_c rename to game/panorama/images/custom_game/cards/lunasa_png.vtex_c diff --git a/panorama/images/custom_game/cards/lyrica_big_png.vtex_c b/game/panorama/images/custom_game/cards/lyrica_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lyrica_big_png.vtex_c rename to game/panorama/images/custom_game/cards/lyrica_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/lyrica_name_png.vtex_c b/game/panorama/images/custom_game/cards/lyrica_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lyrica_name_png.vtex_c rename to game/panorama/images/custom_game/cards/lyrica_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/lyrica_png.vtex_c b/game/panorama/images/custom_game/cards/lyrica_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/lyrica_png.vtex_c rename to game/panorama/images/custom_game/cards/lyrica_png.vtex_c diff --git a/panorama/images/custom_game/cards/maidyousei_big_png.vtex_c b/game/panorama/images/custom_game/cards/maidyousei_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/maidyousei_big_png.vtex_c rename to game/panorama/images/custom_game/cards/maidyousei_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/maidyousei_name_png.vtex_c b/game/panorama/images/custom_game/cards/maidyousei_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/maidyousei_name_png.vtex_c rename to game/panorama/images/custom_game/cards/maidyousei_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/maidyousei_png.vtex_c b/game/panorama/images/custom_game/cards/maidyousei_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/maidyousei_png.vtex_c rename to game/panorama/images/custom_game/cards/maidyousei_png.vtex_c diff --git a/panorama/images/custom_game/cards/mamizou_big_png.vtex_c b/game/panorama/images/custom_game/cards/mamizou_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mamizou_big_png.vtex_c rename to game/panorama/images/custom_game/cards/mamizou_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/mamizou_name_png.vtex_c b/game/panorama/images/custom_game/cards/mamizou_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mamizou_name_png.vtex_c rename to game/panorama/images/custom_game/cards/mamizou_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/mamizou_png.vtex_c b/game/panorama/images/custom_game/cards/mamizou_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mamizou_png.vtex_c rename to game/panorama/images/custom_game/cards/mamizou_png.vtex_c diff --git a/panorama/images/custom_game/cards/maribel_big_png.vtex_c b/game/panorama/images/custom_game/cards/maribel_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/maribel_big_png.vtex_c rename to game/panorama/images/custom_game/cards/maribel_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/maribel_name_png.vtex_c b/game/panorama/images/custom_game/cards/maribel_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/maribel_name_png.vtex_c rename to game/panorama/images/custom_game/cards/maribel_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/maribel_png.vtex_c b/game/panorama/images/custom_game/cards/maribel_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/maribel_png.vtex_c rename to game/panorama/images/custom_game/cards/maribel_png.vtex_c diff --git a/panorama/images/custom_game/cards/marisa_big_png.vtex_c b/game/panorama/images/custom_game/cards/marisa_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/marisa_big_png.vtex_c rename to game/panorama/images/custom_game/cards/marisa_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/marisa_name_png.vtex_c b/game/panorama/images/custom_game/cards/marisa_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/marisa_name_png.vtex_c rename to game/panorama/images/custom_game/cards/marisa_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/marisa_png.vtex_c b/game/panorama/images/custom_game/cards/marisa_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/marisa_png.vtex_c rename to game/panorama/images/custom_game/cards/marisa_png.vtex_c diff --git a/panorama/images/custom_game/cards/matara_big_png.vtex_c b/game/panorama/images/custom_game/cards/matara_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/matara_big_png.vtex_c rename to game/panorama/images/custom_game/cards/matara_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/matara_name_png.vtex_c b/game/panorama/images/custom_game/cards/matara_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/matara_name_png.vtex_c rename to game/panorama/images/custom_game/cards/matara_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/matara_png.vtex_c b/game/panorama/images/custom_game/cards/matara_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/matara_png.vtex_c rename to game/panorama/images/custom_game/cards/matara_png.vtex_c diff --git a/panorama/images/custom_game/cards/medicine_big_png.vtex_c b/game/panorama/images/custom_game/cards/medicine_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/medicine_big_png.vtex_c rename to game/panorama/images/custom_game/cards/medicine_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/medicine_name_png.vtex_c b/game/panorama/images/custom_game/cards/medicine_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/medicine_name_png.vtex_c rename to game/panorama/images/custom_game/cards/medicine_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/medicine_png.vtex_c b/game/panorama/images/custom_game/cards/medicine_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/medicine_png.vtex_c rename to game/panorama/images/custom_game/cards/medicine_png.vtex_c diff --git a/panorama/images/custom_game/cards/meirin_big_png.vtex_c b/game/panorama/images/custom_game/cards/meirin_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/meirin_big_png.vtex_c rename to game/panorama/images/custom_game/cards/meirin_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/meirin_name_png.vtex_c b/game/panorama/images/custom_game/cards/meirin_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/meirin_name_png.vtex_c rename to game/panorama/images/custom_game/cards/meirin_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/meirin_png.vtex_c b/game/panorama/images/custom_game/cards/meirin_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/meirin_png.vtex_c rename to game/panorama/images/custom_game/cards/meirin_png.vtex_c diff --git a/panorama/images/custom_game/cards/merlin_big_png.vtex_c b/game/panorama/images/custom_game/cards/merlin_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/merlin_big_png.vtex_c rename to game/panorama/images/custom_game/cards/merlin_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/merlin_name_png.vtex_c b/game/panorama/images/custom_game/cards/merlin_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/merlin_name_png.vtex_c rename to game/panorama/images/custom_game/cards/merlin_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/merlin_png.vtex_c b/game/panorama/images/custom_game/cards/merlin_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/merlin_png.vtex_c rename to game/panorama/images/custom_game/cards/merlin_png.vtex_c diff --git a/panorama/images/custom_game/cards/miko_big_png.vtex_c b/game/panorama/images/custom_game/cards/miko_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/miko_big_png.vtex_c rename to game/panorama/images/custom_game/cards/miko_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/miko_name_png.vtex_c b/game/panorama/images/custom_game/cards/miko_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/miko_name_png.vtex_c rename to game/panorama/images/custom_game/cards/miko_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/miko_png.vtex_c b/game/panorama/images/custom_game/cards/miko_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/miko_png.vtex_c rename to game/panorama/images/custom_game/cards/miko_png.vtex_c diff --git a/panorama/images/custom_game/cards/mima_big_png.vtex_c b/game/panorama/images/custom_game/cards/mima_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mima_big_png.vtex_c rename to game/panorama/images/custom_game/cards/mima_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/mima_name_png.vtex_c b/game/panorama/images/custom_game/cards/mima_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mima_name_png.vtex_c rename to game/panorama/images/custom_game/cards/mima_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/mima_png.vtex_c b/game/panorama/images/custom_game/cards/mima_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mima_png.vtex_c rename to game/panorama/images/custom_game/cards/mima_png.vtex_c diff --git a/panorama/images/custom_game/cards/minamitsu_big_png.vtex_c b/game/panorama/images/custom_game/cards/minamitsu_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/minamitsu_big_png.vtex_c rename to game/panorama/images/custom_game/cards/minamitsu_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/minamitsu_name_png.vtex_c b/game/panorama/images/custom_game/cards/minamitsu_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/minamitsu_name_png.vtex_c rename to game/panorama/images/custom_game/cards/minamitsu_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/minamitsu_png.vtex_c b/game/panorama/images/custom_game/cards/minamitsu_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/minamitsu_png.vtex_c rename to game/panorama/images/custom_game/cards/minamitsu_png.vtex_c diff --git a/panorama/images/custom_game/cards/minoriko_big_png.vtex_c b/game/panorama/images/custom_game/cards/minoriko_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/minoriko_big_png.vtex_c rename to game/panorama/images/custom_game/cards/minoriko_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/minoriko_name_png.vtex_c b/game/panorama/images/custom_game/cards/minoriko_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/minoriko_name_png.vtex_c rename to game/panorama/images/custom_game/cards/minoriko_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/minoriko_png.vtex_c b/game/panorama/images/custom_game/cards/minoriko_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/minoriko_png.vtex_c rename to game/panorama/images/custom_game/cards/minoriko_png.vtex_c diff --git a/panorama/images/custom_game/cards/mokou_big_png.vtex_c b/game/panorama/images/custom_game/cards/mokou_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mokou_big_png.vtex_c rename to game/panorama/images/custom_game/cards/mokou_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/mokou_name_png.vtex_c b/game/panorama/images/custom_game/cards/mokou_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mokou_name_png.vtex_c rename to game/panorama/images/custom_game/cards/mokou_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/mokou_png.vtex_c b/game/panorama/images/custom_game/cards/mokou_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mokou_png.vtex_c rename to game/panorama/images/custom_game/cards/mokou_png.vtex_c diff --git a/panorama/images/custom_game/cards/momiji_big_png.vtex_c b/game/panorama/images/custom_game/cards/momiji_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/momiji_big_png.vtex_c rename to game/panorama/images/custom_game/cards/momiji_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/momiji_name_png.vtex_c b/game/panorama/images/custom_game/cards/momiji_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/momiji_name_png.vtex_c rename to game/panorama/images/custom_game/cards/momiji_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/momiji_png.vtex_c b/game/panorama/images/custom_game/cards/momiji_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/momiji_png.vtex_c rename to game/panorama/images/custom_game/cards/momiji_png.vtex_c diff --git a/panorama/images/custom_game/cards/mugiyousei_big_png.vtex_c b/game/panorama/images/custom_game/cards/mugiyousei_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mugiyousei_big_png.vtex_c rename to game/panorama/images/custom_game/cards/mugiyousei_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/mugiyousei_name_png.vtex_c b/game/panorama/images/custom_game/cards/mugiyousei_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mugiyousei_name_png.vtex_c rename to game/panorama/images/custom_game/cards/mugiyousei_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/mugiyousei_png.vtex_c b/game/panorama/images/custom_game/cards/mugiyousei_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mugiyousei_png.vtex_c rename to game/panorama/images/custom_game/cards/mugiyousei_png.vtex_c diff --git a/panorama/images/custom_game/cards/mujiyousei_big_png.vtex_c b/game/panorama/images/custom_game/cards/mujiyousei_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mujiyousei_big_png.vtex_c rename to game/panorama/images/custom_game/cards/mujiyousei_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/mystia_big_png.vtex_c b/game/panorama/images/custom_game/cards/mystia_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mystia_big_png.vtex_c rename to game/panorama/images/custom_game/cards/mystia_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/mystia_name_png.vtex_c b/game/panorama/images/custom_game/cards/mystia_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mystia_name_png.vtex_c rename to game/panorama/images/custom_game/cards/mystia_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/mystia_png.vtex_c b/game/panorama/images/custom_game/cards/mystia_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/mystia_png.vtex_c rename to game/panorama/images/custom_game/cards/mystia_png.vtex_c diff --git a/panorama/images/custom_game/cards/n_bar_png.vtex_c b/game/panorama/images/custom_game/cards/n_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/n_bar_png.vtex_c rename to game/panorama/images/custom_game/cards/n_bar_png.vtex_c diff --git a/panorama/images/custom_game/cards/n_png.vtex_c b/game/panorama/images/custom_game/cards/n_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/n_png.vtex_c rename to game/panorama/images/custom_game/cards/n_png.vtex_c diff --git a/panorama/images/custom_game/cards/nazrin_big_png.vtex_c b/game/panorama/images/custom_game/cards/nazrin_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/nazrin_big_png.vtex_c rename to game/panorama/images/custom_game/cards/nazrin_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/nazrin_name_png.vtex_c b/game/panorama/images/custom_game/cards/nazrin_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/nazrin_name_png.vtex_c rename to game/panorama/images/custom_game/cards/nazrin_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/nazrin_png.vtex_c b/game/panorama/images/custom_game/cards/nazrin_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/nazrin_png.vtex_c rename to game/panorama/images/custom_game/cards/nazrin_png.vtex_c diff --git a/panorama/images/custom_game/cards/nitori_big_png.vtex_c b/game/panorama/images/custom_game/cards/nitori_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/nitori_big_png.vtex_c rename to game/panorama/images/custom_game/cards/nitori_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/nue_big_png.vtex_c b/game/panorama/images/custom_game/cards/nue_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/nue_big_png.vtex_c rename to game/panorama/images/custom_game/cards/nue_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/nue_name_png.vtex_c b/game/panorama/images/custom_game/cards/nue_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/nue_name_png.vtex_c rename to game/panorama/images/custom_game/cards/nue_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/nue_png.vtex_c b/game/panorama/images/custom_game/cards/nue_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/nue_png.vtex_c rename to game/panorama/images/custom_game/cards/nue_png.vtex_c diff --git a/panorama/images/custom_game/cards/patchouli_big_png.vtex_c b/game/panorama/images/custom_game/cards/patchouli_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/patchouli_big_png.vtex_c rename to game/panorama/images/custom_game/cards/patchouli_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/patchouli_name_png.vtex_c b/game/panorama/images/custom_game/cards/patchouli_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/patchouli_name_png.vtex_c rename to game/panorama/images/custom_game/cards/patchouli_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/patchouli_png.vtex_c b/game/panorama/images/custom_game/cards/patchouli_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/patchouli_png.vtex_c rename to game/panorama/images/custom_game/cards/patchouli_png.vtex_c diff --git a/panorama/images/custom_game/cards/r_bar_png.vtex_c b/game/panorama/images/custom_game/cards/r_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/r_bar_png.vtex_c rename to game/panorama/images/custom_game/cards/r_bar_png.vtex_c diff --git a/panorama/images/custom_game/cards/r_png.vtex_c b/game/panorama/images/custom_game/cards/r_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/r_png.vtex_c rename to game/panorama/images/custom_game/cards/r_png.vtex_c diff --git a/panorama/images/custom_game/cards/ran_big_png.vtex_c b/game/panorama/images/custom_game/cards/ran_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/ran_big_png.vtex_c rename to game/panorama/images/custom_game/cards/ran_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/ran_name_png.vtex_c b/game/panorama/images/custom_game/cards/ran_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/ran_name_png.vtex_c rename to game/panorama/images/custom_game/cards/ran_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/ran_png.vtex_c b/game/panorama/images/custom_game/cards/ran_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/ran_png.vtex_c rename to game/panorama/images/custom_game/cards/ran_png.vtex_c diff --git a/panorama/images/custom_game/cards/reimu_big_png.vtex_c b/game/panorama/images/custom_game/cards/reimu_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/reimu_big_png.vtex_c rename to game/panorama/images/custom_game/cards/reimu_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/reimu_name_png.vtex_c b/game/panorama/images/custom_game/cards/reimu_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/reimu_name_png.vtex_c rename to game/panorama/images/custom_game/cards/reimu_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/reimu_png.vtex_c b/game/panorama/images/custom_game/cards/reimu_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/reimu_png.vtex_c rename to game/panorama/images/custom_game/cards/reimu_png.vtex_c diff --git a/panorama/images/custom_game/cards/reisen_big_png.vtex_c b/game/panorama/images/custom_game/cards/reisen_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/reisen_big_png.vtex_c rename to game/panorama/images/custom_game/cards/reisen_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/reisen_name_png.vtex_c b/game/panorama/images/custom_game/cards/reisen_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/reisen_name_png.vtex_c rename to game/panorama/images/custom_game/cards/reisen_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/reisen_png.vtex_c b/game/panorama/images/custom_game/cards/reisen_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/reisen_png.vtex_c rename to game/panorama/images/custom_game/cards/reisen_png.vtex_c diff --git a/panorama/images/custom_game/cards/remilia_big_png.vtex_c b/game/panorama/images/custom_game/cards/remilia_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/remilia_big_png.vtex_c rename to game/panorama/images/custom_game/cards/remilia_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/remilia_name_png.vtex_c b/game/panorama/images/custom_game/cards/remilia_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/remilia_name_png.vtex_c rename to game/panorama/images/custom_game/cards/remilia_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/remilia_png.vtex_c b/game/panorama/images/custom_game/cards/remilia_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/remilia_png.vtex_c rename to game/panorama/images/custom_game/cards/remilia_png.vtex_c diff --git a/panorama/images/custom_game/cards/renko_big_png.vtex_c b/game/panorama/images/custom_game/cards/renko_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/renko_big_png.vtex_c rename to game/panorama/images/custom_game/cards/renko_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/renko_name_png.vtex_c b/game/panorama/images/custom_game/cards/renko_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/renko_name_png.vtex_c rename to game/panorama/images/custom_game/cards/renko_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/renko_png.vtex_c b/game/panorama/images/custom_game/cards/renko_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/renko_png.vtex_c rename to game/panorama/images/custom_game/cards/renko_png.vtex_c diff --git a/panorama/images/custom_game/cards/rin_big_png.vtex_c b/game/panorama/images/custom_game/cards/rin_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/rin_big_png.vtex_c rename to game/panorama/images/custom_game/cards/rin_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/rin_name_png.vtex_c b/game/panorama/images/custom_game/cards/rin_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/rin_name_png.vtex_c rename to game/panorama/images/custom_game/cards/rin_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/rin_png.vtex_c b/game/panorama/images/custom_game/cards/rin_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/rin_png.vtex_c rename to game/panorama/images/custom_game/cards/rin_png.vtex_c diff --git a/panorama/images/custom_game/cards/rumia_big_png.vtex_c b/game/panorama/images/custom_game/cards/rumia_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/rumia_big_png.vtex_c rename to game/panorama/images/custom_game/cards/rumia_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/rumia_name_png.vtex_c b/game/panorama/images/custom_game/cards/rumia_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/rumia_name_png.vtex_c rename to game/panorama/images/custom_game/cards/rumia_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/rumia_png.vtex_c b/game/panorama/images/custom_game/cards/rumia_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/rumia_png.vtex_c rename to game/panorama/images/custom_game/cards/rumia_png.vtex_c diff --git a/panorama/images/custom_game/cards/sakuya_big_png.vtex_c b/game/panorama/images/custom_game/cards/sakuya_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sakuya_big_png.vtex_c rename to game/panorama/images/custom_game/cards/sakuya_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/sakuya_name_png.vtex_c b/game/panorama/images/custom_game/cards/sakuya_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sakuya_name_png.vtex_c rename to game/panorama/images/custom_game/cards/sakuya_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/sakuya_png.vtex_c b/game/panorama/images/custom_game/cards/sakuya_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sakuya_png.vtex_c rename to game/panorama/images/custom_game/cards/sakuya_png.vtex_c diff --git a/panorama/images/custom_game/cards/sanae_big_png.vtex_c b/game/panorama/images/custom_game/cards/sanae_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sanae_big_png.vtex_c rename to game/panorama/images/custom_game/cards/sanae_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/sanae_name_png.vtex_c b/game/panorama/images/custom_game/cards/sanae_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sanae_name_png.vtex_c rename to game/panorama/images/custom_game/cards/sanae_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/sanae_png.vtex_c b/game/panorama/images/custom_game/cards/sanae_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sanae_png.vtex_c rename to game/panorama/images/custom_game/cards/sanae_png.vtex_c diff --git a/panorama/images/custom_game/cards/sariel_big_png.vtex_c b/game/panorama/images/custom_game/cards/sariel_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sariel_big_png.vtex_c rename to game/panorama/images/custom_game/cards/sariel_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/sariel_name_png.vtex_c b/game/panorama/images/custom_game/cards/sariel_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sariel_name_png.vtex_c rename to game/panorama/images/custom_game/cards/sariel_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/sariel_png.vtex_c b/game/panorama/images/custom_game/cards/sariel_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sariel_png.vtex_c rename to game/panorama/images/custom_game/cards/sariel_png.vtex_c diff --git a/panorama/images/custom_game/cards/satori_big_png.vtex_c b/game/panorama/images/custom_game/cards/satori_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/satori_big_png.vtex_c rename to game/panorama/images/custom_game/cards/satori_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/satori_name_png.vtex_c b/game/panorama/images/custom_game/cards/satori_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/satori_name_png.vtex_c rename to game/panorama/images/custom_game/cards/satori_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/satori_png.vtex_c b/game/panorama/images/custom_game/cards/satori_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/satori_png.vtex_c rename to game/panorama/images/custom_game/cards/satori_png.vtex_c diff --git a/panorama/images/custom_game/cards/seiga_big_png.vtex_c b/game/panorama/images/custom_game/cards/seiga_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/seiga_big_png.vtex_c rename to game/panorama/images/custom_game/cards/seiga_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/seiga_name_png.vtex_c b/game/panorama/images/custom_game/cards/seiga_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/seiga_name_png.vtex_c rename to game/panorama/images/custom_game/cards/seiga_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/seiga_png.vtex_c b/game/panorama/images/custom_game/cards/seiga_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/seiga_png.vtex_c rename to game/panorama/images/custom_game/cards/seiga_png.vtex_c diff --git a/panorama/images/custom_game/cards/seija_big_png.vtex_c b/game/panorama/images/custom_game/cards/seija_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/seija_big_png.vtex_c rename to game/panorama/images/custom_game/cards/seija_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/seija_name_png.vtex_c b/game/panorama/images/custom_game/cards/seija_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/seija_name_png.vtex_c rename to game/panorama/images/custom_game/cards/seija_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/seija_png.vtex_c b/game/panorama/images/custom_game/cards/seija_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/seija_png.vtex_c rename to game/panorama/images/custom_game/cards/seija_png.vtex_c diff --git a/panorama/images/custom_game/cards/shanghainingyou_big_png.vtex_c b/game/panorama/images/custom_game/cards/shanghainingyou_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shanghainingyou_big_png.vtex_c rename to game/panorama/images/custom_game/cards/shanghainingyou_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/shanghainingyou_name_png.vtex_c b/game/panorama/images/custom_game/cards/shanghainingyou_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shanghainingyou_name_png.vtex_c rename to game/panorama/images/custom_game/cards/shanghainingyou_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/shanghainingyou_png.vtex_c b/game/panorama/images/custom_game/cards/shanghainingyou_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shanghainingyou_png.vtex_c rename to game/panorama/images/custom_game/cards/shanghainingyou_png.vtex_c diff --git a/panorama/images/custom_game/cards/shikieiki_big_png.vtex_c b/game/panorama/images/custom_game/cards/shikieiki_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shikieiki_big_png.vtex_c rename to game/panorama/images/custom_game/cards/shikieiki_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/shikieiki_name_png.vtex_c b/game/panorama/images/custom_game/cards/shikieiki_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shikieiki_name_png.vtex_c rename to game/panorama/images/custom_game/cards/shikieiki_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/shikieiki_png.vtex_c b/game/panorama/images/custom_game/cards/shikieiki_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shikieiki_png.vtex_c rename to game/panorama/images/custom_game/cards/shikieiki_png.vtex_c diff --git a/panorama/images/custom_game/cards/shinki_big_png.vtex_c b/game/panorama/images/custom_game/cards/shinki_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shinki_big_png.vtex_c rename to game/panorama/images/custom_game/cards/shinki_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/shinki_name_png.vtex_c b/game/panorama/images/custom_game/cards/shinki_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shinki_name_png.vtex_c rename to game/panorama/images/custom_game/cards/shinki_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/shinki_png.vtex_c b/game/panorama/images/custom_game/cards/shinki_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shinki_png.vtex_c rename to game/panorama/images/custom_game/cards/shinki_png.vtex_c diff --git a/panorama/images/custom_game/cards/shinmyoumaru_big_png.vtex_c b/game/panorama/images/custom_game/cards/shinmyoumaru_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shinmyoumaru_big_png.vtex_c rename to game/panorama/images/custom_game/cards/shinmyoumaru_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/shinmyoumaru_name_png.vtex_c b/game/panorama/images/custom_game/cards/shinmyoumaru_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shinmyoumaru_name_png.vtex_c rename to game/panorama/images/custom_game/cards/shinmyoumaru_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/shinmyoumaru_png.vtex_c b/game/panorama/images/custom_game/cards/shinmyoumaru_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/shinmyoumaru_png.vtex_c rename to game/panorama/images/custom_game/cards/shinmyoumaru_png.vtex_c diff --git a/panorama/images/custom_game/cards/sizuha_big_png.vtex_c b/game/panorama/images/custom_game/cards/sizuha_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sizuha_big_png.vtex_c rename to game/panorama/images/custom_game/cards/sizuha_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/sizuha_name_png.vtex_c b/game/panorama/images/custom_game/cards/sizuha_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sizuha_name_png.vtex_c rename to game/panorama/images/custom_game/cards/sizuha_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/sizuha_png.vtex_c b/game/panorama/images/custom_game/cards/sizuha_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sizuha_png.vtex_c rename to game/panorama/images/custom_game/cards/sizuha_png.vtex_c diff --git a/panorama/images/custom_game/cards/soga_big_png.vtex_c b/game/panorama/images/custom_game/cards/soga_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/soga_big_png.vtex_c rename to game/panorama/images/custom_game/cards/soga_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/soga_name_png.vtex_c b/game/panorama/images/custom_game/cards/soga_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/soga_name_png.vtex_c rename to game/panorama/images/custom_game/cards/soga_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/soga_png.vtex_c b/game/panorama/images/custom_game/cards/soga_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/soga_png.vtex_c rename to game/panorama/images/custom_game/cards/soga_png.vtex_c diff --git a/panorama/images/custom_game/cards/sr_bar_png.vtex_c b/game/panorama/images/custom_game/cards/sr_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sr_bar_png.vtex_c rename to game/panorama/images/custom_game/cards/sr_bar_png.vtex_c diff --git a/panorama/images/custom_game/cards/sr_png.vtex_c b/game/panorama/images/custom_game/cards/sr_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sr_png.vtex_c rename to game/panorama/images/custom_game/cards/sr_png.vtex_c diff --git a/panorama/images/custom_game/cards/ssr_bar_png.vtex_c b/game/panorama/images/custom_game/cards/ssr_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/ssr_bar_png.vtex_c rename to game/panorama/images/custom_game/cards/ssr_bar_png.vtex_c diff --git a/panorama/images/custom_game/cards/ssr_png.vtex_c b/game/panorama/images/custom_game/cards/ssr_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/ssr_png.vtex_c rename to game/panorama/images/custom_game/cards/ssr_png.vtex_c diff --git a/panorama/images/custom_game/cards/star_big_png.vtex_c b/game/panorama/images/custom_game/cards/star_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/star_big_png.vtex_c rename to game/panorama/images/custom_game/cards/star_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/star_name_png.vtex_c b/game/panorama/images/custom_game/cards/star_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/star_name_png.vtex_c rename to game/panorama/images/custom_game/cards/star_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/star_png.vtex_c b/game/panorama/images/custom_game/cards/star_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/star_png.vtex_c rename to game/panorama/images/custom_game/cards/star_png.vtex_c diff --git a/panorama/images/custom_game/cards/suika_big_png.vtex_c b/game/panorama/images/custom_game/cards/suika_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/suika_big_png.vtex_c rename to game/panorama/images/custom_game/cards/suika_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/suika_name_png.vtex_c b/game/panorama/images/custom_game/cards/suika_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/suika_name_png.vtex_c rename to game/panorama/images/custom_game/cards/suika_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/suika_png.vtex_c b/game/panorama/images/custom_game/cards/suika_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/suika_png.vtex_c rename to game/panorama/images/custom_game/cards/suika_png.vtex_c diff --git a/panorama/images/custom_game/cards/sumireko_big_png.vtex_c b/game/panorama/images/custom_game/cards/sumireko_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sumireko_big_png.vtex_c rename to game/panorama/images/custom_game/cards/sumireko_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/sumireko_name_png.vtex_c b/game/panorama/images/custom_game/cards/sumireko_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sumireko_name_png.vtex_c rename to game/panorama/images/custom_game/cards/sumireko_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/sumireko_png.vtex_c b/game/panorama/images/custom_game/cards/sumireko_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sumireko_png.vtex_c rename to game/panorama/images/custom_game/cards/sumireko_png.vtex_c diff --git a/panorama/images/custom_game/cards/sunny_big_png.vtex_c b/game/panorama/images/custom_game/cards/sunny_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sunny_big_png.vtex_c rename to game/panorama/images/custom_game/cards/sunny_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/sunny_name_png.vtex_c b/game/panorama/images/custom_game/cards/sunny_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sunny_name_png.vtex_c rename to game/panorama/images/custom_game/cards/sunny_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/sunny_png.vtex_c b/game/panorama/images/custom_game/cards/sunny_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/sunny_png.vtex_c rename to game/panorama/images/custom_game/cards/sunny_png.vtex_c diff --git a/panorama/images/custom_game/cards/suwako_big_png.vtex_c b/game/panorama/images/custom_game/cards/suwako_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/suwako_big_png.vtex_c rename to game/panorama/images/custom_game/cards/suwako_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/suwako_name_png.vtex_c b/game/panorama/images/custom_game/cards/suwako_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/suwako_name_png.vtex_c rename to game/panorama/images/custom_game/cards/suwako_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/suwako_png.vtex_c b/game/panorama/images/custom_game/cards/suwako_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/suwako_png.vtex_c rename to game/panorama/images/custom_game/cards/suwako_png.vtex_c diff --git a/panorama/images/custom_game/cards/tenshi_big_png.vtex_c b/game/panorama/images/custom_game/cards/tenshi_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/tenshi_big_png.vtex_c rename to game/panorama/images/custom_game/cards/tenshi_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/tenshi_name_png.vtex_c b/game/panorama/images/custom_game/cards/tenshi_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/tenshi_name_png.vtex_c rename to game/panorama/images/custom_game/cards/tenshi_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/tenshi_png.vtex_c b/game/panorama/images/custom_game/cards/tenshi_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/tenshi_png.vtex_c rename to game/panorama/images/custom_game/cards/tenshi_png.vtex_c diff --git a/panorama/images/custom_game/cards/toramaru_big_png.vtex_c b/game/panorama/images/custom_game/cards/toramaru_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/toramaru_big_png.vtex_c rename to game/panorama/images/custom_game/cards/toramaru_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/toramaru_name_png.vtex_c b/game/panorama/images/custom_game/cards/toramaru_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/toramaru_name_png.vtex_c rename to game/panorama/images/custom_game/cards/toramaru_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/toramaru_png.vtex_c b/game/panorama/images/custom_game/cards/toramaru_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/toramaru_png.vtex_c rename to game/panorama/images/custom_game/cards/toramaru_png.vtex_c diff --git a/panorama/images/custom_game/cards/utsuho_big_png.vtex_c b/game/panorama/images/custom_game/cards/utsuho_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/utsuho_big_png.vtex_c rename to game/panorama/images/custom_game/cards/utsuho_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/utsuho_name_png.vtex_c b/game/panorama/images/custom_game/cards/utsuho_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/utsuho_name_png.vtex_c rename to game/panorama/images/custom_game/cards/utsuho_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/utsuho_png.vtex_c b/game/panorama/images/custom_game/cards/utsuho_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/utsuho_png.vtex_c rename to game/panorama/images/custom_game/cards/utsuho_png.vtex_c diff --git a/panorama/images/custom_game/cards/wriggle_big_png.vtex_c b/game/panorama/images/custom_game/cards/wriggle_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/wriggle_big_png.vtex_c rename to game/panorama/images/custom_game/cards/wriggle_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/wriggle_name_png.vtex_c b/game/panorama/images/custom_game/cards/wriggle_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/wriggle_name_png.vtex_c rename to game/panorama/images/custom_game/cards/wriggle_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/wriggle_png.vtex_c b/game/panorama/images/custom_game/cards/wriggle_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/wriggle_png.vtex_c rename to game/panorama/images/custom_game/cards/wriggle_png.vtex_c diff --git a/panorama/images/custom_game/cards/yoshika_big_png.vtex_c b/game/panorama/images/custom_game/cards/yoshika_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yoshika_big_png.vtex_c rename to game/panorama/images/custom_game/cards/yoshika_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/yoshika_name_png.vtex_c b/game/panorama/images/custom_game/cards/yoshika_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yoshika_name_png.vtex_c rename to game/panorama/images/custom_game/cards/yoshika_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/yoshika_png.vtex_c b/game/panorama/images/custom_game/cards/yoshika_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yoshika_png.vtex_c rename to game/panorama/images/custom_game/cards/yoshika_png.vtex_c diff --git a/panorama/images/custom_game/cards/youmu_big_png.vtex_c b/game/panorama/images/custom_game/cards/youmu_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/youmu_big_png.vtex_c rename to game/panorama/images/custom_game/cards/youmu_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/youmu_name_png.vtex_c b/game/panorama/images/custom_game/cards/youmu_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/youmu_name_png.vtex_c rename to game/panorama/images/custom_game/cards/youmu_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/youmu_png.vtex_c b/game/panorama/images/custom_game/cards/youmu_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/youmu_png.vtex_c rename to game/panorama/images/custom_game/cards/youmu_png.vtex_c diff --git a/panorama/images/custom_game/cards/yukari_big_png.vtex_c b/game/panorama/images/custom_game/cards/yukari_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yukari_big_png.vtex_c rename to game/panorama/images/custom_game/cards/yukari_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/yukari_name_png.vtex_c b/game/panorama/images/custom_game/cards/yukari_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yukari_name_png.vtex_c rename to game/panorama/images/custom_game/cards/yukari_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/yukari_png.vtex_c b/game/panorama/images/custom_game/cards/yukari_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yukari_png.vtex_c rename to game/panorama/images/custom_game/cards/yukari_png.vtex_c diff --git a/panorama/images/custom_game/cards/yumemi_big_png.vtex_c b/game/panorama/images/custom_game/cards/yumemi_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yumemi_big_png.vtex_c rename to game/panorama/images/custom_game/cards/yumemi_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/yumemi_name_png.vtex_c b/game/panorama/images/custom_game/cards/yumemi_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yumemi_name_png.vtex_c rename to game/panorama/images/custom_game/cards/yumemi_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/yumemi_png.vtex_c b/game/panorama/images/custom_game/cards/yumemi_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yumemi_png.vtex_c rename to game/panorama/images/custom_game/cards/yumemi_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuugi_big_png.vtex_c b/game/panorama/images/custom_game/cards/yuugi_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuugi_big_png.vtex_c rename to game/panorama/images/custom_game/cards/yuugi_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuugi_name_png.vtex_c b/game/panorama/images/custom_game/cards/yuugi_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuugi_name_png.vtex_c rename to game/panorama/images/custom_game/cards/yuugi_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuugi_png.vtex_c b/game/panorama/images/custom_game/cards/yuugi_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuugi_png.vtex_c rename to game/panorama/images/custom_game/cards/yuugi_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuuka_big_png.vtex_c b/game/panorama/images/custom_game/cards/yuuka_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuuka_big_png.vtex_c rename to game/panorama/images/custom_game/cards/yuuka_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuuka_name_png.vtex_c b/game/panorama/images/custom_game/cards/yuuka_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuuka_name_png.vtex_c rename to game/panorama/images/custom_game/cards/yuuka_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuuka_png.vtex_c b/game/panorama/images/custom_game/cards/yuuka_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuuka_png.vtex_c rename to game/panorama/images/custom_game/cards/yuuka_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuyuko_big_png.vtex_c b/game/panorama/images/custom_game/cards/yuyuko_big_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuyuko_big_png.vtex_c rename to game/panorama/images/custom_game/cards/yuyuko_big_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuyuko_name_png.vtex_c b/game/panorama/images/custom_game/cards/yuyuko_name_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuyuko_name_png.vtex_c rename to game/panorama/images/custom_game/cards/yuyuko_name_png.vtex_c diff --git a/panorama/images/custom_game/cards/yuyuko_png.vtex_c b/game/panorama/images/custom_game/cards/yuyuko_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cards/yuyuko_png.vtex_c rename to game/panorama/images/custom_game/cards/yuyuko_png.vtex_c diff --git a/panorama/images/custom_game/cc_process_bar_bg_png.vtex_c b/game/panorama/images/custom_game/cc_process_bar_bg_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cc_process_bar_bg_png.vtex_c rename to game/panorama/images/custom_game/cc_process_bar_bg_png.vtex_c diff --git a/panorama/images/custom_game/cc_process_bar_pct_png.vtex_c b/game/panorama/images/custom_game/cc_process_bar_pct_png.vtex_c similarity index 100% rename from panorama/images/custom_game/cc_process_bar_pct_png.vtex_c rename to game/panorama/images/custom_game/cc_process_bar_pct_png.vtex_c diff --git a/panorama/images/custom_game/circle_button_png.vtex_c b/game/panorama/images/custom_game/circle_button_png.vtex_c similarity index 100% rename from panorama/images/custom_game/circle_button_png.vtex_c rename to game/panorama/images/custom_game/circle_button_png.vtex_c diff --git a/panorama/images/custom_game/disable_png.vtex_c b/game/panorama/images/custom_game/disable_png.vtex_c similarity index 100% rename from panorama/images/custom_game/disable_png.vtex_c rename to game/panorama/images/custom_game/disable_png.vtex_c diff --git a/panorama/images/custom_game/dps_bar_png.vtex_c b/game/panorama/images/custom_game/dps_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/dps_bar_png.vtex_c rename to game/panorama/images/custom_game/dps_bar_png.vtex_c diff --git a/panorama/images/custom_game/fairy_png.vtex_c b/game/panorama/images/custom_game/fairy_png.vtex_c similarity index 100% rename from panorama/images/custom_game/fairy_png.vtex_c rename to game/panorama/images/custom_game/fairy_png.vtex_c diff --git a/panorama/images/custom_game/food_count_png.vtex_c b/game/panorama/images/custom_game/food_count_png.vtex_c similarity index 100% rename from panorama/images/custom_game/food_count_png.vtex_c rename to game/panorama/images/custom_game/food_count_png.vtex_c diff --git a/panorama/images/custom_game/hook_png.vtex_c b/game/panorama/images/custom_game/hook_png.vtex_c similarity index 100% rename from panorama/images/custom_game/hook_png.vtex_c rename to game/panorama/images/custom_game/hook_png.vtex_c diff --git a/panorama/images/custom_game/list_header_closing_png.vtex_c b/game/panorama/images/custom_game/list_header_closing_png.vtex_c similarity index 100% rename from panorama/images/custom_game/list_header_closing_png.vtex_c rename to game/panorama/images/custom_game/list_header_closing_png.vtex_c diff --git a/panorama/images/custom_game/list_header_opening_png.vtex_c b/game/panorama/images/custom_game/list_header_opening_png.vtex_c similarity index 100% rename from panorama/images/custom_game/list_header_opening_png.vtex_c rename to game/panorama/images/custom_game/list_header_opening_png.vtex_c diff --git a/panorama/images/custom_game/loading_ico2_png.vtex_c b/game/panorama/images/custom_game/loading_ico2_png.vtex_c similarity index 100% rename from panorama/images/custom_game/loading_ico2_png.vtex_c rename to game/panorama/images/custom_game/loading_ico2_png.vtex_c diff --git a/panorama/images/custom_game/loading_ico_png.vtex_c b/game/panorama/images/custom_game/loading_ico_png.vtex_c similarity index 100% rename from panorama/images/custom_game/loading_ico_png.vtex_c rename to game/panorama/images/custom_game/loading_ico_png.vtex_c diff --git a/panorama/images/custom_game/mask01_png.vtex_c b/game/panorama/images/custom_game/mask01_png.vtex_c similarity index 100% rename from panorama/images/custom_game/mask01_png.vtex_c rename to game/panorama/images/custom_game/mask01_png.vtex_c diff --git a/panorama/images/custom_game/note_png.vtex_c b/game/panorama/images/custom_game/note_png.vtex_c similarity index 100% rename from panorama/images/custom_game/note_png.vtex_c rename to game/panorama/images/custom_game/note_png.vtex_c diff --git a/panorama/images/custom_game/qr_alipay_png.vtex_c b/game/panorama/images/custom_game/qr_alipay_png.vtex_c similarity index 100% rename from panorama/images/custom_game/qr_alipay_png.vtex_c rename to game/panorama/images/custom_game/qr_alipay_png.vtex_c diff --git a/panorama/images/custom_game/qr_wechat_png.vtex_c b/game/panorama/images/custom_game/qr_wechat_png.vtex_c similarity index 100% rename from panorama/images/custom_game/qr_wechat_png.vtex_c rename to game/panorama/images/custom_game/qr_wechat_png.vtex_c diff --git a/panorama/images/custom_game/refresh2_png.vtex_c b/game/panorama/images/custom_game/refresh2_png.vtex_c similarity index 100% rename from panorama/images/custom_game/refresh2_png.vtex_c rename to game/panorama/images/custom_game/refresh2_png.vtex_c diff --git a/panorama/images/custom_game/refresh_png.vtex_c b/game/panorama/images/custom_game/refresh_png.vtex_c similarity index 100% rename from panorama/images/custom_game/refresh_png.vtex_c rename to game/panorama/images/custom_game/refresh_png.vtex_c diff --git a/panorama/images/custom_game/setup/back_btn_disabled_png.vtex_c b/game/panorama/images/custom_game/setup/back_btn_disabled_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/back_btn_disabled_png.vtex_c rename to game/panorama/images/custom_game/setup/back_btn_disabled_png.vtex_c diff --git a/panorama/images/custom_game/setup/back_btn_hover_png.vtex_c b/game/panorama/images/custom_game/setup/back_btn_hover_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/back_btn_hover_png.vtex_c rename to game/panorama/images/custom_game/setup/back_btn_hover_png.vtex_c diff --git a/panorama/images/custom_game/setup/back_btn_normal_png.vtex_c b/game/panorama/images/custom_game/setup/back_btn_normal_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/back_btn_normal_png.vtex_c rename to game/panorama/images/custom_game/setup/back_btn_normal_png.vtex_c diff --git a/panorama/images/custom_game/setup/bar01_png.vtex_c b/game/panorama/images/custom_game/setup/bar01_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/bar01_png.vtex_c rename to game/panorama/images/custom_game/setup/bar01_png.vtex_c diff --git a/panorama/images/custom_game/setup/bar02_png.vtex_c b/game/panorama/images/custom_game/setup/bar02_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/bar02_png.vtex_c rename to game/panorama/images/custom_game/setup/bar02_png.vtex_c diff --git a/panorama/images/custom_game/setup/bar03_png.vtex_c b/game/panorama/images/custom_game/setup/bar03_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/bar03_png.vtex_c rename to game/panorama/images/custom_game/setup/bar03_png.vtex_c diff --git a/panorama/images/custom_game/setup/cardinfo_ability_png.vtex_c b/game/panorama/images/custom_game/setup/cardinfo_ability_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/cardinfo_ability_png.vtex_c rename to game/panorama/images/custom_game/setup/cardinfo_ability_png.vtex_c diff --git a/panorama/images/custom_game/setup/cardinfo_btn_disabled_png.vtex_c b/game/panorama/images/custom_game/setup/cardinfo_btn_disabled_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/cardinfo_btn_disabled_png.vtex_c rename to game/panorama/images/custom_game/setup/cardinfo_btn_disabled_png.vtex_c diff --git a/panorama/images/custom_game/setup/cardinfo_btn_hover_png.vtex_c b/game/panorama/images/custom_game/setup/cardinfo_btn_hover_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/cardinfo_btn_hover_png.vtex_c rename to game/panorama/images/custom_game/setup/cardinfo_btn_hover_png.vtex_c diff --git a/panorama/images/custom_game/setup/cardinfo_btn_png.vtex_c b/game/panorama/images/custom_game/setup/cardinfo_btn_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/cardinfo_btn_png.vtex_c rename to game/panorama/images/custom_game/setup/cardinfo_btn_png.vtex_c diff --git a/panorama/images/custom_game/setup/continue_btn_disabled_png.vtex_c b/game/panorama/images/custom_game/setup/continue_btn_disabled_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/continue_btn_disabled_png.vtex_c rename to game/panorama/images/custom_game/setup/continue_btn_disabled_png.vtex_c diff --git a/panorama/images/custom_game/setup/continue_btn_hover_png.vtex_c b/game/panorama/images/custom_game/setup/continue_btn_hover_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/continue_btn_hover_png.vtex_c rename to game/panorama/images/custom_game/setup/continue_btn_hover_png.vtex_c diff --git a/panorama/images/custom_game/setup/continue_btn_normal_png.vtex_c b/game/panorama/images/custom_game/setup/continue_btn_normal_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/continue_btn_normal_png.vtex_c rename to game/panorama/images/custom_game/setup/continue_btn_normal_png.vtex_c diff --git a/panorama/images/custom_game/setup/n_bar_png.vtex_c b/game/panorama/images/custom_game/setup/n_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/n_bar_png.vtex_c rename to game/panorama/images/custom_game/setup/n_bar_png.vtex_c diff --git a/panorama/images/custom_game/setup/n_png.vtex_c b/game/panorama/images/custom_game/setup/n_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/n_png.vtex_c rename to game/panorama/images/custom_game/setup/n_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_hover_left_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_hover_left_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_hover_left_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_hover_left_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_hover_mid_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_hover_mid_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_hover_mid_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_hover_mid_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_hover_right_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_hover_right_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_hover_right_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_hover_right_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_left_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_left_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_left_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_left_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_mid_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_mid_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_mid_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_mid_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_right_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_right_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_right_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_right_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_single_hover_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_single_hover_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_single_hover_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_single_hover_png.vtex_c diff --git a/panorama/images/custom_game/setup/option_button_single_png.vtex_c b/game/panorama/images/custom_game/setup/option_button_single_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/option_button_single_png.vtex_c rename to game/panorama/images/custom_game/setup/option_button_single_png.vtex_c diff --git a/panorama/images/custom_game/setup/r_bar_png.vtex_c b/game/panorama/images/custom_game/setup/r_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/r_bar_png.vtex_c rename to game/panorama/images/custom_game/setup/r_bar_png.vtex_c diff --git a/panorama/images/custom_game/setup/r_png.vtex_c b/game/panorama/images/custom_game/setup/r_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/r_png.vtex_c rename to game/panorama/images/custom_game/setup/r_png.vtex_c diff --git a/panorama/images/custom_game/setup/sr_bar_png.vtex_c b/game/panorama/images/custom_game/setup/sr_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/sr_bar_png.vtex_c rename to game/panorama/images/custom_game/setup/sr_bar_png.vtex_c diff --git a/panorama/images/custom_game/setup/sr_png.vtex_c b/game/panorama/images/custom_game/setup/sr_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/sr_png.vtex_c rename to game/panorama/images/custom_game/setup/sr_png.vtex_c diff --git a/panorama/images/custom_game/setup/ssr_bar_png.vtex_c b/game/panorama/images/custom_game/setup/ssr_bar_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/ssr_bar_png.vtex_c rename to game/panorama/images/custom_game/setup/ssr_bar_png.vtex_c diff --git a/panorama/images/custom_game/setup/ssr_png.vtex_c b/game/panorama/images/custom_game/setup/ssr_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/ssr_png.vtex_c rename to game/panorama/images/custom_game/setup/ssr_png.vtex_c diff --git a/panorama/images/custom_game/setup/title_hr_png.vtex_c b/game/panorama/images/custom_game/setup/title_hr_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/title_hr_png.vtex_c rename to game/panorama/images/custom_game/setup/title_hr_png.vtex_c diff --git a/panorama/images/custom_game/setup/title_left_png.vtex_c b/game/panorama/images/custom_game/setup/title_left_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/title_left_png.vtex_c rename to game/panorama/images/custom_game/setup/title_left_png.vtex_c diff --git a/panorama/images/custom_game/setup/title_right_png.vtex_c b/game/panorama/images/custom_game/setup/title_right_png.vtex_c similarity index 100% rename from panorama/images/custom_game/setup/title_right_png.vtex_c rename to game/panorama/images/custom_game/setup/title_right_png.vtex_c diff --git a/panorama/images/custom_game/star_png.vtex_c b/game/panorama/images/custom_game/star_png.vtex_c similarity index 100% rename from panorama/images/custom_game/star_png.vtex_c rename to game/panorama/images/custom_game/star_png.vtex_c diff --git a/panorama/images/custom_game/wechatpay_png.vtex_c b/game/panorama/images/custom_game/wechatpay_png.vtex_c similarity index 100% rename from panorama/images/custom_game/wechatpay_png.vtex_c rename to game/panorama/images/custom_game/wechatpay_png.vtex_c diff --git a/panorama/images/heroes/icons/npc_dota_hero_juggernaut_png.vtex_c b/game/panorama/images/heroes/icons/npc_dota_hero_juggernaut_png.vtex_c similarity index 100% rename from panorama/images/heroes/icons/npc_dota_hero_juggernaut_png.vtex_c rename to game/panorama/images/heroes/icons/npc_dota_hero_juggernaut_png.vtex_c diff --git a/panorama/images/heroes/icons/npc_dota_hero_lina_png.vtex_c b/game/panorama/images/heroes/icons/npc_dota_hero_lina_png.vtex_c similarity index 100% rename from panorama/images/heroes/icons/npc_dota_hero_lina_png.vtex_c rename to game/panorama/images/heroes/icons/npc_dota_hero_lina_png.vtex_c diff --git a/panorama/images/heroes/npc_dota_hero_juggernaut_png.vtex_c b/game/panorama/images/heroes/npc_dota_hero_juggernaut_png.vtex_c similarity index 100% rename from panorama/images/heroes/npc_dota_hero_juggernaut_png.vtex_c rename to game/panorama/images/heroes/npc_dota_hero_juggernaut_png.vtex_c diff --git a/panorama/images/heroes/npc_dota_hero_lina_png.vtex_c b/game/panorama/images/heroes/npc_dota_hero_lina_png.vtex_c similarity index 100% rename from panorama/images/heroes/npc_dota_hero_lina_png.vtex_c rename to game/panorama/images/heroes/npc_dota_hero_lina_png.vtex_c diff --git a/panorama/images/heroes/selection/npc_dota_hero_lina_png.vtex_c b/game/panorama/images/heroes/selection/npc_dota_hero_lina_png.vtex_c similarity index 100% rename from panorama/images/heroes/selection/npc_dota_hero_lina_png.vtex_c rename to game/panorama/images/heroes/selection/npc_dota_hero_lina_png.vtex_c diff --git a/panorama/localization/addon_english.txt b/game/panorama/localization/addon_english.txt similarity index 100% rename from panorama/localization/addon_english.txt rename to game/panorama/localization/addon_english.txt diff --git a/panorama/localization/addon_schinese.txt b/game/panorama/localization/addon_schinese.txt similarity index 100% rename from panorama/localization/addon_schinese.txt rename to game/panorama/localization/addon_schinese.txt diff --git a/panorama/styles/custom_game/custom_loading_screen.vcss_c b/game/panorama/styles/custom_game/custom_loading_screen.vcss_c similarity index 100% rename from panorama/styles/custom_game/custom_loading_screen.vcss_c rename to game/panorama/styles/custom_game/custom_loading_screen.vcss_c diff --git a/panorama/styles/custom_game/dps_panel.vcss_c b/game/panorama/styles/custom_game/dps_panel.vcss_c similarity index 100% rename from panorama/styles/custom_game/dps_panel.vcss_c rename to game/panorama/styles/custom_game/dps_panel.vcss_c diff --git a/panorama/styles/custom_game/end_screen.vcss_c b/game/panorama/styles/custom_game/end_screen.vcss_c similarity index 100% rename from panorama/styles/custom_game/end_screen.vcss_c rename to game/panorama/styles/custom_game/end_screen.vcss_c diff --git a/panorama/styles/custom_game/info.vcss_c b/game/panorama/styles/custom_game/info.vcss_c similarity index 100% rename from panorama/styles/custom_game/info.vcss_c rename to game/panorama/styles/custom_game/info.vcss_c diff --git a/panorama/styles/custom_game/movie.vcss_c b/game/panorama/styles/custom_game/movie.vcss_c similarity index 100% rename from panorama/styles/custom_game/movie.vcss_c rename to game/panorama/styles/custom_game/movie.vcss_c diff --git a/panorama/styles/custom_game/shop.vcss_c b/game/panorama/styles/custom_game/shop.vcss_c similarity index 100% rename from panorama/styles/custom_game/shop.vcss_c rename to game/panorama/styles/custom_game/shop.vcss_c diff --git a/panorama/styles/custom_game/team_select.vcss_c b/game/panorama/styles/custom_game/team_select.vcss_c similarity index 100% rename from panorama/styles/custom_game/team_select.vcss_c rename to game/panorama/styles/custom_game/team_select.vcss_c diff --git a/panorama/videos/heroes/npc_dota_hero_juggernaut.webm b/game/panorama/videos/heroes/npc_dota_hero_juggernaut.webm similarity index 100% rename from panorama/videos/heroes/npc_dota_hero_juggernaut.webm rename to game/panorama/videos/heroes/npc_dota_hero_juggernaut.webm diff --git a/panorama/videos/heroes/npc_dota_hero_lina.webm b/game/panorama/videos/heroes/npc_dota_hero_lina.webm similarity index 100% rename from panorama/videos/heroes/npc_dota_hero_lina.webm rename to game/panorama/videos/heroes/npc_dota_hero_lina.webm diff --git a/particles/base_attacks/fountain_attack_attack_glow.vpcf_c b/game/particles/base_attacks/fountain_attack_attack_glow.vpcf_c similarity index 100% rename from particles/base_attacks/fountain_attack_attack_glow.vpcf_c rename to game/particles/base_attacks/fountain_attack_attack_glow.vpcf_c diff --git a/particles/base_attacks/ranged_siege_good_highlight.vpcf_c b/game/particles/base_attacks/ranged_siege_good_highlight.vpcf_c similarity index 100% rename from particles/base_attacks/ranged_siege_good_highlight.vpcf_c rename to game/particles/base_attacks/ranged_siege_good_highlight.vpcf_c diff --git a/particles/base_attacks/ranged_siege_good_trail.vpcf_c b/game/particles/base_attacks/ranged_siege_good_trail.vpcf_c similarity index 100% rename from particles/base_attacks/ranged_siege_good_trail.vpcf_c rename to game/particles/base_attacks/ranged_siege_good_trail.vpcf_c diff --git a/particles/base_attacks/ranged_tower_good_launch.vpcf_c b/game/particles/base_attacks/ranged_tower_good_launch.vpcf_c similarity index 100% rename from particles/base_attacks/ranged_tower_good_launch.vpcf_c rename to game/particles/base_attacks/ranged_tower_good_launch.vpcf_c diff --git a/particles/basic_ambient/basic_ambient.vpcf_c b/game/particles/basic_ambient/basic_ambient.vpcf_c similarity index 100% rename from particles/basic_ambient/basic_ambient.vpcf_c rename to game/particles/basic_ambient/basic_ambient.vpcf_c diff --git a/particles/basic_explosion/basic_explosion.vpcf_c b/game/particles/basic_explosion/basic_explosion.vpcf_c similarity index 100% rename from particles/basic_explosion/basic_explosion.vpcf_c rename to game/particles/basic_explosion/basic_explosion.vpcf_c diff --git a/particles/basic_explosion/basic_explosion_bits.vpcf_c b/game/particles/basic_explosion/basic_explosion_bits.vpcf_c similarity index 100% rename from particles/basic_explosion/basic_explosion_bits.vpcf_c rename to game/particles/basic_explosion/basic_explosion_bits.vpcf_c diff --git a/particles/basic_explosion/basic_explosion_burst.vpcf_c b/game/particles/basic_explosion/basic_explosion_burst.vpcf_c similarity index 100% rename from particles/basic_explosion/basic_explosion_burst.vpcf_c rename to game/particles/basic_explosion/basic_explosion_burst.vpcf_c diff --git a/particles/basic_explosion/basic_explosion_flash.vpcf_c b/game/particles/basic_explosion/basic_explosion_flash.vpcf_c similarity index 100% rename from particles/basic_explosion/basic_explosion_flash.vpcf_c rename to game/particles/basic_explosion/basic_explosion_flash.vpcf_c diff --git a/particles/basic_projectile/basic_projectile.vpcf_c b/game/particles/basic_projectile/basic_projectile.vpcf_c similarity index 100% rename from particles/basic_projectile/basic_projectile.vpcf_c rename to game/particles/basic_projectile/basic_projectile.vpcf_c diff --git a/particles/basic_projectile/basic_projectile_explosion.vpcf_c b/game/particles/basic_projectile/basic_projectile_explosion.vpcf_c similarity index 100% rename from particles/basic_projectile/basic_projectile_explosion.vpcf_c rename to game/particles/basic_projectile/basic_projectile_explosion.vpcf_c diff --git a/particles/basic_projectile/basic_projectile_explosion_flash.vpcf_c b/game/particles/basic_projectile/basic_projectile_explosion_flash.vpcf_c similarity index 100% rename from particles/basic_projectile/basic_projectile_explosion_flash.vpcf_c rename to game/particles/basic_projectile/basic_projectile_explosion_flash.vpcf_c diff --git a/particles/basic_projectile/basic_projectile_launch.vpcf_c b/game/particles/basic_projectile/basic_projectile_launch.vpcf_c similarity index 100% rename from particles/basic_projectile/basic_projectile_launch.vpcf_c rename to game/particles/basic_projectile/basic_projectile_launch.vpcf_c diff --git a/particles/basic_projectile/basic_projectile_trail.vpcf_c b/game/particles/basic_projectile/basic_projectile_trail.vpcf_c similarity index 100% rename from particles/basic_projectile/basic_projectile_trail.vpcf_c rename to game/particles/basic_projectile/basic_projectile_trail.vpcf_c diff --git a/particles/basic_rope/basic_rope.vpcf_c b/game/particles/basic_rope/basic_rope.vpcf_c similarity index 100% rename from particles/basic_rope/basic_rope.vpcf_c rename to game/particles/basic_rope/basic_rope.vpcf_c diff --git a/particles/basic_trail/basic_trail.vpcf_c b/game/particles/basic_trail/basic_trail.vpcf_c similarity index 100% rename from particles/basic_trail/basic_trail.vpcf_c rename to game/particles/basic_trail/basic_trail.vpcf_c diff --git a/particles/bosses/thtd_keine/ability_bosses_keine.vpcf_c b/game/particles/bosses/thtd_keine/ability_bosses_keine.vpcf_c similarity index 100% rename from particles/bosses/thtd_keine/ability_bosses_keine.vpcf_c rename to game/particles/bosses/thtd_keine/ability_bosses_keine.vpcf_c diff --git a/particles/bosses/thtd_keine/ability_bosses_keine_a.vpcf_c b/game/particles/bosses/thtd_keine/ability_bosses_keine_a.vpcf_c similarity index 100% rename from particles/bosses/thtd_keine/ability_bosses_keine_a.vpcf_c rename to game/particles/bosses/thtd_keine/ability_bosses_keine_a.vpcf_c diff --git a/particles/bosses/thtd_keine/ability_bosses_keine_a0.vpcf_c b/game/particles/bosses/thtd_keine/ability_bosses_keine_a0.vpcf_c similarity index 100% rename from particles/bosses/thtd_keine/ability_bosses_keine_a0.vpcf_c rename to game/particles/bosses/thtd_keine/ability_bosses_keine_a0.vpcf_c diff --git a/particles/bosses/thtd_keine/ability_bosses_keine_a1.vpcf_c b/game/particles/bosses/thtd_keine/ability_bosses_keine_a1.vpcf_c similarity index 100% rename from particles/bosses/thtd_keine/ability_bosses_keine_a1.vpcf_c rename to game/particles/bosses/thtd_keine/ability_bosses_keine_a1.vpcf_c diff --git a/particles/bosses/thtd_keine/ability_bosses_keine_b.vpcf_c b/game/particles/bosses/thtd_keine/ability_bosses_keine_b.vpcf_c similarity index 100% rename from particles/bosses/thtd_keine/ability_bosses_keine_b.vpcf_c rename to game/particles/bosses/thtd_keine/ability_bosses_keine_b.vpcf_c diff --git a/particles/bosses/thtd_keine/ability_bosses_keine_c.vpcf_c b/game/particles/bosses/thtd_keine/ability_bosses_keine_c.vpcf_c similarity index 100% rename from particles/bosses/thtd_keine/ability_bosses_keine_c.vpcf_c rename to game/particles/bosses/thtd_keine/ability_bosses_keine_c.vpcf_c diff --git a/particles/common/thtd_food_msg.vpcf_c b/game/particles/common/thtd_food_msg.vpcf_c similarity index 100% rename from particles/common/thtd_food_msg.vpcf_c rename to game/particles/common/thtd_food_msg.vpcf_c diff --git a/particles/custom/_dc_saber_omni_slash_tgt.vpcf_c b/game/particles/custom/_dc_saber_omni_slash_tgt.vpcf_c similarity index 100% rename from particles/custom/_dc_saber_omni_slash_tgt.vpcf_c rename to game/particles/custom/_dc_saber_omni_slash_tgt.vpcf_c diff --git a/particles/custom/_dc_saber_omni_slash_trail.vpcf_c b/game/particles/custom/_dc_saber_omni_slash_trail.vpcf_c similarity index 100% rename from particles/custom/_dc_saber_omni_slash_trail.vpcf_c rename to game/particles/custom/_dc_saber_omni_slash_trail.vpcf_c diff --git a/particles/custom/dc_saber_omni_slash_flash.vpcf_c b/game/particles/custom/dc_saber_omni_slash_flash.vpcf_c similarity index 100% rename from particles/custom/dc_saber_omni_slash_flash.vpcf_c rename to game/particles/custom/dc_saber_omni_slash_flash.vpcf_c diff --git a/particles/custom/dc_saber_omni_slash_rope.vpcf_c b/game/particles/custom/dc_saber_omni_slash_rope.vpcf_c similarity index 100% rename from particles/custom/dc_saber_omni_slash_rope.vpcf_c rename to game/particles/custom/dc_saber_omni_slash_rope.vpcf_c diff --git a/particles/custom/dc_saber_omni_slash_trail_blur.vpcf_c b/game/particles/custom/dc_saber_omni_slash_trail_blur.vpcf_c similarity index 100% rename from particles/custom/dc_saber_omni_slash_trail_blur.vpcf_c rename to game/particles/custom/dc_saber_omni_slash_trail_blur.vpcf_c diff --git a/particles/custom/dc_saber_omni_slash_trail_glow.vpcf_c b/game/particles/custom/dc_saber_omni_slash_trail_glow.vpcf_c similarity index 100% rename from particles/custom/dc_saber_omni_slash_trail_glow.vpcf_c rename to game/particles/custom/dc_saber_omni_slash_trail_glow.vpcf_c diff --git a/particles/custom/dc_saber_omni_slash_trail_glow_b.vpcf_c b/game/particles/custom/dc_saber_omni_slash_trail_glow_b.vpcf_c similarity index 100% rename from particles/custom/dc_saber_omni_slash_trail_glow_b.vpcf_c rename to game/particles/custom/dc_saber_omni_slash_trail_glow_b.vpcf_c diff --git a/particles/custom/saber_blade_fury.vpcf_c b/game/particles/custom/saber_blade_fury.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury.vpcf_c rename to game/particles/custom/saber_blade_fury.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_core_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_core_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_core_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_core_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_cyclone_flowers_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_cyclone_flowers_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_cyclone_flowers_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_cyclone_flowers_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_flash_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_flash_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_flash_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_flash_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_hotspot_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_hotspot_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_hotspot_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_hotspot_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_light_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_light_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_light_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_light_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_sakura_smoke.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_sakura_smoke.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_sakura_smoke.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_sakura_smoke.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_sparks_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_sparks_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_sparks_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_sparks_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_streaks_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_streaks_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_streaks_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_streaks_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_trail_b_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_trail_b_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_trail_b_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_trail_b_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_abyssal_trail_sakura.vpcf_c b/game/particles/custom/saber_blade_fury_abyssal_trail_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_abyssal_trail_sakura.vpcf_c rename to game/particles/custom/saber_blade_fury_abyssal_trail_sakura.vpcf_c diff --git a/particles/custom/saber_blade_fury_disk.vpcf_c b/game/particles/custom/saber_blade_fury_disk.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_disk.vpcf_c rename to game/particles/custom/saber_blade_fury_disk.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon.vpcf_c b/game/particles/custom/saber_blade_fury_dragon.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon1.vpcf_c b/game/particles/custom/saber_blade_fury_dragon1.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon1.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon1.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon2.vpcf_c b/game/particles/custom/saber_blade_fury_dragon2.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon2.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon2.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon3.vpcf_c b/game/particles/custom/saber_blade_fury_dragon3.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon3.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon3.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon4.vpcf_c b/game/particles/custom/saber_blade_fury_dragon4.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon4.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon4.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon_trail.vpcf_c b/game/particles/custom/saber_blade_fury_dragon_trail.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon_trail.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon_trail.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon_trail_detail.vpcf_c b/game/particles/custom/saber_blade_fury_dragon_trail_detail.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon_trail_detail.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon_trail_detail.vpcf_c diff --git a/particles/custom/saber_blade_fury_dragon_trail_embers.vpcf_c b/game/particles/custom/saber_blade_fury_dragon_trail_embers.vpcf_c similarity index 100% rename from particles/custom/saber_blade_fury_dragon_trail_embers.vpcf_c rename to game/particles/custom/saber_blade_fury_dragon_trail_embers.vpcf_c diff --git a/particles/custom/saber_blade_generic.vpcf_c b/game/particles/custom/saber_blade_generic.vpcf_c similarity index 100% rename from particles/custom/saber_blade_generic.vpcf_c rename to game/particles/custom/saber_blade_generic.vpcf_c diff --git a/particles/custom/saber_body_ambient_flame.vpcf_c b/game/particles/custom/saber_body_ambient_flame.vpcf_c similarity index 100% rename from particles/custom/saber_body_ambient_flame.vpcf_c rename to game/particles/custom/saber_body_ambient_flame.vpcf_c diff --git a/particles/custom/saber_counter.vpcf_c b/game/particles/custom/saber_counter.vpcf_c similarity index 100% rename from particles/custom/saber_counter.vpcf_c rename to game/particles/custom/saber_counter.vpcf_c diff --git a/particles/custom/saber_counter_dark.vpcf_c b/game/particles/custom/saber_counter_dark.vpcf_c similarity index 100% rename from particles/custom/saber_counter_dark.vpcf_c rename to game/particles/custom/saber_counter_dark.vpcf_c diff --git a/particles/custom/saber_counter_dmg_flare.vpcf_c b/game/particles/custom/saber_counter_dmg_flare.vpcf_c similarity index 100% rename from particles/custom/saber_counter_dmg_flare.vpcf_c rename to game/particles/custom/saber_counter_dmg_flare.vpcf_c diff --git a/particles/custom/saber_counter_dmg_flare_glow.vpcf_c b/game/particles/custom/saber_counter_dmg_flare_glow.vpcf_c similarity index 100% rename from particles/custom/saber_counter_dmg_flare_glow.vpcf_c rename to game/particles/custom/saber_counter_dmg_flare_glow.vpcf_c diff --git a/particles/custom/saber_counter_dmg_flare_light.vpcf_c b/game/particles/custom/saber_counter_dmg_flare_light.vpcf_c similarity index 100% rename from particles/custom/saber_counter_dmg_flare_light.vpcf_c rename to game/particles/custom/saber_counter_dmg_flare_light.vpcf_c diff --git a/particles/custom/saber_counter_dmg_flash_pnt.vpcf_c b/game/particles/custom/saber_counter_dmg_flash_pnt.vpcf_c similarity index 100% rename from particles/custom/saber_counter_dmg_flash_pnt.vpcf_c rename to game/particles/custom/saber_counter_dmg_flash_pnt.vpcf_c diff --git a/particles/custom/saber_counter_fire.vpcf_c b/game/particles/custom/saber_counter_fire.vpcf_c similarity index 100% rename from particles/custom/saber_counter_fire.vpcf_c rename to game/particles/custom/saber_counter_fire.vpcf_c diff --git a/particles/custom/saber_counter_slash.vpcf_c b/game/particles/custom/saber_counter_slash.vpcf_c similarity index 100% rename from particles/custom/saber_counter_slash.vpcf_c rename to game/particles/custom/saber_counter_slash.vpcf_c diff --git a/particles/custom/saber_counter_slash_rope.vpcf_c b/game/particles/custom/saber_counter_slash_rope.vpcf_c similarity index 100% rename from particles/custom/saber_counter_slash_rope.vpcf_c rename to game/particles/custom/saber_counter_slash_rope.vpcf_c diff --git a/particles/custom/saber_counter_symbol.vpcf_c b/game/particles/custom/saber_counter_symbol.vpcf_c similarity index 100% rename from particles/custom/saber_counter_symbol.vpcf_c rename to game/particles/custom/saber_counter_symbol.vpcf_c diff --git a/particles/custom/saber_counter_text.vpcf_c b/game/particles/custom/saber_counter_text.vpcf_c similarity index 100% rename from particles/custom/saber_counter_text.vpcf_c rename to game/particles/custom/saber_counter_text.vpcf_c diff --git a/particles/custom/saber_counter_text_burst.vpcf_c b/game/particles/custom/saber_counter_text_burst.vpcf_c similarity index 100% rename from particles/custom/saber_counter_text_burst.vpcf_c rename to game/particles/custom/saber_counter_text_burst.vpcf_c diff --git a/particles/custom/saber_counter_text_flash.vpcf_c b/game/particles/custom/saber_counter_text_flash.vpcf_c similarity index 100% rename from particles/custom/saber_counter_text_flash.vpcf_c rename to game/particles/custom/saber_counter_text_flash.vpcf_c diff --git a/particles/custom/saber_counter_victories.vpcf_c b/game/particles/custom/saber_counter_victories.vpcf_c similarity index 100% rename from particles/custom/saber_counter_victories.vpcf_c rename to game/particles/custom/saber_counter_victories.vpcf_c diff --git a/particles/custom/saber_crit_blur.vpcf_c b/game/particles/custom/saber_crit_blur.vpcf_c similarity index 100% rename from particles/custom/saber_crit_blur.vpcf_c rename to game/particles/custom/saber_crit_blur.vpcf_c diff --git a/particles/custom/saber_crit_blur_glow.vpcf_c b/game/particles/custom/saber_crit_blur_glow.vpcf_c similarity index 100% rename from particles/custom/saber_crit_blur_glow.vpcf_c rename to game/particles/custom/saber_crit_blur_glow.vpcf_c diff --git a/particles/custom/saber_crit_tgt_glow.vpcf_c b/game/particles/custom/saber_crit_tgt_glow.vpcf_c similarity index 100% rename from particles/custom/saber_crit_tgt_glow.vpcf_c rename to game/particles/custom/saber_crit_tgt_glow.vpcf_c diff --git a/particles/custom/saber_crit_tgt_glow_dark.vpcf_c b/game/particles/custom/saber_crit_tgt_glow_dark.vpcf_c similarity index 100% rename from particles/custom/saber_crit_tgt_glow_dark.vpcf_c rename to game/particles/custom/saber_crit_tgt_glow_dark.vpcf_c diff --git a/particles/custom/saber_crit_tgt_light.vpcf_c b/game/particles/custom/saber_crit_tgt_light.vpcf_c similarity index 100% rename from particles/custom/saber_crit_tgt_light.vpcf_c rename to game/particles/custom/saber_crit_tgt_light.vpcf_c diff --git a/particles/custom/saber_crit_tgt_line_sparks.vpcf_c b/game/particles/custom/saber_crit_tgt_line_sparks.vpcf_c similarity index 100% rename from particles/custom/saber_crit_tgt_line_sparks.vpcf_c rename to game/particles/custom/saber_crit_tgt_line_sparks.vpcf_c diff --git a/particles/custom/saber_crit_tgt_model.vpcf_c b/game/particles/custom/saber_crit_tgt_model.vpcf_c similarity index 100% rename from particles/custom/saber_crit_tgt_model.vpcf_c rename to game/particles/custom/saber_crit_tgt_model.vpcf_c diff --git a/particles/custom/saber_crit_tgt_model_glow.vpcf_c b/game/particles/custom/saber_crit_tgt_model_glow.vpcf_c similarity index 100% rename from particles/custom/saber_crit_tgt_model_glow.vpcf_c rename to game/particles/custom/saber_crit_tgt_model_glow.vpcf_c diff --git a/particles/custom/saber_death_model_glow.vpcf_c b/game/particles/custom/saber_death_model_glow.vpcf_c similarity index 100% rename from particles/custom/saber_death_model_glow.vpcf_c rename to game/particles/custom/saber_death_model_glow.vpcf_c diff --git a/particles/custom/saber_haste_debris.vpcf_c b/game/particles/custom/saber_haste_debris.vpcf_c similarity index 100% rename from particles/custom/saber_haste_debris.vpcf_c rename to game/particles/custom/saber_haste_debris.vpcf_c diff --git a/particles/custom/saber_haste_dust.vpcf_c b/game/particles/custom/saber_haste_dust.vpcf_c similarity index 100% rename from particles/custom/saber_haste_dust.vpcf_c rename to game/particles/custom/saber_haste_dust.vpcf_c diff --git a/particles/custom/saber_haste_ember.vpcf_c b/game/particles/custom/saber_haste_ember.vpcf_c similarity index 100% rename from particles/custom/saber_haste_ember.vpcf_c rename to game/particles/custom/saber_haste_ember.vpcf_c diff --git a/particles/custom/saber_haste_glow.vpcf_c b/game/particles/custom/saber_haste_glow.vpcf_c similarity index 100% rename from particles/custom/saber_haste_glow.vpcf_c rename to game/particles/custom/saber_haste_glow.vpcf_c diff --git a/particles/custom/saber_haste_rope.vpcf_c b/game/particles/custom/saber_haste_rope.vpcf_c similarity index 100% rename from particles/custom/saber_haste_rope.vpcf_c rename to game/particles/custom/saber_haste_rope.vpcf_c diff --git a/particles/custom/saber_haste_rope_dark.vpcf_c b/game/particles/custom/saber_haste_rope_dark.vpcf_c similarity index 100% rename from particles/custom/saber_haste_rope_dark.vpcf_c rename to game/particles/custom/saber_haste_rope_dark.vpcf_c diff --git a/particles/custom/saber_healing_ward.vpcf_c b/game/particles/custom/saber_healing_ward.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward.vpcf_c rename to game/particles/custom/saber_healing_ward.vpcf_c diff --git a/particles/custom/saber_healing_ward_a.vpcf_c b/game/particles/custom/saber_healing_ward_a.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_a.vpcf_c rename to game/particles/custom/saber_healing_ward_a.vpcf_c diff --git a/particles/custom/saber_healing_ward_b.vpcf_c b/game/particles/custom/saber_healing_ward_b.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_b.vpcf_c rename to game/particles/custom/saber_healing_ward_b.vpcf_c diff --git a/particles/custom/saber_healing_ward_base.vpcf_c b/game/particles/custom/saber_healing_ward_base.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_base.vpcf_c rename to game/particles/custom/saber_healing_ward_base.vpcf_c diff --git a/particles/custom/saber_healing_ward_base_dc.vpcf_c b/game/particles/custom/saber_healing_ward_base_dc.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_base_dc.vpcf_c rename to game/particles/custom/saber_healing_ward_base_dc.vpcf_c diff --git a/particles/custom/saber_healing_ward_c.vpcf_c b/game/particles/custom/saber_healing_ward_c.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_c.vpcf_c rename to game/particles/custom/saber_healing_ward_c.vpcf_c diff --git a/particles/custom/saber_healing_ward_d.vpcf_c b/game/particles/custom/saber_healing_ward_d.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_d.vpcf_c rename to game/particles/custom/saber_healing_ward_d.vpcf_c diff --git a/particles/custom/saber_healing_ward_fortunes_tout_gold_glow.vpcf_c b/game/particles/custom/saber_healing_ward_fortunes_tout_gold_glow.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_fortunes_tout_gold_glow.vpcf_c rename to game/particles/custom/saber_healing_ward_fortunes_tout_gold_glow.vpcf_c diff --git a/particles/custom/saber_healing_ward_fortunes_tout_gold_magic.vpcf_c b/game/particles/custom/saber_healing_ward_fortunes_tout_gold_magic.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_fortunes_tout_gold_magic.vpcf_c rename to game/particles/custom/saber_healing_ward_fortunes_tout_gold_magic.vpcf_c diff --git a/particles/custom/saber_healing_ward_fortunes_tout_gold_shine.vpcf_c b/game/particles/custom/saber_healing_ward_fortunes_tout_gold_shine.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_fortunes_tout_gold_shine.vpcf_c rename to game/particles/custom/saber_healing_ward_fortunes_tout_gold_shine.vpcf_c diff --git a/particles/custom/saber_healing_ward_fortunes_tout_gold_twinkle.vpcf_c b/game/particles/custom/saber_healing_ward_fortunes_tout_gold_twinkle.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_fortunes_tout_gold_twinkle.vpcf_c rename to game/particles/custom/saber_healing_ward_fortunes_tout_gold_twinkle.vpcf_c diff --git a/particles/custom/saber_healing_ward_fortunes_tout_ward_fireflies.vpcf_c b/game/particles/custom/saber_healing_ward_fortunes_tout_ward_fireflies.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_fortunes_tout_ward_fireflies.vpcf_c rename to game/particles/custom/saber_healing_ward_fortunes_tout_ward_fireflies.vpcf_c diff --git a/particles/custom/saber_healing_ward_fortunes_tout_ward_gold.vpcf_c b/game/particles/custom/saber_healing_ward_fortunes_tout_ward_gold.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_fortunes_tout_ward_gold.vpcf_c rename to game/particles/custom/saber_healing_ward_fortunes_tout_ward_gold.vpcf_c diff --git a/particles/custom/saber_healing_ward_fortunes_tout_ward_gold_flame.vpcf_c b/game/particles/custom/saber_healing_ward_fortunes_tout_ward_gold_flame.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_fortunes_tout_ward_gold_flame.vpcf_c rename to game/particles/custom/saber_healing_ward_fortunes_tout_ward_gold_flame.vpcf_c diff --git a/particles/custom/saber_healing_ward_ring_dc.vpcf_c b/game/particles/custom/saber_healing_ward_ring_dc.vpcf_c similarity index 100% rename from particles/custom/saber_healing_ward_ring_dc.vpcf_c rename to game/particles/custom/saber_healing_ward_ring_dc.vpcf_c diff --git a/particles/custom/saber_healingward_flame.vpcf_c b/game/particles/custom/saber_healingward_flame.vpcf_c similarity index 100% rename from particles/custom/saber_healingward_flame.vpcf_c rename to game/particles/custom/saber_healingward_flame.vpcf_c diff --git a/particles/custom/saber_healingward_flame_a.vpcf_c b/game/particles/custom/saber_healingward_flame_a.vpcf_c similarity index 100% rename from particles/custom/saber_healingward_flame_a.vpcf_c rename to game/particles/custom/saber_healingward_flame_a.vpcf_c diff --git a/particles/custom/saber_healingward_flame_b.vpcf_c b/game/particles/custom/saber_healingward_flame_b.vpcf_c similarity index 100% rename from particles/custom/saber_healingward_flame_b.vpcf_c rename to game/particles/custom/saber_healingward_flame_b.vpcf_c diff --git a/particles/custom/saber_healingward_flame_c.vpcf_c b/game/particles/custom/saber_healingward_flame_c.vpcf_c similarity index 100% rename from particles/custom/saber_healingward_flame_c.vpcf_c rename to game/particles/custom/saber_healingward_flame_c.vpcf_c diff --git a/particles/custom/saber_healling_ward_fortunes_tout_ward_base.vpcf_c b/game/particles/custom/saber_healling_ward_fortunes_tout_ward_base.vpcf_c similarity index 100% rename from particles/custom/saber_healling_ward_fortunes_tout_ward_base.vpcf_c rename to game/particles/custom/saber_healling_ward_fortunes_tout_ward_base.vpcf_c diff --git a/particles/custom/saber_healling_ward_fortunes_tout_ward_center_glow.vpcf_c b/game/particles/custom/saber_healling_ward_fortunes_tout_ward_center_glow.vpcf_c similarity index 100% rename from particles/custom/saber_healling_ward_fortunes_tout_ward_center_glow.vpcf_c rename to game/particles/custom/saber_healling_ward_fortunes_tout_ward_center_glow.vpcf_c diff --git a/particles/custom/saber_healling_ward_fortunes_tout_ward_edge.vpcf_c b/game/particles/custom/saber_healling_ward_fortunes_tout_ward_edge.vpcf_c similarity index 100% rename from particles/custom/saber_healling_ward_fortunes_tout_ward_edge.vpcf_c rename to game/particles/custom/saber_healling_ward_fortunes_tout_ward_edge.vpcf_c diff --git a/particles/custom/saber_healling_ward_fortunes_tout_ward_edge_glow.vpcf_c b/game/particles/custom/saber_healling_ward_fortunes_tout_ward_edge_glow.vpcf_c similarity index 100% rename from particles/custom/saber_healling_ward_fortunes_tout_ward_edge_glow.vpcf_c rename to game/particles/custom/saber_healling_ward_fortunes_tout_ward_edge_glow.vpcf_c diff --git a/particles/custom/saber_healling_ward_fortunes_tout_ward_edge_sphere.vpcf_c b/game/particles/custom/saber_healling_ward_fortunes_tout_ward_edge_sphere.vpcf_c similarity index 100% rename from particles/custom/saber_healling_ward_fortunes_tout_ward_edge_sphere.vpcf_c rename to game/particles/custom/saber_healling_ward_fortunes_tout_ward_edge_sphere.vpcf_c diff --git a/particles/custom/saber_healling_ward_fortunes_tout_ward_fill.vpcf_c b/game/particles/custom/saber_healling_ward_fortunes_tout_ward_fill.vpcf_c similarity index 100% rename from particles/custom/saber_healling_ward_fortunes_tout_ward_fill.vpcf_c rename to game/particles/custom/saber_healling_ward_fortunes_tout_ward_fill.vpcf_c diff --git a/particles/custom/saber_idle_rare_entry.vpcf_c b/game/particles/custom/saber_idle_rare_entry.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_entry.vpcf_c rename to game/particles/custom/saber_idle_rare_entry.vpcf_c diff --git a/particles/custom/saber_idle_rare_entry_glow.vpcf_c b/game/particles/custom/saber_idle_rare_entry_glow.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_entry_glow.vpcf_c rename to game/particles/custom/saber_idle_rare_entry_glow.vpcf_c diff --git a/particles/custom/saber_idle_rare_glow.vpcf_c b/game/particles/custom/saber_idle_rare_glow.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_glow.vpcf_c rename to game/particles/custom/saber_idle_rare_glow.vpcf_c diff --git a/particles/custom/saber_idle_rare_ground.vpcf_c b/game/particles/custom/saber_idle_rare_ground.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_ground.vpcf_c rename to game/particles/custom/saber_idle_rare_ground.vpcf_c diff --git a/particles/custom/saber_idle_rare_ground_light.vpcf_c b/game/particles/custom/saber_idle_rare_ground_light.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_ground_light.vpcf_c rename to game/particles/custom/saber_idle_rare_ground_light.vpcf_c diff --git a/particles/custom/saber_idle_rare_light.vpcf_c b/game/particles/custom/saber_idle_rare_light.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_light.vpcf_c rename to game/particles/custom/saber_idle_rare_light.vpcf_c diff --git a/particles/custom/saber_idle_rare_magic.vpcf_c b/game/particles/custom/saber_idle_rare_magic.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_magic.vpcf_c rename to game/particles/custom/saber_idle_rare_magic.vpcf_c diff --git a/particles/custom/saber_idle_rare_trail.vpcf_c b/game/particles/custom/saber_idle_rare_trail.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_trail.vpcf_c rename to game/particles/custom/saber_idle_rare_trail.vpcf_c diff --git a/particles/custom/saber_idle_rare_twinkle.vpcf_c b/game/particles/custom/saber_idle_rare_twinkle.vpcf_c similarity index 100% rename from particles/custom/saber_idle_rare_twinkle.vpcf_c rename to game/particles/custom/saber_idle_rare_twinkle.vpcf_c diff --git a/particles/custom/saber_loadout_rare_model_glow.vpcf_c b/game/particles/custom/saber_loadout_rare_model_glow.vpcf_c similarity index 100% rename from particles/custom/saber_loadout_rare_model_glow.vpcf_c rename to game/particles/custom/saber_loadout_rare_model_glow.vpcf_c diff --git a/particles/custom/saber_loadout_rare_model_light.vpcf_c b/game/particles/custom/saber_loadout_rare_model_light.vpcf_c similarity index 100% rename from particles/custom/saber_loadout_rare_model_light.vpcf_c rename to game/particles/custom/saber_loadout_rare_model_light.vpcf_c diff --git a/particles/custom/saber_loadout_rare_model_magic.vpcf_c b/game/particles/custom/saber_loadout_rare_model_magic.vpcf_c similarity index 100% rename from particles/custom/saber_loadout_rare_model_magic.vpcf_c rename to game/particles/custom/saber_loadout_rare_model_magic.vpcf_c diff --git a/particles/custom/saber_loadout_rare_model_trail.vpcf_c b/game/particles/custom/saber_loadout_rare_model_trail.vpcf_c similarity index 100% rename from particles/custom/saber_loadout_rare_model_trail.vpcf_c rename to game/particles/custom/saber_loadout_rare_model_trail.vpcf_c diff --git a/particles/custom/saber_omni_dash_model.vpcf_c b/game/particles/custom/saber_omni_dash_model.vpcf_c similarity index 100% rename from particles/custom/saber_omni_dash_model.vpcf_c rename to game/particles/custom/saber_omni_dash_model.vpcf_c diff --git a/particles/custom/saber_omni_dash_model_dragon.vpcf_c b/game/particles/custom/saber_omni_dash_model_dragon.vpcf_c similarity index 100% rename from particles/custom/saber_omni_dash_model_dragon.vpcf_c rename to game/particles/custom/saber_omni_dash_model_dragon.vpcf_c diff --git a/particles/custom/saber_omni_end_dust.vpcf_c b/game/particles/custom/saber_omni_end_dust.vpcf_c similarity index 100% rename from particles/custom/saber_omni_end_dust.vpcf_c rename to game/particles/custom/saber_omni_end_dust.vpcf_c diff --git a/particles/custom/saber_omni_end_model.vpcf_c b/game/particles/custom/saber_omni_end_model.vpcf_c similarity index 100% rename from particles/custom/saber_omni_end_model.vpcf_c rename to game/particles/custom/saber_omni_end_model.vpcf_c diff --git a/particles/custom/saber_omni_end_streak.vpcf_c b/game/particles/custom/saber_omni_end_streak.vpcf_c similarity index 100% rename from particles/custom/saber_omni_end_streak.vpcf_c rename to game/particles/custom/saber_omni_end_streak.vpcf_c diff --git a/particles/custom/saber_omni_slash_flash.vpcf_c b/game/particles/custom/saber_omni_slash_flash.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_flash.vpcf_c rename to game/particles/custom/saber_omni_slash_flash.vpcf_c diff --git a/particles/custom/saber_omni_slash_flash_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_flash_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_flash_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_flash_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_petals_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_petals_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_petals_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_petals_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_rope.vpcf_c b/game/particles/custom/saber_omni_slash_rope.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_rope.vpcf_c rename to game/particles/custom/saber_omni_slash_rope.vpcf_c diff --git a/particles/custom/saber_omni_slash_rope_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_rope_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_rope_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_rope_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt.vpcf_c b/game/particles/custom/saber_omni_slash_tgt.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_bonus_burst.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_bonus_burst.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_bonus_burst.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_bonus_burst.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_bonus_burst_glow.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_bonus_burst_glow.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_bonus_burst_glow.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_bonus_burst_glow.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_bonus_burst_streak.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_bonus_burst_streak.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_bonus_burst_streak.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_bonus_burst_streak.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_dark.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_dark.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_dark.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_dark.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_flash.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_flash.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_flash.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_flash.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_rope.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_rope.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_rope.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_rope.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_rope_vert.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_rope_vert.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_rope_vert.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_rope_vert.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_tgt_top.vpcf_c b/game/particles/custom/saber_omni_slash_tgt_top.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_tgt_top.vpcf_c rename to game/particles/custom/saber_omni_slash_tgt_top.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail.vpcf_c b/game/particles/custom/saber_omni_slash_trail.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail.vpcf_c rename to game/particles/custom/saber_omni_slash_trail.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_blur.vpcf_c b/game/particles/custom/saber_omni_slash_trail_blur.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_blur.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_blur.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_blur_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_trail_blur_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_blur_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_blur_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_core.vpcf_c b/game/particles/custom/saber_omni_slash_trail_core.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_core.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_core.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_dust_l.vpcf_c b/game/particles/custom/saber_omni_slash_trail_dust_l.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_dust_l.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_dust_l.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_glow.vpcf_c b/game/particles/custom/saber_omni_slash_trail_glow.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_glow.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_glow.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_glow_b.vpcf_c b/game/particles/custom/saber_omni_slash_trail_glow_b.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_glow_b.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_glow_b.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_glow_b_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_trail_glow_b_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_glow_b_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_glow_b_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_glow_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_trail_glow_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_glow_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_glow_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_ground.vpcf_c b/game/particles/custom/saber_omni_slash_trail_ground.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_ground.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_ground.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_serrakura.vpcf_c b/game/particles/custom/saber_omni_slash_trail_serrakura.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_serrakura.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_serrakura.vpcf_c diff --git a/particles/custom/saber_omni_slash_trail_soft.vpcf_c b/game/particles/custom/saber_omni_slash_trail_soft.vpcf_c similarity index 100% rename from particles/custom/saber_omni_slash_trail_soft.vpcf_c rename to game/particles/custom/saber_omni_slash_trail_soft.vpcf_c diff --git a/particles/custom/saber_omni_streaks.vpcf_c b/game/particles/custom/saber_omni_streaks.vpcf_c similarity index 100% rename from particles/custom/saber_omni_streaks.vpcf_c rename to game/particles/custom/saber_omni_streaks.vpcf_c diff --git a/particles/custom/saber_sakura.vpcf_c b/game/particles/custom/saber_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_sakura.vpcf_c rename to game/particles/custom/saber_sakura.vpcf_c diff --git a/particles/custom/saber_sakura_skill_sword.vpcf_c b/game/particles/custom/saber_sakura_skill_sword.vpcf_c similarity index 100% rename from particles/custom/saber_sakura_skill_sword.vpcf_c rename to game/particles/custom/saber_sakura_skill_sword.vpcf_c diff --git a/particles/custom/saber_serrakurra_ambient.vpcf_c b/game/particles/custom/saber_serrakurra_ambient.vpcf_c similarity index 100% rename from particles/custom/saber_serrakurra_ambient.vpcf_c rename to game/particles/custom/saber_serrakurra_ambient.vpcf_c diff --git a/particles/custom/saber_serrakurra_ambient_blade.vpcf_c b/game/particles/custom/saber_serrakurra_ambient_blade.vpcf_c similarity index 100% rename from particles/custom/saber_serrakurra_ambient_blade.vpcf_c rename to game/particles/custom/saber_serrakurra_ambient_blade.vpcf_c diff --git a/particles/custom/saber_serrakurra_ambient_blade_glow.vpcf_c b/game/particles/custom/saber_serrakurra_ambient_blade_glow.vpcf_c similarity index 100% rename from particles/custom/saber_serrakurra_ambient_blade_glow.vpcf_c rename to game/particles/custom/saber_serrakurra_ambient_blade_glow.vpcf_c diff --git a/particles/custom/saber_serrakurra_ambient_blade_petal.vpcf_c b/game/particles/custom/saber_serrakurra_ambient_blade_petal.vpcf_c similarity index 100% rename from particles/custom/saber_serrakurra_ambient_blade_petal.vpcf_c rename to game/particles/custom/saber_serrakurra_ambient_blade_petal.vpcf_c diff --git a/particles/custom/saber_teleport_end_light.vpcf_c b/game/particles/custom/saber_teleport_end_light.vpcf_c similarity index 100% rename from particles/custom/saber_teleport_end_light.vpcf_c rename to game/particles/custom/saber_teleport_end_light.vpcf_c diff --git a/particles/custom/saber_teleport_end_model_glow.vpcf_c b/game/particles/custom/saber_teleport_end_model_glow.vpcf_c similarity index 100% rename from particles/custom/saber_teleport_end_model_glow.vpcf_c rename to game/particles/custom/saber_teleport_end_model_glow.vpcf_c diff --git a/particles/custom/saber_teleport_light.vpcf_c b/game/particles/custom/saber_teleport_light.vpcf_c similarity index 100% rename from particles/custom/saber_teleport_light.vpcf_c rename to game/particles/custom/saber_teleport_light.vpcf_c diff --git a/particles/custom/saber_teleport_model_glow.vpcf_c b/game/particles/custom/saber_teleport_model_glow.vpcf_c similarity index 100% rename from particles/custom/saber_teleport_model_glow.vpcf_c rename to game/particles/custom/saber_teleport_model_glow.vpcf_c diff --git a/particles/custom/saber_ti8_sword_crit_b_golden.vpcf_c b/game/particles/custom/saber_ti8_sword_crit_b_golden.vpcf_c similarity index 100% rename from particles/custom/saber_ti8_sword_crit_b_golden.vpcf_c rename to game/particles/custom/saber_ti8_sword_crit_b_golden.vpcf_c diff --git a/particles/custom/saber_ti8_sword_crit_b_overtheshoulder_golden.vpcf_c b/game/particles/custom/saber_ti8_sword_crit_b_overtheshoulder_golden.vpcf_c similarity index 100% rename from particles/custom/saber_ti8_sword_crit_b_overtheshoulder_golden.vpcf_c rename to game/particles/custom/saber_ti8_sword_crit_b_overtheshoulder_golden.vpcf_c diff --git a/particles/custom/saber_ti8_sword_crit_c_overtheshoulder_golden.vpcf_c b/game/particles/custom/saber_ti8_sword_crit_c_overtheshoulder_golden.vpcf_c similarity index 100% rename from particles/custom/saber_ti8_sword_crit_c_overtheshoulder_golden.vpcf_c rename to game/particles/custom/saber_ti8_sword_crit_c_overtheshoulder_golden.vpcf_c diff --git a/particles/custom/saber_ti8_sword_crit_d_overtheshoulder_golden.vpcf_c b/game/particles/custom/saber_ti8_sword_crit_d_overtheshoulder_golden.vpcf_c similarity index 100% rename from particles/custom/saber_ti8_sword_crit_d_overtheshoulder_golden.vpcf_c rename to game/particles/custom/saber_ti8_sword_crit_d_overtheshoulder_golden.vpcf_c diff --git a/particles/custom/saber_ti8_sword_sakura.vpcf_c b/game/particles/custom/saber_ti8_sword_sakura.vpcf_c similarity index 100% rename from particles/custom/saber_ti8_sword_sakura.vpcf_c rename to game/particles/custom/saber_ti8_sword_sakura.vpcf_c diff --git a/particles/custom/saber_ti8_sword_sakura_around.vpcf_c b/game/particles/custom/saber_ti8_sword_sakura_around.vpcf_c similarity index 100% rename from particles/custom/saber_ti8_sword_sakura_around.vpcf_c rename to game/particles/custom/saber_ti8_sword_sakura_around.vpcf_c diff --git a/particles/custom/saber_trigger.vpcf_c b/game/particles/custom/saber_trigger.vpcf_c similarity index 100% rename from particles/custom/saber_trigger.vpcf_c rename to game/particles/custom/saber_trigger.vpcf_c diff --git a/particles/custom/saber_trigger_beams.vpcf_c b/game/particles/custom/saber_trigger_beams.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_beams.vpcf_c rename to game/particles/custom/saber_trigger_beams.vpcf_c diff --git a/particles/custom/saber_trigger_body_glow.vpcf_c b/game/particles/custom/saber_trigger_body_glow.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_body_glow.vpcf_c rename to game/particles/custom/saber_trigger_body_glow.vpcf_c diff --git a/particles/custom/saber_trigger_body_glow_detail.vpcf_c b/game/particles/custom/saber_trigger_body_glow_detail.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_body_glow_detail.vpcf_c rename to game/particles/custom/saber_trigger_body_glow_detail.vpcf_c diff --git a/particles/custom/saber_trigger_body_glow_loadout.vpcf_c b/game/particles/custom/saber_trigger_body_glow_loadout.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_body_glow_loadout.vpcf_c rename to game/particles/custom/saber_trigger_body_glow_loadout.vpcf_c diff --git a/particles/custom/saber_trigger_dark.vpcf_c b/game/particles/custom/saber_trigger_dark.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_dark.vpcf_c rename to game/particles/custom/saber_trigger_dark.vpcf_c diff --git a/particles/custom/saber_trigger_elec.vpcf_c b/game/particles/custom/saber_trigger_elec.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_elec.vpcf_c rename to game/particles/custom/saber_trigger_elec.vpcf_c diff --git a/particles/custom/saber_trigger_elec_loadout.vpcf_c b/game/particles/custom/saber_trigger_elec_loadout.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_elec_loadout.vpcf_c rename to game/particles/custom/saber_trigger_elec_loadout.vpcf_c diff --git a/particles/custom/saber_trigger_ground.vpcf_c b/game/particles/custom/saber_trigger_ground.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground.vpcf_c rename to game/particles/custom/saber_trigger_ground.vpcf_c diff --git a/particles/custom/saber_trigger_ground_cracks.vpcf_c b/game/particles/custom/saber_trigger_ground_cracks.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_cracks.vpcf_c rename to game/particles/custom/saber_trigger_ground_cracks.vpcf_c diff --git a/particles/custom/saber_trigger_ground_lvl4_burst.vpcf_c b/game/particles/custom/saber_trigger_ground_lvl4_burst.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_lvl4_burst.vpcf_c rename to game/particles/custom/saber_trigger_ground_lvl4_burst.vpcf_c diff --git a/particles/custom/saber_trigger_ground_lvl5_rays.vpcf_c b/game/particles/custom/saber_trigger_ground_lvl5_rays.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_lvl5_rays.vpcf_c rename to game/particles/custom/saber_trigger_ground_lvl5_rays.vpcf_c diff --git a/particles/custom/saber_trigger_ground_mod.vpcf_c b/game/particles/custom/saber_trigger_ground_mod.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_mod.vpcf_c rename to game/particles/custom/saber_trigger_ground_mod.vpcf_c diff --git a/particles/custom/saber_trigger_ground_symbol.vpcf_c b/game/particles/custom/saber_trigger_ground_symbol.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_symbol.vpcf_c rename to game/particles/custom/saber_trigger_ground_symbol.vpcf_c diff --git a/particles/custom/saber_trigger_ground_symbol_add.vpcf_c b/game/particles/custom/saber_trigger_ground_symbol_add.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_symbol_add.vpcf_c rename to game/particles/custom/saber_trigger_ground_symbol_add.vpcf_c diff --git a/particles/custom/saber_trigger_ground_symbol_bonus.vpcf_c b/game/particles/custom/saber_trigger_ground_symbol_bonus.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_symbol_bonus.vpcf_c rename to game/particles/custom/saber_trigger_ground_symbol_bonus.vpcf_c diff --git a/particles/custom/saber_trigger_ground_symbol_bonus_add.vpcf_c b/game/particles/custom/saber_trigger_ground_symbol_bonus_add.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_symbol_bonus_add.vpcf_c rename to game/particles/custom/saber_trigger_ground_symbol_bonus_add.vpcf_c diff --git a/particles/custom/saber_trigger_ground_symbol_face_add.vpcf_c b/game/particles/custom/saber_trigger_ground_symbol_face_add.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_ground_symbol_face_add.vpcf_c rename to game/particles/custom/saber_trigger_ground_symbol_face_add.vpcf_c diff --git a/particles/custom/saber_trigger_head.vpcf_c b/game/particles/custom/saber_trigger_head.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_head.vpcf_c rename to game/particles/custom/saber_trigger_head.vpcf_c diff --git a/particles/custom/saber_trigger_head_burst.vpcf_c b/game/particles/custom/saber_trigger_head_burst.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_head_burst.vpcf_c rename to game/particles/custom/saber_trigger_head_burst.vpcf_c diff --git a/particles/custom/saber_trigger_head_streak.vpcf_c b/game/particles/custom/saber_trigger_head_streak.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_head_streak.vpcf_c rename to game/particles/custom/saber_trigger_head_streak.vpcf_c diff --git a/particles/custom/saber_trigger_radiance.vpcf_c b/game/particles/custom/saber_trigger_radiance.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_radiance.vpcf_c rename to game/particles/custom/saber_trigger_radiance.vpcf_c diff --git a/particles/custom/saber_trigger_shockwave.vpcf_c b/game/particles/custom/saber_trigger_shockwave.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_shockwave.vpcf_c rename to game/particles/custom/saber_trigger_shockwave.vpcf_c diff --git a/particles/custom/saber_trigger_sky_beam.vpcf_c b/game/particles/custom/saber_trigger_sky_beam.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_sky_beam.vpcf_c rename to game/particles/custom/saber_trigger_sky_beam.vpcf_c diff --git a/particles/custom/saber_trigger_sphere.vpcf_c b/game/particles/custom/saber_trigger_sphere.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_sphere.vpcf_c rename to game/particles/custom/saber_trigger_sphere.vpcf_c diff --git a/particles/custom/saber_trigger_sphere_burst.vpcf_c b/game/particles/custom/saber_trigger_sphere_burst.vpcf_c similarity index 100% rename from particles/custom/saber_trigger_sphere_burst.vpcf_c rename to game/particles/custom/saber_trigger_sphere_burst.vpcf_c diff --git a/particles/custom/sabersakura_blade_fury_abyssal_cyclone.vpcf_c b/game/particles/custom/sabersakura_blade_fury_abyssal_cyclone.vpcf_c similarity index 100% rename from particles/custom/sabersakura_blade_fury_abyssal_cyclone.vpcf_c rename to game/particles/custom/sabersakura_blade_fury_abyssal_cyclone.vpcf_c diff --git a/particles/custom/sakura_floor.vpcf_c b/game/particles/custom/sakura_floor.vpcf_c similarity index 100% rename from particles/custom/sakura_floor.vpcf_c rename to game/particles/custom/sakura_floor.vpcf_c diff --git a/particles/dac/ansha/death_black_steam.vpcf_c b/game/particles/dac/ansha/death_black_steam.vpcf_c similarity index 100% rename from particles/dac/ansha/death_black_steam.vpcf_c rename to game/particles/dac/ansha/death_black_steam.vpcf_c diff --git a/particles/dac/ansha/death_elec_long.vpcf_c b/game/particles/dac/ansha/death_elec_long.vpcf_c similarity index 100% rename from particles/dac/ansha/death_elec_long.vpcf_c rename to game/particles/dac/ansha/death_elec_long.vpcf_c diff --git a/particles/dac/ansha/death_streak.vpcf_c b/game/particles/dac/ansha/death_streak.vpcf_c similarity index 100% rename from particles/dac/ansha/death_streak.vpcf_c rename to game/particles/dac/ansha/death_streak.vpcf_c diff --git a/particles/dac/ansha/loadout.vpcf_c b/game/particles/dac/ansha/loadout.vpcf_c similarity index 100% rename from particles/dac/ansha/loadout.vpcf_c rename to game/particles/dac/ansha/loadout.vpcf_c diff --git a/particles/dac/ansha/loadout_ps_disk_start.vpcf_c b/game/particles/dac/ansha/loadout_ps_disk_start.vpcf_c similarity index 100% rename from particles/dac/ansha/loadout_ps_disk_start.vpcf_c rename to game/particles/dac/ansha/loadout_ps_disk_start.vpcf_c diff --git a/particles/dac/ansha/phantom_strike_disk_lines.vpcf_c b/game/particles/dac/ansha/phantom_strike_disk_lines.vpcf_c similarity index 100% rename from particles/dac/ansha/phantom_strike_disk_lines.vpcf_c rename to game/particles/dac/ansha/phantom_strike_disk_lines.vpcf_c diff --git a/particles/dac/ansha/phantom_strike_disk_ring.vpcf_c b/game/particles/dac/ansha/phantom_strike_disk_ring.vpcf_c similarity index 100% rename from particles/dac/ansha/phantom_strike_disk_ring.vpcf_c rename to game/particles/dac/ansha/phantom_strike_disk_ring.vpcf_c diff --git a/particles/dac/ansha/phantom_strike_disk_ring_black_start.vpcf_c b/game/particles/dac/ansha/phantom_strike_disk_ring_black_start.vpcf_c similarity index 100% rename from particles/dac/ansha/phantom_strike_disk_ring_black_start.vpcf_c rename to game/particles/dac/ansha/phantom_strike_disk_ring_black_start.vpcf_c diff --git a/particles/dac/ansha/phantom_strike_disk_steam.vpcf_c b/game/particles/dac/ansha/phantom_strike_disk_steam.vpcf_c similarity index 100% rename from particles/dac/ansha/phantom_strike_disk_steam.vpcf_c rename to game/particles/dac/ansha/phantom_strike_disk_steam.vpcf_c diff --git a/particles/dac/explode/boom_light_and_shake.vpcf_c b/game/particles/dac/explode/boom_light_and_shake.vpcf_c similarity index 100% rename from particles/dac/explode/boom_light_and_shake.vpcf_c rename to game/particles/dac/explode/boom_light_and_shake.vpcf_c diff --git a/particles/dac/explode/land_mine_ball_explosion.vpcf_c b/game/particles/dac/explode/land_mine_ball_explosion.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_ball_explosion.vpcf_c rename to game/particles/dac/explode/land_mine_ball_explosion.vpcf_c diff --git a/particles/dac/explode/land_mine_explode.vpcf_c b/game/particles/dac/explode/land_mine_explode.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_explode.vpcf_c rename to game/particles/dac/explode/land_mine_explode.vpcf_c diff --git a/particles/dac/explode/land_mine_explode_flek.vpcf_c b/game/particles/dac/explode/land_mine_explode_flek.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_explode_flek.vpcf_c rename to game/particles/dac/explode/land_mine_explode_flek.vpcf_c diff --git a/particles/dac/explode/land_mine_explode_halfdamge.vpcf_c b/game/particles/dac/explode/land_mine_explode_halfdamge.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_explode_halfdamge.vpcf_c rename to game/particles/dac/explode/land_mine_explode_halfdamge.vpcf_c diff --git a/particles/dac/explode/land_mine_explode_streak.vpcf_c b/game/particles/dac/explode/land_mine_explode_streak.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_explode_streak.vpcf_c rename to game/particles/dac/explode/land_mine_explode_streak.vpcf_c diff --git a/particles/dac/explode/land_mine_ground_flare.vpcf_c b/game/particles/dac/explode/land_mine_ground_flare.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_ground_flare.vpcf_c rename to game/particles/dac/explode/land_mine_ground_flare.vpcf_c diff --git a/particles/dac/explode/land_mine_ground_scortch.vpcf_c b/game/particles/dac/explode/land_mine_ground_scortch.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_ground_scortch.vpcf_c rename to game/particles/dac/explode/land_mine_ground_scortch.vpcf_c diff --git a/particles/dac/explode/land_mine_groundscortch_sfull.vpcf_c b/game/particles/dac/explode/land_mine_groundscortch_sfull.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_groundscortch_sfull.vpcf_c rename to game/particles/dac/explode/land_mine_groundscortch_sfull.vpcf_c diff --git a/particles/dac/explode/land_mine_sparks.vpcf_c b/game/particles/dac/explode/land_mine_sparks.vpcf_c similarity index 100% rename from particles/dac/explode/land_mine_sparks.vpcf_c rename to game/particles/dac/explode/land_mine_sparks.vpcf_c diff --git a/particles/dac/jingzhixianjingbeams_ambient_c.vpcf_c b/game/particles/dac/jingzhixianjingbeams_ambient_c.vpcf_c similarity index 100% rename from particles/dac/jingzhixianjingbeams_ambient_c.vpcf_c rename to game/particles/dac/jingzhixianjingbeams_ambient_c.vpcf_c diff --git a/particles/dac/jingzhixianjingplant_elec.vpcf_c b/game/particles/dac/jingzhixianjingplant_elec.vpcf_c similarity index 100% rename from particles/dac/jingzhixianjingplant_elec.vpcf_c rename to game/particles/dac/jingzhixianjingplant_elec.vpcf_c diff --git a/particles/dac/jingzhixianjingplant_elec_rad.vpcf_c b/game/particles/dac/jingzhixianjingplant_elec_rad.vpcf_c similarity index 100% rename from particles/dac/jingzhixianjingplant_elec_rad.vpcf_c rename to game/particles/dac/jingzhixianjingplant_elec_rad.vpcf_c diff --git a/particles/dac/jingzhixianjingplant_elec_radwall.vpcf_c b/game/particles/dac/jingzhixianjingplant_elec_radwall.vpcf_c similarity index 100% rename from particles/dac/jingzhixianjingplant_elec_radwall.vpcf_c rename to game/particles/dac/jingzhixianjingplant_elec_radwall.vpcf_c diff --git a/particles/dac/jingzhixianjingplant_ground_disturb.vpcf_c b/game/particles/dac/jingzhixianjingplant_ground_disturb.vpcf_c similarity index 100% rename from particles/dac/jingzhixianjingplant_ground_disturb.vpcf_c rename to game/particles/dac/jingzhixianjingplant_ground_disturb.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_fire.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_fire.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_fire.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_fire.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_fire_smallmoketrail.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_fire_smallmoketrail.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_fire_smallmoketrail.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_fire_smallmoketrail.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_fire_smalls_explosion_fingers.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_fire_smalls_explosion_fingers.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_fire_smalls_explosion_fingers.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_fire_smalls_explosion_fingers.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_fluidlarge.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_fluidlarge.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_fluidlarge.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_fluidlarge.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_groundburn.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_groundburn.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_groundburn.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_groundburn.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_ringmodel.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_ringmodel.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_ringmodel.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_ringmodel.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_sparks.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_sparks.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_sparks.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_sparks.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_streak.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_streak.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_streak.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_streak.vpcf_c diff --git a/particles/dac/zhayaotong/zhayaotong_streak_hard.vpcf_c b/game/particles/dac/zhayaotong/zhayaotong_streak_hard.vpcf_c similarity index 100% rename from particles/dac/zhayaotong/zhayaotong_streak_hard.vpcf_c rename to game/particles/dac/zhayaotong/zhayaotong_streak_hard.vpcf_c diff --git a/particles/dzz/qingshanjiansheng_yjzcs.vpcf_c b/game/particles/dzz/qingshanjiansheng_yjzcs.vpcf_c similarity index 100% rename from particles/dzz/qingshanjiansheng_yjzcs.vpcf_c rename to game/particles/dzz/qingshanjiansheng_yjzcs.vpcf_c diff --git a/particles/dzz/qingshanjiansheng_yjzcs_sparks.vpcf_c b/game/particles/dzz/qingshanjiansheng_yjzcs_sparks.vpcf_c similarity index 100% rename from particles/dzz/qingshanjiansheng_yjzcs_sparks.vpcf_c rename to game/particles/dzz/qingshanjiansheng_yjzcs_sparks.vpcf_c diff --git a/particles/dzz/qingshanjiansheng_yjzcs_sword.vpcf_c b/game/particles/dzz/qingshanjiansheng_yjzcs_sword.vpcf_c similarity index 100% rename from particles/dzz/qingshanjiansheng_yjzcs_sword.vpcf_c rename to game/particles/dzz/qingshanjiansheng_yjzcs_sword.vpcf_c diff --git a/particles/dzz/qingshanjiansheng_yjzcs_sword_light.vpcf_c b/game/particles/dzz/qingshanjiansheng_yjzcs_sword_light.vpcf_c similarity index 100% rename from particles/dzz/qingshanjiansheng_yjzcs_sword_light.vpcf_c rename to game/particles/dzz/qingshanjiansheng_yjzcs_sword_light.vpcf_c diff --git a/particles/econ/courier/courier_cluckles/courier_cluckles_ambient_rocket_sparks.vpcf_c b/game/particles/econ/courier/courier_cluckles/courier_cluckles_ambient_rocket_sparks.vpcf_c similarity index 100% rename from particles/econ/courier/courier_cluckles/courier_cluckles_ambient_rocket_sparks.vpcf_c rename to game/particles/econ/courier/courier_cluckles/courier_cluckles_ambient_rocket_sparks.vpcf_c diff --git a/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante.vpcf_c b/game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante.vpcf_c similarity index 100% rename from particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante.vpcf_c rename to game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante.vpcf_c diff --git a/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_a.vpcf_c b/game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_a.vpcf_c similarity index 100% rename from particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_a.vpcf_c rename to game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_a.vpcf_c diff --git a/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_b.vpcf_c b/game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_b.vpcf_c similarity index 100% rename from particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_b.vpcf_c rename to game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_b.vpcf_c diff --git a/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_c.vpcf_c b/game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_c.vpcf_c similarity index 100% rename from particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_c.vpcf_c rename to game/particles/econ/courier/courier_dolfrat_and_roshinante/courier_dolfrat_and_roshinante_c.vpcf_c diff --git a/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02a.vpcf_c b/game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02a.vpcf_c similarity index 100% rename from particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02a.vpcf_c rename to game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02a.vpcf_c diff --git a/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02b.vpcf_c b/game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02b.vpcf_c similarity index 100% rename from particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02b.vpcf_c rename to game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02b.vpcf_c diff --git a/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02c.vpcf_c b/game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02c.vpcf_c similarity index 100% rename from particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02c.vpcf_c rename to game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02c.vpcf_c diff --git a/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02e.vpcf_c b/game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02e.vpcf_c similarity index 100% rename from particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02e.vpcf_c rename to game/particles/econ/courier/courier_eye_glow_02/courier_eye_glow_02e.vpcf_c diff --git a/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_a.vpcf_c b/game/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_a.vpcf_c similarity index 100% rename from particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_a.vpcf_c rename to game/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_a.vpcf_c diff --git a/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_b.vpcf_c b/game/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_b.vpcf_c similarity index 100% rename from particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_b.vpcf_c rename to game/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_b.vpcf_c diff --git a/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_c.vpcf_c b/game/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_c.vpcf_c similarity index 100% rename from particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_c.vpcf_c rename to game/particles/econ/courier/courier_greevil_black/courier_greevil_black_ambient_2_c.vpcf_c diff --git a/particles/econ/courier/courier_greevil_white/courier_greevil_white_ambient_2_c.vpcf_c b/game/particles/econ/courier/courier_greevil_white/courier_greevil_white_ambient_2_c.vpcf_c similarity index 100% rename from particles/econ/courier/courier_greevil_white/courier_greevil_white_ambient_2_c.vpcf_c rename to game/particles/econ/courier/courier_greevil_white/courier_greevil_white_ambient_2_c.vpcf_c diff --git a/particles/econ/courier/courier_snail/courier_snail_ambient_rocket_sparks.vpcf_c b/game/particles/econ/courier/courier_snail/courier_snail_ambient_rocket_sparks.vpcf_c similarity index 100% rename from particles/econ/courier/courier_snail/courier_snail_ambient_rocket_sparks.vpcf_c rename to game/particles/econ/courier/courier_snail/courier_snail_ambient_rocket_sparks.vpcf_c diff --git a/particles/econ/events/ti4/teleport_end_h_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_end_h_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_end_h_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_end_h_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_end_i_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_end_i_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_end_i_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_end_i_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_end_playercolor_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_end_playercolor_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_end_playercolor_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_end_playercolor_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_end_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_end_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_end_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_end_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_end_tube_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_end_tube_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_end_tube_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_end_tube_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_end_volume_core_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_end_volume_core_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_end_volume_core_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_end_volume_core_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_start_c_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_start_c_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_start_c_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_start_c_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_start_d_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_start_d_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_start_d_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_start_d_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_start_d_ti4_b.vpcf_c b/game/particles/econ/events/ti4/teleport_start_d_ti4_b.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_start_d_ti4_b.vpcf_c rename to game/particles/econ/events/ti4/teleport_start_d_ti4_b.vpcf_c diff --git a/particles/econ/events/ti4/teleport_start_d_ti4_c.vpcf_c b/game/particles/econ/events/ti4/teleport_start_d_ti4_c.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_start_d_ti4_c.vpcf_c rename to game/particles/econ/events/ti4/teleport_start_d_ti4_c.vpcf_c diff --git a/particles/econ/events/ti4/teleport_start_h_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_start_h_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_start_h_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_start_h_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_start_i_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_start_i_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_start_i_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_start_i_ti4.vpcf_c diff --git a/particles/econ/events/ti4/teleport_start_n_endcap_ti4.vpcf_c b/game/particles/econ/events/ti4/teleport_start_n_endcap_ti4.vpcf_c similarity index 100% rename from particles/econ/events/ti4/teleport_start_n_endcap_ti4.vpcf_c rename to game/particles/econ/events/ti4/teleport_start_n_endcap_ti4.vpcf_c diff --git a/particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm.vpcf_c b/game/particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm.vpcf_c similarity index 100% rename from particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm.vpcf_c rename to game/particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm.vpcf_c diff --git a/particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm_blots.vpcf_c b/game/particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm_blots.vpcf_c similarity index 100% rename from particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm_blots.vpcf_c rename to game/particles/econ/items/death_prophet/death_prophet_acherontia/death_prophet_acher_swarm_blots.vpcf_c diff --git a/particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target.vpcf_c b/game/particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target.vpcf_c similarity index 100% rename from particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target.vpcf_c rename to game/particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target.vpcf_c diff --git a/particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target_b.vpcf_c b/game/particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target_b.vpcf_c similarity index 100% rename from particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target_b.vpcf_c rename to game/particles/econ/items/gyrocopter/hero_gyrocopter_gyrotechnics/gyro_guided_missile_target_b.vpcf_c diff --git a/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_armor_of_the_favorite_crit.vpcf_c b/game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_armor_of_the_favorite_crit.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_armor_of_the_favorite_crit.vpcf_c rename to game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_armor_of_the_favorite_crit.vpcf_c diff --git a/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_blade_fury_favoriteblade.vpcf_c b/game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_blade_fury_favoriteblade.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_blade_fury_favoriteblade.vpcf_c rename to game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_blade_fury_favoriteblade.vpcf_c diff --git a/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_body_ambient.vpcf_c b/game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_body_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_body_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_body_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_eyes.vpcf_c b/game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_eyes.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_eyes.vpcf_c rename to game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_eyes.vpcf_c diff --git a/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_shoulder_ambient.vpcf_c b/game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_shoulder_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_shoulder_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_shoulder_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_weapon.vpcf_c b/game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_weapon.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_weapon.vpcf_c rename to game/particles/econ/items/juggernaut/armor_of_the_favorite/juggernaut_favorite_weapon.vpcf_c diff --git a/particles/econ/items/juggernaut/bladekeeper_bladefury/_dc_juggernaut_blade_fury.vpcf_c b/game/particles/econ/items/juggernaut/bladekeeper_bladefury/_dc_juggernaut_blade_fury.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/bladekeeper_bladefury/_dc_juggernaut_blade_fury.vpcf_c rename to game/particles/econ/items/juggernaut/bladekeeper_bladefury/_dc_juggernaut_blade_fury.vpcf_c diff --git a/particles/econ/items/juggernaut/bladekeeper_headglow/dc_juggernaut_bladekeeper_head.vpcf_c b/game/particles/econ/items/juggernaut/bladekeeper_headglow/dc_juggernaut_bladekeeper_head.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/bladekeeper_headglow/dc_juggernaut_bladekeeper_head.vpcf_c rename to game/particles/econ/items/juggernaut/bladekeeper_headglow/dc_juggernaut_bladekeeper_head.vpcf_c diff --git a/particles/econ/items/juggernaut/bladekeeper_healing_ward/juggernaut_healing_ward_eruption_dc.vpcf_c b/game/particles/econ/items/juggernaut/bladekeeper_healing_ward/juggernaut_healing_ward_eruption_dc.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/bladekeeper_healing_ward/juggernaut_healing_ward_eruption_dc.vpcf_c rename to game/particles/econ/items/juggernaut/bladekeeper_healing_ward/juggernaut_healing_ward_eruption_dc.vpcf_c diff --git a/particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_tgt.vpcf_c b/game/particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_tgt.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_tgt.vpcf_c rename to game/particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_tgt.vpcf_c diff --git a/particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_trail.vpcf_c b/game/particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_trail.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_trail.vpcf_c rename to game/particles/econ/items/juggernaut/bladekeeper_omnislash/_dc_juggernaut_omni_slash_trail.vpcf_c diff --git a/particles/econ/items/juggernaut/bladekeeper_swordglow/dc_juggernaut_blade.vpcf_c b/game/particles/econ/items/juggernaut/bladekeeper_swordglow/dc_juggernaut_blade.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/bladekeeper_swordglow/dc_juggernaut_blade.vpcf_c rename to game/particles/econ/items/juggernaut/bladekeeper_swordglow/dc_juggernaut_blade.vpcf_c diff --git a/particles/econ/items/juggernaut/highplains_sword_longfang/jugg_weapon_glow_variation_longfang.vpcf_c b/game/particles/econ/items/juggernaut/highplains_sword_longfang/jugg_weapon_glow_variation_longfang.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/highplains_sword_longfang/jugg_weapon_glow_variation_longfang.vpcf_c rename to game/particles/econ/items/juggernaut/highplains_sword_longfang/jugg_weapon_glow_variation_longfang.vpcf_c diff --git a/particles/econ/items/juggernaut/highplains_sword_longfang/juggernaut_blade_fury_longfang_b.vpcf_c b/game/particles/econ/items/juggernaut/highplains_sword_longfang/juggernaut_blade_fury_longfang_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/highplains_sword_longfang/juggernaut_blade_fury_longfang_b.vpcf_c rename to game/particles/econ/items/juggernaut/highplains_sword_longfang/juggernaut_blade_fury_longfang_b.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_crit_blur.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_crit_blur.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_crit_blur.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_crit_blur.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_haste.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_haste.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_haste.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_haste.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_v2_crit_blur.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_v2_crit_blur.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_v2_crit_blur.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/jugg_arcana_v2_crit_blur.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_blade_fury.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_blade_fury.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_blade_fury.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_blade_fury.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_body_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_body_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_body_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_body_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_counter.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_counter.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_counter.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_counter.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_crit_tgt.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_crit_tgt.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_crit_tgt.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_crit_tgt.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_death_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_death_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_death_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_death_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_idle_rare.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_idle_rare.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_idle_rare.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_idle_rare.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_loadout_rare_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_loadout_rare_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_loadout_rare_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_loadout_rare_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_dash.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_dash.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_dash.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_dash.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_end.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_end.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_end.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_end.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bladekeeper.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bladekeeper.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bladekeeper.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bladekeeper.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bonus.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bonus.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bonus.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_bonus.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_serrakura.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_serrakura.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_serrakura.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_tgt_serrakura.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_bladekeeper.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_bladekeeper.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_bladekeeper.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_bladekeeper.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_serrakura.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_serrakura.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_serrakura.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_omni_slash_trail_serrakura.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_end_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_end_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_end_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_end_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_teleport_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger_loadout.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger_loadout.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger_loadout.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_trigger_loadout.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_blade_fury.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_blade_fury.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_blade_fury.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_blade_fury.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_body_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_body_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_body_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_body_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_crit_tgt.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_crit_tgt.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_crit_tgt.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_crit_tgt.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_death_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_death_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_death_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_death_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_idle_rare.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_idle_rare.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_idle_rare.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_idle_rare.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_loadout_rare_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_loadout_rare_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_loadout_rare_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_loadout_rare_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_dash.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_dash.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_dash.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_dash.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_end.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_end.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_end.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_end.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_bladekeeper.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_bladekeeper.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_bladekeeper.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_bladekeeper.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_serrakura.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_serrakura.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_serrakura.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_tgt_serrakura.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_bladekeeper.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_bladekeeper.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_bladekeeper.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_bladekeeper.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_serrakura.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_serrakura.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_serrakura.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_omni_slash_trail_serrakura.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_portrait_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_portrait_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_portrait_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_portrait_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_end_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_end_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_end_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_end_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_model.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_model.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_model.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_teleport_model.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_trigger.vpcf_c b/game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_trigger.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_trigger.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_trigger.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_gold.vpcf_c b/game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_gold.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_gold.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_gold.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_ward_gold.vpcf_c b/game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_ward_gold.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_ward_gold.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healing_ward_fortunes_tout_ward_gold.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_hero_heal.vpcf_c b/game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_hero_heal.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_hero_heal.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_hero_heal.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_ward.vpcf_c b/game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_ward.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_ward.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_fortunes_tout/jugg_healling_ward_fortunes_tout_ward.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_relentless_sword/juggernaut_relentless_sword_glow.vpcf_c b/game/particles/econ/items/juggernaut/jugg_relentless_sword/juggernaut_relentless_sword_glow.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_relentless_sword/juggernaut_relentless_sword_glow.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_relentless_sword/juggernaut_relentless_sword_glow.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_serrakura/jugg_serrakurra_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_serrakura/jugg_serrakurra_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_serrakura/jugg_serrakurra_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_serrakura/jugg_serrakurra_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_arms_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_arms_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_arms_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_arms_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_back_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_back_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_back_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_back_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_head_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_head_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_head_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_head_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_legs_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_legs_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_legs_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_legs_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_weapon_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_weapon_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_weapon_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_slayer/jugg_slayer_weapon_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_default/jugg_weapon_glow.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_default/jugg_weapon_glow.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_default/jugg_weapon_glow.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_default/jugg_weapon_glow.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_ambient_dragon.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_ambient_dragon.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_ambient_dragon.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_ambient_dragon.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_fury_dragon_b.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_fury_dragon_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_fury_dragon_b.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_dragon/juggernaut_blade_fury_dragon_b.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/jugg_crit_blur_fb_odachi.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/jugg_crit_blur_fb_odachi.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/jugg_crit_blur_fb_odachi.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/jugg_crit_blur_fb_odachi.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_blade_fury_fireborn_odachi_b.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_blade_fury_fireborn_odachi_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_blade_fury_fireborn_odachi_b.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_blade_fury_fireborn_odachi_b.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_omni_slash_trail_fireborn_odachi.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_omni_slash_trail_fireborn_odachi.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_omni_slash_trail_fireborn_odachi.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_fireborn_odachi/juggernaut_omni_slash_trail_fireborn_odachi.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_jade/jugg_weapon_glow_variation_jade.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_jade/jugg_weapon_glow_variation_jade.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_jade/jugg_weapon_glow_variation_jade.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_jade/jugg_weapon_glow_variation_jade.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_jade/juggernaut_blade_fury_jade_b.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_jade/juggernaut_blade_fury_jade_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_jade/juggernaut_blade_fury_jade_b.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_jade/juggernaut_blade_fury_jade_b.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_script/jugg_weapon_glow_variation_script.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_script/jugg_weapon_glow_variation_script.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_script/jugg_weapon_glow_variation_script.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_script/jugg_weapon_glow_variation_script.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_script/juggernaut_blade_fury_script_b.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_script/juggernaut_blade_fury_script_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_script/juggernaut_blade_fury_script_b.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_script/juggernaut_blade_fury_script_b.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_shred/juggernaut_blade_fury_shred_b.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_shred/juggernaut_blade_fury_shred_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_shred/juggernaut_blade_fury_shred_b.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_shred/juggernaut_blade_fury_shred_b.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_sword_thousand_faces/jugg_weapon_glow_thousand_faces.vpcf_c b/game/particles/econ/items/juggernaut/jugg_sword_thousand_faces/jugg_weapon_glow_thousand_faces.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_sword_thousand_faces/jugg_weapon_glow_thousand_faces.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_sword_thousand_faces/jugg_weapon_glow_thousand_faces.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient_golden.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient_golden.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient_golden.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ti8_sword/jugg_ti8_sword_ambient_golden.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal_golden.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal_golden.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal_golden.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_blade_fury_abyssal_golden.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_golden.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_golden.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_golden.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_golden.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_overtheshoulder_golden.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_overtheshoulder_golden.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_overtheshoulder_golden.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_crit_overtheshoulder_golden.vpcf_c diff --git a/particles/econ/items/juggernaut/jugg_ward_foo/juggernaut_healing_ward.vpcf_c b/game/particles/econ/items/juggernaut/jugg_ward_foo/juggernaut_healing_ward.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/jugg_ward_foo/juggernaut_healing_ward.vpcf_c rename to game/particles/econ/items/juggernaut/jugg_ward_foo/juggernaut_healing_ward.vpcf_c diff --git a/particles/econ/items/juggernaut/lord_sword_ivory/jugg_weapon_glow_variation_ivory.vpcf_c b/game/particles/econ/items/juggernaut/lord_sword_ivory/jugg_weapon_glow_variation_ivory.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/lord_sword_ivory/jugg_weapon_glow_variation_ivory.vpcf_c rename to game/particles/econ/items/juggernaut/lord_sword_ivory/jugg_weapon_glow_variation_ivory.vpcf_c diff --git a/particles/econ/items/juggernaut/lord_sword_ivory/juggernaut_blade_fury_ivory_b.vpcf_c b/game/particles/econ/items/juggernaut/lord_sword_ivory/juggernaut_blade_fury_ivory_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/lord_sword_ivory/juggernaut_blade_fury_ivory_b.vpcf_c rename to game/particles/econ/items/juggernaut/lord_sword_ivory/juggernaut_blade_fury_ivory_b.vpcf_c diff --git a/particles/econ/items/juggernaut/nomad_sword_grand_claive/jugg_weapon_glow_variation_grand_claive.vpcf_c b/game/particles/econ/items/juggernaut/nomad_sword_grand_claive/jugg_weapon_glow_variation_grand_claive.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/nomad_sword_grand_claive/jugg_weapon_glow_variation_grand_claive.vpcf_c rename to game/particles/econ/items/juggernaut/nomad_sword_grand_claive/jugg_weapon_glow_variation_grand_claive.vpcf_c diff --git a/particles/econ/items/juggernaut/nomad_sword_grand_claive/juggernaut_blade_fury_grand_claive_b.vpcf_c b/game/particles/econ/items/juggernaut/nomad_sword_grand_claive/juggernaut_blade_fury_grand_claive_b.vpcf_c similarity index 100% rename from particles/econ/items/juggernaut/nomad_sword_grand_claive/juggernaut_blade_fury_grand_claive_b.vpcf_c rename to game/particles/econ/items/juggernaut/nomad_sword_grand_claive/juggernaut_blade_fury_grand_claive_b.vpcf_c diff --git a/particles/econ/items/kunkka/kunkka_weapon_whaleblade/kunkka_spell_torrent_splash_whaleblade.vpcf_c b/game/particles/econ/items/kunkka/kunkka_weapon_whaleblade/kunkka_spell_torrent_splash_whaleblade.vpcf_c similarity index 100% rename from particles/econ/items/kunkka/kunkka_weapon_whaleblade/kunkka_spell_torrent_splash_whaleblade.vpcf_c rename to game/particles/econ/items/kunkka/kunkka_weapon_whaleblade/kunkka_spell_torrent_splash_whaleblade.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_commander_duel_text.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_commander_duel_text.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_commander_duel_text.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_commander_duel_text.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_arcana_evil.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_arcana_evil.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_arcana_evil.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_arcana_evil.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_proj_arcana_scorch.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_proj_arcana_scorch.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_proj_arcana_scorch.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_proj_arcana_scorch.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_rays_arcana.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_rays_arcana.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_rays_arcana.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_rays_arcana.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_endcap_arcana.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_endcap_arcana.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_endcap_arcana.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_endcap_arcana.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_line_arcana.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_line_arcana.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_line_arcana.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_line_arcana.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_flags.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_flags.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_flags.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_flags.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_hardflame.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_hardflame.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_hardflame.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_arcana_hardflame.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_flash_arcana.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_flash_arcana.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_flash_arcana.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_flash_arcana.vpcf_c diff --git a/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_rope_arcana.vpcf_c b/game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_rope_arcana.vpcf_c similarity index 100% rename from particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_rope_arcana.vpcf_c rename to game/particles/econ/items/legion/legion_weapon_voth_domosh/legion_duel_start_ring_rope_arcana.vpcf_c diff --git a/particles/econ/items/storm_spirit/storm_spirit_orchid_hat/stormspirit_orchid_ball_lightning.vpcf_c b/game/particles/econ/items/storm_spirit/storm_spirit_orchid_hat/stormspirit_orchid_ball_lightning.vpcf_c similarity index 100% rename from particles/econ/items/storm_spirit/storm_spirit_orchid_hat/stormspirit_orchid_ball_lightning.vpcf_c rename to game/particles/econ/items/storm_spirit/storm_spirit_orchid_hat/stormspirit_orchid_ball_lightning.vpcf_c diff --git a/particles/econ/items/templar_assassin/templar_assassin_weapon_scholar/templar_assassin_ambient_scholar.vpcf_c b/game/particles/econ/items/templar_assassin/templar_assassin_weapon_scholar/templar_assassin_ambient_scholar.vpcf_c similarity index 100% rename from particles/econ/items/templar_assassin/templar_assassin_weapon_scholar/templar_assassin_ambient_scholar.vpcf_c rename to game/particles/econ/items/templar_assassin/templar_assassin_weapon_scholar/templar_assassin_ambient_scholar.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_a.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_a.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_a.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_a.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_b.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_b.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_b.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_b.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_c.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_c.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_c.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_c.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_d.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_d.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_d.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_d.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_e.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_e.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_e.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_e.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f0.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f0.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f0.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f0.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f1.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f1.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f1.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f1.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f10.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f10.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f10.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f10.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f2.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f2.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f2.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f2.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f3.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f3.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f3.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f3.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f4.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f4.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f4.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f4.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5a.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5a.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5a.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f5a.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f6.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f6.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f6.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f6.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f7.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f7.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f7.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f7.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f8.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f8.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f8.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f8.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f9.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f9.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f9.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_f9.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g0.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g0.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g0.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_g0.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h0.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h0.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h0.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_h0.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i0.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i0.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i0.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_i0.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_j.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_j.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_j.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_j.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_k.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_k.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_k.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_k.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_l.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_l.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_l.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_l.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_m.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_m.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_m.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_m.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n0.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n0.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n0.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_n0.vpcf_c diff --git a/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_o.vpcf_c b/game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_o.vpcf_c similarity index 100% rename from particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_o.vpcf_c rename to game/particles/econ/items/tidehunter/tidehunter_divinghelmet/tidehunter_gush_diving_helmet_o.vpcf_c diff --git a/particles/econ/items/warlock/warlock_golem_dark_curator/golem_ambient_fire_mouth_glow_dark_curator.vpcf_c b/game/particles/econ/items/warlock/warlock_golem_dark_curator/golem_ambient_fire_mouth_glow_dark_curator.vpcf_c similarity index 100% rename from particles/econ/items/warlock/warlock_golem_dark_curator/golem_ambient_fire_mouth_glow_dark_curator.vpcf_c rename to game/particles/econ/items/warlock/warlock_golem_dark_curator/golem_ambient_fire_mouth_glow_dark_curator.vpcf_c diff --git a/particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher.vpcf_c b/game/particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher.vpcf_c similarity index 100% rename from particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher.vpcf_c rename to game/particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher.vpcf_c diff --git a/particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher_eye.vpcf_c b/game/particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher_eye.vpcf_c similarity index 100% rename from particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher_eye.vpcf_c rename to game/particles/econ/items/warlock/warlock_golem_watcher/golem_ambient_watcher_eye.vpcf_c diff --git a/particles/econ/items/warlock/warlock_staff_archivist/warlock_ambient_staff_archivist.vpcf_c b/game/particles/econ/items/warlock/warlock_staff_archivist/warlock_ambient_staff_archivist.vpcf_c similarity index 100% rename from particles/econ/items/warlock/warlock_staff_archivist/warlock_ambient_staff_archivist.vpcf_c rename to game/particles/econ/items/warlock/warlock_staff_archivist/warlock_ambient_staff_archivist.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_b.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_b.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_b.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_b.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_c.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_c.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_c.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_feet_effects_cascade_c.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_burst_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_burst_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_burst_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_burst_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_fire_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_fire_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_fire_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_fire_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_b_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_b_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_b_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_b_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_leaves_sides_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_trail_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_trail_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_trail_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_magic_trail_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_start_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_start_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_start_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_start_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_swirl_leaves_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_swirl_leaves_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_swirl_leaves_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_swirl_leaves_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_whirlwind_static_cascade.vpcf_c b/game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_whirlwind_static_cascade.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_whirlwind_static_cascade.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_cape_cascade/windrunner_windrun_whirlwind_static_cascade.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_base_ref.vpcf_c b/game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_base_ref.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_base_ref.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_base_ref.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk.vpcf_c b/game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_b.vpcf_c b/game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_b.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_b.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_b.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_c.vpcf_c b/game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_c.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_c.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_c.vpcf_c diff --git a/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_d.vpcf_c b/game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_d.vpcf_c similarity index 100% rename from particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_d.vpcf_c rename to game/particles/econ/items/windrunner/windrunner_weapon_sparrowhawk/windrunner_spell_powershot_ribbon_sparrowhawk_d.vpcf_c diff --git a/particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward.vpcf_c b/game/particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward.vpcf_c similarity index 100% rename from particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward.vpcf_c rename to game/particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward.vpcf_c diff --git a/particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward_c.vpcf_c b/game/particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward_c.vpcf_c similarity index 100% rename from particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward_c.vpcf_c rename to game/particles/econ/wards/warlock/ward_warlock/warlock_ambient_ward_c.vpcf_c diff --git a/particles/environment/jump/jump.vpcf_c b/game/particles/environment/jump/jump.vpcf_c similarity index 100% rename from particles/environment/jump/jump.vpcf_c rename to game/particles/environment/jump/jump.vpcf_c diff --git a/particles/environment/thd_rain.vpcf_c b/game/particles/environment/thd_rain.vpcf_c similarity index 100% rename from particles/environment/thd_rain.vpcf_c rename to game/particles/environment/thd_rain.vpcf_c diff --git a/particles/environment/waterfall/waterfall_1.vpcf_c b/game/particles/environment/waterfall/waterfall_1.vpcf_c similarity index 100% rename from particles/environment/waterfall/waterfall_1.vpcf_c rename to game/particles/environment/waterfall/waterfall_1.vpcf_c diff --git a/particles/environment/waterfall/waterfall_1_bottom_1.vpcf_c b/game/particles/environment/waterfall/waterfall_1_bottom_1.vpcf_c similarity index 100% rename from particles/environment/waterfall/waterfall_1_bottom_1.vpcf_c rename to game/particles/environment/waterfall/waterfall_1_bottom_1.vpcf_c diff --git a/particles/environment/waterfall/waterfall_1_bottom_2.vpcf_c b/game/particles/environment/waterfall/waterfall_1_bottom_2.vpcf_c similarity index 100% rename from particles/environment/waterfall/waterfall_1_bottom_2.vpcf_c rename to game/particles/environment/waterfall/waterfall_1_bottom_2.vpcf_c diff --git a/particles/gem/brewmaster_drunken_haze_debuff_bubbles_2.vpcf_c b/game/particles/gem/brewmaster_drunken_haze_debuff_bubbles_2.vpcf_c similarity index 100% rename from particles/gem/brewmaster_drunken_haze_debuff_bubbles_2.vpcf_c rename to game/particles/gem/brewmaster_drunken_haze_debuff_bubbles_2.vpcf_c diff --git a/particles/gem/opal_pray.vpcf_c b/game/particles/gem/opal_pray.vpcf_c similarity index 100% rename from particles/gem/opal_pray.vpcf_c rename to game/particles/gem/opal_pray.vpcf_c diff --git a/particles/gem/purple_pray.vpcf_c b/game/particles/gem/purple_pray.vpcf_c similarity index 100% rename from particles/gem/purple_pray.vpcf_c rename to game/particles/gem/purple_pray.vpcf_c diff --git a/particles/gem/red_pray.vpcf_c b/game/particles/gem/red_pray.vpcf_c similarity index 100% rename from particles/gem/red_pray.vpcf_c rename to game/particles/gem/red_pray.vpcf_c diff --git a/particles/gem/sniper_crosshair.vpcf_c b/game/particles/gem/sniper_crosshair.vpcf_c similarity index 100% rename from particles/gem/sniper_crosshair.vpcf_c rename to game/particles/gem/sniper_crosshair.vpcf_c diff --git a/particles/gem/sniper_crosshair_c.vpcf_c b/game/particles/gem/sniper_crosshair_c.vpcf_c similarity index 100% rename from particles/gem/sniper_crosshair_c.vpcf_c rename to game/particles/gem/sniper_crosshair_c.vpcf_c diff --git a/particles/gem/teleport_start_d_pw2014.vpcf_c b/game/particles/gem/teleport_start_d_pw2014.vpcf_c similarity index 100% rename from particles/gem/teleport_start_d_pw2014.vpcf_c rename to game/particles/gem/teleport_start_d_pw2014.vpcf_c diff --git a/particles/gem/white_pray.vpcf_c b/game/particles/gem/white_pray.vpcf_c similarity index 100% rename from particles/gem/white_pray.vpcf_c rename to game/particles/gem/white_pray.vpcf_c diff --git a/particles/generic_gameplay/dropped_item_beam.vpcf_c b/game/particles/generic_gameplay/dropped_item_beam.vpcf_c similarity index 100% rename from particles/generic_gameplay/dropped_item_beam.vpcf_c rename to game/particles/generic_gameplay/dropped_item_beam.vpcf_c diff --git a/particles/generic_gameplay/dropped_item_beam_core.vpcf_c b/game/particles/generic_gameplay/dropped_item_beam_core.vpcf_c similarity index 100% rename from particles/generic_gameplay/dropped_item_beam_core.vpcf_c rename to game/particles/generic_gameplay/dropped_item_beam_core.vpcf_c diff --git a/particles/generic_gameplay/dropped_item_emerald.vpcf_c b/game/particles/generic_gameplay/dropped_item_emerald.vpcf_c similarity index 100% rename from particles/generic_gameplay/dropped_item_emerald.vpcf_c rename to game/particles/generic_gameplay/dropped_item_emerald.vpcf_c diff --git a/particles/generic_gameplay/dropped_item_emerald_bubbles.vpcf_c b/game/particles/generic_gameplay/dropped_item_emerald_bubbles.vpcf_c similarity index 100% rename from particles/generic_gameplay/dropped_item_emerald_bubbles.vpcf_c rename to game/particles/generic_gameplay/dropped_item_emerald_bubbles.vpcf_c diff --git a/particles/generic_gameplay/dropped_item_emerald_smoke.vpcf_c b/game/particles/generic_gameplay/dropped_item_emerald_smoke.vpcf_c similarity index 100% rename from particles/generic_gameplay/dropped_item_emerald_smoke.vpcf_c rename to game/particles/generic_gameplay/dropped_item_emerald_smoke.vpcf_c diff --git a/particles/generic_gameplay/dropped_item_important.vpcf_c b/game/particles/generic_gameplay/dropped_item_important.vpcf_c similarity index 100% rename from particles/generic_gameplay/dropped_item_important.vpcf_c rename to game/particles/generic_gameplay/dropped_item_important.vpcf_c diff --git a/particles/generic_gameplay/dropped_item_lava.vpcf_c b/game/particles/generic_gameplay/dropped_item_lava.vpcf_c similarity index 100% rename from particles/generic_gameplay/dropped_item_lava.vpcf_c rename to game/particles/generic_gameplay/dropped_item_lava.vpcf_c diff --git a/particles/generic_gameplay/lasthit_crystal_local.vpcf_c b/game/particles/generic_gameplay/lasthit_crystal_local.vpcf_c similarity index 100% rename from particles/generic_gameplay/lasthit_crystal_local.vpcf_c rename to game/particles/generic_gameplay/lasthit_crystal_local.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02.vpcf_c b/game/particles/heroes/alice/ability_alice_02.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02.vpcf_c rename to game/particles/heroes/alice/ability_alice_02.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_a.vpcf_c b/game/particles/heroes/alice/ability_alice_02_a.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_a.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_a.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_b.vpcf_c b/game/particles/heroes/alice/ability_alice_02_b.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_b.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_b.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c0.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c0.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c0.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c0.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c1.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c1.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c1.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c1.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c2.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c2.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c2.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c2.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c3.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c3.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c3.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c3.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c4.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c4.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c4.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c4.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c5.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c5.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c5.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c5.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c6.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c6.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c6.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c6.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c7.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c7.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c7.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c7.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_c8.vpcf_c b/game/particles/heroes/alice/ability_alice_02_c8.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_c8.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_c8.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_d.vpcf_c b/game/particles/heroes/alice/ability_alice_02_d.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_d.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_d.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_e.vpcf_c b/game/particles/heroes/alice/ability_alice_02_e.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_e.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_e.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_f.vpcf_c b/game/particles/heroes/alice/ability_alice_02_f.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_f.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_f.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_g.vpcf_c b/game/particles/heroes/alice/ability_alice_02_g.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_g.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_g.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_h.vpcf_c b/game/particles/heroes/alice/ability_alice_02_h.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_h.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_h.vpcf_c diff --git a/particles/heroes/alice/ability_alice_02_i.vpcf_c b/game/particles/heroes/alice/ability_alice_02_i.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_02_i.vpcf_c rename to game/particles/heroes/alice/ability_alice_02_i.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash.vpcf_c b/game/particles/heroes/alice/ability_alice_dash.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash_a.vpcf_c b/game/particles/heroes/alice/ability_alice_dash_a.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash_a.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash_a.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash_a0.vpcf_c b/game/particles/heroes/alice/ability_alice_dash_a0.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash_a0.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash_a0.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash_a1.vpcf_c b/game/particles/heroes/alice/ability_alice_dash_a1.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash_a1.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash_a1.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash_a2.vpcf_c b/game/particles/heroes/alice/ability_alice_dash_a2.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash_a2.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash_a2.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash_a3.vpcf_c b/game/particles/heroes/alice/ability_alice_dash_a3.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash_a3.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash_a3.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash_a4.vpcf_c b/game/particles/heroes/alice/ability_alice_dash_a4.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash_a4.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash_a4.vpcf_c diff --git a/particles/heroes/alice/ability_alice_dash_a5.vpcf_c b/game/particles/heroes/alice/ability_alice_dash_a5.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_dash_a5.vpcf_c rename to game/particles/heroes/alice/ability_alice_dash_a5.vpcf_c diff --git a/particles/heroes/alice/ability_alice_ex_release.vpcf_c b/game/particles/heroes/alice/ability_alice_ex_release.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_ex_release.vpcf_c rename to game/particles/heroes/alice/ability_alice_ex_release.vpcf_c diff --git a/particles/heroes/alice/ability_alice_ex_release_a.vpcf_c b/game/particles/heroes/alice/ability_alice_ex_release_a.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_ex_release_a.vpcf_c rename to game/particles/heroes/alice/ability_alice_ex_release_a.vpcf_c diff --git a/particles/heroes/alice/ability_alice_ex_release_b.vpcf_c b/game/particles/heroes/alice/ability_alice_ex_release_b.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_ex_release_b.vpcf_c rename to game/particles/heroes/alice/ability_alice_ex_release_b.vpcf_c diff --git a/particles/heroes/alice/ability_alice_line.vpcf_c b/game/particles/heroes/alice/ability_alice_line.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_line.vpcf_c rename to game/particles/heroes/alice/ability_alice_line.vpcf_c diff --git a/particles/heroes/alice/ability_alice_line_a.vpcf_c b/game/particles/heroes/alice/ability_alice_line_a.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_line_a.vpcf_c rename to game/particles/heroes/alice/ability_alice_line_a.vpcf_c diff --git a/particles/heroes/alice/ability_alice_line_b.vpcf_c b/game/particles/heroes/alice/ability_alice_line_b.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_line_b.vpcf_c rename to game/particles/heroes/alice/ability_alice_line_b.vpcf_c diff --git a/particles/heroes/alice/ability_alice_line_c.vpcf_c b/game/particles/heroes/alice/ability_alice_line_c.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_line_c.vpcf_c rename to game/particles/heroes/alice/ability_alice_line_c.vpcf_c diff --git a/particles/heroes/alice/ability_alice_line_d.vpcf_c b/game/particles/heroes/alice/ability_alice_line_d.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_line_d.vpcf_c rename to game/particles/heroes/alice/ability_alice_line_d.vpcf_c diff --git a/particles/heroes/alice/ability_alice_line_e.vpcf_c b/game/particles/heroes/alice/ability_alice_line_e.vpcf_c similarity index 100% rename from particles/heroes/alice/ability_alice_line_e.vpcf_c rename to game/particles/heroes/alice/ability_alice_line_e.vpcf_c diff --git a/particles/heroes/aya/ability_aya_01.vpcf_c b/game/particles/heroes/aya/ability_aya_01.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_01.vpcf_c rename to game/particles/heroes/aya/ability_aya_01.vpcf_c diff --git a/particles/heroes/aya/ability_aya_02_mark.vpcf_c b/game/particles/heroes/aya/ability_aya_02_mark.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_02_mark.vpcf_c rename to game/particles/heroes/aya/ability_aya_02_mark.vpcf_c diff --git a/particles/heroes/aya/ability_aya_03.vpcf_c b/game/particles/heroes/aya/ability_aya_03.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_03.vpcf_c rename to game/particles/heroes/aya/ability_aya_03.vpcf_c diff --git a/particles/heroes/aya/ability_aya_03_b.vpcf_c b/game/particles/heroes/aya/ability_aya_03_b.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_03_b.vpcf_c rename to game/particles/heroes/aya/ability_aya_03_b.vpcf_c diff --git a/particles/heroes/aya/ability_aya_04.vpcf_c b/game/particles/heroes/aya/ability_aya_04.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_04.vpcf_c rename to game/particles/heroes/aya/ability_aya_04.vpcf_c diff --git a/particles/heroes/aya/ability_aya_04_b.vpcf_c b/game/particles/heroes/aya/ability_aya_04_b.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_04_b.vpcf_c rename to game/particles/heroes/aya/ability_aya_04_b.vpcf_c diff --git a/particles/heroes/aya/ability_aya_04_c.vpcf_c b/game/particles/heroes/aya/ability_aya_04_c.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_04_c.vpcf_c rename to game/particles/heroes/aya/ability_aya_04_c.vpcf_c diff --git a/particles/heroes/aya/ability_aya_04_d.vpcf_c b/game/particles/heroes/aya/ability_aya_04_d.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_04_d.vpcf_c rename to game/particles/heroes/aya/ability_aya_04_d.vpcf_c diff --git a/particles/heroes/aya/ability_aya_04_e.vpcf_c b/game/particles/heroes/aya/ability_aya_04_e.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_04_e.vpcf_c rename to game/particles/heroes/aya/ability_aya_04_e.vpcf_c diff --git a/particles/heroes/aya/ability_aya_04_f.vpcf_c b/game/particles/heroes/aya/ability_aya_04_f.vpcf_c similarity index 100% rename from particles/heroes/aya/ability_aya_04_f.vpcf_c rename to game/particles/heroes/aya/ability_aya_04_f.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02_a.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02_a.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02_a.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02_a.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02_b.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02_b.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02_b.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02_b.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02_c.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02_c.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02_c.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02_c.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02_d.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02_d.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02_d.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02_d.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02_e.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02_e.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02_e.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02_e.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02_f.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02_f.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02_f.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02_f.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_02_g.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_02_g.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_02_g.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_02_g.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_03.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_03.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_03.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_03.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_03_b.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_03_b.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_03_b.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_03_b.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_03_c.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_03_c.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_03_c.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_03_c.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_03_d.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_03_d.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_03_d.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_03_d.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04_attack.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04_attack.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04_attack.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04_attack.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04_circle.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04_circle.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04_circle.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04_circle.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04_circle_b.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04_circle_b.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04_circle_b.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04_circle_b.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04_ult.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04_ult.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04_ult.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04_ult.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04_ult_b.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04_ult_b.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04_ult_b.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04_ult_b.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04_ult_c.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04_ult_c.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04_ult_c.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04_ult_c.vpcf_c diff --git a/particles/heroes/byakuren/ability_byakuren_04_ult_flower.vpcf_c b/game/particles/heroes/byakuren/ability_byakuren_04_ult_flower.vpcf_c similarity index 100% rename from particles/heroes/byakuren/ability_byakuren_04_ult_flower.vpcf_c rename to game/particles/heroes/byakuren/ability_byakuren_04_ult_flower.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_a.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_a.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_a.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_a.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_b.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_b.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_b.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_b.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_c.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_c.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_c.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_c.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_d.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_d.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_d.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_d.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_e.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_e.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_e.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_e.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_e0.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_e0.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_e0.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_e0.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_e0a.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_e0a.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_e0a.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_e0a.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_f.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_f.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_f.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_f.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_g.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_g.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_g.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_g.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_h.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_h.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_h.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_h.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_i.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_i.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_i.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_i.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_j.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_j.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_j.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_j.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_j0.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_j0.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_j0.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_j0.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_k.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_k.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_k.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_k.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_m.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_m.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_m.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_m.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_n.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_n.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_n.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_n.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_02_o.vpcf_c b/game/particles/heroes/cirno/ability_cirno_02_o.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_02_o.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_02_o.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_a.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_a.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_a.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_a.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_b.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_b.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_b.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_b.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_a.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_a.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_a.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_a.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_b.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_b.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_b.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_b.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_c.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_c.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_c.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_c.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_d.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_d.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_d.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_d.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_d0.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_d0.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_d0.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_d0.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_e.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_e.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_e.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_e.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_e0.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_e0.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_e0.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_e0.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_f.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_f.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_f.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_f.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_f0.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_f0.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_f0.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_f0.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_buff_f1.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_buff_f1.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_buff_f1.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_buff_f1.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_c.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_c.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_c.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_c.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_d.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_d.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_d.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_d.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_e.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_e.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_e.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_e.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_f.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_f.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_f.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_f.vpcf_c diff --git a/particles/heroes/cirno/ability_cirno_04_g.vpcf_c b/game/particles/heroes/cirno/ability_cirno_04_g.vpcf_c similarity index 100% rename from particles/heroes/cirno/ability_cirno_04_g.vpcf_c rename to game/particles/heroes/cirno/ability_cirno_04_g.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_a.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_a.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_a.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_a.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_b.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_b.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_b.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_b.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_b0.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_b0.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_b0.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_b0.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_b0a.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_b0a.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_b0a.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_b0a.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_c.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_c.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_c.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_c.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_c0.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_c0.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_c0.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_c0.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_c0a.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_c0a.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_c0a.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_c0a.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_c0b.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_c0b.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_c0b.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_c0b.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_c0c.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_c0c.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_c0c.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_c0c.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_c0d.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_c0d.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_c0d.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_c0d.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_02_c0d0.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_02_c0d0.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_02_c0d0.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_02_c0d0.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_a.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_a.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_a.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_a.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_b.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_b.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_b.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_b.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_c.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_c.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_c.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_c.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_d.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_d.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_d.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_d.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_e.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_e.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_e.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_e.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_f.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_f.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_f.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_f.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_g.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_g.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_g.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_g.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_h.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_h.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_h.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_h.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_i.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_i.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_i.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_i.vpcf_c diff --git a/particles/heroes/daiyousei/ability_daiyousei_03_line.vpcf_c b/game/particles/heroes/daiyousei/ability_daiyousei_03_line.vpcf_c similarity index 100% rename from particles/heroes/daiyousei/ability_daiyousei_03_line.vpcf_c rename to game/particles/heroes/daiyousei/ability_daiyousei_03_line.vpcf_c diff --git a/particles/heroes/eirin/ability_eirin_02.vpcf_c b/game/particles/heroes/eirin/ability_eirin_02.vpcf_c similarity index 100% rename from particles/heroes/eirin/ability_eirin_02.vpcf_c rename to game/particles/heroes/eirin/ability_eirin_02.vpcf_c diff --git a/particles/heroes/eirin/ability_eirin_04.vpcf_c b/game/particles/heroes/eirin/ability_eirin_04.vpcf_c similarity index 100% rename from particles/heroes/eirin/ability_eirin_04.vpcf_c rename to game/particles/heroes/eirin/ability_eirin_04.vpcf_c diff --git a/particles/heroes/eirin/ability_eirin_04_b.vpcf_c b/game/particles/heroes/eirin/ability_eirin_04_b.vpcf_c similarity index 100% rename from particles/heroes/eirin/ability_eirin_04_b.vpcf_c rename to game/particles/heroes/eirin/ability_eirin_04_b.vpcf_c diff --git a/particles/heroes/eirin/ability_eirin_04_c.vpcf_c b/game/particles/heroes/eirin/ability_eirin_04_c.vpcf_c similarity index 100% rename from particles/heroes/eirin/ability_eirin_04_c.vpcf_c rename to game/particles/heroes/eirin/ability_eirin_04_c.vpcf_c diff --git a/particles/heroes/eirin/ability_eirin_04_d.vpcf_c b/game/particles/heroes/eirin/ability_eirin_04_d.vpcf_c similarity index 100% rename from particles/heroes/eirin/ability_eirin_04_d.vpcf_c rename to game/particles/heroes/eirin/ability_eirin_04_d.vpcf_c diff --git a/particles/heroes/flandre/ability_flandre_04_aura.vpcf_c b/game/particles/heroes/flandre/ability_flandre_04_aura.vpcf_c similarity index 100% rename from particles/heroes/flandre/ability_flandre_04_aura.vpcf_c rename to game/particles/heroes/flandre/ability_flandre_04_aura.vpcf_c diff --git a/particles/heroes/flandre/ability_flandre_04_aura_light.vpcf_c b/game/particles/heroes/flandre/ability_flandre_04_aura_light.vpcf_c similarity index 100% rename from particles/heroes/flandre/ability_flandre_04_aura_light.vpcf_c rename to game/particles/heroes/flandre/ability_flandre_04_aura_light.vpcf_c diff --git a/particles/heroes/flandre/ability_flandre_04_buff.vpcf_c b/game/particles/heroes/flandre/ability_flandre_04_buff.vpcf_c similarity index 100% rename from particles/heroes/flandre/ability_flandre_04_buff.vpcf_c rename to game/particles/heroes/flandre/ability_flandre_04_buff.vpcf_c diff --git a/particles/heroes/flandre/ability_flandre_04_effect.vpcf_c b/game/particles/heroes/flandre/ability_flandre_04_effect.vpcf_c similarity index 100% rename from particles/heroes/flandre/ability_flandre_04_effect.vpcf_c rename to game/particles/heroes/flandre/ability_flandre_04_effect.vpcf_c diff --git a/particles/heroes/hatate/ability_hatate_01_mark.vpcf_c b/game/particles/heroes/hatate/ability_hatate_01_mark.vpcf_c similarity index 100% rename from particles/heroes/hatate/ability_hatate_01_mark.vpcf_c rename to game/particles/heroes/hatate/ability_hatate_01_mark.vpcf_c diff --git a/particles/heroes/hatate/ability_hatate_01_mark_a.vpcf_c b/game/particles/heroes/hatate/ability_hatate_01_mark_a.vpcf_c similarity index 100% rename from particles/heroes/hatate/ability_hatate_01_mark_a.vpcf_c rename to game/particles/heroes/hatate/ability_hatate_01_mark_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011.vpcf_c b/game/particles/heroes/humei/ability_humei_011.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011.vpcf_c rename to game/particles/heroes/humei/ability_humei_011.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_b.vpcf_c b/game/particles/heroes/humei/ability_humei_011_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_c.vpcf_c b/game/particles/heroes/humei/ability_humei_011_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_d.vpcf_c b/game/particles/heroes/humei/ability_humei_011_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_e.vpcf_c b/game/particles/heroes/humei/ability_humei_011_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_e.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_e0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_e0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_e0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_e0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_e0a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_e0a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_e0a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_e0a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a1.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a1.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a10.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a10.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a10.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a10.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a11.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a11.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a11.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a11.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a11a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a11a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a11a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a11a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a2.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a2.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a3.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a3.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a3.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a3.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a4.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a4.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a4.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a4.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a5.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a5.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a5.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a5.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a6.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a6.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a6.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a6.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a7.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a7.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a7.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a7.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a7a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a7a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a7a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a7a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a7b.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a7b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a7b.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a7b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a7c.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a7c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a7c.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a7c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a7d.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a7d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a7d.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a7d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a7d0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a7d0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a7d0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a7d0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a8.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a8.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a8.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a8.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a8a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a8a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a8a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a8a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_a9.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_a9.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_a9.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_a9.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_extra_main.vpcf_c b/game/particles/heroes/humei/ability_humei_011_extra_main.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_extra_main.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_extra_main.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_f.vpcf_c b/game/particles/heroes/humei/ability_humei_011_f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_f.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_f.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_g.vpcf_c b/game/particles/heroes/humei/ability_humei_011_g.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_g.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_g.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_h.vpcf_c b/game/particles/heroes/humei/ability_humei_011_h.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_h.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_h.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand_a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand_a0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand_a0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand_a0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand_a0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand_a1.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand_a1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand_a1.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand_a1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand_a1a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand_a1a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand_a1a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand_a1a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand_a1b.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand_a1b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand_a1b.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand_a1b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand_a1b0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand_a1b0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand_a1b0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand_a1b0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_hand_a2.vpcf_c b/game/particles/heroes/humei/ability_humei_011_hand_a2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_hand_a2.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_hand_a2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_i.vpcf_c b/game/particles/heroes/humei/ability_humei_011_i.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_i.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_i.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_b.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_c.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_b.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_c.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_d.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_e.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_e.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_f.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_f.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_f.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_g.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_g.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_g.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_g.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_h.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_h.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_h.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_h.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_h0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_h0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_h0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_h0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_h1.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_h1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_h1.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_h1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_h2.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_h2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_h2.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_h2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_h3.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_h3.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_h3.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_h3.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_h3a.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_h3a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_h3a.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_h3a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_i.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_i.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_i.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_i.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_j.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_j.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_j.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_j.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_j0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_j0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_j0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_j0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_k.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_k.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_k.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_k.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_l.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_l.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_l.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_l.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_m.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_m.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_m.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_m.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_m0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_m0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_m0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_m0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_n.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_n.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_n.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_n.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_n0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_n0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_n0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_n0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_ice_d_n1.vpcf_c b/game/particles/heroes/humei/ability_humei_011_ice_d_n1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_ice_d_n1.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_ice_d_n1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_j.vpcf_c b/game/particles/heroes/humei/ability_humei_011_j.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_j.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_j.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_j0.vpcf_c b/game/particles/heroes/humei/ability_humei_011_j0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_j0.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_j0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_k.vpcf_c b/game/particles/heroes/humei/ability_humei_011_k.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_k.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_k.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_l.vpcf_c b/game/particles/heroes/humei/ability_humei_011_l.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_l.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_l.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_m.vpcf_c b/game/particles/heroes/humei/ability_humei_011_m.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_m.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_m.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_n.vpcf_c b/game/particles/heroes/humei/ability_humei_011_n.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_n.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_n.vpcf_c diff --git a/particles/heroes/humei/ability_humei_011_o.vpcf_c b/game/particles/heroes/humei/ability_humei_011_o.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_011_o.vpcf_c rename to game/particles/heroes/humei/ability_humei_011_o.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012.vpcf_c b/game/particles/heroes/humei/ability_humei_012.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012.vpcf_c rename to game/particles/heroes/humei/ability_humei_012.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_a.vpcf_c b/game/particles/heroes/humei/ability_humei_012_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_a.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_a0.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_a0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_a0.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_a0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_a1.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_a1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_a1.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_a1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_b.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_c.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_d.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_e.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_e.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_e0.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_e0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_e0.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_e0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_f.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_f.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_f.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_g.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_g.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_g.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_g.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_h.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_h.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_h.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_h.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_i.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_i.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_i.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_i.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_j.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_j.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_j.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_j.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_k.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_k.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_k.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_k.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_l.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_l.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_l.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_l.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_m.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_m.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_m.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_m.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_n.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_n.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_n.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_n.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_o.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_o.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_o.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_o.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_p.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_p.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_p.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_p.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_q.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_q.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_q.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_q.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_2_r.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_2_r.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_2_r.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_2_r.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_a.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_b.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_c.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_d.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_e.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_e.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_f.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_f.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_f.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_g.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_g.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_g.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_g.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_h.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_h.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_h.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_h.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_i.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_i.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_i.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_i.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_j.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_j.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_j.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_j.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_boom_k.vpcf_c b/game/particles/heroes/humei/ability_humei_012_boom_k.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_boom_k.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_boom_k.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_a.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_b.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_c.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_d.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_d0.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_d0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_d0.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_d0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_e.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_e.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_f.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_f.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_f.vpcf_c diff --git a/particles/heroes/humei/ability_humei_012_orb_g.vpcf_c b/game/particles/heroes/humei/ability_humei_012_orb_g.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_012_orb_g.vpcf_c rename to game/particles/heroes/humei/ability_humei_012_orb_g.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_b.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_c.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_d.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_e.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_e.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_e0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_e0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_e0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_e0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_e1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_e1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_e1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_e1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_f.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_f.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_f.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_g.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_g.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_g.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_g.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_h.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_h.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_h.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_h.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_h0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_h0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_h0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_h0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_h1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_h1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_h1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_h1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_h2.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_h2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_h2.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_h2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_h3.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_h3.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_h3.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_h3.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_h4.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_h4.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_h4.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_h4.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i0a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i0a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i0a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i0a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i0b.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i0b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i0b.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i0b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i0c.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i0c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i0c.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i0c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i1a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i1a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i1a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i1a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i1b.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i1b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i1b.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i1b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i1c.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i1c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i1c.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i1c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i1d.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i1d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i1d.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i1d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i1e.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i1e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i1e.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i1e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_i2.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_i2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_i2.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_i2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_effect_j.vpcf_c b/game/particles/heroes/humei/ability_humei_01_effect_j.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_effect_j.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_effect_j.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a0a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a0a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a0a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a0a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a0b.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a0b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a0b.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a0b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a0c.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a0c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a0c.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a0c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a0d.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a0d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a0d.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a0d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_a2.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_a2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_a2.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_a2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b2.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b2.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b3.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b3.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b3.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b3.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a2.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a2.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a3.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a3.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a3.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a3.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a4.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a4.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a4.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a4.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a4a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a4a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a4a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a4a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4a5.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4a5.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4a5.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4a5.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4b.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4b.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4b0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4b0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4b0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4b0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4c.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4c.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4d.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4d.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4d0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4d0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4d0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4d0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4e.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4e.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4e0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4e0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4e0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4e0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4e1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4e1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4e1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4e1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4e1a.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4e1a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4e1a.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4e1a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4e1a0.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4e1a0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4e1a0.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4e1a0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4e1a1.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4e1a1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4e1a1.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4e1a1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b4f.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b4f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b4f.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b4f.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b5.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b5.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b5.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b5.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b6.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b6.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b6.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b6.vpcf_c diff --git a/particles/heroes/humei/ability_humei_01_lightning_b7.vpcf_c b/game/particles/heroes/humei/ability_humei_01_lightning_b7.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_01_lightning_b7.vpcf_c rename to game/particles/heroes/humei/ability_humei_01_lightning_b7.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_a.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_a0.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_a0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_a0.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_a0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_a1.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_a1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_a1.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_a1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_a2.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_a2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_a2.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_a2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_a3.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_a3.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_a3.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_a3.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_b.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_c.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_c0.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_c0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_c0.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_c0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_c1.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_c1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_c1.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_c1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_d.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_03_attack_e.vpcf_c b/game/particles/heroes/humei/ability_humei_03_attack_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_03_attack_e.vpcf_c rename to game/particles/heroes/humei/ability_humei_03_attack_e.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_a5.vpcf_c b/game/particles/heroes/humei/ability_humei_04_a5.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_a5.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_a5.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_b.vpcf_c b/game/particles/heroes/humei/ability_humei_04_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_c.vpcf_c b/game/particles/heroes/humei/ability_humei_04_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_c.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_c0.vpcf_c b/game/particles/heroes/humei/ability_humei_04_c0.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_c0.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_c0.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_c1.vpcf_c b/game/particles/heroes/humei/ability_humei_04_c1.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_c1.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_c1.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_c2.vpcf_c b/game/particles/heroes/humei/ability_humei_04_c2.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_c2.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_c2.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_d.vpcf_c b/game/particles/heroes/humei/ability_humei_04_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_d.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_d.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_spark_wind_b.vpcf_c b/game/particles/heroes/humei/ability_humei_04_spark_wind_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_spark_wind_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_spark_wind_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_spark_wind_b_a.vpcf_c b/game/particles/heroes/humei/ability_humei_04_spark_wind_b_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_spark_wind_b_a.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_spark_wind_b_a.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_spark_wind_b_b.vpcf_c b/game/particles/heroes/humei/ability_humei_04_spark_wind_b_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_spark_wind_b_b.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_spark_wind_b_b.vpcf_c diff --git a/particles/heroes/humei/ability_humei_04_spark_wind_b_c.vpcf_c b/game/particles/heroes/humei/ability_humei_04_spark_wind_b_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_humei_04_spark_wind_b_c.vpcf_c rename to game/particles/heroes/humei/ability_humei_04_spark_wind_b_c.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body_a.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body_a.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body_a.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body_a.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body_b.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body_b.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body_b.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body_b.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body_c.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body_c.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body_c.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body_c.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body_d.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body_d.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body_d.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body_d.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body_e.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body_e.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body_e.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body_e.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body_f.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body_f.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body_f.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body_f.vpcf_c diff --git a/particles/heroes/humei/ability_minamitsu_03_body_g.vpcf_c b/game/particles/heroes/humei/ability_minamitsu_03_body_g.vpcf_c similarity index 100% rename from particles/heroes/humei/ability_minamitsu_03_body_g.vpcf_c rename to game/particles/heroes/humei/ability_minamitsu_03_body_g.vpcf_c diff --git a/particles/heroes/humei/bane_nightmare_light.vpcf_c b/game/particles/heroes/humei/bane_nightmare_light.vpcf_c similarity index 100% rename from particles/heroes/humei/bane_nightmare_light.vpcf_c rename to game/particles/heroes/humei/bane_nightmare_light.vpcf_c diff --git a/particles/heroes/humei/bane_nightmare_slimeglow.vpcf_c b/game/particles/heroes/humei/bane_nightmare_slimeglow.vpcf_c similarity index 100% rename from particles/heroes/humei/bane_nightmare_slimeglow.vpcf_c rename to game/particles/heroes/humei/bane_nightmare_slimeglow.vpcf_c diff --git a/particles/heroes/humei/enchantress_death_butterfly.vpcf_c b/game/particles/heroes/humei/enchantress_death_butterfly.vpcf_c similarity index 100% rename from particles/heroes/humei/enchantress_death_butterfly.vpcf_c rename to game/particles/heroes/humei/enchantress_death_butterfly.vpcf_c diff --git a/particles/heroes/humei/keeper_cast01_glow3.vpcf_c b/game/particles/heroes/humei/keeper_cast01_glow3.vpcf_c similarity index 100% rename from particles/heroes/humei/keeper_cast01_glow3.vpcf_c rename to game/particles/heroes/humei/keeper_cast01_glow3.vpcf_c diff --git a/particles/heroes/humei/keeper_cast02_glow2.vpcf_c b/game/particles/heroes/humei/keeper_cast02_glow2.vpcf_c similarity index 100% rename from particles/heroes/humei/keeper_cast02_glow2.vpcf_c rename to game/particles/heroes/humei/keeper_cast02_glow2.vpcf_c diff --git a/particles/heroes/humei/keeper_cast02_glow4.vpcf_c b/game/particles/heroes/humei/keeper_cast02_glow4.vpcf_c similarity index 100% rename from particles/heroes/humei/keeper_cast02_glow4.vpcf_c rename to game/particles/heroes/humei/keeper_cast02_glow4.vpcf_c diff --git a/particles/heroes/humei/keeper_chakra_magic_beam_projectile.vpcf_c b/game/particles/heroes/humei/keeper_chakra_magic_beam_projectile.vpcf_c similarity index 100% rename from particles/heroes/humei/keeper_chakra_magic_beam_projectile.vpcf_c rename to game/particles/heroes/humei/keeper_chakra_magic_beam_projectile.vpcf_c diff --git a/particles/heroes/humei/templar_assassin_trap_bits_butterfly.vpcf_c b/game/particles/heroes/humei/templar_assassin_trap_bits_butterfly.vpcf_c similarity index 100% rename from particles/heroes/humei/templar_assassin_trap_bits_butterfly.vpcf_c rename to game/particles/heroes/humei/templar_assassin_trap_bits_butterfly.vpcf_c diff --git a/particles/heroes/humei/templar_assassin_trap_proj_drk_butterfly.vpcf_c b/game/particles/heroes/humei/templar_assassin_trap_proj_drk_butterfly.vpcf_c similarity index 100% rename from particles/heroes/humei/templar_assassin_trap_proj_drk_butterfly.vpcf_c rename to game/particles/heroes/humei/templar_assassin_trap_proj_drk_butterfly.vpcf_c diff --git a/particles/heroes/iku/ability_iku_01_explosion.vpcf_c b/game/particles/heroes/iku/ability_iku_01_explosion.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_01_explosion.vpcf_c rename to game/particles/heroes/iku/ability_iku_01_explosion.vpcf_c diff --git a/particles/heroes/iku/ability_iku_01_explosion_a.vpcf_c b/game/particles/heroes/iku/ability_iku_01_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_01_explosion_a.vpcf_c rename to game/particles/heroes/iku/ability_iku_01_explosion_a.vpcf_c diff --git a/particles/heroes/iku/ability_iku_01_explosion_b.vpcf_c b/game/particles/heroes/iku/ability_iku_01_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_01_explosion_b.vpcf_c rename to game/particles/heroes/iku/ability_iku_01_explosion_b.vpcf_c diff --git a/particles/heroes/iku/ability_iku_01_explosion_c.vpcf_c b/game/particles/heroes/iku/ability_iku_01_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_01_explosion_c.vpcf_c rename to game/particles/heroes/iku/ability_iku_01_explosion_c.vpcf_c diff --git a/particles/heroes/iku/ability_iku_01_explosion_d.vpcf_c b/game/particles/heroes/iku/ability_iku_01_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_01_explosion_d.vpcf_c rename to game/particles/heroes/iku/ability_iku_01_explosion_d.vpcf_c diff --git a/particles/heroes/iku/ability_iku_01_explosion_e.vpcf_c b/game/particles/heroes/iku/ability_iku_01_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_01_explosion_e.vpcf_c rename to game/particles/heroes/iku/ability_iku_01_explosion_e.vpcf_c diff --git a/particles/heroes/iku/ability_iku_lightning.vpcf_c b/game/particles/heroes/iku/ability_iku_lightning.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_lightning.vpcf_c rename to game/particles/heroes/iku/ability_iku_lightning.vpcf_c diff --git a/particles/heroes/iku/ability_iku_lightning_a.vpcf_c b/game/particles/heroes/iku/ability_iku_lightning_a.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_lightning_a.vpcf_c rename to game/particles/heroes/iku/ability_iku_lightning_a.vpcf_c diff --git a/particles/heroes/iku/ability_iku_lightning_b.vpcf_c b/game/particles/heroes/iku/ability_iku_lightning_b.vpcf_c similarity index 100% rename from particles/heroes/iku/ability_iku_lightning_b.vpcf_c rename to game/particles/heroes/iku/ability_iku_lightning_b.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_explosion.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_explosion.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_explosion.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_explosion.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_explosion_a.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_explosion_a.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_explosion_a.vpcf_c diff --git a/particles/heroes/kaguya/ability_kaguya04_explosion_b.vpcf_c b/game/particles/heroes/kaguya/ability_kaguya04_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/kaguya/ability_kaguya04_explosion_b.vpcf_c rename to game/particles/heroes/kaguya/ability_kaguya04_explosion_b.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_b.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_b.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_b.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_c.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_c.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_c.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_c0.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_c0.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_c0.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_c0.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_c1.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_c1.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_c1.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_c1.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_d.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_d.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_d.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_e.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_e.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_e.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_explosion_f.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_explosion_f.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_explosion_f.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_01_projectile.vpcf_c b/game/particles/heroes/kanako/ability_kanako_01_projectile.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_01_projectile.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_01_projectile.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_02.vpcf_c b/game/particles/heroes/kanako/ability_kanako_02.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_02.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_02.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_041.vpcf_c b/game/particles/heroes/kanako/ability_kanako_041.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_041.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_041.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_041_a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_041_a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_041_a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_041_a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_041_b.vpcf_c b/game/particles/heroes/kanako/ability_kanako_041_b.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_041_b.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_041_b.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_041_c.vpcf_c b/game/particles/heroes/kanako/ability_kanako_041_c.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_041_c.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_041_c.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_041_d.vpcf_c b/game/particles/heroes/kanako/ability_kanako_041_d.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_041_d.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_041_d.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_041_e.vpcf_c b/game/particles/heroes/kanako/ability_kanako_041_e.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_041_e.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_041_e.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_041_projectile.vpcf_c b/game/particles/heroes/kanako/ability_kanako_041_projectile.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_041_projectile.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_041_projectile.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_042.vpcf_c b/game/particles/heroes/kanako/ability_kanako_042.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_042.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_042.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_042_bv.vpcf_c b/game/particles/heroes/kanako/ability_kanako_042_bv.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_042_bv.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_042_bv.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_043.vpcf_c b/game/particles/heroes/kanako/ability_kanako_043.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_043.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_043.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_043_a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_043_a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_043_a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_043_a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_043_b.vpcf_c b/game/particles/heroes/kanako/ability_kanako_043_b.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_043_b.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_043_b.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_043_c.vpcf_c b/game/particles/heroes/kanako/ability_kanako_043_c.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_043_c.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_043_c.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_a0.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_a0.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_a0.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_a0.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_a0a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_a0a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_a0a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_a0a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_b.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_b.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_b.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_b.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c0.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c0.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c0.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c0.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c1.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c1.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c1.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c1.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c1a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c1a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c1a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c1a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c2.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c2.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c2.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c2.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c2a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c2a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c2a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c2a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c2a0.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c2a0.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c2a0.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c2a0.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c2a1.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c2a1.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c2a1.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c2a1.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c3.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c3.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c3.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c3.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c4.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c4.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c4.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c4.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c4a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c4a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c4a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c4a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c4b.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c4b.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c4b.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c4b.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c4c.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c4c.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c4c.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c4c.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c4c0.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c4c0.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c4c0.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c4c0.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c4c1.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c4c1.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c4c1.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c4c1.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c5.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c5.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c5.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c5.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c5a.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c5a.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c5a.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c5a.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c6.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c6.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c6.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c6.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_c7.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_c7.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_c7.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_c7.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_d.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_d.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_d.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_d.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_e.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_e.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_e.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_e.vpcf_c diff --git a/particles/heroes/kanako/ability_kanako_04_f.vpcf_c b/game/particles/heroes/kanako/ability_kanako_04_f.vpcf_c similarity index 100% rename from particles/heroes/kanako/ability_kanako_04_f.vpcf_c rename to game/particles/heroes/kanako/ability_kanako_04_f.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_a.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_a.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_a.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_a.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_b.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_b.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_b.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_b.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_c.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_c.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_c.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_c.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_d.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_d.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_d.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_d.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_debuff.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_debuff.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_debuff.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_debuff.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_debuff_a.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_debuff_a.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_debuff_a.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_debuff_a.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_debuff_b.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_debuff_b.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_debuff_b.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_debuff_b.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_debuff_c.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_debuff_c.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_debuff_c.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_debuff_c.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_debuff_d.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_debuff_d.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_debuff_d.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_debuff_d.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_debuff_e.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_debuff_e.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_debuff_e.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_debuff_e.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_e.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_e.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_e.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_e.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_f.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_f.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_f.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_f.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_g.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_g.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_g.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_g.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_h.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_h.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_h.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_h.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_i.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_i.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_i.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_i.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_j.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_j.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_j.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_j.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_j0.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_j0.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_j0.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_j0.vpcf_c diff --git a/particles/heroes/kogasa/ability_kogasa_01_k.vpcf_c b/game/particles/heroes/kogasa/ability_kogasa_01_k.vpcf_c similarity index 100% rename from particles/heroes/kogasa/ability_kogasa_01_k.vpcf_c rename to game/particles/heroes/kogasa/ability_kogasa_01_k.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_01.vpcf_c b/game/particles/heroes/komachi/ability_komachi_01.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_01.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_01.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_02.vpcf_c b/game/particles/heroes/komachi/ability_komachi_02.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_02.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_02.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_02_a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_02_a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_02_a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_02_a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_02_b.vpcf_c b/game/particles/heroes/komachi/ability_komachi_02_b.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_02_b.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_02_b.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_02_c.vpcf_c b/game/particles/heroes/komachi/ability_komachi_02_c.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_02_c.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_02_c.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_b.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_b.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_b.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_b.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_c.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_c.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_c.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_c.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_d.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_d.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_d.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_d.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_e.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_e.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_e.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_e.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_2.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_2.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_2.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_2.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_2_a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_2_a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_2_a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_2_a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_2_b.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_2_b.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_2_b.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_2_b.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_2_c.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_2_c.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_2_c.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_2_c.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_2_d.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_2_d.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_2_d.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_2_d.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_2_e.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_2_e.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_2_e.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_2_e.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_2_f.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_2_f.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_2_f.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_2_f.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_b.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_b.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_b.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_b0.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_b0.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_b0.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_b0.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_c.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_c.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_c.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_d.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_d.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_d.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_e.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_e.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_e.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_explosion_f.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_explosion_f.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_explosion_f.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_f.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_f.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_f.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_f.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_g.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_g.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_g.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_g.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_h.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_h.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_h.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_h.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_03_i.vpcf_c b/game/particles/heroes/komachi/ability_komachi_03_i.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_03_i.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_03_i.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink_a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink_a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink_a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink_a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink_a0.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink_a0.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink_a0.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink_a0.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink_a0a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink_a0a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink_a0a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink_a0a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink_a0b.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink_a0b.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink_a0b.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink_a0b.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink_b.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink_b.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink_b.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink_b.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink_b0.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink_b0.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink_b0.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink_b0.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_blink_b1.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_blink_b1.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_blink_b1.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_blink_b1.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_circle.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_circle.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_circle.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_circle.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_circle_a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_circle_a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_circle_a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_circle_a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_scythe.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_scythe.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_scythe.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_scythe.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_scythe_a.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_scythe_a.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_scythe_a.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_scythe_a.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_scythe_b.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_scythe_b.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_scythe_b.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_scythe_b.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_scythe_c.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_scythe_c.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_scythe_c.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_scythe_c.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_scythe_d.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_scythe_d.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_scythe_d.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_scythe_d.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_scythe_e.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_scythe_e.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_scythe_e.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_scythe_e.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_scythe_f.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_scythe_f.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_scythe_f.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_scythe_f.vpcf_c diff --git a/particles/heroes/komachi/ability_komachi_04_start.vpcf_c b/game/particles/heroes/komachi/ability_komachi_04_start.vpcf_c similarity index 100% rename from particles/heroes/komachi/ability_komachi_04_start.vpcf_c rename to game/particles/heroes/komachi/ability_komachi_04_start.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01.vpcf_c b/game/particles/heroes/letty/ability_letty_01.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01.vpcf_c rename to game/particles/heroes/letty/ability_letty_01.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_a.vpcf_c b/game/particles/heroes/letty/ability_letty_01_a.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_a.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_a.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_b.vpcf_c b/game/particles/heroes/letty/ability_letty_01_b.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_b.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_b.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_c.vpcf_c b/game/particles/heroes/letty/ability_letty_01_c.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_c.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_c.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_d.vpcf_c b/game/particles/heroes/letty/ability_letty_01_d.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_d.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_d.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_e.vpcf_c b/game/particles/heroes/letty/ability_letty_01_e.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_e.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_e.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_f.vpcf_c b/game/particles/heroes/letty/ability_letty_01_f.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_f.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_f.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_g.vpcf_c b/game/particles/heroes/letty/ability_letty_01_g.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_g.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_g.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_h.vpcf_c b/game/particles/heroes/letty/ability_letty_01_h.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_h.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_h.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_i.vpcf_c b/game/particles/heroes/letty/ability_letty_01_i.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_i.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_i.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_j.vpcf_c b/game/particles/heroes/letty/ability_letty_01_j.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_j.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_j.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_k.vpcf_c b/game/particles/heroes/letty/ability_letty_01_k.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_k.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_k.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_k0.vpcf_c b/game/particles/heroes/letty/ability_letty_01_k0.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_k0.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_k0.vpcf_c diff --git a/particles/heroes/letty/ability_letty_01_k0a.vpcf_c b/game/particles/heroes/letty/ability_letty_01_k0a.vpcf_c similarity index 100% rename from particles/heroes/letty/ability_letty_01_k0a.vpcf_c rename to game/particles/heroes/letty/ability_letty_01_k0a.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01.vpcf_c b/game/particles/heroes/lily/ability_lily_01.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01.vpcf_c rename to game/particles/heroes/lily/ability_lily_01.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a0.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a0.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a0.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a0.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a1.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a1.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a1.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a1.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a2.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a2.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a2.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a2.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a3.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a3.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a3.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a3.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a4.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a4.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a4.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a4.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a5.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a5.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a5.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a5.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a6.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a6.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a6.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a6.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a7.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a7.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a7.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a7.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_a8.vpcf_c b/game/particles/heroes/lily/ability_lily_01_a8.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_a8.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_a8.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_ready.vpcf_c b/game/particles/heroes/lily/ability_lily_01_ready.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_ready.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_ready.vpcf_c diff --git a/particles/heroes/lily/ability_lily_01_ready_a.vpcf_c b/game/particles/heroes/lily/ability_lily_01_ready_a.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_01_ready_a.vpcf_c rename to game/particles/heroes/lily/ability_lily_01_ready_a.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02.vpcf_c b/game/particles/heroes/lily/ability_lily_02.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02.vpcf_c rename to game/particles/heroes/lily/ability_lily_02.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_a.vpcf_c b/game/particles/heroes/lily/ability_lily_02_a.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_a.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_a.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b0.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b0.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b0.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b0.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b1.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b1.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b1.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b1.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b2.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b2.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b2.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b2.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b3.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b3.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b3.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b3.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b4.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b4.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b4.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b4.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b5.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b5.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b5.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b5.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_b6.vpcf_c b/game/particles/heroes/lily/ability_lily_02_b6.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_b6.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_b6.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_c.vpcf_c b/game/particles/heroes/lily/ability_lily_02_c.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_c.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_c.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_d.vpcf_c b/game/particles/heroes/lily/ability_lily_02_d.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_d.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_d.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_e.vpcf_c b/game/particles/heroes/lily/ability_lily_02_e.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_e.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_e.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_f.vpcf_c b/game/particles/heroes/lily/ability_lily_02_f.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_f.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_f.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_f0.vpcf_c b/game/particles/heroes/lily/ability_lily_02_f0.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_f0.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_f0.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_f0a.vpcf_c b/game/particles/heroes/lily/ability_lily_02_f0a.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_f0a.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_f0a.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_f0b.vpcf_c b/game/particles/heroes/lily/ability_lily_02_f0b.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_f0b.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_f0b.vpcf_c diff --git a/particles/heroes/lily/ability_lily_02_g.vpcf_c b/game/particles/heroes/lily/ability_lily_02_g.vpcf_c similarity index 100% rename from particles/heroes/lily/ability_lily_02_g.vpcf_c rename to game/particles/heroes/lily/ability_lily_02_g.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_01.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_01.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_01.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_01.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_01_a.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_01_a.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_01_a.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_01_a.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_01_b.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_01_b.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_01_b.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_01_b.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_01_explosion.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_01_explosion.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_01_explosion.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_01_explosion.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_buff.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_buff.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_buff.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_buff.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_buff_a.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_buff_a.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_buff_a.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_buff_a.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_buff_b.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_buff_b.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_buff_b.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_buff_b.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_music_buff.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_music_buff.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_music_buff.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_music_buff.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_music_buff_a.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_music_buff_a.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_music_buff_a.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_music_buff_a.vpcf_c diff --git a/particles/heroes/lunasa/ability_lunasa_music_buff_a0.vpcf_c b/game/particles/heroes/lunasa/ability_lunasa_music_buff_a0.vpcf_c similarity index 100% rename from particles/heroes/lunasa/ability_lunasa_music_buff_a0.vpcf_c rename to game/particles/heroes/lunasa/ability_lunasa_music_buff_a0.vpcf_c diff --git a/particles/heroes/lyrica/ability_lyrica_01.vpcf_c b/game/particles/heroes/lyrica/ability_lyrica_01.vpcf_c similarity index 100% rename from particles/heroes/lyrica/ability_lyrica_01.vpcf_c rename to game/particles/heroes/lyrica/ability_lyrica_01.vpcf_c diff --git a/particles/heroes/lyrica/ability_lyrica_01_a.vpcf_c b/game/particles/heroes/lyrica/ability_lyrica_01_a.vpcf_c similarity index 100% rename from particles/heroes/lyrica/ability_lyrica_01_a.vpcf_c rename to game/particles/heroes/lyrica/ability_lyrica_01_a.vpcf_c diff --git a/particles/heroes/lyrica/ability_lyrica_01_b.vpcf_c b/game/particles/heroes/lyrica/ability_lyrica_01_b.vpcf_c similarity index 100% rename from particles/heroes/lyrica/ability_lyrica_01_b.vpcf_c rename to game/particles/heroes/lyrica/ability_lyrica_01_b.vpcf_c diff --git a/particles/heroes/lyrica/ability_lyrica_01_explosion.vpcf_c b/game/particles/heroes/lyrica/ability_lyrica_01_explosion.vpcf_c similarity index 100% rename from particles/heroes/lyrica/ability_lyrica_01_explosion.vpcf_c rename to game/particles/heroes/lyrica/ability_lyrica_01_explosion.vpcf_c diff --git a/particles/heroes/lyrica/ability_lyrica_music_buff.vpcf_c b/game/particles/heroes/lyrica/ability_lyrica_music_buff.vpcf_c similarity index 100% rename from particles/heroes/lyrica/ability_lyrica_music_buff.vpcf_c rename to game/particles/heroes/lyrica/ability_lyrica_music_buff.vpcf_c diff --git a/particles/heroes/lyrica/ability_lyrica_music_buff_b.vpcf_c b/game/particles/heroes/lyrica/ability_lyrica_music_buff_b.vpcf_c similarity index 100% rename from particles/heroes/lyrica/ability_lyrica_music_buff_b.vpcf_c rename to game/particles/heroes/lyrica/ability_lyrica_music_buff_b.vpcf_c diff --git a/particles/heroes/marisa/marisa_01_rocket.vpcf_c b/game/particles/heroes/marisa/marisa_01_rocket.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_01_rocket.vpcf_c rename to game/particles/heroes/marisa/marisa_01_rocket.vpcf_c diff --git a/particles/heroes/marisa/marisa_01_rocket_a.vpcf_c b/game/particles/heroes/marisa/marisa_01_rocket_a.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_01_rocket_a.vpcf_c rename to game/particles/heroes/marisa/marisa_01_rocket_a.vpcf_c diff --git a/particles/heroes/marisa/marisa_01_rocket_a_light.vpcf_c b/game/particles/heroes/marisa/marisa_01_rocket_a_light.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_01_rocket_a_light.vpcf_c rename to game/particles/heroes/marisa/marisa_01_rocket_a_light.vpcf_c diff --git a/particles/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c b/game/particles/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c rename to game/particles/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c diff --git a/particles/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c b/game/particles/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c rename to game/particles/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c diff --git a/particles/heroes/marisa/marisa_02_stars.vpcf_c b/game/particles/heroes/marisa/marisa_02_stars.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_02_stars.vpcf_c rename to game/particles/heroes/marisa/marisa_02_stars.vpcf_c diff --git a/particles/heroes/marisa/marisa_02_stars_a.vpcf_c b/game/particles/heroes/marisa/marisa_02_stars_a.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_02_stars_a.vpcf_c rename to game/particles/heroes/marisa/marisa_02_stars_a.vpcf_c diff --git a/particles/heroes/marisa/marisa_02_stars_b.vpcf_c b/game/particles/heroes/marisa/marisa_02_stars_b.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_02_stars_b.vpcf_c rename to game/particles/heroes/marisa/marisa_02_stars_b.vpcf_c diff --git a/particles/heroes/marisa/marisa_02_stars_c.vpcf_c b/game/particles/heroes/marisa/marisa_02_stars_c.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_02_stars_c.vpcf_c rename to game/particles/heroes/marisa/marisa_02_stars_c.vpcf_c diff --git a/particles/heroes/marisa/marisa_02_stars_d.vpcf_c b/game/particles/heroes/marisa/marisa_02_stars_d.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_02_stars_d.vpcf_c rename to game/particles/heroes/marisa/marisa_02_stars_d.vpcf_c diff --git a/particles/heroes/marisa/marisa_03_stars.vpcf_c b/game/particles/heroes/marisa/marisa_03_stars.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_03_stars.vpcf_c rename to game/particles/heroes/marisa/marisa_03_stars.vpcf_c diff --git a/particles/heroes/marisa/marisa_03_stars_b.vpcf_c b/game/particles/heroes/marisa/marisa_03_stars_b.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_03_stars_b.vpcf_c rename to game/particles/heroes/marisa/marisa_03_stars_b.vpcf_c diff --git a/particles/heroes/marisa/marisa_03_stars_c.vpcf_c b/game/particles/heroes/marisa/marisa_03_stars_c.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_03_stars_c.vpcf_c rename to game/particles/heroes/marisa/marisa_03_stars_c.vpcf_c diff --git a/particles/heroes/marisa/marisa_03_stars_d.vpcf_c b/game/particles/heroes/marisa/marisa_03_stars_d.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_03_stars_d.vpcf_c rename to game/particles/heroes/marisa/marisa_03_stars_d.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_circle.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_circle.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_circle.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_circle.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_laser.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_laser.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_laser.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_laser.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_laser_g.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_laser_g.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_laser_g.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_laser_g.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_laser_h.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_laser_h.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_laser_h.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_laser_h.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_laser_i.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_laser_i.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_laser_i.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_laser_i.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_laserlight.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_laserlight.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_laserlight.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_laserlight.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_light.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_light.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_light.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_light.vpcf_c diff --git a/particles/heroes/marisa/marisa_04_spark_wind.vpcf_c b/game/particles/heroes/marisa/marisa_04_spark_wind.vpcf_c similarity index 100% rename from particles/heroes/marisa/marisa_04_spark_wind.vpcf_c rename to game/particles/heroes/marisa/marisa_04_spark_wind.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_01.vpcf_c b/game/particles/heroes/merlin/ability_merlin_01.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_01.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_01.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_01_a.vpcf_c b/game/particles/heroes/merlin/ability_merlin_01_a.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_01_a.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_01_a.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_01_b.vpcf_c b/game/particles/heroes/merlin/ability_merlin_01_b.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_01_b.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_01_b.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_01_explosion.vpcf_c b/game/particles/heroes/merlin/ability_merlin_01_explosion.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_01_explosion.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_01_explosion.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_buff.vpcf_c b/game/particles/heroes/merlin/ability_merlin_buff.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_buff.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_buff.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_buff_a.vpcf_c b/game/particles/heroes/merlin/ability_merlin_buff_a.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_buff_a.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_buff_a.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_buff_b.vpcf_c b/game/particles/heroes/merlin/ability_merlin_buff_b.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_buff_b.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_buff_b.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_music_buff.vpcf_c b/game/particles/heroes/merlin/ability_merlin_music_buff.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_music_buff.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_music_buff.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_music_buff_a.vpcf_c b/game/particles/heroes/merlin/ability_merlin_music_buff_a.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_music_buff_a.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_music_buff_a.vpcf_c diff --git a/particles/heroes/merlin/ability_merlin_music_buff_a0.vpcf_c b/game/particles/heroes/merlin/ability_merlin_music_buff_a0.vpcf_c similarity index 100% rename from particles/heroes/merlin/ability_merlin_music_buff_a0.vpcf_c rename to game/particles/heroes/merlin/ability_merlin_music_buff_a0.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_01.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_01.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_01.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_01.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_01_a.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_01_a.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_01_a.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_01_a.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_01_a0.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_01_a0.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_01_a0.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_01_a0.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_01_b.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_01_b.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_01_b.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_01_b.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_a.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_a.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_a.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_a.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_a0.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_a0.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_a0.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_a0.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_a1.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_a1.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_a1.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_a1.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_a2.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_a2.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_a2.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_a2.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_a3.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_a3.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_a3.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_a3.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_a4.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_a4.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_a4.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_a4.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_b.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_b.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_b.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_b.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_body.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_body.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_body.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_body.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_02_body_1.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_02_body_1.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_02_body_1.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_02_body_1.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_a.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_a.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_a.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_a.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_b.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_b.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_b.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_b.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body_a.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body_a.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body_a.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body_a.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body_b.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body_b.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body_b.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body_b.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body_c.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body_c.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body_c.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body_c.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body_d.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body_d.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body_d.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body_d.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body_e.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body_e.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body_e.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body_e.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body_f.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body_f.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body_f.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body_f.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_body_g.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_body_g.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_body_g.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_body_g.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_c.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_c.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_c.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_c.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_03_c0.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_03_c0.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_03_c0.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_03_c0.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_04_boom.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_04_boom.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_04_boom.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_04_boom.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_04_boom_a.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_04_boom_a.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_04_boom_a.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_04_boom_a.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_04_boom_b.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_04_boom_b.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_04_boom_b.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_04_boom_b.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_04_boom_b0.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_04_boom_b0.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_04_boom_b0.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_04_boom_b0.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_04_boom_b1.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_04_boom_b1.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_04_boom_b1.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_04_boom_b1.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_04_boom_c.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_04_boom_c.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_04_boom_c.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_04_boom_c.vpcf_c diff --git a/particles/heroes/minamitsu/ability_minamitsu_04_boom_d.vpcf_c b/game/particles/heroes/minamitsu/ability_minamitsu_04_boom_d.vpcf_c similarity index 100% rename from particles/heroes/minamitsu/ability_minamitsu_04_boom_d.vpcf_c rename to game/particles/heroes/minamitsu/ability_minamitsu_04_boom_d.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_a.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_a.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_a.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_a.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_b.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_b.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_b.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_b0.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_b0.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_b0.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_b0.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_c.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_c.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_c.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_c.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_d.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_d.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_d.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_d.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_d0.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_d0.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_d0.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_d0.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_d1.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_d1.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_d1.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_d1.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_01_projectile_d2.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_01_projectile_d2.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_01_projectile_d2.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_01_projectile_d2.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_b.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_b.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_b.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_b.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_c.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_c.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_c.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_c.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_fruit.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_fruit.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_fruit.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_fruit.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_fruit_b.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_fruit_b.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_fruit_b.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_fruit_b.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_a.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_a.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_a.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_a.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_b.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_b.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_b.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_b.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c0.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c0.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c0.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c0.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c1.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c1.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c1.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c1.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c2.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c2.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c2.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c2.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c3.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c3.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c3.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c3.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c4.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c4.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c4.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c4.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c5.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c5.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c5.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c5.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c6.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c6.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c6.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c6.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c7.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c7.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c7.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c7.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_c8.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_c8.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_c8.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_c8.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_d.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_d.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_d.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_d.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_e.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_e.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_e.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_e.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_f.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_f.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_f.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_f.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_g.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_g.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_g.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_g.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_h.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_h.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_h.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_h.vpcf_c diff --git a/particles/heroes/minoriko/ability_minoriko_04_laser_i.vpcf_c b/game/particles/heroes/minoriko/ability_minoriko_04_laser_i.vpcf_c similarity index 100% rename from particles/heroes/minoriko/ability_minoriko_04_laser_i.vpcf_c rename to game/particles/heroes/minoriko/ability_minoriko_04_laser_i.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_a.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_a.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_a.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_b.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_b.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_b.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_c.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_c.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_c.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_d.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_d.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_d.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_d.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_e.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_e.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_e.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_e.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_f.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_f.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_f.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_f.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_g.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_g.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_g.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_g.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_g0.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_g0.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_g0.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_g0.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_h.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_h.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_h.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_h.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_i.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_i.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_i.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_i.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_j.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_j.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_j.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_j.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_k.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_k.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_k.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_k.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_k0.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_k0.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_k0.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_k0.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_l.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_l.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_l.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_l.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_m.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_m.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_m.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_m.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_n.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_n.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_n.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_n.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_o.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_o.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_o.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_o.vpcf_c diff --git a/particles/heroes/moluo/abiilty_moluo_014_p.vpcf_c b/game/particles/heroes/moluo/abiilty_moluo_014_p.vpcf_c similarity index 100% rename from particles/heroes/moluo/abiilty_moluo_014_p.vpcf_c rename to game/particles/heroes/moluo/abiilty_moluo_014_p.vpcf_c diff --git a/particles/heroes/moluo/ability_juexin_014_body.vpcf_c b/game/particles/heroes/moluo/ability_juexin_014_body.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_juexin_014_body.vpcf_c rename to game/particles/heroes/moluo/ability_juexin_014_body.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo01_explosion.vpcf_c b/game/particles/heroes/moluo/ability_moluo01_explosion.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo01_explosion.vpcf_c rename to game/particles/heroes/moluo/ability_moluo01_explosion.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo01_explosion_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo01_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo01_explosion_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo01_explosion_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo01_explosion_vip.vpcf_c b/game/particles/heroes/moluo/ability_moluo01_explosion_vip.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo01_explosion_vip.vpcf_c rename to game/particles/heroes/moluo/ability_moluo01_explosion_vip.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_blood.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_blood.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_blood.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_blood.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_on.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_on.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_on.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_on.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_on_vip.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_on_vip.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_on_vip.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_on_vip.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_d.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_d.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_d.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_d.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_e.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_e.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_e.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_e.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_f.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_f.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_f.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_f.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_g.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_g.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_g.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_g.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_h.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_h.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_h.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_h.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_effect_rolling_h0.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_effect_rolling_h0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_effect_rolling_h0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_effect_rolling_h0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo02_flow.vpcf_c b/game/particles/heroes/moluo/ability_moluo02_flow.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo02_flow.vpcf_c rename to game/particles/heroes/moluo/ability_moluo02_flow.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo03_explosion.vpcf_c b/game/particles/heroes/moluo/ability_moluo03_explosion.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo03_explosion.vpcf_c rename to game/particles/heroes/moluo/ability_moluo03_explosion.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo03_explosion_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo03_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo03_explosion_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo03_explosion_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo03_explosion_a0.vpcf_c b/game/particles/heroes/moluo/ability_moluo03_explosion_a0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo03_explosion_a0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo03_explosion_a0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo03_illusion.vpcf_c b/game/particles/heroes/moluo/ability_moluo03_illusion.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo03_illusion.vpcf_c rename to game/particles/heroes/moluo/ability_moluo03_illusion.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo03_illusion_1.vpcf_c b/game/particles/heroes/moluo/ability_moluo03_illusion_1.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo03_illusion_1.vpcf_c rename to game/particles/heroes/moluo/ability_moluo03_illusion_1.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo03_illusion_2.vpcf_c b/game/particles/heroes/moluo/ability_moluo03_illusion_2.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo03_illusion_2.vpcf_c rename to game/particles/heroes/moluo/ability_moluo03_illusion_2.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_011.vpcf_c b/game/particles/heroes/moluo/ability_moluo_011.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_011.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_011.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_d.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_d.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_d.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_d.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_e.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_e.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_e.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_e.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_f.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_f.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_f.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_f.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_g.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_g.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_g.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_g.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_g0.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_g0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_g0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_g0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_h.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_h.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_h.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_h.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_i.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_i.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_i.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_i.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_j.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_j.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_j.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_j.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_k.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_k.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_k.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_k.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_k0.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_k0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_k0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_k0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_l.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_l.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_l.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_l.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_m.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_m.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_m.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_m.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_n.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_n.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_n.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_n.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_o.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_o.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_o.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_o.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_012_end_p.vpcf_c b/game/particles/heroes/moluo/ability_moluo_012_end_p.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_012_end_p.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_012_end_p.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_circle.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_circle.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_circle.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_circle.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_d.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_d.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_d.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_d.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_e.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_e.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_e.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_e.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_f.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_f.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_f.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_f.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_g.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_g.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_g.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_g.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_013_fire_h.vpcf_c b/game/particles/heroes/moluo/ability_moluo_013_fire_h.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_013_fire_h.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_013_fire_h.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand_a0.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand_a0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand_a0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand_a0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand_a1.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand_a1.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand_a1.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand_a1.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand_a1a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand_a1a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand_a1a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand_a1a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand_a1b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand_a1b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand_a1b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand_a1b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand_a1b0.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand_a1b0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand_a1b0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand_a1b0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_hand_a2.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_hand_a2.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_hand_a2.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_hand_a2.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_start.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_start.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_start.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_start.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_start_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_start_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_start_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_start_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_start_a0.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_start_a0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_start_a0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_start_a0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_weapon.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_weapon.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_weapon.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_weapon.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_014_weapon_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_014_weapon_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_014_weapon_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_014_weapon_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire_d.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire_d.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire_d.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire_d.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire_e.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire_e.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire_e.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire_e.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire_f.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire_f.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire_f.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire_f.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_fire_g.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_fire_g.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_fire_g.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_fire_g.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_regen.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_regen.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_regen.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_regen.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_regen_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_regen_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_regen_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_regen_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_regen_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_regen_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_regen_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_regen_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_regen_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_regen_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_regen_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_regen_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_d.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_d.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_d.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_d.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_e.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_e.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_e.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_e.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_f.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_f.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_f.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_f.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_g.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_g.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_g.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_g.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_g0.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_g0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_g0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_g0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_h.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_h.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_h.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_h.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_i.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_i.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_i.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_i.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_j.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_j.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_j.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_j.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_soul.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_soul.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_soul.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_soul.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_soul_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_soul_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_soul_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_soul_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_01_xiqv_soul_a0.vpcf_c b/game/particles/heroes/moluo/ability_moluo_01_xiqv_soul_a0.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_01_xiqv_soul_a0.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_01_xiqv_soul_a0.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_black.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_black.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_black.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_black.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_c.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_c.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_c.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_c.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_d.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_d.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_d.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_d.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_e.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_e.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_e.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_e.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_f.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_f.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_f.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_f.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_body_g.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_body_g.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_body_g.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_body_g.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_1.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_1.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_1.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_1.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_1_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_1_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_1_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_1_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_1_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_1_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_1_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_1_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_2.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_2.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_2.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_2.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_2_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_2_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_2_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_2_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_2_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_2_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_2_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_2_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_3.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_3.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_3.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_3.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_3_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_3_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_3_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_3_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_3_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_3_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_3_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_3_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_b.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_b.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_b.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_b.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_sword_black_smoke_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_sword_black_smoke_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_sword_black_smoke_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_sword_black_smoke_a.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_weapon.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_weapon.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_weapon.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_weapon.vpcf_c diff --git a/particles/heroes/moluo/ability_moluo_03_weapon_a.vpcf_c b/game/particles/heroes/moluo/ability_moluo_03_weapon_a.vpcf_c similarity index 100% rename from particles/heroes/moluo/ability_moluo_03_weapon_a.vpcf_c rename to game/particles/heroes/moluo/ability_moluo_03_weapon_a.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_b.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_b.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_b.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_b.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_c.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_c.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_c.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_c.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_d.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_d.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_d.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_d.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_e.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_e.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_e.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_e.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_f.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_f.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_f.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_f.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_g.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_g.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_g.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_g.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_h.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_h.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_h.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_h.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_i.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_i.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_i.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_i.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_01_boom_j.vpcf_c b/game/particles/heroes/mouko/ability_mokou_01_boom_j.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_01_boom_j.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_01_boom_j.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_02_boom.vpcf_c b/game/particles/heroes/mouko/ability_mokou_02_boom.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_02_boom.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_02_boom.vpcf_c diff --git a/particles/heroes/mouko/ability_mokou_04_wing.vpcf_c b/game/particles/heroes/mouko/ability_mokou_04_wing.vpcf_c similarity index 100% rename from particles/heroes/mouko/ability_mokou_04_wing.vpcf_c rename to game/particles/heroes/mouko/ability_mokou_04_wing.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_b.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_b.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_b.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_b.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_a0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_a0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_a0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_a0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_a0a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_a0a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_a0a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_a0a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_a0b.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_a0b.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_a0b.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_a0b.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_a0c.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_a0c.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_a0c.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_a0c.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_a0d.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_a0d.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_a0d.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_a0d.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_a0d0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_a0d0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_a0d0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_a0d0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end_a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end_a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end_a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end_a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end_a0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end_a0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end_a0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end_a0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end_a0a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end_a0a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end_a0a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end_a0a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end_a0b.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end_a0b.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end_a0b.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end_a0b.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end_a0c.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end_a0c.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end_a0c.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end_a0c.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end_a0d.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end_a0d.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end_a0d.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end_a0d.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_end_a0d0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_end_a0d0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_end_a0d0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_end_a0d0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill_a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill_a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill_a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill_a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill_a0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill_a0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill_a0a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill_a0a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill_a0b.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0b.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill_a0b.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0b.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill_a0c.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0c.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill_a0c.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0c.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill_a0d.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0d.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill_a0d.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0d.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_kill_a0d0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0d0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_kill_a0d0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_kill_a0d0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall_a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall_a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall_a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall_a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall_a0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall_a0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall_a0a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall_a0a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall_a0b.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0b.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall_a0b.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0b.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall_a0c.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0c.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall_a0c.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0c.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall_a0d.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0d.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall_a0d.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0d.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_blink_wall_a0d0.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0d0.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_blink_wall_a0d0.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_blink_wall_a0d0.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_011_c.vpcf_c b/game/particles/heroes/muyue/ability_muyue_011_c.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_011_c.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_011_c.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_012.vpcf_c b/game/particles/heroes/muyue/ability_muyue_012.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_012.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_012.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_012_fire.vpcf_c b/game/particles/heroes/muyue/ability_muyue_012_fire.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_012_fire.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_012_fire.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_012_line.vpcf_c b/game/particles/heroes/muyue/ability_muyue_012_line.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_012_line.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_012_line.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_012_projectile.vpcf_c b/game/particles/heroes/muyue/ability_muyue_012_projectile.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_012_projectile.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_012_projectile.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_a.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_a.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_a.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_a.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_b.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_b.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_b.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_b.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_c.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_c.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_c.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_c.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_d.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_d.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_d.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_d.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_e.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_e.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_e.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_e.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_f.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_f.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_f.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_f.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_g.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_g.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_g.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_g.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_h.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_h.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_h.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_h.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_i.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_i.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_i.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_i.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_j.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_j.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_j.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_j.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_k.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_k.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_k.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_k.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_l.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_l.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_l.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_l.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_m.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_m.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_m.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_m.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_n.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_n.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_n.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_n.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_o.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_o.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_o.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_o.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_p.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_p.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_p.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_p.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_q.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_q.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_q.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_q.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_r.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_r.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_r.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_r.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_s.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_s.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_s.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_s.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_t.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_t.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_t.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_t.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_u.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_u.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_u.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_u.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_v.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_v.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_v.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_v.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_w.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_w.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_w.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_w.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_aeons_x.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_aeons_x.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_aeons_x.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_aeons_x.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_status.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_status.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_status.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_status.vpcf_c diff --git a/particles/heroes/muyue/ability_muyue_014_status_b.vpcf_c b/game/particles/heroes/muyue/ability_muyue_014_status_b.vpcf_c similarity index 100% rename from particles/heroes/muyue/ability_muyue_014_status_b.vpcf_c rename to game/particles/heroes/muyue/ability_muyue_014_status_b.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_a.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_a.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_a.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_a.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_a0.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_a0.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_a0.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_a0.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_b.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_b.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_b.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_b.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_b0.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_b0.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_b0.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_b0.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_b1.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_b1.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_b1.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_b1.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_b2.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_b2.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_b2.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_b2.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_c.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_c.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_c.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_c.vpcf_c diff --git a/particles/heroes/muyue/muyue_base_attack_d.vpcf_c b/game/particles/heroes/muyue/muyue_base_attack_d.vpcf_c similarity index 100% rename from particles/heroes/muyue/muyue_base_attack_d.vpcf_c rename to game/particles/heroes/muyue/muyue_base_attack_d.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_a.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_a.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_a.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_a.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_a0.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_a0.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_a0.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_a0.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_a1.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_a1.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_a1.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_a1.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_b.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_b.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_b.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_b.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_b0.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_b0.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_b0.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_b0.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_c.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_c.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_c.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_c.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_c0.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_c0.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_c0.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_c0.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_c1.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_c1.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_c1.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_c1.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_c2.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_c2.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_c2.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_c2.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_c3.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_c3.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_c3.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_c3.vpcf_c diff --git a/particles/heroes/nazrin/nazrin_base_attack_d.vpcf_c b/game/particles/heroes/nazrin/nazrin_base_attack_d.vpcf_c similarity index 100% rename from particles/heroes/nazrin/nazrin_base_attack_d.vpcf_c rename to game/particles/heroes/nazrin/nazrin_base_attack_d.vpcf_c diff --git a/particles/heroes/nue/ability_minoriko_04_ufo.vpcf_c b/game/particles/heroes/nue/ability_minoriko_04_ufo.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_minoriko_04_ufo.vpcf_c rename to game/particles/heroes/nue/ability_minoriko_04_ufo.vpcf_c diff --git a/particles/heroes/nue/ability_minoriko_04_ufo_move.vpcf_c b/game/particles/heroes/nue/ability_minoriko_04_ufo_move.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_minoriko_04_ufo_move.vpcf_c rename to game/particles/heroes/nue/ability_minoriko_04_ufo_move.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01.vpcf_c b/game/particles/heroes/nue/ability_nue_01.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01.vpcf_c rename to game/particles/heroes/nue/ability_nue_01.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a0.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a0.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a0.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a0.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a1.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a1.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a1.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a1.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a10.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a10.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a10.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a10.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a11.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a11.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a11.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a11.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a12.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a12.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a12.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a12.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a13.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a13.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a13.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a13.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a14.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a14.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a14.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a14.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a15.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a15.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a15.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a15.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a16.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a16.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a16.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a16.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a17.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a17.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a17.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a17.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a18.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a18.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a18.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a18.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a19.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a19.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a19.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a19.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a2.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a2.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a2.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a2.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a3.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a3.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a3.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a3.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a3a.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a3a.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a3a.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a3a.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a4.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a4.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a4.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a4.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a5.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a5.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a5.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a5.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a5a.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a5a.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a5a.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a5a.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a6.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a6.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a6.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a6.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a7.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a7.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a7.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a7.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a8.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a8.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a8.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a8.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a8a.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a8a.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a8a.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a8a.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_a9.vpcf_c b/game/particles/heroes/nue/ability_nue_01_a9.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_a9.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_a9.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_a.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_a.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_a.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_a.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_b.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_b.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_b.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_b.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_c.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_c.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_c.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_c.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_d.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_d.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_d.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_d.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_e.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_e.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_e.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_e.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_f.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_f.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_f.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_f.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_g.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_g.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_g.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_g.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_h.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_h.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_h.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_h.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_i.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_i.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_i.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_i.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_j.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_j.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_j.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_j.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_k.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_k.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_k.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_k.vpcf_c diff --git a/particles/heroes/nue/ability_nue_01_ball_l.vpcf_c b/game/particles/heroes/nue/ability_nue_01_ball_l.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_01_ball_l.vpcf_c rename to game/particles/heroes/nue/ability_nue_01_ball_l.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04.vpcf_c b/game/particles/heroes/nue/ability_nue_04.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04.vpcf_c rename to game/particles/heroes/nue/ability_nue_04.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_a.vpcf_c b/game/particles/heroes/nue/ability_nue_04_a.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_a.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_a.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_b.vpcf_c b/game/particles/heroes/nue/ability_nue_04_b.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_b.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_b.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_c.vpcf_c b/game/particles/heroes/nue/ability_nue_04_c.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_c.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_c.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_d.vpcf_c b/game/particles/heroes/nue/ability_nue_04_d.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_d.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_d.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_e.vpcf_c b/game/particles/heroes/nue/ability_nue_04_e.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_e.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_e.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_f.vpcf_c b/game/particles/heroes/nue/ability_nue_04_f.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_f.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_f.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_g.vpcf_c b/game/particles/heroes/nue/ability_nue_04_g.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_g.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_g.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_h.vpcf_c b/game/particles/heroes/nue/ability_nue_04_h.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_h.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_h.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_i.vpcf_c b/game/particles/heroes/nue/ability_nue_04_i.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_i.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_i.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light_ufo.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light_ufo.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light_ufo.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light_ufo.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light_ufo_a.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light_ufo_a.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light_ufo_a.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light_ufo_a.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light_ufo_b.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light_ufo_b.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light_ufo_b.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light_ufo_b.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light_ufo_c.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light_ufo_c.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light_ufo_c.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light_ufo_c.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light_ufo_d.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light_ufo_d.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light_ufo_d.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light_ufo_d.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light_ufo_e.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light_ufo_e.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light_ufo_e.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light_ufo_e.vpcf_c diff --git a/particles/heroes/nue/ability_nue_04_light_ufo_f.vpcf_c b/game/particles/heroes/nue/ability_nue_04_light_ufo_f.vpcf_c similarity index 100% rename from particles/heroes/nue/ability_nue_04_light_ufo_f.vpcf_c rename to game/particles/heroes/nue/ability_nue_04_light_ufo_f.vpcf_c diff --git a/particles/heroes/patchouli/ability_patchouli_01.vpcf_c b/game/particles/heroes/patchouli/ability_patchouli_01.vpcf_c similarity index 100% rename from particles/heroes/patchouli/ability_patchouli_01.vpcf_c rename to game/particles/heroes/patchouli/ability_patchouli_01.vpcf_c diff --git a/particles/heroes/patchouli/ability_patchouli_01_a.vpcf_c b/game/particles/heroes/patchouli/ability_patchouli_01_a.vpcf_c similarity index 100% rename from particles/heroes/patchouli/ability_patchouli_01_a.vpcf_c rename to game/particles/heroes/patchouli/ability_patchouli_01_a.vpcf_c diff --git a/particles/heroes/patchouli/ability_patchouli_01_b.vpcf_c b/game/particles/heroes/patchouli/ability_patchouli_01_b.vpcf_c similarity index 100% rename from particles/heroes/patchouli/ability_patchouli_01_b.vpcf_c rename to game/particles/heroes/patchouli/ability_patchouli_01_b.vpcf_c diff --git a/particles/heroes/patchouli/ability_patchouli_01_c.vpcf_c b/game/particles/heroes/patchouli/ability_patchouli_01_c.vpcf_c similarity index 100% rename from particles/heroes/patchouli/ability_patchouli_01_c.vpcf_c rename to game/particles/heroes/patchouli/ability_patchouli_01_c.vpcf_c diff --git a/particles/heroes/patchouli/ability_patchouli_01_circle.vpcf_c b/game/particles/heroes/patchouli/ability_patchouli_01_circle.vpcf_c similarity index 100% rename from particles/heroes/patchouli/ability_patchouli_01_circle.vpcf_c rename to game/particles/heroes/patchouli/ability_patchouli_01_circle.vpcf_c diff --git a/particles/heroes/patchouli/ability_patchouli_01_circle_a.vpcf_c b/game/particles/heroes/patchouli/ability_patchouli_01_circle_a.vpcf_c similarity index 100% rename from particles/heroes/patchouli/ability_patchouli_01_circle_a.vpcf_c rename to game/particles/heroes/patchouli/ability_patchouli_01_circle_a.vpcf_c diff --git a/particles/heroes/patchouli/ability_patchouli_01_lava.vpcf_c b/game/particles/heroes/patchouli/ability_patchouli_01_lava.vpcf_c similarity index 100% rename from particles/heroes/patchouli/ability_patchouli_01_lava.vpcf_c rename to game/particles/heroes/patchouli/ability_patchouli_01_lava.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02.vpcf_c b/game/particles/heroes/ran/ability_ran_02.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02.vpcf_c rename to game/particles/heroes/ran/ability_ran_02.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_effect.vpcf_c b/game/particles/heroes/ran/ability_ran_02_effect.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_effect.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_effect.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_new.vpcf_c b/game/particles/heroes/ran/ability_ran_02_new.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_new.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_new.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_new_a.vpcf_c b/game/particles/heroes/ran/ability_ran_02_new_a.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_new_a.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_new_a.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_wan.vpcf_c b/game/particles/heroes/ran/ability_ran_02_wan.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_wan.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_wan.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_wan_a.vpcf_c b/game/particles/heroes/ran/ability_ran_02_wan_a.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_wan_a.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_wan_a.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_wan_b.vpcf_c b/game/particles/heroes/ran/ability_ran_02_wan_b.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_wan_b.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_wan_b.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_wan_c.vpcf_c b/game/particles/heroes/ran/ability_ran_02_wan_c.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_wan_c.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_wan_c.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_wan_d.vpcf_c b/game/particles/heroes/ran/ability_ran_02_wan_d.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_wan_d.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_wan_d.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_wan_light.vpcf_c b/game/particles/heroes/ran/ability_ran_02_wan_light.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_wan_light.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_wan_light.vpcf_c diff --git a/particles/heroes/ran/ability_ran_02_wan_special.vpcf_c b/game/particles/heroes/ran/ability_ran_02_wan_special.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_02_wan_special.vpcf_c rename to game/particles/heroes/ran/ability_ran_02_wan_special.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_a.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_a.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_a.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_a.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_b.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_b.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_b.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_b.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c0.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c0.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c0.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c0.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c1.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c1.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c1.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c1.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c2.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c2.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c2.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c2.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c3.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c3.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c3.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c3.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c4.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c4.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c4.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c4.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c5.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c5.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c5.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c5.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c6.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c6.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c6.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c6.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c7.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c7.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c7.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c7.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_c8.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_c8.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_c8.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_c8.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_d.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_d.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_d.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_d.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_e.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_e.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_e.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_e.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_f.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_f.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_f.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_f.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_g.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_g.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_g.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_g.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_h.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_h.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_h.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_h.vpcf_c diff --git a/particles/heroes/ran/ability_ran_03_laser_i.vpcf_c b/game/particles/heroes/ran/ability_ran_03_laser_i.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_03_laser_i.vpcf_c rename to game/particles/heroes/ran/ability_ran_03_laser_i.vpcf_c diff --git a/particles/heroes/ran/ability_ran_04_buff.vpcf_c b/game/particles/heroes/ran/ability_ran_04_buff.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_04_buff.vpcf_c rename to game/particles/heroes/ran/ability_ran_04_buff.vpcf_c diff --git a/particles/heroes/ran/ability_ran_04_buff_a.vpcf_c b/game/particles/heroes/ran/ability_ran_04_buff_a.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_04_buff_a.vpcf_c rename to game/particles/heroes/ran/ability_ran_04_buff_a.vpcf_c diff --git a/particles/heroes/ran/ability_ran_04_buff_b.vpcf_c b/game/particles/heroes/ran/ability_ran_04_buff_b.vpcf_c similarity index 100% rename from particles/heroes/ran/ability_ran_04_buff_b.vpcf_c rename to game/particles/heroes/ran/ability_ran_04_buff_b.vpcf_c diff --git a/particles/heroes/reimu/reimu_01_ball.vpcf_c b/game/particles/heroes/reimu/reimu_01_ball.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_01_ball.vpcf_c rename to game/particles/heroes/reimu/reimu_01_ball.vpcf_c diff --git a/particles/heroes/reimu/reimu_01_effect.vpcf_c b/game/particles/heroes/reimu/reimu_01_effect.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_01_effect.vpcf_c rename to game/particles/heroes/reimu/reimu_01_effect.vpcf_c diff --git a/particles/heroes/reimu/reimu_01_effect_b.vpcf_c b/game/particles/heroes/reimu/reimu_01_effect_b.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_01_effect_b.vpcf_c rename to game/particles/heroes/reimu/reimu_01_effect_b.vpcf_c diff --git a/particles/heroes/reimu/reimu_01_effect_c.vpcf_c b/game/particles/heroes/reimu/reimu_01_effect_c.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_01_effect_c.vpcf_c rename to game/particles/heroes/reimu/reimu_01_effect_c.vpcf_c diff --git a/particles/heroes/reimu/reimu_01_effect_fire.vpcf_c b/game/particles/heroes/reimu/reimu_01_effect_fire.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_01_effect_fire.vpcf_c rename to game/particles/heroes/reimu/reimu_01_effect_fire.vpcf_c diff --git a/particles/heroes/reimu/reimu_03_effect.vpcf_c b/game/particles/heroes/reimu/reimu_03_effect.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_03_effect.vpcf_c rename to game/particles/heroes/reimu/reimu_03_effect.vpcf_c diff --git a/particles/heroes/reimu/reimu_04_effect.vpcf_c b/game/particles/heroes/reimu/reimu_04_effect.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_04_effect.vpcf_c rename to game/particles/heroes/reimu/reimu_04_effect.vpcf_c diff --git a/particles/heroes/reimu/reimu_04_effect_buff.vpcf_c b/game/particles/heroes/reimu/reimu_04_effect_buff.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_04_effect_buff.vpcf_c rename to game/particles/heroes/reimu/reimu_04_effect_buff.vpcf_c diff --git a/particles/heroes/reimu/reimu_04_effect_light.vpcf_c b/game/particles/heroes/reimu/reimu_04_effect_light.vpcf_c similarity index 100% rename from particles/heroes/reimu/reimu_04_effect_light.vpcf_c rename to game/particles/heroes/reimu/reimu_04_effect_light.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_a.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_a.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_a.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_a.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_a0.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_a0.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_a0.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_a0.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_a1.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_a1.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_a1.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_a1.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_b.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_b.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_b.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_b0.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_b0.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_b0.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_b0.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_c.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_c.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_c.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_c.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_c0.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_c0.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_c0.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_c0.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_c1.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_c1.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_c1.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_c1.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_c2.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_c2.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_c2.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_c2.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_d.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_d.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_d.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_d.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen01_projectile_e.vpcf_c b/game/particles/heroes/reisen/ability_reisen01_projectile_e.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen01_projectile_e.vpcf_c rename to game/particles/heroes/reisen/ability_reisen01_projectile_e.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen02.vpcf_c b/game/particles/heroes/reisen/ability_reisen02.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen02.vpcf_c rename to game/particles/heroes/reisen/ability_reisen02.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen02_a.vpcf_c b/game/particles/heroes/reisen/ability_reisen02_a.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen02_a.vpcf_c rename to game/particles/heroes/reisen/ability_reisen02_a.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen02_b.vpcf_c b/game/particles/heroes/reisen/ability_reisen02_b.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen02_b.vpcf_c rename to game/particles/heroes/reisen/ability_reisen02_b.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen02_buff.vpcf_c b/game/particles/heroes/reisen/ability_reisen02_buff.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen02_buff.vpcf_c rename to game/particles/heroes/reisen/ability_reisen02_buff.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen02_buff_a.vpcf_c b/game/particles/heroes/reisen/ability_reisen02_buff_a.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen02_buff_a.vpcf_c rename to game/particles/heroes/reisen/ability_reisen02_buff_a.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen02_c.vpcf_c b/game/particles/heroes/reisen/ability_reisen02_c.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen02_c.vpcf_c rename to game/particles/heroes/reisen/ability_reisen02_c.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen02_d.vpcf_c b/game/particles/heroes/reisen/ability_reisen02_d.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen02_d.vpcf_c rename to game/particles/heroes/reisen/ability_reisen02_d.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_01.vpcf_c b/game/particles/heroes/reisen/ability_reisen_01.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_01.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_01.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_01_a.vpcf_c b/game/particles/heroes/reisen/ability_reisen_01_a.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_01_a.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_01_a.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_01_b.vpcf_c b/game/particles/heroes/reisen/ability_reisen_01_b.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_01_b.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_01_b.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_01_c.vpcf_c b/game/particles/heroes/reisen/ability_reisen_01_c.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_01_c.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_01_c.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_01_d.vpcf_c b/game/particles/heroes/reisen/ability_reisen_01_d.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_01_d.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_01_d.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_01_e.vpcf_c b/game/particles/heroes/reisen/ability_reisen_01_e.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_01_e.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_01_e.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_01_f.vpcf_c b/game/particles/heroes/reisen/ability_reisen_01_f.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_01_f.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_01_f.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_04_bullet.vpcf_c b/game/particles/heroes/reisen/ability_reisen_04_bullet.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_04_bullet.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_04_bullet.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_base_attack.vpcf_c b/game/particles/heroes/reisen/ability_reisen_base_attack.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_base_attack.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_base_attack.vpcf_c diff --git a/particles/heroes/reisen/ability_reisen_base_attack_b.vpcf_c b/game/particles/heroes/reisen/ability_reisen_base_attack_b.vpcf_c similarity index 100% rename from particles/heroes/reisen/ability_reisen_base_attack_b.vpcf_c rename to game/particles/heroes/reisen/ability_reisen_base_attack_b.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_a.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_a.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_a.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_a.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_a0.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_a0.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_a0.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_a0.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_b.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_b.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_b.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_b.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_c.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_c.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_c.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_c.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_d.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_d.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_d.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_d.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion_a.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion_a.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion_a.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion_b.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion_b.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion_b.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion_d.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion_d.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion_d.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion_e.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion_e.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion_e.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion_f.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion_f.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion_f.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion_g.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion_g.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion_g.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion_g.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_01_explosion_h.vpcf_c b/game/particles/heroes/remilia/ability_remilia_01_explosion_h.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_01_explosion_h.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_01_explosion_h.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_02.vpcf_c b/game/particles/heroes/remilia/ability_remilia_02.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_02.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_02.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_03.vpcf_c b/game/particles/heroes/remilia/ability_remilia_03.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_03.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_03.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_03_b.vpcf_c b/game/particles/heroes/remilia/ability_remilia_03_b.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_03_b.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_03_b.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_03_spark.vpcf_c b/game/particles/heroes/remilia/ability_remilia_03_spark.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_03_spark.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_03_spark.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_03_spark_a.vpcf_c b/game/particles/heroes/remilia/ability_remilia_03_spark_a.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_03_spark_a.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_03_spark_a.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_03_spark_b.vpcf_c b/game/particles/heroes/remilia/ability_remilia_03_spark_b.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_03_spark_b.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_03_spark_b.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_03_spark_c.vpcf_c b/game/particles/heroes/remilia/ability_remilia_03_spark_c.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_03_spark_c.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_03_spark_c.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser_b.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser_b.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser_b.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser_b.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser_c.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser_c.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser_c.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser_c.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser_d.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser_d.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser_d.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser_d.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser_rocket.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser_rocket.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser_rocket.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser_rocket.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser_rocket_b.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser_rocket_b.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser_rocket_b.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser_rocket_b.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser_rocket_c.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser_rocket_c.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser_rocket_c.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser_rocket_c.vpcf_c diff --git a/particles/heroes/remilia/ability_remilia_04_laser_rocket_d.vpcf_c b/game/particles/heroes/remilia/ability_remilia_04_laser_rocket_d.vpcf_c similarity index 100% rename from particles/heroes/remilia/ability_remilia_04_laser_rocket_d.vpcf_c rename to game/particles/heroes/remilia/ability_remilia_04_laser_rocket_d.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01.vpcf_c b/game/particles/heroes/rin/ability_rin_01.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01.vpcf_c rename to game/particles/heroes/rin/ability_rin_01.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_a.vpcf_c b/game/particles/heroes/rin/ability_rin_01_a.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_a.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_a.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_b.vpcf_c b/game/particles/heroes/rin/ability_rin_01_b.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_b.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_b.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_c.vpcf_c b/game/particles/heroes/rin/ability_rin_01_c.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_c.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_c.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_d.vpcf_c b/game/particles/heroes/rin/ability_rin_01_d.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_d.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_d.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_e.vpcf_c b/game/particles/heroes/rin/ability_rin_01_e.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_e.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_e.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_f.vpcf_c b/game/particles/heroes/rin/ability_rin_01_f.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_f.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_f.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0a.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0a.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0a.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0a.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0b.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0b.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0b.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0b.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0c.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0c.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0c.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0c.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0d.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0d.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0d.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0d.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0e.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0e.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0e.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0e.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0e0.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0e0.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0e0.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0e0.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0e0a.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0e0a.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0e0a.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0e0a.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0e0a0.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0e0a0.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0e0a0.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0e0a0.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0f.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0f.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0f.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0f.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_g0g.vpcf_c b/game/particles/heroes/rin/ability_rin_01_g0g.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_g0g.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_g0g.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_h.vpcf_c b/game/particles/heroes/rin/ability_rin_01_h.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_h.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_h.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_i.vpcf_c b/game/particles/heroes/rin/ability_rin_01_i.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_i.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_i.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_j.vpcf_c b/game/particles/heroes/rin/ability_rin_01_j.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_j.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_j.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_k.vpcf_c b/game/particles/heroes/rin/ability_rin_01_k.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_k.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_k.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_l.vpcf_c b/game/particles/heroes/rin/ability_rin_01_l.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_l.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_l.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_m.vpcf_c b/game/particles/heroes/rin/ability_rin_01_m.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_m.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_m.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n0.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n0.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n0.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n0.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n1.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n1.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n1.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n1.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n2.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n2.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n2.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n2.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n3.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n3.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n3.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n3.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n4.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n4.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n4.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n4.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n5.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n5.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n5.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n5.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_n6.vpcf_c b/game/particles/heroes/rin/ability_rin_01_n6.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_n6.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_n6.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_projectile.vpcf_c b/game/particles/heroes/rin/ability_rin_01_projectile.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_projectile.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_projectile.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_projectile_b.vpcf_c b/game/particles/heroes/rin/ability_rin_01_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_projectile_b.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_projectile_b.vpcf_c diff --git a/particles/heroes/rin/ability_rin_01_projectile_c.vpcf_c b/game/particles/heroes/rin/ability_rin_01_projectile_c.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_01_projectile_c.vpcf_c rename to game/particles/heroes/rin/ability_rin_01_projectile_c.vpcf_c diff --git a/particles/heroes/rin/ability_rin_02_body_c.vpcf_c b/game/particles/heroes/rin/ability_rin_02_body_c.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_02_body_c.vpcf_c rename to game/particles/heroes/rin/ability_rin_02_body_c.vpcf_c diff --git a/particles/heroes/rin/ability_rin_utsuho_buff.vpcf_c b/game/particles/heroes/rin/ability_rin_utsuho_buff.vpcf_c similarity index 100% rename from particles/heroes/rin/ability_rin_utsuho_buff.vpcf_c rename to game/particles/heroes/rin/ability_rin_utsuho_buff.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_ex_projectile.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_ex_projectile.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_ex_projectile.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_ex_projectile.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_ex_projectile_a.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_ex_projectile_a.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_ex_projectile_a.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_ex_projectile_a.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_ex_projectile_a0.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_ex_projectile_a0.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_ex_projectile_a0.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_ex_projectile_a0.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_ex_projectile_b.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_ex_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_ex_projectile_b.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_ex_projectile_b.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_ex_projectile_c.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_ex_projectile_c.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_ex_projectile_c.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_ex_projectile_c.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_ex_projectile_d.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_ex_projectile_d.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_ex_projectile_d.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_ex_projectile_d.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_ex_projectile_e.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_ex_projectile_e.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_ex_projectile_e.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_ex_projectile_e.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_a.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_a.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_a.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_a.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_b.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_b.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_b.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_c.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_c.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_c.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_c.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_c0.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_c0.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_c0.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_c0.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_d.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_d.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_d.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_d.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_e.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_e.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_e.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_e.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_f.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_f.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_f.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_f.vpcf_c diff --git a/particles/heroes/rumia/ability_rumia_02_projectile_g.vpcf_c b/game/particles/heroes/rumia/ability_rumia_02_projectile_g.vpcf_c similarity index 100% rename from particles/heroes/rumia/ability_rumia_02_projectile_g.vpcf_c rename to game/particles/heroes/rumia/ability_rumia_02_projectile_g.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_01.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_01.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_01.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_01.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_01_b.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_01_b.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_01_b.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_01_b.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_03.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_03.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_03.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_03.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_04.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_04.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_04.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_04.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_04_light.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_04_light.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_04_light.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_04_light.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_ex.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_ex.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_ex.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_ex.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_ex_b.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_ex_b.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_ex_b.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_ex_b.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_ex_stun.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_ex_stun.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_ex_stun.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_ex_stun.vpcf_c diff --git a/particles/heroes/sakuya/ability_sakuya_ex_stun_b.vpcf_c b/game/particles/heroes/sakuya/ability_sakuya_ex_stun_b.vpcf_c similarity index 100% rename from particles/heroes/sakuya/ability_sakuya_ex_stun_b.vpcf_c rename to game/particles/heroes/sakuya/ability_sakuya_ex_stun_b.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_a.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_a.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_a.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_a.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_b.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_b.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_b.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_b.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_c.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_c.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_c.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_c.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_d.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_d.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_d.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_d.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e0.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e0.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e0.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e0.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e1.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e1.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e1.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e1.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e2.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e2.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e2.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e2.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e3.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e3.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e3.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e3.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e4.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e4.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e4.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e4.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e5.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e5.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e5.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e5.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e6.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e6.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e6.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e6.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_e7.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_e7.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_e7.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_e7.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_effect.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_effect.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_effect.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_effect.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_effect_b.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_effect_b.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_effect_b.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_effect_b.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_effect_c.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_effect_c.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_effect_c.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_effect_c.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_f.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_f.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_f.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_f.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_g.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_g.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_g.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_g.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_g0.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_g0.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_g0.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_g0.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_g1.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_g1.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_g1.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_g1.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_g2.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_g2.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_g2.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_g2.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_h.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_h.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_h.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_h.vpcf_c diff --git a/particles/heroes/sanae/ability_sanae_01_i.vpcf_c b/game/particles/heroes/sanae/ability_sanae_01_i.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanae_01_i.vpcf_c rename to game/particles/heroes/sanae/ability_sanae_01_i.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_02_effect.vpcf_c b/game/particles/heroes/sanae/ability_sanea_02_effect.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_02_effect.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_02_effect.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_04_effect.vpcf_c b/game/particles/heroes/sanae/ability_sanea_04_effect.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_04_effect.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_04_effect.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_04_effect_b.vpcf_c b/game/particles/heroes/sanae/ability_sanea_04_effect_b.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_04_effect_b.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_04_effect_b.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_04_effect_c.vpcf_c b/game/particles/heroes/sanae/ability_sanea_04_effect_c.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_04_effect_c.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_04_effect_c.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_04_effect_d.vpcf_c b/game/particles/heroes/sanae/ability_sanea_04_effect_d.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_04_effect_d.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_04_effect_d.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_04_effect_e.vpcf_c b/game/particles/heroes/sanae/ability_sanea_04_effect_e.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_04_effect_e.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_04_effect_e.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_04_effect_f.vpcf_c b/game/particles/heroes/sanae/ability_sanea_04_effect_f.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_04_effect_f.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_04_effect_f.vpcf_c diff --git a/particles/heroes/sanae/ability_sanea_04_effect_g.vpcf_c b/game/particles/heroes/sanae/ability_sanea_04_effect_g.vpcf_c similarity index 100% rename from particles/heroes/sanae/ability_sanea_04_effect_g.vpcf_c rename to game/particles/heroes/sanae/ability_sanea_04_effect_g.vpcf_c diff --git a/particles/heroes/satori/ability_satori_01.vpcf_c b/game/particles/heroes/satori/ability_satori_01.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_01.vpcf_c rename to game/particles/heroes/satori/ability_satori_01.vpcf_c diff --git a/particles/heroes/satori/ability_satori_01_b.vpcf_c b/game/particles/heroes/satori/ability_satori_01_b.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_01_b.vpcf_c rename to game/particles/heroes/satori/ability_satori_01_b.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a0.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a0.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a0.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a0.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1a.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1a.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1a.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1a.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1a0.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1a0.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1a0.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1a0.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1a0a.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1a0a.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1a0a.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1a0a.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0a.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0a.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0a.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0a.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0a0.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0a0.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0a0.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0a0.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0b.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0b.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0b.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0b.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0c.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0c.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0c.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0c.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0d.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0d.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0d.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0d.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0e.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0e.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0e.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0e.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0f.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0f.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0f.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0f.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0g.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0g.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0g.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0g.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0g0.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0g0.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0g0.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0g0.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1b0h.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1b0h.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1b0h.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1b0h.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_a1c.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_a1c.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_a1c.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_a1c.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_b.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_b.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_b.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_b.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_b0.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_b0.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_b0.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_b0.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_b1.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_b1.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_b1.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_b1.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_c.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_c.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_c.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_c.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_c0.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_c0.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_c0.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_c0.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_c1.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_c1.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_c1.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_c1.vpcf_c diff --git a/particles/heroes/satori/ability_satori_overhead_d.vpcf_c b/game/particles/heroes/satori/ability_satori_overhead_d.vpcf_c similarity index 100% rename from particles/heroes/satori/ability_satori_overhead_d.vpcf_c rename to game/particles/heroes/satori/ability_satori_overhead_d.vpcf_c diff --git a/particles/heroes/shikieiki/ability_eirin_04_light.vpcf_c b/game/particles/heroes/shikieiki/ability_eirin_04_light.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_eirin_04_light.vpcf_c rename to game/particles/heroes/shikieiki/ability_eirin_04_light.vpcf_c diff --git a/particles/heroes/shikieiki/ability_eirin_04_light_a.vpcf_c b/game/particles/heroes/shikieiki/ability_eirin_04_light_a.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_eirin_04_light_a.vpcf_c rename to game/particles/heroes/shikieiki/ability_eirin_04_light_a.vpcf_c diff --git a/particles/heroes/shikieiki/ability_eirin_04_light_b.vpcf_c b/game/particles/heroes/shikieiki/ability_eirin_04_light_b.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_eirin_04_light_b.vpcf_c rename to game/particles/heroes/shikieiki/ability_eirin_04_light_b.vpcf_c diff --git a/particles/heroes/shikieiki/ability_eirin_04_light_c.vpcf_c b/game/particles/heroes/shikieiki/ability_eirin_04_light_c.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_eirin_04_light_c.vpcf_c rename to game/particles/heroes/shikieiki/ability_eirin_04_light_c.vpcf_c diff --git a/particles/heroes/shikieiki/ability_eirin_04_light_d.vpcf_c b/game/particles/heroes/shikieiki/ability_eirin_04_light_d.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_eirin_04_light_d.vpcf_c rename to game/particles/heroes/shikieiki/ability_eirin_04_light_d.vpcf_c diff --git a/particles/heroes/shikieiki/ability_eirin_04_light_e.vpcf_c b/game/particles/heroes/shikieiki/ability_eirin_04_light_e.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_eirin_04_light_e.vpcf_c rename to game/particles/heroes/shikieiki/ability_eirin_04_light_e.vpcf_c diff --git a/particles/heroes/shikieiki/ability_eirin_04_light_f.vpcf_c b/game/particles/heroes/shikieiki/ability_eirin_04_light_f.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_eirin_04_light_f.vpcf_c rename to game/particles/heroes/shikieiki/ability_eirin_04_light_f.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_01.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_01.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_01.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_01.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_01_a.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_01_a.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_01_a.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_01_a.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_01_b.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_01_b.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_01_b.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_01_b.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_01_guilty.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_01_guilty.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_01_guilty.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_01_guilty.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_01_guilty_b.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_01_guilty_b.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_01_guilty_b.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_01_guilty_b.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04_a.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04_a.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04_a.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04_a.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04_b.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04_b.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04_b.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04_b.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04_c.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04_c.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04_c.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04_c.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04_d.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04_d.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04_d.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04_d.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04_e.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04_e.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04_e.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04_e.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04_f.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04_f.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04_f.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04_f.vpcf_c diff --git a/particles/heroes/shikieiki/ability_shikieiki_04_g.vpcf_c b/game/particles/heroes/shikieiki/ability_shikieiki_04_g.vpcf_c similarity index 100% rename from particles/heroes/shikieiki/ability_shikieiki_04_g.vpcf_c rename to game/particles/heroes/shikieiki/ability_shikieiki_04_g.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_a.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_a.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_a.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_a.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_b.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_b.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_b.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_b.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c0.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c0.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c0.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c0.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c1.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c1.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c1.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c1.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c2.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c2.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c2.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c2.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c3.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c3.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c3.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c3.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c4.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c4.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c4.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c4.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c5.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c5.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c5.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c5.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c6.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c6.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c6.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c6.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c7.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c7.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c7.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c7.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_c8.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_c8.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_c8.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_c8.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_d.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_d.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_d.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_d.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_e.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_e.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_e.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_e.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_f.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_f.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_f.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_f.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_g.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_g.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_g.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_g.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_h.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_h.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_h.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_h.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_01_laser_i.vpcf_c b/game/particles/heroes/sunny/ability_sunny_01_laser_i.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_01_laser_i.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_01_laser_i.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_02.vpcf_c b/game/particles/heroes/sunny/ability_sunny_02.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_02.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_02.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_02_a.vpcf_c b/game/particles/heroes/sunny/ability_sunny_02_a.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_02_a.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_02_a.vpcf_c diff --git a/particles/heroes/sunny/ability_sunny_02_b.vpcf_c b/game/particles/heroes/sunny/ability_sunny_02_b.vpcf_c similarity index 100% rename from particles/heroes/sunny/ability_sunny_02_b.vpcf_c rename to game/particles/heroes/sunny/ability_sunny_02_b.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_a.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_a.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_a.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_a.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_b.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_b.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_b.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_b.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_c.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_c.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_c.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_c.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_d.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_d.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_d.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_d.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_e.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_e.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_e.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_e.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_f.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_f.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_f.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_f.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0a.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0a.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0a.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0a.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0b.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0b.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0b.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0b.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0c.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0c.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0c.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0c.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0d.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0d.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0d.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0d.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0e.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0e.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0e.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0e.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0e0.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0e0.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0e0.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0e0.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0e0a.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0e0a.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0e0a.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0e0a.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0e0a0.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0e0a0.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0e0a0.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0e0a0.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0f.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0f.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0f.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0f.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_g0g.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_g0g.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_g0g.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_g0g.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_h.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_h.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_h.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_h.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_i.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_i.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_i.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_i.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_j.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_j.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_j.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_j.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_k.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_k.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_k.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_k.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_l.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_l.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_l.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_l.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_m.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_m.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_m.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_m.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock_a.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock_a.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock_a.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock_a.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock_b.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock_b.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock_b.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock_b.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock_c.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock_c.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock_c.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock_c.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock_d.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock_d.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock_d.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock_d.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock_e.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock_e.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock_e.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock_e.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock_f.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock_f.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock_f.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock_f.vpcf_c diff --git a/particles/heroes/tenshi/ability_tenshi_03_shock_g.vpcf_c b/game/particles/heroes/tenshi/ability_tenshi_03_shock_g.vpcf_c similarity index 100% rename from particles/heroes/tenshi/ability_tenshi_03_shock_g.vpcf_c rename to game/particles/heroes/tenshi/ability_tenshi_03_shock_g.vpcf_c diff --git a/particles/heroes/thtd_aya/ability_aya_01.vpcf_c b/game/particles/heroes/thtd_aya/ability_aya_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_aya/ability_aya_01.vpcf_c rename to game/particles/heroes/thtd_aya/ability_aya_01.vpcf_c diff --git a/particles/heroes/thtd_aya/ability_aya_01_a.vpcf_c b/game/particles/heroes/thtd_aya/ability_aya_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_aya/ability_aya_01_a.vpcf_c rename to game/particles/heroes/thtd_aya/ability_aya_01_a.vpcf_c diff --git a/particles/heroes/thtd_aya/ability_aya_01_news.vpcf_c b/game/particles/heroes/thtd_aya/ability_aya_01_news.vpcf_c similarity index 100% rename from particles/heroes/thtd_aya/ability_aya_01_news.vpcf_c rename to game/particles/heroes/thtd_aya/ability_aya_01_news.vpcf_c diff --git a/particles/heroes/thtd_aya/ability_aya_01_news_a.vpcf_c b/game/particles/heroes/thtd_aya/ability_aya_01_news_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_aya/ability_aya_01_news_a.vpcf_c rename to game/particles/heroes/thtd_aya/ability_aya_01_news_a.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_item.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_item.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_item.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_item.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_item_a.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_item_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_item_a.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_item_a.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_a.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_a.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_a.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_b.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_b.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_b.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c0.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c0.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c0.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c1.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c1.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c1.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c2.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c2.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c2.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c3.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c3.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c3.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c3.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c4.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c4.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c4.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c4.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c5.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c5.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c5.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c5.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c6.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c6.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c6.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c6.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c7.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c7.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c7.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c7.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c8.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c8.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c8.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_c8.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_d.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_d.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_d.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_e.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_e.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_e.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_f.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_f.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_f.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_g.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_g.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_g.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_h.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_h.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_h.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_i.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_laser_i.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_laser_i.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_a.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_a.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_a.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_b.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_b.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_b.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_c.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_c.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_c.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_d.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_d.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_d.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_e.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_e.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_e.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f0.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f0.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f0.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_f0.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_g.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_g.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_g.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_h.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_h.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_h.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_i.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_i.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_i.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j0.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j0.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j0.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j0.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j1.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j1.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j1.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j1.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j2.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j2.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j2.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j2.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j3.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j3.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j3.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_j3.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_k.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_k.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_k.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_l.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_l.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_l.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_m.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_m.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_m.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_n.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_n.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_n.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_o.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_o.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_o.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_p.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_p.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_p.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_q.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_q.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_q.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_q.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_r.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_r.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_r.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_r.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_s.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_s.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_s.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_s.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_t.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_t.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_t.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_t.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_u.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_u.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_u.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_u.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_v.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_v.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_v.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_v.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_w.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_w.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_w.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_w.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_x.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_x.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_x.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_x.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_y.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_y.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_y.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_y.vpcf_c diff --git a/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_z.vpcf_c b/game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_z.vpcf_c similarity index 100% rename from particles/heroes/thtd_byakuren/ability_byakuren_04_phy_z.vpcf_c rename to game/particles/heroes/thtd_byakuren/ability_byakuren_04_phy_z.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_a.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_a.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_a.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_b.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_b.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_b.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_b0.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_b0.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_b0.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_c.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_c.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_c.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_d.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_d.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_d.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_e.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_e.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_e.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_e0.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_e0.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_e0.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_f.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_f.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_f.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_g.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_g.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_g.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_h.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_h.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_h.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_i.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_i.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_i.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_j.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_j.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_j.vpcf_c diff --git a/particles/heroes/thtd_chen/ability_chen_01_k.vpcf_c b/game/particles/heroes/thtd_chen/ability_chen_01_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_chen/ability_chen_01_k.vpcf_c rename to game/particles/heroes/thtd_chen/ability_chen_01_k.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_a.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_a.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_a.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_a0.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_a0.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_a0.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_a1.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_a1.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_a1.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_b.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_b.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_b.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_b0.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_b0.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_b0.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_c.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_c.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_c.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_c0.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_c0.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_c0.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_c1.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_c1.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_c1.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_c2.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_c2.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_c2.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_explosion.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_explosion.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_explosion.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_explosion.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_explosion_a.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_explosion_a.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_explosion_a.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_explosion_b.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_explosion_b.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_explosion_b.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_explosion_c.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_explosion_c.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_explosion_c.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_02_mist.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_02_mist.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_02_mist.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_02_mist.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_04_circle.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_04_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_04_circle.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_04_circle.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_04_circle_a.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_04_circle_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_04_circle_a.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_04_circle_a.vpcf_c diff --git a/particles/heroes/thtd_cirno/ability_cirno_04_circle_b.vpcf_c b/game/particles/heroes/thtd_cirno/ability_cirno_04_circle_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_cirno/ability_cirno_04_circle_b.vpcf_c rename to game/particles/heroes/thtd_cirno/ability_cirno_04_circle_b.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_b.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_b.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_b.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_c.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_c.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_c.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_c0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_c0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_c0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_d.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_d.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_d.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_d0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_d0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_d0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_d1.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_d1.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_d1.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_d1.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_e.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_e.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_e.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_e0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_e0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_e0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_e0a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_e0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_e0a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_e0a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_e0a0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_e0a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_e0a0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_e0a0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_e0a1.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_e0a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_e0a1.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_e0a1.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_e0b.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_e0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_e0b.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_e0b.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_e0c.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_e0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_e0c.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_e0c.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_f.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_f.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_f.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_f0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_f0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_f0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_f0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_01_g.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_01_g.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_01_g.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_b.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_b.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_b.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_c.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_c.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_c.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_d.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_d.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_d.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_e.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_e.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_e.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_f.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_f.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_f.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_g.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_g.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_g.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_h.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_h.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_h.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_i.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_i.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_i.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_j.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_j.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_j.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_k.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_k.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_k.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_l.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_l.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_l.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_m.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_m.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_m.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_n.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_n.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_n.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_o.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_o.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_o.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_p.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_p.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_p.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_q.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_q.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_q.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_q.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_r.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_r.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_r.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_r.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_s.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_s.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_s.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_s.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_t.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_t.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_t.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_t.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_u.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_u.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_u.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_u.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_v.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_v.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_v.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_v.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_w.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_w.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_w.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_w.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_x.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_x.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_x.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_x.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_y.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_y.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_y.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_y.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_aeons_y0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_y0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_aeons_y0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_aeons_y0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_b.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_b.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_b.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_c.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_c.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_c.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_d.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_d.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_d.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_d0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_d0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_d0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_d0a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_d0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_d0a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_d0a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_d0a0.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_d0a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_d0a0.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_d0a0.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_d0a1.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_d0a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_d0a1.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_d0a1.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_d1.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_d1.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_d1.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_d1.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_d1a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_d1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_d1a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_d1a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_e.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_e.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_e.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_03_f.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_03_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_03_f.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_03_f.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04_a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04_a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04_a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04_b.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04_b.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04_b.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04_c.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04_c.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04_c.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04_red.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04_red.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04_red.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04_red.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04_red_a.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04_red_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04_red_a.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04_red_a.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04_red_b.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04_red_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04_red_b.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04_red_b.vpcf_c diff --git a/particles/heroes/thtd_eirin/ability_eirin_04_red_c.vpcf_c b/game/particles/heroes/thtd_eirin/ability_eirin_04_red_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_eirin/ability_eirin_04_red_c.vpcf_c rename to game/particles/heroes/thtd_eirin/ability_eirin_04_red_c.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_a.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_a.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_b.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_b.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_b.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_c.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_c.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_c.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_d.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_d.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_d.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_e.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_e.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_e.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_f.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_f.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_f.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g0.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g0.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_g0.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_h.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_h.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_h.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_i.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_i.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_i.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_j.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_j.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_j.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k0.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k0.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_k0.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_l.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_l.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_l.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_light.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_light.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_light.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_m.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_m.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_m.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_n.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_n.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_n.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_o.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_o.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_o.vpcf_c diff --git a/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_p.vpcf_c b/game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_p.vpcf_c rename to game/particles/heroes/thtd_flandre/abiilty_flandre_02_explosion_p.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_effect.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_effect.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_effect.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_effect.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_effect_a.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_effect_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_effect_a.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_effect_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_effect_fire.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_effect_fire.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_effect_fire.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_effect_fire.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_effect_sword.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_effect_sword.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_effect_sword.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_effect_sword.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_fire.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_fire.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_fire.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_fire.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_fire_a.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_fire_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_fire_a.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_fire_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_fire_b.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_fire_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_fire_b.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_fire_b.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_fire_c.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_fire_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_fire_c.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_fire_c.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_fire_d.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_fire_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_fire_d.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_fire_d.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_weapon.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_weapon.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_weapon.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_weapon.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_02_weapon_a.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_02_weapon_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_02_weapon_a.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_02_weapon_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_a.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_a.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_b.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_b.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_b.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_b0.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_b0.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_b0.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_b1.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_b1.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_b1.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_b2.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_b2.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_b2.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_b2.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_c.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_c.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_c.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_d.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_d.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_d.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_explosion.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_explosion.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_explosion.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_explosion.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_explosion_a.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_explosion_a.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_explosion_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_start.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_start.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_start.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_start.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_start_a.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_start_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_start_a.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_start_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_start_absorb.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a.vpcf_c diff --git a/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a0.vpcf_c b/game/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a0.vpcf_c rename to game/particles/heroes/thtd_flandre/ability_flandre_04_start_absorb_a0.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_01_projectile.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_01_projectile.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_01_projectile.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_01_projectile.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_01_projectile_a.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_01_projectile_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_01_projectile_a.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_01_projectile_a.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_01_projectile_b.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_01_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_01_projectile_b.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_01_projectile_b.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_01_projectile_b0.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_01_projectile_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_01_projectile_b0.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_01_projectile_b0.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_1.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_1.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_1.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_1.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_2.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_2.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_2.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_2.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_3.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_3.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_3.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_3.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_4.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_4.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_4.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_4.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_5.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_5.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_5.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_5.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_6.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_6.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_6.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_6.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_a.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_a.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_a.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_a0.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_a0.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_a0.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_b.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_b.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_b.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_b0.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_b0.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_b0.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_b1.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_b1.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_b1.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_b2.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_b2.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_b2.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_b2.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_c.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_c.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_c.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_futo_base_attack_d.vpcf_c b/game/particles/heroes/thtd_futo/ability_futo_base_attack_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_futo_base_attack_d.vpcf_c rename to game/particles/heroes/thtd_futo/ability_futo_base_attack_d.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_a.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_a.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_a.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_b.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_b.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_b.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_c.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_c.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_c.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_d.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_d.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_d.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_e.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_e.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_e.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_f.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_f.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_f.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_g.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_g.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_g.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_h.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_01_fire_h.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_01_fire_h.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_03.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_03.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_03.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_03_a.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_03_a.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_03_a.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_03_b.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_03_b.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_03_b.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_03_c.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_03_c.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_03_c.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_03_d.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_03_d.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_03_d.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_03_e.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_03_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_03_e.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_03_e.vpcf_c diff --git a/particles/heroes/thtd_futo/ability_thtd_futo_03_e0.vpcf_c b/game/particles/heroes/thtd_futo/ability_thtd_futo_03_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_futo/ability_thtd_futo_03_e0.vpcf_c rename to game/particles/heroes/thtd_futo/ability_thtd_futo_03_e0.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_01.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_01.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_01.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_01_news.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_01_news.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_01_news.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_01_news.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_01_news_a.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_01_news_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_01_news_a.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_01_news_a.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_a.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_a.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_a.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b0.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b0.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b0.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b1.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b1.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b1.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b2.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b2.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b2.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b2.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b3.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b3.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b3.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b3.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b4.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b4.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b4.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b4.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b5.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b5.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b5.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b5.vpcf_c diff --git a/particles/heroes/thtd_hatate/ability_hatate_02_b6.vpcf_c b/game/particles/heroes/thtd_hatate/ability_hatate_02_b6.vpcf_c similarity index 100% rename from particles/heroes/thtd_hatate/ability_hatate_02_b6.vpcf_c rename to game/particles/heroes/thtd_hatate/ability_hatate_02_b6.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_01_earth.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_01_earth.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_01_earth.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_01_earth.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_01_earth_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_01_earth_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_01_earth_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_01_earth_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_01_moon.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_01_moon.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_01_moon.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_01_moon.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_01_moon_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_01_moon_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_01_moon_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_01_moon_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_01_otherworld_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c1.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c1.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c1.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c2.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c2.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c2.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c3.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c3.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c3.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c3.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c4.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c4.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c4.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c4.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c5.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c5.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c5.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c5.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c6.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c6.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c6.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c6.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c7.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c7.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c7.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c7.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c8.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c8.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c8.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_c8.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_d.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_d.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_d.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_e.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_e.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_e.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_f.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_f.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_f.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_g.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_g.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_g.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_h.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_h.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_h.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_i.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_laser_i.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_laser_i.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_c.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_c.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_c.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_d.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_d.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_d.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_e.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_e.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_e.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_f.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_f.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_f.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_g.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_g.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_04_triangle_g.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1a0a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0a0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0c.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0c.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0c.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0d.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0d.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0d.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0d.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0e.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0e.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0e.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0e.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0f.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0f.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0f.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0f.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0g0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0h.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0h.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0h.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1b0h.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1c.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1c.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1c.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_a1c.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b1.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b1.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_b1.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c1.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c1.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_c1.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_d.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_d.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_debuff_d.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_rain.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_c.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_c.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_earth_rain_c.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_hit.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_hit.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_hit.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_hit.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c0.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c1.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c1.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c1.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c2.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c2.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c2.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c3.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c3.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c3.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c3.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c4.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c4.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c4.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c4.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c5.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c5.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c5.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c5.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c6.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c6.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c6.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c6.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c7.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c7.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c7.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c7.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c8.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c8.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c8.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_c8.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_d.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_d.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_d.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_e.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_e.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_e.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_f.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_f.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_f.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_g.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_g.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_g.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_h.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_h.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_h.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_i.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_i.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex_i.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_otherworld.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_otherworld.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_otherworld_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_otherworld_b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_a.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_a.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_a.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b.vpcf_c diff --git a/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b0.vpcf_c b/game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b0.vpcf_c rename to game/particles/heroes/thtd_hecatia/ability_hecatia_otherworld_projectile_b0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_01_buff.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_01_buff.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_01_buff.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_01_buff.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_01_buff_a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_01_buff_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_01_buff_a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_01_buff_a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_01_buff_b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_01_buff_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_01_buff_b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_01_buff_b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_01_buff_b0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_01_buff_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_01_buff_b0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_01_buff_b0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_01_buff_c.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_01_buff_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_01_buff_c.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_01_buff_c.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_01_buff_d.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_01_buff_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_01_buff_d.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_01_buff_d.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_01_buff_e.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_01_buff_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_01_buff_e.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_01_buff_e.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_c.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_c.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_c.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_d.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_d.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_d.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e1.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e1.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e1.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e10.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e10.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e10.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e10.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e11.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e11.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e11.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e11.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e12.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e12.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e12.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e12.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e13.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e13.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e13.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e13.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e14.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e14.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e14.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e14.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e15.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e15.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e15.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e15.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e16.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e16.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e16.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e16.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e17.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e17.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e17.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e17.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e18.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e18.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e18.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e18.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e19.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e19.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e19.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e19.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e2.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e2.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e2.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e2.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b1.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b1.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b1.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b2.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b2.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b2.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b2.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b2a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b2a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b2a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b2a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b2b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b2b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b2b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b2b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b3.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b3.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b3.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b3.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b4.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b4.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b4.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b4.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b5.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b5.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b5.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b5.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e3b6.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e3b6.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e3b6.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e3b6.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e4.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e4.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e4.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e4.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e5.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e5.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e5.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e5.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e5a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e5a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e5a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e5a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e6.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e6.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e6.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e6.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e7.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e7.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e7.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e7.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e8.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e8.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e8.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e8.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e8a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e8a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e8a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e8a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_02_e9.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_02_e9.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_02_e9.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_02_e9.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_c.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_c.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_c.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_d.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_d.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_d.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0c.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0c.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0c.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0d.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0d.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0d.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0d.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0e.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0e.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0e.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0e.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0f.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0f.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0f.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0f.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0g.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0g.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0g.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0g.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0h.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0h.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0h.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0h.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0h0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0h0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0h0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0h1.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0h1.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0h1.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0h1.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0h2.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0h2.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0h2.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0h2.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0h3.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0h3.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0h3.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0h3.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0h3a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0h3a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0h3a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0h3a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0i.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0i.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0i.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0i.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0i0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0i0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0i0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0i0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0j.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0j.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0j.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0j.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0k.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0k.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0k.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0k.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0l.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0l.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0l.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0l.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_03_e0l0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_03_e0l0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_03_e0l0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_03_e0l0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a1.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a1.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a1.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a10.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a10.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a10.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a10.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a11.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a11.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a11.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a11.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a12.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a12.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a12.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a12.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a13.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a13.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a13.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a13.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a13a.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a13a.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a13a.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a13a.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a13b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a13b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a13b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a13b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a13c.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a13c.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a13c.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a13c.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a2.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a2.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a2.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a2.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a3.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a3.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a3.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a3.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a4.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a4.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a4.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a4.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a5.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a5.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a5.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a5.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a6.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a6.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a6.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a6.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a7.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a7.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a7.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a7.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a8.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a8.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a8.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a8.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_a9.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_a9.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_a9.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_a9.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_b.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_b.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_b.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_b0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_b0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_b0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_b1.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_b1.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_b1.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_c.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_c.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_c.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_c0.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_c0.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_c0.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_d.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_d.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_d.vpcf_c diff --git a/particles/heroes/thtd_junko/ability_junko_04_debuff.vpcf_c b/game/particles/heroes/thtd_junko/ability_junko_04_debuff.vpcf_c similarity index 100% rename from particles/heroes/thtd_junko/ability_junko_04_debuff.vpcf_c rename to game/particles/heroes/thtd_junko/ability_junko_04_debuff.vpcf_c diff --git a/particles/heroes/thtd_kaguya/ability_kaguya_03_2_b.vpcf_c b/game/particles/heroes/thtd_kaguya/ability_kaguya_03_2_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/ability_kaguya_03_2_b.vpcf_c rename to game/particles/heroes/thtd_kaguya/ability_kaguya_03_2_b.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_1.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_1.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_1.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_1.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_1_a.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_1_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_1_a.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_1_a.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_2.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_2.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_2.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_2.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_2_a.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_2_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_2_a.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_2_a.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_3.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_3.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_3.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_3.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_3_a.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_3_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_3_a.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_3_a.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_4.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_4.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_4.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_4.vpcf_c diff --git a/particles/heroes/thtd_kaguya/thtd_kaguya_03_4_a.vpcf_c b/game/particles/heroes/thtd_kaguya/thtd_kaguya_03_4_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kaguya/thtd_kaguya_03_4_a.vpcf_c rename to game/particles/heroes/thtd_kaguya/thtd_kaguya_03_4_a.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_a.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_a.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_a.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_b.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_b.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_b.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_b0.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_b0.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_b0.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_c.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_c.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_c.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_d.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_d.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_d.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_e.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_e.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_e.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_e0.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_e0.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_e0.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_f.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_f.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_f.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_g.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_g.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_g.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_h.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_h.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_h.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_i.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_i.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_i.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_j.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_j.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_j.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_01_explosion_k.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_01_explosion_k.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_01_explosion_k.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_a.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_a.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_a.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_a0.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_a0.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_a0.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_b.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_b.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_b.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_ball_light.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_ball_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_ball_light.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_ball_light.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_c.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_c.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_c.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_c0.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_c0.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_c0.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_c1.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_c1.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_c1.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_c1a.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_c1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_c1a.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_c1a.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_c2.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_c2.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_c2.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_c3.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_c3.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_c3.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_c3.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_c4.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_c4.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_c4.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_c4.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_d.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_d.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_d.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_e.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_e.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_e.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_e0.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_e0.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_e0.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_e1.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_e1.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_e1.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_f.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_f.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_f.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_g.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_g.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_g.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h0.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h0.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h0.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h1.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h1.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h1.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h1.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h2.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h2.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h2.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h2.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h3.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h3.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h3.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h3.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h4.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h4.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h4.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h4.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h4a.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h4a.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h4a.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h4a.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_h4b.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_h4b.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_h4b.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_h4b.vpcf_c diff --git a/particles/heroes/thtd_kanako/ability_kanako_03_line_i.vpcf_c b/game/particles/heroes/thtd_kanako/ability_kanako_03_line_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_kanako/ability_kanako_03_line_i.vpcf_c rename to game/particles/heroes/thtd_kanako/ability_kanako_03_line_i.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_buff.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_buff.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_buff.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_buff.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_buff_a.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_buff_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_buff_a.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_buff_a.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_buff_b.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_buff_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_buff_b.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_buff_b.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_a.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_a.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_a.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_b.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_b.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_b.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_b0.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_b0.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_b0.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_c.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_c.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_c.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_d.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_d.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_d.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_e.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_e.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_e.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_e0.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_e0.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_e0.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_f.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_f.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_f.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_g.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_g.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_g.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_h.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_h.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_h.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_i.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_i.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_i.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_j.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_j.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_j.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_01_stun_k.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_01_stun_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_01_stun_k.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_01_stun_k.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_a.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_a.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_a.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_b.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_b.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_b.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_c.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_c.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_c.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_d.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_d.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_d.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_e.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_e.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_e.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_f.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_f.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_f.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_g.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_g.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_g.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_h.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_h.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_h.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_i.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_i.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_i.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_j.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_j.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_j.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_k.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_k.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_k.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_03_l.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_03_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_03_l.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_03_l.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_mirror.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_mirror.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_mirror.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_mirror.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_mirror_a.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_mirror_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_mirror_a.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_mirror_a.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_mirror_b.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_mirror_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_mirror_b.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_mirror_b.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_mirror_b0.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_mirror_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_mirror_b0.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_mirror_b0.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_mirror_c.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_mirror_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_mirror_c.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_mirror_c.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_a.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_a.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_a.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_a0.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_a0.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_a0.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_b.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_b.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_b.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_b0.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_b0.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_b0.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_b1.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_b1.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_b1.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_b2.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_b2.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_b2.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_b2.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_c.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_c.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_c.vpcf_c diff --git a/particles/heroes/thtd_keine/ability_keine_04_sword_d.vpcf_c b/game/particles/heroes/thtd_keine/ability_keine_04_sword_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_keine/ability_keine_04_sword_d.vpcf_c rename to game/particles/heroes/thtd_keine/ability_keine_04_sword_d.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_b.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_b.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_b.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_c.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_c.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_c.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_d.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_d.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_d.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_e.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_e.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_e.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_f.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_f.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_f.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_g.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_g.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_g.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_h.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_h.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_h.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_h0.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_h0.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_h0.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_h0a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_h0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_h0a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_h0a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_i.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_i.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_i.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_01_i0.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_01_i0.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_01_i0.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_01_i0.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_01.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_01.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_01.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_01_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_01_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_01_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_02.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_02.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_02.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_02_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_02_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_02_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_03.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_03.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_03.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_03_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_03_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_03_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_04.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_04.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_04.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_04_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_04_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_04_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_05.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_05.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_05.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_05.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_05_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_05_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_05_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_05_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_06.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_06.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_06.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_06.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_06_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_06_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_06_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_06_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_a.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_a.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_a.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_b.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_b.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_b.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_c.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_c.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_c.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_d.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_d.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_d.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_e.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_e.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_e.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_f.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_f.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_f.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_g.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_g.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_g.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_h.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_h.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_h.vpcf_c diff --git a/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_i.vpcf_c b/game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_i.vpcf_c rename to game/particles/heroes/thtd_koishi/ability_koishi_04_attack_landed_i.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_a.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_a.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_a.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_b.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_b.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_b.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_c.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_c.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_c.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_d.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_d.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_d.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_e.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_e.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_e.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_f.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_f.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_f.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_g.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_g.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_g.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_g0.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_g0.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_g0.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_h.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_h.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_h.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_i.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_i.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_i.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_j.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_j.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_j.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_k.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_k.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_k.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_l.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_l.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_l.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_m.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_m.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_m.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_n.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_n.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_n.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_01_o.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_01_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_01_o.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_01_o.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_a.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_a.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_a.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_b.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_b.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_b.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c0.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c0.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c0.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c1.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c1.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c1.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c2.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c2.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c2.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c3.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c3.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c3.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c3.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c4.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c4.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c4.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c4.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c5.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c5.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c5.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c5.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c6.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c6.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c6.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c6.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c7.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c7.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c7.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c7.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_c8.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_c8.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_c8.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_c8.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_d.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_d.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_d.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_e.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_e.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_e.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_f.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_f.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_f.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_g.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_g.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_g.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_h.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_h.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_h.vpcf_c diff --git a/particles/heroes/thtd_luna/ability_luna_02_laser_i.vpcf_c b/game/particles/heroes/thtd_luna/ability_luna_02_laser_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_luna/ability_luna_02_laser_i.vpcf_c rename to game/particles/heroes/thtd_luna/ability_luna_02_laser_i.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_a.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_a.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_a.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_a0.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_a0.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_a0.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_a1.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_a1.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_a1.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_b.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_b.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_b.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_b0.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_b0.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_b0.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_blue.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_blue.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_blue.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_blue.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_blue_a.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_blue_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_blue_a.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_blue_a.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_blue_a0.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_blue_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_blue_a0.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_blue_a0.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_blue_a1.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_blue_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_blue_a1.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_blue_a1.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c0.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c0.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c0.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c1.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c1.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c1.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c2.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c2.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c2.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c3.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c3.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c3.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c3.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c3a.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c3a.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c3a.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c3a.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c3b.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c3b.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c3b.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c3b.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_c3c.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_c3c.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_c3c.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_c3c.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_d.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_d.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_d.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_normal.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_normal.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_normal.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_normal.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_normal_a.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_normal_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_normal_a.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_normal_a.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_normal_a0.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_normal_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_normal_a0.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_normal_a0.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_normal_a1.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_normal_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_normal_a1.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_normal_a1.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_pink.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_pink.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_pink.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_pink.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_pink_a.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_pink_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_pink_a.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_pink_a.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_pink_a0.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_pink_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_pink_a0.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_pink_a0.vpcf_c diff --git a/particles/heroes/thtd_marisa/ability_marisa_02_pink_a1.vpcf_c b/game/particles/heroes/thtd_marisa/ability_marisa_02_pink_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_marisa/ability_marisa_02_pink_a1.vpcf_c rename to game/particles/heroes/thtd_marisa/ability_marisa_02_pink_a1.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_a.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_a.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_a.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_b.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_b.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_b.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_c.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_c.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_c.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_circle.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_circle.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_circle.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_circle_light.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_circle_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_circle_light.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_circle_light.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_d.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_d.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_d.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_e.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_e.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_e.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_f.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_f.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_f.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_g.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_g.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_g.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_h.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_h.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_h.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_02_i.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_02_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_02_i.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_02_i.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a0.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a0.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a0.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0a0.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0b.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a0b.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0b.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0c.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a0c.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0c.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0d.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0d.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a0d.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0d.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0e.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0e.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a0e.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a0e.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_a1.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_a1.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_a1.vpcf_c diff --git a/particles/heroes/thtd_medicine/ability_medicine_base_attack_b.vpcf_c b/game/particles/heroes/thtd_medicine/ability_medicine_base_attack_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_medicine/ability_medicine_base_attack_b.vpcf_c rename to game/particles/heroes/thtd_medicine/ability_medicine_base_attack_b.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_a.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_a.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_a.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_b.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_b.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_b.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_c.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_c.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_c.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_d.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_d.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_d.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_1.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_1.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_1.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_1.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_1_a.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_1_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_1_a.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_1_a.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_1_b.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_1_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_1_b.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_1_b.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_1_c.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_1_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_1_c.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_1_c.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_a.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_a.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_a.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_b.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_b.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_b.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_c.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_c.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_c.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_d.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_d.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_d.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_e.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_e.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_e.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_f.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_f.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_f.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_g.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_g.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_g.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_h.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_h.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_h.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_h0.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_h0.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_h0.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_2_i.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_2_i.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_2_i.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_a.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_a.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_a.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_b.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_b.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_b.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_c.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_c.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_c.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_d.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_d.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_d.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_e.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_e.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_e.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_f.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_f.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_f.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_g.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_g.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_g.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_h.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_h.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_h.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_3_i.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_3_i.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_3_i.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_a.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_a.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_a.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_b.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_b.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_b.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_c.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_c.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_c.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_d.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_d.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_d.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_e.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_e.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_e.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_f.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_f.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_f.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_g.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_g.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_g.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_h.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_h.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_h.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_i.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_i.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_i.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_j.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_j.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_j.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_k.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_k.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_k.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_l.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_l.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_l.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_m.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_m.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_m.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_n.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n0.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n0.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_n0.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n0.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n1.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n1.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_n1.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n1.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n2.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n2.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_n2.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n2.vpcf_c diff --git a/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n3.vpcf_c b/game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n3.vpcf_c similarity index 100% rename from particles/heroes/thtd_meirin/ability_meirin_01_step_4_n3.vpcf_c rename to game/particles/heroes/thtd_meirin/ability_meirin_01_step_4_n3.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_a.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_a.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_a.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_b.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_b.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_b.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_c.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_c.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_c.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_d.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_d.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_d.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_e.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_e.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_e.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_f.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_f.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_f.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_g.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_g.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_g.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_h.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_h.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_h.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_i.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_i.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_i.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_j.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_j.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_j.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_k.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_k.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_k.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_01_k0.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_01_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_01_k0.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_01_k0.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_02_buff.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_02_buff.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_02_buff.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_02_buff.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_02_buff_a.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_02_buff_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_02_buff_a.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_02_buff_a.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_03.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_03.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_03.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_03_a.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_03_a.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_03_a.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_03_a0.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_03_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_03_a0.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_03_a0.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_miko_03_a1.vpcf_c b/game/particles/heroes/thtd_miko/ability_miko_03_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_miko_03_a1.vpcf_c rename to game/particles/heroes/thtd_miko/ability_miko_03_a1.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_a.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_a.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_a.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_b.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_b.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_b.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_c.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_c.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_c.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_d.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_d.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_d.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_e.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_e.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_e.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_f.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_f.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_f.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_g.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_g.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_g.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_h.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_h.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_h.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_i.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_i.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_i.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_j.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_j.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_j.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_k.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_k.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_k.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_l.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_l.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_l.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_m.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_m.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_m.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_n.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_n.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_n.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_o.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_o.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_o.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_p.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_p.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_p.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_q.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_q.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_q.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_q.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_r.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_r.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_r.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_starfall_r.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_start.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_start.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_start.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_start.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_start_a.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_start_a.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_a.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_start_b.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_start_b.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_b.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_start_c.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_start_c.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_c.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_start_d.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_start_d.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_d.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_start_e.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_start_e.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_e.vpcf_c diff --git a/particles/heroes/thtd_miko/ability_thtd_miko_04_start_f.vpcf_c b/game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_miko/ability_thtd_miko_04_start_f.vpcf_c rename to game/particles/heroes/thtd_miko/ability_thtd_miko_04_start_f.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_a.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_a.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_a.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_b.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_b.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_b.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_c.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_c.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_c.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_d.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_d.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_d.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e0.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e0.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_e0.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f0.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f0.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f0.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f0.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f1.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f1.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f1.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f1.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f2.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f2.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f2.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_f2.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_g.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_g.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_g.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_h.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_h.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_h.vpcf_c diff --git a/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_water.vpcf_c b/game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_water.vpcf_c similarity index 100% rename from particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_water.vpcf_c rename to game/particles/heroes/thtd_minamitsu/ability_minamitsu_01_ship_water.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_a.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_a.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_a.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_b.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_b.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_b.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_c.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_c.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_c.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_d.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_d.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_d.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_e.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_e.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_e.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_f.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_f.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_f.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_g.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_g.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_g.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_h.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_h.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_h.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_i.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_i.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_i.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_j.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_j.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_j.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_shield.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_shield.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_shield.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_shield.vpcf_c diff --git a/particles/heroes/thtd_momiji/ability_momiji_02_shield_a.vpcf_c b/game/particles/heroes/thtd_momiji/ability_momiji_02_shield_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_momiji/ability_momiji_02_shield_a.vpcf_c rename to game/particles/heroes/thtd_momiji/ability_momiji_02_shield_a.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_circle.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_circle.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_circle.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a1.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a1.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_a1.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_b.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_b.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_b.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_c.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_c.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_c.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_circle.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_circle.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_circle.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_d.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_d.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_d.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_e0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_f.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_f.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_f.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_g.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_g.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_g.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_h.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_h.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_h.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_i.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_i.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_i.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_j.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_j.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_j.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_k.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_k.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_k.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_l.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_l.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_l.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_m.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_m.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_m.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_n.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_n.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_n.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_o.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_o.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_o.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_p.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_p.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_p.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_q.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_q.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_q.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_q.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_r.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_r.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_r.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_r.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_s.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_s.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_s.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_s.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_t.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_t.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_t.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_t.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_u.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_u.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_u.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_u.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_v.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_v.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_v.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_v.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_w.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_w.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_w.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_w.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_x.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_x.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_x.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine_x.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_a.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_a.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_a.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_b.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_b.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_b.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_a.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_a.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_a.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_b.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_b.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_b.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_c.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_c.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_c.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d1.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d1.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d1.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d1.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d2.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d2.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d2.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_d2.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_e.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_e.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_e.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_f.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_f.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_f.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_g.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_g.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_g.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_h0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i1.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i1.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i1.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_i1.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_j.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_j.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_bury_j.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_c.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_c.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_c.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_d.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_d.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_d.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_e.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_e.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_e.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_f.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_f.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_f.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_g0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_h.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_h.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_h.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_i.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_i.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_i.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_j.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_j.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_j.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_k.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_k.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake_k.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_a.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_a.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_a.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_b0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_c.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_c.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_c.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_circle.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_circle.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_circle.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_d.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_d.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_d.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_e.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_e.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_e.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_f.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_f.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_f.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_g.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_g.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_g.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h0.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h0.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_h0.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_i.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_i.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_i.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_j.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_j.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_j.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_k.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_k.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_k.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_l.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_l.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_l.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_light.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_light.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_light.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_m.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_m.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_m.vpcf_c diff --git a/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_n.vpcf_c b/game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_n.vpcf_c rename to game/particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison_n.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_a.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_a.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_a.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_b.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_b.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_b.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_c.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_c.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_c.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_d.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_d.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_d.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_e.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_e.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_e.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_f.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_f.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_f.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_g.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_g.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_g.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_h.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_h.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_h.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_i.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_i.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_i.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_j.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_j.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_j.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_k.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_k.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_k.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_k0.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_k0.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_k0.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_l.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_l.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_l.vpcf_c diff --git a/particles/heroes/thtd_patchouli_04/ability_patchouli_04_l0.vpcf_c b/game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_l0.vpcf_c similarity index 100% rename from particles/heroes/thtd_patchouli_04/ability_patchouli_04_l0.vpcf_c rename to game/particles/heroes/thtd_patchouli_04/ability_patchouli_04_l0.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_01_end.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_01_end.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_01_end.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_01_end.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_01_end_a.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_01_end_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_01_end_a.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_01_end_a.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_01_light.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_01_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_01_light.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_01_light.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_01_projectile.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_01_projectile.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_01_projectile.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_01_projectile.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_01_projectile_b.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_01_projectile_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_01_projectile_b.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_01_projectile_b.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_a.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_a.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_a.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_b.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_b.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_b.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_a.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_a.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_a.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_b.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_b.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_b.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_c.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c0.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_c0.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c0.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c1.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_c1.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_c1.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_d.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_d.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_d.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_e.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_e.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_e.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_explosion_f.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_explosion_f.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_explosion_f.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_04_projectile.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_04_projectile.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_04_projectile.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_04_projectile.vpcf_c diff --git a/particles/heroes/thtd_reimu/ability_reimu_base_attack.vpcf_c b/game/particles/heroes/thtd_reimu/ability_reimu_base_attack.vpcf_c similarity index 100% rename from particles/heroes/thtd_reimu/ability_reimu_base_attack.vpcf_c rename to game/particles/heroes/thtd_reimu/ability_reimu_base_attack.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_a.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_a.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_a.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_b.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_b.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_b.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c0.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c0.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c0.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c1.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c1.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c1.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c2.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c2.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c2.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c3.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c3.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c3.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c3.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c4.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c4.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c4.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c4.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c5.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c5.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c5.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c5.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c6.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c6.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c6.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c6.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c7.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c7.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c7.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c7.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_c8.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_c8.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_c8.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_c8.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_circle.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_circle.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_circle.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_circle_a.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_circle_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_circle_a.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_circle_a.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_d.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_d.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_d.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_e.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_e.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_e.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_a.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_a.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_a.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_b.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_b.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_b.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_c.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_c.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_c.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_d.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_d.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_d.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_e.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_e.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_e.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_f.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_f.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_f.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_g.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_g.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_g.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_explosion_h.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_explosion_h.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_explosion_h.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_f.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_f.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_f.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_g.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_g.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_g.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_h.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_h.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_h.vpcf_c diff --git a/particles/heroes/thtd_reisen/ability_reisen_03_i.vpcf_c b/game/particles/heroes/thtd_reisen/ability_reisen_03_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_reisen/ability_reisen_03_i.vpcf_c rename to game/particles/heroes/thtd_reisen/ability_reisen_03_i.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_a.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_a.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_a.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_b.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_b.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_b.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_c.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_c.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_c.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_d.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_d.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_d.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_d0.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_d0.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_d0.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_e.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_e.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_e.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_f.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_f.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_f.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_f0.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_f0.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_f0.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_f0.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_g.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_g.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_g.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_h.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_h.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_h.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_i.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_i.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_i.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_i0.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_i0.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_i0.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_i0.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_j.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_j.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_j.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_k.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_k.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_k.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_l.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_l.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_l.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_m.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_m.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_m.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_n.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_n.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_n.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_o.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_o.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_o.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_p.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_p.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_p.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_q.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_q.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_q.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_q.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_r.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_r.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_r.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_r.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_s.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_s.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_s.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_s.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_effect_t.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_effect_t.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_effect_t.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_effect_t.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_a.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_a.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_a.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_b.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_b.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_b.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_c.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_c.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_c.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_c0.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_c0.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_c0.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_c1.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_c1.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_c1.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_d.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_d.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_d.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_e.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_e.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_e.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_03_end_f.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_03_end_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_03_end_f.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_03_end_f.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_04_circle.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_04_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_04_circle.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_04_circle.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_04_circle_a.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_04_circle_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_04_circle_a.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_04_circle_a.vpcf_c diff --git a/particles/heroes/thtd_remilia/ability_remilia_04_circle_c.vpcf_c b/game/particles/heroes/thtd_remilia/ability_remilia_04_circle_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_remilia/ability_remilia_04_circle_c.vpcf_c rename to game/particles/heroes/thtd_remilia/ability_remilia_04_circle_c.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_02_ex_projectile_tail.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_02_ex_projectile_tail.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_02_ex_projectile_tail.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_02_ex_projectile_tail.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_03.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_03.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_03.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_03_a.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_03_a.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_03_a.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_03_b.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_03_b.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_03_b.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_b.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_b.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_b.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_end.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_end.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_end.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_end.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_end_a.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_end_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_end_a.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_end_a.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_a.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_a.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_a.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_b.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_b.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_b.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_c.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c0.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_c0.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c0.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c1.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_c1.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_c1.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_d.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_d.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_d.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_e.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_e.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_e.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_explosion_f.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_explosion_f.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_explosion_f.vpcf_c diff --git a/particles/heroes/thtd_rumia/ability_rumia_04_weapon.vpcf_c b/game/particles/heroes/thtd_rumia/ability_rumia_04_weapon.vpcf_c similarity index 100% rename from particles/heroes/thtd_rumia/ability_rumia_04_weapon.vpcf_c rename to game/particles/heroes/thtd_rumia/ability_rumia_04_weapon.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_a.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_a.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_a.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_b.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_b.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_b.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_c.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_c.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_c.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_d.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_d.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_d.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_e.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_e.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_e.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_f.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_f.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_f.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_g.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_g.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_g.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_h.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_h.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_h.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_i.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_i.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_i.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_j.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_j.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_j.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_k.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_k.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_k.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_l.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_l.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_l.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_m.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_m.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_m.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_n.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_n.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_n.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_o.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_o.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_o.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_p.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_p.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_p.vpcf_c diff --git a/particles/heroes/thtd_sanae/ability_sanae_02_p_a.vpcf_c b/game/particles/heroes/thtd_sanae/ability_sanae_02_p_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae/ability_sanae_02_p_a.vpcf_c rename to game/particles/heroes/thtd_sanae/ability_sanae_02_p_a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_c.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_c.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_c.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_d.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_d.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_d.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_d0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_d0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_d0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_d1.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_d1.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_d1.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_d1.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_e.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_e.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_e.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_f.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_f.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_f.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_g.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_g.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_g.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_g0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_g0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_g0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_g1.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_g1.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_g1.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_g1.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_g2.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_g2.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_g2.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_g2.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_g3.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_g3.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_g3.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_g3.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_g4.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_g4.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_g4.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_g4.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h0a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h0a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h0b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h0b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h0c.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h0c.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h0c.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h1.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h1.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h1a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h1a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h1b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h1b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h1c.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1c.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h1c.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1c.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h1d.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1d.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h1d.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1d.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h1e.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1e.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h1e.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h1e.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_h2.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_h2.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_h2.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_h2.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_i.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_i.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_i.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0a0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a1.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0a1.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a1.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a2.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a2.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0a2.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a2.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a3.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a3.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0a3.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0a3.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j0c.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j0c.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j0c.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1c.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1c.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1c.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1c.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1d.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1d.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1d.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1d.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0c.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0c.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0c.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0d.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0d.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0d.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0d.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0e0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0f.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0f.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0f.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e0f.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e1a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e2.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e2.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e2.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e2.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e3a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0a.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0a.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0a.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0b.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0b.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e4b0b.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e5.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e5.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1e5.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1e5.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1f.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1f.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1f.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1f.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1g.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1g.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1g.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1g.vpcf_c diff --git a/particles/heroes/thtd_sanae_03/ability_sanae_03_j1h.vpcf_c b/game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1h.vpcf_c similarity index 100% rename from particles/heroes/thtd_sanae_03/ability_sanae_03_j1h.vpcf_c rename to game/particles/heroes/thtd_sanae_03/ability_sanae_03_j1h.vpcf_c diff --git a/particles/heroes/thtd_seiga/ability_seiga_03.vpcf_c b/game/particles/heroes/thtd_seiga/ability_seiga_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_seiga/ability_seiga_03.vpcf_c rename to game/particles/heroes/thtd_seiga/ability_seiga_03.vpcf_c diff --git a/particles/heroes/thtd_seiga/ability_seiga_03_a.vpcf_c b/game/particles/heroes/thtd_seiga/ability_seiga_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_seiga/ability_seiga_03_a.vpcf_c rename to game/particles/heroes/thtd_seiga/ability_seiga_03_a.vpcf_c diff --git a/particles/heroes/thtd_seiga/ability_seiga_03_b.vpcf_c b/game/particles/heroes/thtd_seiga/ability_seiga_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_seiga/ability_seiga_03_b.vpcf_c rename to game/particles/heroes/thtd_seiga/ability_seiga_03_b.vpcf_c diff --git a/particles/heroes/thtd_seiga/ability_seiga_03_c.vpcf_c b/game/particles/heroes/thtd_seiga/ability_seiga_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_seiga/ability_seiga_03_c.vpcf_c rename to game/particles/heroes/thtd_seiga/ability_seiga_03_c.vpcf_c diff --git a/particles/heroes/thtd_seiga/ability_seiga_03_d.vpcf_c b/game/particles/heroes/thtd_seiga/ability_seiga_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_seiga/ability_seiga_03_d.vpcf_c rename to game/particles/heroes/thtd_seiga/ability_seiga_03_d.vpcf_c diff --git a/particles/heroes/thtd_seiga/ability_seiga_03_e.vpcf_c b/game/particles/heroes/thtd_seiga/ability_seiga_03_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_seiga/ability_seiga_03_e.vpcf_c rename to game/particles/heroes/thtd_seiga/ability_seiga_03_e.vpcf_c diff --git a/particles/heroes/thtd_seiga/ability_seiga_03_f.vpcf_c b/game/particles/heroes/thtd_seiga/ability_seiga_03_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_seiga/ability_seiga_03_f.vpcf_c rename to game/particles/heroes/thtd_seiga/ability_seiga_03_f.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_a.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_a.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_a.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_a0.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_a0.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_a0.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_a0a.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_a0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_a0a.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_a0a.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_b.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_b.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_b.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_b0.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_b0.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_b0.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_b0a.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_b0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_b0a.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_b0a.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_b0b.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_b0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_b0b.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_b0b.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_c.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_c.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_c.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_c0.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_c0.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_c0.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_c1.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_c1.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_c1.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_c1.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_c2.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_c2.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_c2.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_c2.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_d.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_d.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_d.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_d0.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_d0.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_d0.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_d0a.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_d0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_d0a.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_d0a.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e0.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e0.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e0.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e1.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e1.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e1.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e2.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e2.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e2.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e2.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e3.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e3.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e3.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e3.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e4.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e4.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e4.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e4.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e5.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e5.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e5.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e5.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e6.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e6.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e6.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e6.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e6a.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e6a.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e6a.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e6a.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_e7.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_e7.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_e7.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_e7.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_f.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_f.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_f.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_g.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_g.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_g.vpcf_c diff --git a/particles/heroes/thtd_shinki/ability_shinki_01_h.vpcf_c b/game/particles/heroes/thtd_shinki/ability_shinki_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_shinki/ability_shinki_01_h.vpcf_c rename to game/particles/heroes/thtd_shinki/ability_shinki_01_h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_d0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_d0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_d0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_d1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_d1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_d1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_d1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_g.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_g.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_g.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_g0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_g0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_g0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_g1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_g1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_g1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_g1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_g2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_g2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_g2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_g2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_g3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_g3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_g3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_g3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_g4.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_g4.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_g4.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_g4.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h0c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h0c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h0c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h1a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h1a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h1a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h1b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h1b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h1b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h1b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h1c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h1c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h1c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h1c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h1d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h1d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h1d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h1d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h1e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h1e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h1e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h1e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_h2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_h2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_h2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_h2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_i.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_i.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_i.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0a0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0a0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0a0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0a1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0a1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0a1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0a2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0a2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0a2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0a2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0a3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0a3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0a3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0a3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j0c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j0c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j0c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0e0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0e0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0e0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e0f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e0f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e0f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e0f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e1a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e1a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e1a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e3a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e3a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e3a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e3a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e4.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e4.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e4.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e4.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e4a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e4a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e4a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e4a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e4b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e4b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e4b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e4b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e4b0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e4b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e4b0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e4b0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e4b0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e4b0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e4b0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e4b0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e4b0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e4b0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e4b0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e4b0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1e5.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1e5.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1e5.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1e5.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1g.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1g.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1g.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1g.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_j1h.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_j1h.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_j1h.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_j1h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k4.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k4.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k4.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k4.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k5.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k5.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k5.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k5.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k6.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k6.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k6.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k6.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k7.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k7.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k7.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k7.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8b0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8b0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8b0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8b1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8b1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8b1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8e0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8e0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8e0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8e1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8e1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8e1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8g.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8g.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8g.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8g.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8g0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8g0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8g0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8h.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8h.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8h.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8i.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8i.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8i.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8i.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8j.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8j.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8j.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8j.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8k.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8k.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8k.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8k.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8l.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8l.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8l.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8l.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8m.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8m.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8m.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8m.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8n.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8n.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8n.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8n.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_01_k8o.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_01_k8o.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_01_k8o.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_01_k8o.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_d0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_d0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_d0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_d1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_d1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_d1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_d1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_g.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_g.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_g.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_g0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_g0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_g0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_g1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_g1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_g1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_g1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_g2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_g2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_g2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_g2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_g3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_g3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_g3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_g3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_g4.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_g4.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_g4.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_g4.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h0c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h0c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h0c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h1a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h1a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h1a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h1b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h1b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h1b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h1b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h1c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h1c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h1c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h1c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h1d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h1d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h1d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h1d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h1e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h1e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h1e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h1e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_h2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_h2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_h2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_h2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_i.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_i.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_i.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0a0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0a0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0a0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0a1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0a1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0a1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0a2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0a2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0a2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0a2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0a3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0a3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0a3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0a3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j0c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j0c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j0c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0e0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0e0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0e0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e0f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e0f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e0f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e0f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e1a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e1a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e1a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e1a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e3a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e3a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e3a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e3a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e4.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e4.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e4.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e4.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e4a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e4a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e4a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e4a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e4b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e4b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e4b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e4b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e4b0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e4b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e4b0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e4b0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e4b0a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e4b0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e4b0a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e4b0a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e4b0b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e4b0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e4b0b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e4b0b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1e5.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1e5.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1e5.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1e5.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1g.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1g.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1g.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1g.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_j1h.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_j1h.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_j1h.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_j1h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k2.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k3.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k3.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k3.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k3.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k4.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k4.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k4.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k4.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k5.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k5.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k5.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k5.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k6.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k6.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k6.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k6.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k7.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k7.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k7.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k7.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k7a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k7a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k7a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k7a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k7b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k7b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k7b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k7b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k7c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k7c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k7c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k7c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k7d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k7d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k7d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k7d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k7e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k7e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k7e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k7e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8a.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8b.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8b0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8b0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8b0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8b1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8b1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8b1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8b1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8c.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8d.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8e.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8e0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8e0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8e0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8e0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8e1.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8e1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8e1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8e1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8f.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8g.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8g.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8g.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8g.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8g0.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8g0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8g0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8g0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8h.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8h.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8h.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8i.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8i.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8i.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8i.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8j.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8j.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8j.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8j.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8k.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8k.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8k.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8k.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8l.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8l.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8l.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8l.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8m.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8m.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8m.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8m.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8n.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8n.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8n.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8n.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_soga_02_k8o.vpcf_c b/game/particles/heroes/thtd_soga/ability_soga_02_k8o.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_soga_02_k8o.vpcf_c rename to game/particles/heroes/thtd_soga/ability_soga_02_k8o.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_a.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_a.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_a.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_b.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_b.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_b.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_c.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_c.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_c.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_d.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_d.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_d.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_e.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_e.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_e.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_f.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_f.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_f.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_g.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_g.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_g.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_h.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_h.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_h.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_i.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_i.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_i.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_j.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_j.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_j.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_k.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k0.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_k0.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k0.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k1.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k1.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_k1.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k1.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k2.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k2.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_k2.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_k2.vpcf_c diff --git a/particles/heroes/thtd_soga/ability_thtd_soga_lightning_l.vpcf_c b/game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_soga/ability_thtd_soga_lightning_l.vpcf_c rename to game/particles/heroes/thtd_soga/ability_thtd_soga_lightning_l.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_a.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_a.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_a.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_b.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_b.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_b.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_c.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_c.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_c.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_d.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_d.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_d.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_e.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_e.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_e.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_f.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_f.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_f.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_g.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_g.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_g.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_h.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_h.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_h.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_i.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_i.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_i.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_j.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_j.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_j.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_k.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_k.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_k.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_l.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_l.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_l.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_m.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_m.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_m.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_n.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_n.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_n.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_o.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_o.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_o.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_p.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_p.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_p.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_p.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_q.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_q.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_q.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_q.vpcf_c diff --git a/particles/heroes/thtd_star/ability_star_01_r.vpcf_c b/game/particles/heroes/thtd_star/ability_star_01_r.vpcf_c similarity index 100% rename from particles/heroes/thtd_star/ability_star_01_r.vpcf_c rename to game/particles/heroes/thtd_star/ability_star_01_r.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a0.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a0.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a0.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a1.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a1.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a1.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a2.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a2.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a2.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a2.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a3.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a3.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a3.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a3.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a4.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a4.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a4.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a4.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a5.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a5.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a5.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a5.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_a6.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_a6.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_a6.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_a6.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_b.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_b.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_b.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_c.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_c.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_c.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_d.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_d.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_d.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_01_smoke.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_01_smoke.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_01_smoke.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_01_smoke.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_03.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_03.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_03.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_03_a.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_03_a.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_03_a.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_04.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_04.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_04.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_04_a.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_04_a.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_04_a.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_04_a0.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_04_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_04_a0.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_04_a0.vpcf_c diff --git a/particles/heroes/thtd_suika/ability_suika_04_b.vpcf_c b/game/particles/heroes/thtd_suika/ability_suika_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_suika/ability_suika_04_b.vpcf_c rename to game/particles/heroes/thtd_suika/ability_suika_04_b.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_01_ring.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_01_ring.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_01_ring.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_01_ring.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_01_ring_a.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_01_ring_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_01_ring_a.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_01_ring_a.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_01_ring_b.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_01_ring_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_01_ring_b.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_01_ring_b.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_01_ring_b0.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_01_ring_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_01_ring_b0.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_01_ring_b0.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_a.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_a.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_a.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_b.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_b.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_b.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_c.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_c.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_c.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_c0.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_c0.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_c0.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d0.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d0.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d0.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d0a.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d0a.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d0a.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d0b.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d0b.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d0b.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d0c.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d0c.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d0c.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d0c.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d0d.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d0d.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d0d.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d0d.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d0e.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d0e.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d0e.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d0e.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_d0f.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_d0f.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_d0f.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_d0f.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_e.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_e.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_e.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_f.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_f.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_f.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_g.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_g.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_g.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_h.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_h.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_h.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_i.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_i.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_i.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_j.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_j.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_j.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_k.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_k.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_k.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_l.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_l.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_l.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_m.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_m.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_m.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_m.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_n.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_n.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_n.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_n.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_n0.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_n0.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_n0.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_n0.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_n1.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_n1.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_n1.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_n1.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_n2.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_n2.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_n2.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_n2.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_n3.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_n3.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_n3.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_n3.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_n4.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_n4.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_n4.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_n4.vpcf_c diff --git a/particles/heroes/thtd_suwako/ability_suwako_02_o.vpcf_c b/game/particles/heroes/thtd_suwako/ability_suwako_02_o.vpcf_c similarity index 100% rename from particles/heroes/thtd_suwako/ability_suwako_02_o.vpcf_c rename to game/particles/heroes/thtd_suwako/ability_suwako_02_o.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_a.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_a.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_a.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_b.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_b.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_b.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_c.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_c.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_c.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_d.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_d.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_d.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_debuff.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_a.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_a.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_a.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_b.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_b.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_debuff_b.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_e.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_e.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_e.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_f.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_f.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_f.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_g.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_g.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_g.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_h.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_h.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_h.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_01_i.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_01_i.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_01_i.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_a.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_a.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_a.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_a0.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_a0.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_a0.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_b.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_b.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_b.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_b0.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_b0.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_b0.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_c.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_c.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_c.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_c0.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_c0.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_c0.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_d.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_d.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_d.vpcf_c diff --git a/particles/heroes/thtd_yoshika/ability_yoshika_02_d0.vpcf_c b/game/particles/heroes/thtd_yoshika/ability_yoshika_02_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yoshika/ability_yoshika_02_d0.vpcf_c rename to game/particles/heroes/thtd_yoshika/ability_yoshika_02_d0.vpcf_c diff --git a/particles/heroes/thtd_youmu/ability_youmu_01_laser.vpcf_c b/game/particles/heroes/thtd_youmu/ability_youmu_01_laser.vpcf_c similarity index 100% rename from particles/heroes/thtd_youmu/ability_youmu_01_laser.vpcf_c rename to game/particles/heroes/thtd_youmu/ability_youmu_01_laser.vpcf_c diff --git a/particles/heroes/thtd_youmu/ability_youmu_01_laser_b.vpcf_c b/game/particles/heroes/thtd_youmu/ability_youmu_01_laser_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_youmu/ability_youmu_01_laser_b.vpcf_c rename to game/particles/heroes/thtd_youmu/ability_youmu_01_laser_b.vpcf_c diff --git a/particles/heroes/thtd_youmu/ability_youmu_01_laser_c.vpcf_c b/game/particles/heroes/thtd_youmu/ability_youmu_01_laser_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_youmu/ability_youmu_01_laser_c.vpcf_c rename to game/particles/heroes/thtd_youmu/ability_youmu_01_laser_c.vpcf_c diff --git a/particles/heroes/thtd_youmu/ability_youmu_01_laser_d.vpcf_c b/game/particles/heroes/thtd_youmu/ability_youmu_01_laser_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_youmu/ability_youmu_01_laser_d.vpcf_c rename to game/particles/heroes/thtd_youmu/ability_youmu_01_laser_d.vpcf_c diff --git a/particles/heroes/thtd_youmu/ability_youmu_03_sword_light.vpcf_c b/game/particles/heroes/thtd_youmu/ability_youmu_03_sword_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_youmu/ability_youmu_03_sword_light.vpcf_c rename to game/particles/heroes/thtd_youmu/ability_youmu_03_sword_light.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_a.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_a.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_a.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_b.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_b.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_b.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_c.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_c.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_c.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_d.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_d.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_d.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_d0.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_d0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_d0.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_d0.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_d1.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_d1.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_d1.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_d1.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_d2.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_d2.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_d2.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_d2.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_d3.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_d3.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_d3.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_d3.vpcf_c diff --git a/particles/heroes/thtd_yuggi/ability_yuugi_03_d4.vpcf_c b/game/particles/heroes/thtd_yuggi/ability_yuugi_03_d4.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuggi/ability_yuugi_03_d4.vpcf_c rename to game/particles/heroes/thtd_yuggi/ability_yuugi_03_d4.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_door.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_door.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_door.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_door.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_door_a.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_door_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_door_a.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_door_a.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_door_a0.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_door_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_door_a0.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_door_a0.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_door_a1.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_door_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_door_a1.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_door_a1.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_spawn.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_spawn.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_spawn.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_spawn.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_spawn_a.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_spawn_a.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_a.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_spawn_b.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_spawn_b.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_b.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_spawn_b0.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_spawn_b0.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_b0.vpcf_c diff --git a/particles/heroes/thtd_yukari/ability_yukari_04_spawn_c.vpcf_c b/game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yukari/ability_yukari_04_spawn_c.vpcf_c rename to game/particles/heroes/thtd_yukari/ability_yukari_04_spawn_c.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a0.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a0.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a0.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a1.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a1.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a1.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a2.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a2.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a2.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a2.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a3.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a3.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a3.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a3.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a4.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a4.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a4.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a4.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a5.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a5.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a5.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a5.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_a6.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_a6.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_a6.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_a6.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_b.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_b.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_b.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_c.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_c.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_c.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_01_d.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_01_d.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_01_d.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_02.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_02.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_02.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_02.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_02_a.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_02_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_02_a.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_02_a.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_02_b.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_02_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_02_b.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_02_b.vpcf_c diff --git a/particles/heroes/thtd_yuugi/ability_yuugi_02_c.vpcf_c b/game/particles/heroes/thtd_yuugi/ability_yuugi_02_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuugi/ability_yuugi_02_c.vpcf_c rename to game/particles/heroes/thtd_yuugi/ability_yuugi_02_c.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_c.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_c.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_c.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_c0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_c0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_c0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_d.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_d.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_d.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_e.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_e.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_e.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_f.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_f.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_f.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_f0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_f0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_f0a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_f0a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_f0b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_f0b0a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_c0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_d.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_d.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_d.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_e.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_e.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_e.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_f0b0a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_g.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_g.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_g.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_h0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_i.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_i.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_i.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_j.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_j.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_j.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k1.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k1.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k1.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_k1.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_l.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_flower_l.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_flower_l.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_g.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_g.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_g.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_h.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_h.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_h.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_h.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_h0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_h0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_h0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_h0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_i.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_i.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_i.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_i.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_j.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_j.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_j.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_j.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_k.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_k.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_k.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_k.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_k0.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_k0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_k0.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_k0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_k1.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_k1.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_k1.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_k1.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_l.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_l.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_l.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_l.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_spawn.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_c.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_c.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_c.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_01_spawn_light_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_02_plant.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_02_plant.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_02_plant.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_02_plant.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_02_seed.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_02_seed.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_02_seed.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_02_seed.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_02_seed_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_02_seed_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_02_seed_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_02_seed_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_02_seed_b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_02_seed_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_02_seed_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_02_seed_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_03.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_03.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_03.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_03.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_03_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_03_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_03_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_03_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_03_b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_03_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_03_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_03_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_03_circle.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_03_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_03_circle.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_03_circle.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_03_circle_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_03_circle_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_03_circle_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_03_circle_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_a.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_b.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_c.vpcf_c b/game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_c.vpcf_c rename to game/particles/heroes/thtd_yuuka/ability_yuuka_04_spark_wind_c.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_a.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_a0.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_a0.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_a0.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_a1.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_a1.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_a1.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_a2.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_a2.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_a2.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_a2.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_a3.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_a3.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_a3.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_a3.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_a4.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_a4.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_a4.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_a4.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_b.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_b.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_b.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_circle.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_circle.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_circle.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_circle.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_circle_a.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_circle_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_circle_a.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_circle_a.vpcf_c diff --git a/particles/heroes/thtd_yuuka/yuuka_04_spark_light.vpcf_c b/game/particles/heroes/thtd_yuuka/yuuka_04_spark_light.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuuka/yuuka_04_spark_light.vpcf_c rename to game/particles/heroes/thtd_yuuka/yuuka_04_spark_light.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_01.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_01.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_01.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_01.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_01_a.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a0.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a0.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_01_a0.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a0.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a1.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a1.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_01_a1.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_01_a1.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04_a.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_a.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04_a.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_a.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04_b.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_b.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04_b.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_b.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04_c.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_c.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04_c.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_c.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04_d.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_d.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04_d.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_d.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04_e.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_e.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04_e.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_e.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04_f.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_f.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04_f.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_f.vpcf_c diff --git a/particles/heroes/thtd_yuyuko/ability_yuyuko_04_g.vpcf_c b/game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_g.vpcf_c similarity index 100% rename from particles/heroes/thtd_yuyuko/ability_yuyuko_04_g.vpcf_c rename to game/particles/heroes/thtd_yuyuko/ability_yuyuko_04_g.vpcf_c diff --git a/particles/heroes/youmu/youmu_01_blink_effect.vpcf_c b/game/particles/heroes/youmu/youmu_01_blink_effect.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_01_blink_effect.vpcf_c rename to game/particles/heroes/youmu/youmu_01_blink_effect.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_explosion.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_explosion.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_explosion.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_explosion.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_explosion_b.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_explosion_b.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_explosion_b.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_number.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_number.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_number.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_number.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_number_b.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_number_b.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_number_b.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_number_b.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_number_c.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_number_c.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_number_c.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_number_c.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_number_d.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_number_d.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_number_d.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_number_d.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_sword_light.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_sword_light.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_sword_light.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_sword_light.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_sword_light_b.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_sword_light_b.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_sword_light_b.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_sword_light_b.vpcf_c diff --git a/particles/heroes/youmu/youmu_02_effect_sword_light_c.vpcf_c b/game/particles/heroes/youmu/youmu_02_effect_sword_light_c.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_02_effect_sword_light_c.vpcf_c rename to game/particles/heroes/youmu/youmu_02_effect_sword_light_c.vpcf_c diff --git a/particles/heroes/youmu/youmu_04_blossoms_effect.vpcf_c b/game/particles/heroes/youmu/youmu_04_blossoms_effect.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_04_blossoms_effect.vpcf_c rename to game/particles/heroes/youmu/youmu_04_blossoms_effect.vpcf_c diff --git a/particles/heroes/youmu/youmu_04_blossoms_effect_light.vpcf_c b/game/particles/heroes/youmu/youmu_04_blossoms_effect_light.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_04_blossoms_effect_light.vpcf_c rename to game/particles/heroes/youmu/youmu_04_blossoms_effect_light.vpcf_c diff --git a/particles/heroes/youmu/youmu_04_circle.vpcf_c b/game/particles/heroes/youmu/youmu_04_circle.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_04_circle.vpcf_c rename to game/particles/heroes/youmu/youmu_04_circle.vpcf_c diff --git a/particles/heroes/youmu/youmu_04_circle_light.vpcf_c b/game/particles/heroes/youmu/youmu_04_circle_light.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_04_circle_light.vpcf_c rename to game/particles/heroes/youmu/youmu_04_circle_light.vpcf_c diff --git a/particles/heroes/youmu/youmu_04_sword_effect.vpcf_c b/game/particles/heroes/youmu/youmu_04_sword_effect.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_04_sword_effect.vpcf_c rename to game/particles/heroes/youmu/youmu_04_sword_effect.vpcf_c diff --git a/particles/heroes/youmu/youmu_04_sword_effect_light.vpcf_c b/game/particles/heroes/youmu/youmu_04_sword_effect_light.vpcf_c similarity index 100% rename from particles/heroes/youmu/youmu_04_sword_effect_light.vpcf_c rename to game/particles/heroes/youmu/youmu_04_sword_effect_light.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_body.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_body.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_body.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_body.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_down.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_down.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_down.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_down.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_down_1.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_down_1.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_down_1.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_down_1.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_down_2.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_down_2.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_down_2.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_down_2.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_down_5dust.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_down_5dust.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_down_5dust.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_down_5dust.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_down_5dust_grit.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_down_5dust_grit.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_down_5dust_grit.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_down_5dust_grit.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_down_5dust_sand.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_down_5dust_sand.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_down_5dust_sand.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_down_5dust_sand.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_effect_c.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_effect_c.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_effect_c.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_effect_c.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_effect_g.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_effect_g.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_effect_g.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_effect_g.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_effect_j.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_effect_j.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_effect_j.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_effect_j.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_effect_l.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_effect_l.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_effect_l.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_effect_l.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_effect_m.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_effect_m.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_effect_m.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_effect_m.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_end.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_end.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_end.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_end.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_end_mana_flash.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_end_mana_flash.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_end_mana_flash.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_end_mana_flash.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_flare.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_flare.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_flare.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_flare.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_warp.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_warp.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_warp.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_end_top_warp.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_flash_lght.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_flash_lght.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_flash_lght.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_flash_lght.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_g.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_g.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_g.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_g.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_h.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_h.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_h.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_h.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_i.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_i.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_i.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_i.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_l.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_l.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_l.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_l.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_n.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_n.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_n.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_n.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_02_vortex_2_o.vpcf_c b/game/particles/heroes/yukari/ability_yukari_02_vortex_2_o.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_02_vortex_2_o.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_02_vortex_2_o.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleport_light.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleport_light.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleport_light.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleport_light.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleport_light_core.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleport_light_core.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleport_light_core.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleport_light_core.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleport_light_e.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleport_light_e.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleport_light_e.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleport_light_e.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleport_light_end.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleport_light_end.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleport_light_end.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleport_light_end.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleport_light_f.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleport_light_f.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleport_light_f.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleport_light_f.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleport_light_j.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleport_light_j.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleport_light_j.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleport_light_j.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleport_light_k.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleport_light_k.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleport_light_k.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleport_light_k.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleportdrop.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleportdrop.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleportdrop.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleportdrop.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleportflash.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleportflash.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleportflash.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleportflash.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleportflash2.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleportflash2.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleportflash2.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleportflash2.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleportflash2_flash.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleportflash2_flash.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleportflash2_flash.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleportflash2_flash.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleportflash2_glow.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleportflash2_glow.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleportflash2_glow.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleportflash2_glow.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_03_teleportglow.vpcf_c b/game/particles/heroes/yukari/ability_yukari_03_teleportglow.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_03_teleportglow.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_03_teleportglow.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_boom.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_boom.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_boom.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_boom.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_boom_a.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_boom_a.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_boom_a.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_boom_a.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_boom_b.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_boom_b.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_boom_b.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_boom_b.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_boom_c.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_boom_c.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_boom_c.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_boom_c.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_boom_c0.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_boom_c0.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_boom_c0.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_boom_c0.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_boom_c1.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_boom_c1.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_boom_c1.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_boom_c1.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_effect.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_effect.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_effect.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_effect.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_effect_a.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_effect_a.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_effect_a.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_effect_a.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_effect_a0.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_effect_a0.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_effect_a0.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_effect_a0.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_effect_b.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_effect_b.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_effect_b.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_effect_b.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_effect_d.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_effect_d.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_effect_d.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_effect_d.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_magical.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_magical.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_magical.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_magical.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_magical_b.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_magical_b.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_magical_b.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_magical_b.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_magical_c.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_magical_c.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_magical_c.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_magical_c.vpcf_c diff --git a/particles/heroes/yukari/ability_yukari_04_magical_end.vpcf_c b/game/particles/heroes/yukari/ability_yukari_04_magical_end.vpcf_c similarity index 100% rename from particles/heroes/yukari/ability_yukari_04_magical_end.vpcf_c rename to game/particles/heroes/yukari/ability_yukari_04_magical_end.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_a0.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_a0.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_a0.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_a0.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_b.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_b.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_b.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_b.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_c.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_c.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_c.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_c.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_d.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_d.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_d.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_d.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a0.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a0.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a0.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a0.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a1.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a1.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a1.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a1.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a2.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a2.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a2.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a2.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a3.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a3.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a3.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a3.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a4.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a4.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a4.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a4.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a4a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a4a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a4a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a4a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a4a0.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a4a0.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a4a0.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a4a0.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a4a0a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a4a0a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a4a0a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a4a0a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a5.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a5.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a5.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a5.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_01_ground_a6.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_01_ground_a6.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_01_ground_a6.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_01_ground_a6.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_explosion.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_explosion.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_explosion.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_explosion.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_explosion_a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_explosion_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_explosion_a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_explosion_a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_explosion_b.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_explosion_b.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_explosion_b.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_explosion_b.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_explosion_c.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_explosion_c.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_explosion_c.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_explosion_c.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_explosion_d.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_explosion_d.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_explosion_d.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_explosion_d.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_explosion_e.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_explosion_e.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_explosion_e.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_explosion_e.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_unit.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_unit.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_unit.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_unit.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_unit_a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_unit_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_unit_a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_unit_a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_unit_b.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_unit_b.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_unit_b.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_unit_b.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_03_unit_c.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_03_unit_c.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_03_unit_c.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_03_unit_c.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_b.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_b.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_b.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_b.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_c.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_c.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_c.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_c.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_d.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_d.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_d.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_d.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_e.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_e.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_e.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_e.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_exolosion.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_exolosion.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_exolosion.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_exolosion.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_exolosion_a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_exolosion_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_exolosion_a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_exolosion_a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_exolosion_b.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_exolosion_b.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_exolosion_b.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_exolosion_b.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_exolosion_c.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_exolosion_c.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_exolosion_c.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_exolosion_c.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_explosion_2.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_explosion_2.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_explosion_2.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_explosion_2.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_explosion_2_a.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_explosion_2_a.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_a.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_explosion_2_b.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_b.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_explosion_2_b.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_b.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_explosion_2_c.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_c.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_explosion_2_c.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_c.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_explosion_2_d.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_d.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_explosion_2_d.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_d.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_explosion_2_e.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_e.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_explosion_2_e.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_explosion_2_e.vpcf_c diff --git a/particles/heroes/yumemi/ability_yumemi_04_f.vpcf_c b/game/particles/heroes/yumemi/ability_yumemi_04_f.vpcf_c similarity index 100% rename from particles/heroes/yumemi/ability_yumemi_04_f.vpcf_c rename to game/particles/heroes/yumemi/ability_yumemi_04_f.vpcf_c diff --git a/particles/heroes/yumemi/yumemi_base_attack.vpcf_c b/game/particles/heroes/yumemi/yumemi_base_attack.vpcf_c similarity index 100% rename from particles/heroes/yumemi/yumemi_base_attack.vpcf_c rename to game/particles/heroes/yumemi/yumemi_base_attack.vpcf_c diff --git a/particles/heroes/yumemi/yumemi_base_attack_a.vpcf_c b/game/particles/heroes/yumemi/yumemi_base_attack_a.vpcf_c similarity index 100% rename from particles/heroes/yumemi/yumemi_base_attack_a.vpcf_c rename to game/particles/heroes/yumemi/yumemi_base_attack_a.vpcf_c diff --git a/particles/heroes/yumemi/yumemi_base_attack_a0.vpcf_c b/game/particles/heroes/yumemi/yumemi_base_attack_a0.vpcf_c similarity index 100% rename from particles/heroes/yumemi/yumemi_base_attack_a0.vpcf_c rename to game/particles/heroes/yumemi/yumemi_base_attack_a0.vpcf_c diff --git a/particles/heroes/yumemi/yumemi_base_attack_b.vpcf_c b/game/particles/heroes/yumemi/yumemi_base_attack_b.vpcf_c similarity index 100% rename from particles/heroes/yumemi/yumemi_base_attack_b.vpcf_c rename to game/particles/heroes/yumemi/yumemi_base_attack_b.vpcf_c diff --git a/particles/heroes/yumemi/yumemi_base_attack_c.vpcf_c b/game/particles/heroes/yumemi/yumemi_base_attack_c.vpcf_c similarity index 100% rename from particles/heroes/yumemi/yumemi_base_attack_c.vpcf_c rename to game/particles/heroes/yumemi/yumemi_base_attack_c.vpcf_c diff --git a/particles/heroes/yuuka/ability_yuuka_03.vpcf_c b/game/particles/heroes/yuuka/ability_yuuka_03.vpcf_c similarity index 100% rename from particles/heroes/yuuka/ability_yuuka_03.vpcf_c rename to game/particles/heroes/yuuka/ability_yuuka_03.vpcf_c diff --git a/particles/heroes/yuuka/ability_yuuka_03_a.vpcf_c b/game/particles/heroes/yuuka/ability_yuuka_03_a.vpcf_c similarity index 100% rename from particles/heroes/yuuka/ability_yuuka_03_a.vpcf_c rename to game/particles/heroes/yuuka/ability_yuuka_03_a.vpcf_c diff --git a/particles/heroes/yuuka/ability_yuuka_03_b.vpcf_c b/game/particles/heroes/yuuka/ability_yuuka_03_b.vpcf_c similarity index 100% rename from particles/heroes/yuuka/ability_yuuka_03_b.vpcf_c rename to game/particles/heroes/yuuka/ability_yuuka_03_b.vpcf_c diff --git a/particles/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c b/game/particles/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c similarity index 100% rename from particles/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c rename to game/particles/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c diff --git a/particles/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c b/game/particles/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c similarity index 100% rename from particles/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c rename to game/particles/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c diff --git a/particles/heroes/yuyuko/ability_yuyuko_04_effect_b.vpcf_c b/game/particles/heroes/yuyuko/ability_yuyuko_04_effect_b.vpcf_c similarity index 100% rename from particles/heroes/yuyuko/ability_yuyuko_04_effect_b.vpcf_c rename to game/particles/heroes/yuyuko/ability_yuyuko_04_effect_b.vpcf_c diff --git a/particles/heroes/yuyuko/ability_yuyuko_04_effect_c.vpcf_c b/game/particles/heroes/yuyuko/ability_yuyuko_04_effect_c.vpcf_c similarity index 100% rename from particles/heroes/yuyuko/ability_yuyuko_04_effect_c.vpcf_c rename to game/particles/heroes/yuyuko/ability_yuyuko_04_effect_c.vpcf_c diff --git a/particles/heroes/yuyuko/ability_yuyuko_04_effect_d.vpcf_c b/game/particles/heroes/yuyuko/ability_yuyuko_04_effect_d.vpcf_c similarity index 100% rename from particles/heroes/yuyuko/ability_yuyuko_04_effect_d.vpcf_c rename to game/particles/heroes/yuyuko/ability_yuyuko_04_effect_d.vpcf_c diff --git a/particles/heroes/yuyuko/ability_yuyuko_04_effect_e.vpcf_c b/game/particles/heroes/yuyuko/ability_yuyuko_04_effect_e.vpcf_c similarity index 100% rename from particles/heroes/yuyuko/ability_yuyuko_04_effect_e.vpcf_c rename to game/particles/heroes/yuyuko/ability_yuyuko_04_effect_e.vpcf_c diff --git a/particles/heroes/yuyuko/ability_yuyuko_04_effect_f.vpcf_c b/game/particles/heroes/yuyuko/ability_yuyuko_04_effect_f.vpcf_c similarity index 100% rename from particles/heroes/yuyuko/ability_yuyuko_04_effect_f.vpcf_c rename to game/particles/heroes/yuyuko/ability_yuyuko_04_effect_f.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_coins.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_coins.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_coins.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_coins.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_energy.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_energy.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_energy.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_energy.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_eye.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_eye.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_eye.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_eye.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_eye_twinkle.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_eye_twinkle.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_eye_twinkle.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_eye_twinkle.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_gold_glow.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_gold_glow.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_gold_glow.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_gold_glow.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_gold_highlight.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_gold_highlight.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_gold_highlight.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_gold_highlight.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_gold_twinkle.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_gold_twinkle.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_gold_twinkle.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_gold_twinkle.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_magic.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_magic.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_magic.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_magic.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_shine.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_shine.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_shine.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_shine.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_soft_smoke.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_soft_smoke.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_soft_smoke.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_soft_smoke.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_trail.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_trail.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_trail.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_trail.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_3_twinkle.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_3_twinkle.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_3_twinkle.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_3_twinkle.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_fx_2.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_fx_2.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_fx_2.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_fx_2.vpcf_c diff --git a/particles/imagine_assets/courier_fx/courier_status_effect_effigy_gold_01.vpcf_c b/game/particles/imagine_assets/courier_fx/courier_status_effect_effigy_gold_01.vpcf_c similarity index 100% rename from particles/imagine_assets/courier_fx/courier_status_effect_effigy_gold_01.vpcf_c rename to game/particles/imagine_assets/courier_fx/courier_status_effect_effigy_gold_01.vpcf_c diff --git a/particles/items2_fx/skadi_projectile_copy.vpcf_c b/game/particles/items2_fx/skadi_projectile_copy.vpcf_c similarity index 100% rename from particles/items2_fx/skadi_projectile_copy.vpcf_c rename to game/particles/items2_fx/skadi_projectile_copy.vpcf_c diff --git a/particles/items2_fx/skadi_projectile_explosion_flakes.vpcf_c b/game/particles/items2_fx/skadi_projectile_explosion_flakes.vpcf_c similarity index 100% rename from particles/items2_fx/skadi_projectile_explosion_flakes.vpcf_c rename to game/particles/items2_fx/skadi_projectile_explosion_flakes.vpcf_c diff --git a/particles/items2_fx/skadi_projectile_trail.vpcf_c b/game/particles/items2_fx/skadi_projectile_trail.vpcf_c similarity index 100% rename from particles/items2_fx/skadi_projectile_trail.vpcf_c rename to game/particles/items2_fx/skadi_projectile_trail.vpcf_c diff --git a/particles/items2_fx/skadi_projectile_trail_bits.vpcf_c b/game/particles/items2_fx/skadi_projectile_trail_bits.vpcf_c similarity index 100% rename from particles/items2_fx/skadi_projectile_trail_bits.vpcf_c rename to game/particles/items2_fx/skadi_projectile_trail_bits.vpcf_c diff --git a/particles/items2_fx/skadi_projectile_trail_glow.vpcf_c b/game/particles/items2_fx/skadi_projectile_trail_glow.vpcf_c similarity index 100% rename from particles/items2_fx/skadi_projectile_trail_glow.vpcf_c rename to game/particles/items2_fx/skadi_projectile_trail_glow.vpcf_c diff --git a/particles/jugg_weapon_glow_variation_jade.vpcf_c b/game/particles/jugg_weapon_glow_variation_jade.vpcf_c similarity index 100% rename from particles/jugg_weapon_glow_variation_jade.vpcf_c rename to game/particles/jugg_weapon_glow_variation_jade.vpcf_c diff --git a/particles/models/td/card_bar_fx.vsnap_c b/game/particles/models/td/card_bar_fx.vsnap_c similarity index 100% rename from particles/models/td/card_bar_fx.vsnap_c rename to game/particles/models/td/card_bar_fx.vsnap_c diff --git a/particles/msg_fx/msg_poison.vpcf_c b/game/particles/msg_fx/msg_poison.vpcf_c similarity index 100% rename from particles/msg_fx/msg_poison.vpcf_c rename to game/particles/msg_fx/msg_poison.vpcf_c diff --git a/particles/new/ranged_siege_bad.vpcf_c b/game/particles/new/ranged_siege_bad.vpcf_c similarity index 100% rename from particles/new/ranged_siege_bad.vpcf_c rename to game/particles/new/ranged_siege_bad.vpcf_c diff --git a/particles/new/ranged_siege_explosion.vpcf_c b/game/particles/new/ranged_siege_explosion.vpcf_c similarity index 100% rename from particles/new/ranged_siege_explosion.vpcf_c rename to game/particles/new/ranged_siege_explosion.vpcf_c diff --git a/particles/new/ranged_siege_explosion_flash_b.vpcf_c b/game/particles/new/ranged_siege_explosion_flash_b.vpcf_c similarity index 100% rename from particles/new/ranged_siege_explosion_flash_b.vpcf_c rename to game/particles/new/ranged_siege_explosion_flash_b.vpcf_c diff --git a/particles/new/ranged_siege_explosion_flash_c.vpcf_c b/game/particles/new/ranged_siege_explosion_flash_c.vpcf_c similarity index 100% rename from particles/new/ranged_siege_explosion_flash_c.vpcf_c rename to game/particles/new/ranged_siege_explosion_flash_c.vpcf_c diff --git a/particles/new/ranged_siege_model.vpcf_c b/game/particles/new/ranged_siege_model.vpcf_c similarity index 100% rename from particles/new/ranged_siege_model.vpcf_c rename to game/particles/new/ranged_siege_model.vpcf_c diff --git a/particles/particles/imagine_assets/courier_fx/rainbow_tail.vpcf_c b/game/particles/particles/imagine_assets/courier_fx/rainbow_tail.vpcf_c similarity index 100% rename from particles/particles/imagine_assets/courier_fx/rainbow_tail.vpcf_c rename to game/particles/particles/imagine_assets/courier_fx/rainbow_tail.vpcf_c diff --git a/particles/particles/imagine_assets/courier_fx/rainbow_tail_b.vpcf_c b/game/particles/particles/imagine_assets/courier_fx/rainbow_tail_b.vpcf_c similarity index 100% rename from particles/particles/imagine_assets/courier_fx/rainbow_tail_b.vpcf_c rename to game/particles/particles/imagine_assets/courier_fx/rainbow_tail_b.vpcf_c diff --git a/particles/particles/imagine_assets/courier_fx/rainbow_tail_d.vpcf_c b/game/particles/particles/imagine_assets/courier_fx/rainbow_tail_d.vpcf_c similarity index 100% rename from particles/particles/imagine_assets/courier_fx/rainbow_tail_d.vpcf_c rename to game/particles/particles/imagine_assets/courier_fx/rainbow_tail_d.vpcf_c diff --git a/particles/particles/imagine_assets/courier_fx/rainbow_tail_e.vpcf_c b/game/particles/particles/imagine_assets/courier_fx/rainbow_tail_e.vpcf_c similarity index 100% rename from particles/particles/imagine_assets/courier_fx/rainbow_tail_e.vpcf_c rename to game/particles/particles/imagine_assets/courier_fx/rainbow_tail_e.vpcf_c diff --git a/particles/particles/imagine_assets/courier_fx/rainbow_tail_g.vpcf_c b/game/particles/particles/imagine_assets/courier_fx/rainbow_tail_g.vpcf_c similarity index 100% rename from particles/particles/imagine_assets/courier_fx/rainbow_tail_g.vpcf_c rename to game/particles/particles/imagine_assets/courier_fx/rainbow_tail_g.vpcf_c diff --git a/particles/particles/imagine_assets/courier_fx/rainbow_tail_i.vpcf_c b/game/particles/particles/imagine_assets/courier_fx/rainbow_tail_i.vpcf_c similarity index 100% rename from particles/particles/imagine_assets/courier_fx/rainbow_tail_i.vpcf_c rename to game/particles/particles/imagine_assets/courier_fx/rainbow_tail_i.vpcf_c diff --git a/particles/portraits/alice/thtd_alice_portraits.vpcf_c b/game/particles/portraits/alice/thtd_alice_portraits.vpcf_c similarity index 100% rename from particles/portraits/alice/thtd_alice_portraits.vpcf_c rename to game/particles/portraits/alice/thtd_alice_portraits.vpcf_c diff --git a/particles/portraits/alice/thtd_alice_portraits_a.vpcf_c b/game/particles/portraits/alice/thtd_alice_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/alice/thtd_alice_portraits_a.vpcf_c rename to game/particles/portraits/alice/thtd_alice_portraits_a.vpcf_c diff --git a/particles/portraits/aya/thtd_aya_portraits.vpcf_c b/game/particles/portraits/aya/thtd_aya_portraits.vpcf_c similarity index 100% rename from particles/portraits/aya/thtd_aya_portraits.vpcf_c rename to game/particles/portraits/aya/thtd_aya_portraits.vpcf_c diff --git a/particles/portraits/aya/thtd_aya_portraits_a.vpcf_c b/game/particles/portraits/aya/thtd_aya_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/aya/thtd_aya_portraits_a.vpcf_c rename to game/particles/portraits/aya/thtd_aya_portraits_a.vpcf_c diff --git a/particles/portraits/byakuren/thtd_byakuren_portraits.vpcf_c b/game/particles/portraits/byakuren/thtd_byakuren_portraits.vpcf_c similarity index 100% rename from particles/portraits/byakuren/thtd_byakuren_portraits.vpcf_c rename to game/particles/portraits/byakuren/thtd_byakuren_portraits.vpcf_c diff --git a/particles/portraits/byakuren/thtd_byakuren_portraits_a.vpcf_c b/game/particles/portraits/byakuren/thtd_byakuren_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/byakuren/thtd_byakuren_portraits_a.vpcf_c rename to game/particles/portraits/byakuren/thtd_byakuren_portraits_a.vpcf_c diff --git a/particles/portraits/chen/thtd_chen_portraits.vpcf_c b/game/particles/portraits/chen/thtd_chen_portraits.vpcf_c similarity index 100% rename from particles/portraits/chen/thtd_chen_portraits.vpcf_c rename to game/particles/portraits/chen/thtd_chen_portraits.vpcf_c diff --git a/particles/portraits/chen/thtd_chen_portraits_a.vpcf_c b/game/particles/portraits/chen/thtd_chen_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/chen/thtd_chen_portraits_a.vpcf_c rename to game/particles/portraits/chen/thtd_chen_portraits_a.vpcf_c diff --git a/particles/portraits/cirno/thtd_cirno_portraits.vpcf_c b/game/particles/portraits/cirno/thtd_cirno_portraits.vpcf_c similarity index 100% rename from particles/portraits/cirno/thtd_cirno_portraits.vpcf_c rename to game/particles/portraits/cirno/thtd_cirno_portraits.vpcf_c diff --git a/particles/portraits/cirno/thtd_cirno_portraits_a.vpcf_c b/game/particles/portraits/cirno/thtd_cirno_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/cirno/thtd_cirno_portraits_a.vpcf_c rename to game/particles/portraits/cirno/thtd_cirno_portraits_a.vpcf_c diff --git a/particles/portraits/clownpiece/thtd_clownpiece_portraits.vpcf_c b/game/particles/portraits/clownpiece/thtd_clownpiece_portraits.vpcf_c similarity index 100% rename from particles/portraits/clownpiece/thtd_clownpiece_portraits.vpcf_c rename to game/particles/portraits/clownpiece/thtd_clownpiece_portraits.vpcf_c diff --git a/particles/portraits/clownpiece/thtd_clownpiece_portraits_a.vpcf_c b/game/particles/portraits/clownpiece/thtd_clownpiece_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/clownpiece/thtd_clownpiece_portraits_a.vpcf_c rename to game/particles/portraits/clownpiece/thtd_clownpiece_portraits_a.vpcf_c diff --git a/particles/portraits/daiyousei/thtd_daiyousei_portraits.vpcf_c b/game/particles/portraits/daiyousei/thtd_daiyousei_portraits.vpcf_c similarity index 100% rename from particles/portraits/daiyousei/thtd_daiyousei_portraits.vpcf_c rename to game/particles/portraits/daiyousei/thtd_daiyousei_portraits.vpcf_c diff --git a/particles/portraits/daiyousei/thtd_daiyousei_portraits_a.vpcf_c b/game/particles/portraits/daiyousei/thtd_daiyousei_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/daiyousei/thtd_daiyousei_portraits_a.vpcf_c rename to game/particles/portraits/daiyousei/thtd_daiyousei_portraits_a.vpcf_c diff --git a/particles/portraits/eirin/thtd_eirin_portraits.vpcf_c b/game/particles/portraits/eirin/thtd_eirin_portraits.vpcf_c similarity index 100% rename from particles/portraits/eirin/thtd_eirin_portraits.vpcf_c rename to game/particles/portraits/eirin/thtd_eirin_portraits.vpcf_c diff --git a/particles/portraits/eirin/thtd_eirin_portraits_a.vpcf_c b/game/particles/portraits/eirin/thtd_eirin_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/eirin/thtd_eirin_portraits_a.vpcf_c rename to game/particles/portraits/eirin/thtd_eirin_portraits_a.vpcf_c diff --git a/particles/portraits/elly/thtd_elly_portraits.vpcf_c b/game/particles/portraits/elly/thtd_elly_portraits.vpcf_c similarity index 100% rename from particles/portraits/elly/thtd_elly_portraits.vpcf_c rename to game/particles/portraits/elly/thtd_elly_portraits.vpcf_c diff --git a/particles/portraits/elly/thtd_elly_portraits_a.vpcf_c b/game/particles/portraits/elly/thtd_elly_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/elly/thtd_elly_portraits_a.vpcf_c rename to game/particles/portraits/elly/thtd_elly_portraits_a.vpcf_c diff --git a/particles/portraits/flandre/thtd_flandre_portraits.vpcf_c b/game/particles/portraits/flandre/thtd_flandre_portraits.vpcf_c similarity index 100% rename from particles/portraits/flandre/thtd_flandre_portraits.vpcf_c rename to game/particles/portraits/flandre/thtd_flandre_portraits.vpcf_c diff --git a/particles/portraits/flandre/thtd_flandre_portraits_a.vpcf_c b/game/particles/portraits/flandre/thtd_flandre_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/flandre/thtd_flandre_portraits_a.vpcf_c rename to game/particles/portraits/flandre/thtd_flandre_portraits_a.vpcf_c diff --git a/particles/portraits/futo/thtd_futo_portraits.vpcf_c b/game/particles/portraits/futo/thtd_futo_portraits.vpcf_c similarity index 100% rename from particles/portraits/futo/thtd_futo_portraits.vpcf_c rename to game/particles/portraits/futo/thtd_futo_portraits.vpcf_c diff --git a/particles/portraits/futo/thtd_futo_portraits_a.vpcf_c b/game/particles/portraits/futo/thtd_futo_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/futo/thtd_futo_portraits_a.vpcf_c rename to game/particles/portraits/futo/thtd_futo_portraits_a.vpcf_c diff --git a/particles/portraits/gengetu/thtd_gengetu_portraits.vpcf_c b/game/particles/portraits/gengetu/thtd_gengetu_portraits.vpcf_c similarity index 100% rename from particles/portraits/gengetu/thtd_gengetu_portraits.vpcf_c rename to game/particles/portraits/gengetu/thtd_gengetu_portraits.vpcf_c diff --git a/particles/portraits/gengetu/thtd_gengetu_portraits_a.vpcf_c b/game/particles/portraits/gengetu/thtd_gengetu_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/gengetu/thtd_gengetu_portraits_a.vpcf_c rename to game/particles/portraits/gengetu/thtd_gengetu_portraits_a.vpcf_c diff --git a/particles/portraits/hatate/thtd_hatate_portraits.vpcf_c b/game/particles/portraits/hatate/thtd_hatate_portraits.vpcf_c similarity index 100% rename from particles/portraits/hatate/thtd_hatate_portraits.vpcf_c rename to game/particles/portraits/hatate/thtd_hatate_portraits.vpcf_c diff --git a/particles/portraits/hatate/thtd_hatate_portraits_a.vpcf_c b/game/particles/portraits/hatate/thtd_hatate_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/hatate/thtd_hatate_portraits_a.vpcf_c rename to game/particles/portraits/hatate/thtd_hatate_portraits_a.vpcf_c diff --git a/particles/portraits/hecatia/thtd_hecatia_portraits.vpcf_c b/game/particles/portraits/hecatia/thtd_hecatia_portraits.vpcf_c similarity index 100% rename from particles/portraits/hecatia/thtd_hecatia_portraits.vpcf_c rename to game/particles/portraits/hecatia/thtd_hecatia_portraits.vpcf_c diff --git a/particles/portraits/hecatia/thtd_hecatia_portraits_a.vpcf_c b/game/particles/portraits/hecatia/thtd_hecatia_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/hecatia/thtd_hecatia_portraits_a.vpcf_c rename to game/particles/portraits/hecatia/thtd_hecatia_portraits_a.vpcf_c diff --git a/particles/portraits/hina/thtd_hina_portraits.vpcf_c b/game/particles/portraits/hina/thtd_hina_portraits.vpcf_c similarity index 100% rename from particles/portraits/hina/thtd_hina_portraits.vpcf_c rename to game/particles/portraits/hina/thtd_hina_portraits.vpcf_c diff --git a/particles/portraits/hina/thtd_hina_portraits_a.vpcf_c b/game/particles/portraits/hina/thtd_hina_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/hina/thtd_hina_portraits_a.vpcf_c rename to game/particles/portraits/hina/thtd_hina_portraits_a.vpcf_c diff --git a/particles/portraits/iku/thtd_iku_portraits.vpcf_c b/game/particles/portraits/iku/thtd_iku_portraits.vpcf_c similarity index 100% rename from particles/portraits/iku/thtd_iku_portraits.vpcf_c rename to game/particles/portraits/iku/thtd_iku_portraits.vpcf_c diff --git a/particles/portraits/iku/thtd_iku_portraits_a.vpcf_c b/game/particles/portraits/iku/thtd_iku_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/iku/thtd_iku_portraits_a.vpcf_c rename to game/particles/portraits/iku/thtd_iku_portraits_a.vpcf_c diff --git a/particles/portraits/inaba/thtd_inaba_portraits.vpcf_c b/game/particles/portraits/inaba/thtd_inaba_portraits.vpcf_c similarity index 100% rename from particles/portraits/inaba/thtd_inaba_portraits.vpcf_c rename to game/particles/portraits/inaba/thtd_inaba_portraits.vpcf_c diff --git a/particles/portraits/inaba/thtd_inaba_portraits_a.vpcf_c b/game/particles/portraits/inaba/thtd_inaba_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/inaba/thtd_inaba_portraits_a.vpcf_c rename to game/particles/portraits/inaba/thtd_inaba_portraits_a.vpcf_c diff --git a/particles/portraits/junko/thtd_junko_portraits.vpcf_c b/game/particles/portraits/junko/thtd_junko_portraits.vpcf_c similarity index 100% rename from particles/portraits/junko/thtd_junko_portraits.vpcf_c rename to game/particles/portraits/junko/thtd_junko_portraits.vpcf_c diff --git a/particles/portraits/junko/thtd_junko_portraits_a.vpcf_c b/game/particles/portraits/junko/thtd_junko_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/junko/thtd_junko_portraits_a.vpcf_c rename to game/particles/portraits/junko/thtd_junko_portraits_a.vpcf_c diff --git a/particles/portraits/kagerou/thtd_kagerou_portraits.vpcf_c b/game/particles/portraits/kagerou/thtd_kagerou_portraits.vpcf_c similarity index 100% rename from particles/portraits/kagerou/thtd_kagerou_portraits.vpcf_c rename to game/particles/portraits/kagerou/thtd_kagerou_portraits.vpcf_c diff --git a/particles/portraits/kagerou/thtd_kagerou_portraits_a.vpcf_c b/game/particles/portraits/kagerou/thtd_kagerou_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kagerou/thtd_kagerou_portraits_a.vpcf_c rename to game/particles/portraits/kagerou/thtd_kagerou_portraits_a.vpcf_c diff --git a/particles/portraits/kaguya/thtd_kaguya_portraits.vpcf_c b/game/particles/portraits/kaguya/thtd_kaguya_portraits.vpcf_c similarity index 100% rename from particles/portraits/kaguya/thtd_kaguya_portraits.vpcf_c rename to game/particles/portraits/kaguya/thtd_kaguya_portraits.vpcf_c diff --git a/particles/portraits/kaguya/thtd_kaguya_portraits_a.vpcf_c b/game/particles/portraits/kaguya/thtd_kaguya_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kaguya/thtd_kaguya_portraits_a.vpcf_c rename to game/particles/portraits/kaguya/thtd_kaguya_portraits_a.vpcf_c diff --git a/particles/portraits/kanako/thtd_kanako_portraits.vpcf_c b/game/particles/portraits/kanako/thtd_kanako_portraits.vpcf_c similarity index 100% rename from particles/portraits/kanako/thtd_kanako_portraits.vpcf_c rename to game/particles/portraits/kanako/thtd_kanako_portraits.vpcf_c diff --git a/particles/portraits/kanako/thtd_kanako_portraits_a.vpcf_c b/game/particles/portraits/kanako/thtd_kanako_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kanako/thtd_kanako_portraits_a.vpcf_c rename to game/particles/portraits/kanako/thtd_kanako_portraits_a.vpcf_c diff --git a/particles/portraits/keine/thtd_keine_portraits.vpcf_c b/game/particles/portraits/keine/thtd_keine_portraits.vpcf_c similarity index 100% rename from particles/portraits/keine/thtd_keine_portraits.vpcf_c rename to game/particles/portraits/keine/thtd_keine_portraits.vpcf_c diff --git a/particles/portraits/keine/thtd_keine_portraits_a.vpcf_c b/game/particles/portraits/keine/thtd_keine_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/keine/thtd_keine_portraits_a.vpcf_c rename to game/particles/portraits/keine/thtd_keine_portraits_a.vpcf_c diff --git a/particles/portraits/kishin/thtd_kishin_portraits.vpcf_c b/game/particles/portraits/kishin/thtd_kishin_portraits.vpcf_c similarity index 100% rename from particles/portraits/kishin/thtd_kishin_portraits.vpcf_c rename to game/particles/portraits/kishin/thtd_kishin_portraits.vpcf_c diff --git a/particles/portraits/kishin/thtd_kishin_portraits_a.vpcf_c b/game/particles/portraits/kishin/thtd_kishin_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kishin/thtd_kishin_portraits_a.vpcf_c rename to game/particles/portraits/kishin/thtd_kishin_portraits_a.vpcf_c diff --git a/particles/portraits/kisume/thtd_kisume_portraits.vpcf_c b/game/particles/portraits/kisume/thtd_kisume_portraits.vpcf_c similarity index 100% rename from particles/portraits/kisume/thtd_kisume_portraits.vpcf_c rename to game/particles/portraits/kisume/thtd_kisume_portraits.vpcf_c diff --git a/particles/portraits/kisume/thtd_kisume_portraits_a.vpcf_c b/game/particles/portraits/kisume/thtd_kisume_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kisume/thtd_kisume_portraits_a.vpcf_c rename to game/particles/portraits/kisume/thtd_kisume_portraits_a.vpcf_c diff --git a/particles/portraits/koakuma/thtd_koakuma_portraits.vpcf_c b/game/particles/portraits/koakuma/thtd_koakuma_portraits.vpcf_c similarity index 100% rename from particles/portraits/koakuma/thtd_koakuma_portraits.vpcf_c rename to game/particles/portraits/koakuma/thtd_koakuma_portraits.vpcf_c diff --git a/particles/portraits/koakuma/thtd_koakuma_portraits_a.vpcf_c b/game/particles/portraits/koakuma/thtd_koakuma_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/koakuma/thtd_koakuma_portraits_a.vpcf_c rename to game/particles/portraits/koakuma/thtd_koakuma_portraits_a.vpcf_c diff --git a/particles/portraits/kogasa/thtd_kogasa_portraits.vpcf_c b/game/particles/portraits/kogasa/thtd_kogasa_portraits.vpcf_c similarity index 100% rename from particles/portraits/kogasa/thtd_kogasa_portraits.vpcf_c rename to game/particles/portraits/kogasa/thtd_kogasa_portraits.vpcf_c diff --git a/particles/portraits/kogasa/thtd_kogasa_portraits_a.vpcf_c b/game/particles/portraits/kogasa/thtd_kogasa_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kogasa/thtd_kogasa_portraits_a.vpcf_c rename to game/particles/portraits/kogasa/thtd_kogasa_portraits_a.vpcf_c diff --git a/particles/portraits/koishi/thtd_koishi_portraits.vpcf_c b/game/particles/portraits/koishi/thtd_koishi_portraits.vpcf_c similarity index 100% rename from particles/portraits/koishi/thtd_koishi_portraits.vpcf_c rename to game/particles/portraits/koishi/thtd_koishi_portraits.vpcf_c diff --git a/particles/portraits/koishi/thtd_koishi_portraits_a.vpcf_c b/game/particles/portraits/koishi/thtd_koishi_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/koishi/thtd_koishi_portraits_a.vpcf_c rename to game/particles/portraits/koishi/thtd_koishi_portraits_a.vpcf_c diff --git a/particles/portraits/kokoro/thtd_kokoro_portraits.vpcf_c b/game/particles/portraits/kokoro/thtd_kokoro_portraits.vpcf_c similarity index 100% rename from particles/portraits/kokoro/thtd_kokoro_portraits.vpcf_c rename to game/particles/portraits/kokoro/thtd_kokoro_portraits.vpcf_c diff --git a/particles/portraits/kokoro/thtd_kokoro_portraits_a.vpcf_c b/game/particles/portraits/kokoro/thtd_kokoro_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kokoro/thtd_kokoro_portraits_a.vpcf_c rename to game/particles/portraits/kokoro/thtd_kokoro_portraits_a.vpcf_c diff --git a/particles/portraits/komachi/thtd_komachi_portraits.vpcf_c b/game/particles/portraits/komachi/thtd_komachi_portraits.vpcf_c similarity index 100% rename from particles/portraits/komachi/thtd_komachi_portraits.vpcf_c rename to game/particles/portraits/komachi/thtd_komachi_portraits.vpcf_c diff --git a/particles/portraits/komachi/thtd_komachi_portraits_a.vpcf_c b/game/particles/portraits/komachi/thtd_komachi_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/komachi/thtd_komachi_portraits_a.vpcf_c rename to game/particles/portraits/komachi/thtd_komachi_portraits_a.vpcf_c diff --git a/particles/portraits/kyouko/thtd_kyouko_portraits.vpcf_c b/game/particles/portraits/kyouko/thtd_kyouko_portraits.vpcf_c similarity index 100% rename from particles/portraits/kyouko/thtd_kyouko_portraits.vpcf_c rename to game/particles/portraits/kyouko/thtd_kyouko_portraits.vpcf_c diff --git a/particles/portraits/kyouko/thtd_kyouko_portraits_a.vpcf_c b/game/particles/portraits/kyouko/thtd_kyouko_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/kyouko/thtd_kyouko_portraits_a.vpcf_c rename to game/particles/portraits/kyouko/thtd_kyouko_portraits_a.vpcf_c diff --git a/particles/portraits/letty/thtd_letty_portraits.vpcf_c b/game/particles/portraits/letty/thtd_letty_portraits.vpcf_c similarity index 100% rename from particles/portraits/letty/thtd_letty_portraits.vpcf_c rename to game/particles/portraits/letty/thtd_letty_portraits.vpcf_c diff --git a/particles/portraits/letty/thtd_letty_portraits_a.vpcf_c b/game/particles/portraits/letty/thtd_letty_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/letty/thtd_letty_portraits_a.vpcf_c rename to game/particles/portraits/letty/thtd_letty_portraits_a.vpcf_c diff --git a/particles/portraits/lily/thtd_lily_portraits.vpcf_c b/game/particles/portraits/lily/thtd_lily_portraits.vpcf_c similarity index 100% rename from particles/portraits/lily/thtd_lily_portraits.vpcf_c rename to game/particles/portraits/lily/thtd_lily_portraits.vpcf_c diff --git a/particles/portraits/lily/thtd_lily_portraits_a.vpcf_c b/game/particles/portraits/lily/thtd_lily_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/lily/thtd_lily_portraits_a.vpcf_c rename to game/particles/portraits/lily/thtd_lily_portraits_a.vpcf_c diff --git a/particles/portraits/lina/thtd_lina_portraits.vpcf_c b/game/particles/portraits/lina/thtd_lina_portraits.vpcf_c similarity index 100% rename from particles/portraits/lina/thtd_lina_portraits.vpcf_c rename to game/particles/portraits/lina/thtd_lina_portraits.vpcf_c diff --git a/particles/portraits/lina/thtd_lina_portraits_a.vpcf_c b/game/particles/portraits/lina/thtd_lina_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/lina/thtd_lina_portraits_a.vpcf_c rename to game/particles/portraits/lina/thtd_lina_portraits_a.vpcf_c diff --git a/particles/portraits/lina/thtd_lina_portraits_b.vpcf_c b/game/particles/portraits/lina/thtd_lina_portraits_b.vpcf_c similarity index 100% rename from particles/portraits/lina/thtd_lina_portraits_b.vpcf_c rename to game/particles/portraits/lina/thtd_lina_portraits_b.vpcf_c diff --git a/particles/portraits/luna/thtd_luna_portraits.vpcf_c b/game/particles/portraits/luna/thtd_luna_portraits.vpcf_c similarity index 100% rename from particles/portraits/luna/thtd_luna_portraits.vpcf_c rename to game/particles/portraits/luna/thtd_luna_portraits.vpcf_c diff --git a/particles/portraits/luna/thtd_luna_portraits_a.vpcf_c b/game/particles/portraits/luna/thtd_luna_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/luna/thtd_luna_portraits_a.vpcf_c rename to game/particles/portraits/luna/thtd_luna_portraits_a.vpcf_c diff --git a/particles/portraits/lunasa/thtd_lunasa_portraits.vpcf_c b/game/particles/portraits/lunasa/thtd_lunasa_portraits.vpcf_c similarity index 100% rename from particles/portraits/lunasa/thtd_lunasa_portraits.vpcf_c rename to game/particles/portraits/lunasa/thtd_lunasa_portraits.vpcf_c diff --git a/particles/portraits/lunasa/thtd_lunasa_portraits_a.vpcf_c b/game/particles/portraits/lunasa/thtd_lunasa_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/lunasa/thtd_lunasa_portraits_a.vpcf_c rename to game/particles/portraits/lunasa/thtd_lunasa_portraits_a.vpcf_c diff --git a/particles/portraits/lyrica/thtd_lyrica_portraits.vpcf_c b/game/particles/portraits/lyrica/thtd_lyrica_portraits.vpcf_c similarity index 100% rename from particles/portraits/lyrica/thtd_lyrica_portraits.vpcf_c rename to game/particles/portraits/lyrica/thtd_lyrica_portraits.vpcf_c diff --git a/particles/portraits/lyrica/thtd_lyrica_portraits_a.vpcf_c b/game/particles/portraits/lyrica/thtd_lyrica_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/lyrica/thtd_lyrica_portraits_a.vpcf_c rename to game/particles/portraits/lyrica/thtd_lyrica_portraits_a.vpcf_c diff --git a/particles/portraits/mamizou/thtd_mamizou_portraits.vpcf_c b/game/particles/portraits/mamizou/thtd_mamizou_portraits.vpcf_c similarity index 100% rename from particles/portraits/mamizou/thtd_mamizou_portraits.vpcf_c rename to game/particles/portraits/mamizou/thtd_mamizou_portraits.vpcf_c diff --git a/particles/portraits/mamizou/thtd_mamizou_portraits_a.vpcf_c b/game/particles/portraits/mamizou/thtd_mamizou_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/mamizou/thtd_mamizou_portraits_a.vpcf_c rename to game/particles/portraits/mamizou/thtd_mamizou_portraits_a.vpcf_c diff --git a/particles/portraits/maribel/thtd_maribel_portraits.vpcf_c b/game/particles/portraits/maribel/thtd_maribel_portraits.vpcf_c similarity index 100% rename from particles/portraits/maribel/thtd_maribel_portraits.vpcf_c rename to game/particles/portraits/maribel/thtd_maribel_portraits.vpcf_c diff --git a/particles/portraits/maribel/thtd_maribel_portraits_a.vpcf_c b/game/particles/portraits/maribel/thtd_maribel_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/maribel/thtd_maribel_portraits_a.vpcf_c rename to game/particles/portraits/maribel/thtd_maribel_portraits_a.vpcf_c diff --git a/particles/portraits/marisa/thtd_marisa_portraits.vpcf_c b/game/particles/portraits/marisa/thtd_marisa_portraits.vpcf_c similarity index 100% rename from particles/portraits/marisa/thtd_marisa_portraits.vpcf_c rename to game/particles/portraits/marisa/thtd_marisa_portraits.vpcf_c diff --git a/particles/portraits/marisa/thtd_marisa_portraits_a.vpcf_c b/game/particles/portraits/marisa/thtd_marisa_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/marisa/thtd_marisa_portraits_a.vpcf_c rename to game/particles/portraits/marisa/thtd_marisa_portraits_a.vpcf_c diff --git a/particles/portraits/matara/thtd_matara_portraits.vpcf_c b/game/particles/portraits/matara/thtd_matara_portraits.vpcf_c similarity index 100% rename from particles/portraits/matara/thtd_matara_portraits.vpcf_c rename to game/particles/portraits/matara/thtd_matara_portraits.vpcf_c diff --git a/particles/portraits/matara/thtd_matara_portraits_a.vpcf_c b/game/particles/portraits/matara/thtd_matara_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/matara/thtd_matara_portraits_a.vpcf_c rename to game/particles/portraits/matara/thtd_matara_portraits_a.vpcf_c diff --git a/particles/portraits/medicine/thtd_medicine_portraits.vpcf_c b/game/particles/portraits/medicine/thtd_medicine_portraits.vpcf_c similarity index 100% rename from particles/portraits/medicine/thtd_medicine_portraits.vpcf_c rename to game/particles/portraits/medicine/thtd_medicine_portraits.vpcf_c diff --git a/particles/portraits/medicine/thtd_medicine_portraits_a.vpcf_c b/game/particles/portraits/medicine/thtd_medicine_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/medicine/thtd_medicine_portraits_a.vpcf_c rename to game/particles/portraits/medicine/thtd_medicine_portraits_a.vpcf_c diff --git a/particles/portraits/meirin/thtd_meirin_portraits.vpcf_c b/game/particles/portraits/meirin/thtd_meirin_portraits.vpcf_c similarity index 100% rename from particles/portraits/meirin/thtd_meirin_portraits.vpcf_c rename to game/particles/portraits/meirin/thtd_meirin_portraits.vpcf_c diff --git a/particles/portraits/meirin/thtd_meirin_portraits_a.vpcf_c b/game/particles/portraits/meirin/thtd_meirin_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/meirin/thtd_meirin_portraits_a.vpcf_c rename to game/particles/portraits/meirin/thtd_meirin_portraits_a.vpcf_c diff --git a/particles/portraits/merlin/thtd_merlin_portraits.vpcf_c b/game/particles/portraits/merlin/thtd_merlin_portraits.vpcf_c similarity index 100% rename from particles/portraits/merlin/thtd_merlin_portraits.vpcf_c rename to game/particles/portraits/merlin/thtd_merlin_portraits.vpcf_c diff --git a/particles/portraits/merlin/thtd_merlin_portraits_a.vpcf_c b/game/particles/portraits/merlin/thtd_merlin_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/merlin/thtd_merlin_portraits_a.vpcf_c rename to game/particles/portraits/merlin/thtd_merlin_portraits_a.vpcf_c diff --git a/particles/portraits/miko/thtd_miko_portraits.vpcf_c b/game/particles/portraits/miko/thtd_miko_portraits.vpcf_c similarity index 100% rename from particles/portraits/miko/thtd_miko_portraits.vpcf_c rename to game/particles/portraits/miko/thtd_miko_portraits.vpcf_c diff --git a/particles/portraits/miko/thtd_miko_portraits_a.vpcf_c b/game/particles/portraits/miko/thtd_miko_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/miko/thtd_miko_portraits_a.vpcf_c rename to game/particles/portraits/miko/thtd_miko_portraits_a.vpcf_c diff --git a/particles/portraits/mima/thtd_mima_portraits.vpcf_c b/game/particles/portraits/mima/thtd_mima_portraits.vpcf_c similarity index 100% rename from particles/portraits/mima/thtd_mima_portraits.vpcf_c rename to game/particles/portraits/mima/thtd_mima_portraits.vpcf_c diff --git a/particles/portraits/mima/thtd_mima_portraits_a.vpcf_c b/game/particles/portraits/mima/thtd_mima_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/mima/thtd_mima_portraits_a.vpcf_c rename to game/particles/portraits/mima/thtd_mima_portraits_a.vpcf_c diff --git a/particles/portraits/minamitsu/thtd_minamitsu_portraits.vpcf_c b/game/particles/portraits/minamitsu/thtd_minamitsu_portraits.vpcf_c similarity index 100% rename from particles/portraits/minamitsu/thtd_minamitsu_portraits.vpcf_c rename to game/particles/portraits/minamitsu/thtd_minamitsu_portraits.vpcf_c diff --git a/particles/portraits/minamitsu/thtd_minamitsu_portraits_a.vpcf_c b/game/particles/portraits/minamitsu/thtd_minamitsu_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/minamitsu/thtd_minamitsu_portraits_a.vpcf_c rename to game/particles/portraits/minamitsu/thtd_minamitsu_portraits_a.vpcf_c diff --git a/particles/portraits/minoriko/thtd_minoriko_portraits.vpcf_c b/game/particles/portraits/minoriko/thtd_minoriko_portraits.vpcf_c similarity index 100% rename from particles/portraits/minoriko/thtd_minoriko_portraits.vpcf_c rename to game/particles/portraits/minoriko/thtd_minoriko_portraits.vpcf_c diff --git a/particles/portraits/minoriko/thtd_minoriko_portraits_a.vpcf_c b/game/particles/portraits/minoriko/thtd_minoriko_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/minoriko/thtd_minoriko_portraits_a.vpcf_c rename to game/particles/portraits/minoriko/thtd_minoriko_portraits_a.vpcf_c diff --git a/particles/portraits/mokou/thtd_mokou_portraits.vpcf_c b/game/particles/portraits/mokou/thtd_mokou_portraits.vpcf_c similarity index 100% rename from particles/portraits/mokou/thtd_mokou_portraits.vpcf_c rename to game/particles/portraits/mokou/thtd_mokou_portraits.vpcf_c diff --git a/particles/portraits/mokou/thtd_mokou_portraits_a.vpcf_c b/game/particles/portraits/mokou/thtd_mokou_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/mokou/thtd_mokou_portraits_a.vpcf_c rename to game/particles/portraits/mokou/thtd_mokou_portraits_a.vpcf_c diff --git a/particles/portraits/momiji/thtd_momiji_portraits.vpcf_c b/game/particles/portraits/momiji/thtd_momiji_portraits.vpcf_c similarity index 100% rename from particles/portraits/momiji/thtd_momiji_portraits.vpcf_c rename to game/particles/portraits/momiji/thtd_momiji_portraits.vpcf_c diff --git a/particles/portraits/momiji/thtd_momiji_portraits_a.vpcf_c b/game/particles/portraits/momiji/thtd_momiji_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/momiji/thtd_momiji_portraits_a.vpcf_c rename to game/particles/portraits/momiji/thtd_momiji_portraits_a.vpcf_c diff --git a/particles/portraits/mystia/thtd_mystia_portraits.vpcf_c b/game/particles/portraits/mystia/thtd_mystia_portraits.vpcf_c similarity index 100% rename from particles/portraits/mystia/thtd_mystia_portraits.vpcf_c rename to game/particles/portraits/mystia/thtd_mystia_portraits.vpcf_c diff --git a/particles/portraits/mystia/thtd_mystia_portraits_a.vpcf_c b/game/particles/portraits/mystia/thtd_mystia_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/mystia/thtd_mystia_portraits_a.vpcf_c rename to game/particles/portraits/mystia/thtd_mystia_portraits_a.vpcf_c diff --git a/particles/portraits/nazrin/thtd_nazrin_portraits.vpcf_c b/game/particles/portraits/nazrin/thtd_nazrin_portraits.vpcf_c similarity index 100% rename from particles/portraits/nazrin/thtd_nazrin_portraits.vpcf_c rename to game/particles/portraits/nazrin/thtd_nazrin_portraits.vpcf_c diff --git a/particles/portraits/nazrin/thtd_nazrin_portraits_a.vpcf_c b/game/particles/portraits/nazrin/thtd_nazrin_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/nazrin/thtd_nazrin_portraits_a.vpcf_c rename to game/particles/portraits/nazrin/thtd_nazrin_portraits_a.vpcf_c diff --git a/particles/portraits/nitori/thtd_nitori_portraits.vpcf_c b/game/particles/portraits/nitori/thtd_nitori_portraits.vpcf_c similarity index 100% rename from particles/portraits/nitori/thtd_nitori_portraits.vpcf_c rename to game/particles/portraits/nitori/thtd_nitori_portraits.vpcf_c diff --git a/particles/portraits/nitori/thtd_nitori_portraits_a.vpcf_c b/game/particles/portraits/nitori/thtd_nitori_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/nitori/thtd_nitori_portraits_a.vpcf_c rename to game/particles/portraits/nitori/thtd_nitori_portraits_a.vpcf_c diff --git a/particles/portraits/nue/thtd_nue_portraits.vpcf_c b/game/particles/portraits/nue/thtd_nue_portraits.vpcf_c similarity index 100% rename from particles/portraits/nue/thtd_nue_portraits.vpcf_c rename to game/particles/portraits/nue/thtd_nue_portraits.vpcf_c diff --git a/particles/portraits/nue/thtd_nue_portraits_a.vpcf_c b/game/particles/portraits/nue/thtd_nue_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/nue/thtd_nue_portraits_a.vpcf_c rename to game/particles/portraits/nue/thtd_nue_portraits_a.vpcf_c diff --git a/particles/portraits/patchouli/thtd_patchouli_portraits.vpcf_c b/game/particles/portraits/patchouli/thtd_patchouli_portraits.vpcf_c similarity index 100% rename from particles/portraits/patchouli/thtd_patchouli_portraits.vpcf_c rename to game/particles/portraits/patchouli/thtd_patchouli_portraits.vpcf_c diff --git a/particles/portraits/patchouli/thtd_patchouli_portraits_a.vpcf_c b/game/particles/portraits/patchouli/thtd_patchouli_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/patchouli/thtd_patchouli_portraits_a.vpcf_c rename to game/particles/portraits/patchouli/thtd_patchouli_portraits_a.vpcf_c diff --git a/particles/portraits/portraits_r_get_effect.vpcf_c b/game/particles/portraits/portraits_r_get_effect.vpcf_c similarity index 100% rename from particles/portraits/portraits_r_get_effect.vpcf_c rename to game/particles/portraits/portraits_r_get_effect.vpcf_c diff --git a/particles/portraits/portraits_sr_get_effect.vpcf_c b/game/particles/portraits/portraits_sr_get_effect.vpcf_c similarity index 100% rename from particles/portraits/portraits_sr_get_effect.vpcf_c rename to game/particles/portraits/portraits_sr_get_effect.vpcf_c diff --git a/particles/portraits/portraits_sr_get_effect_a.vpcf_c b/game/particles/portraits/portraits_sr_get_effect_a.vpcf_c similarity index 100% rename from particles/portraits/portraits_sr_get_effect_a.vpcf_c rename to game/particles/portraits/portraits_sr_get_effect_a.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_effect.vpcf_c b/game/particles/portraits/portraits_ssr_get_effect.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_effect.vpcf_c rename to game/particles/portraits/portraits_ssr_get_effect.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_effect_a.vpcf_c b/game/particles/portraits/portraits_ssr_get_effect_a.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_effect_a.vpcf_c rename to game/particles/portraits/portraits_ssr_get_effect_a.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_screen_effect.vpcf_c b/game/particles/portraits/portraits_ssr_get_screen_effect.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_screen_effect.vpcf_c rename to game/particles/portraits/portraits_ssr_get_screen_effect.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_screen_effect_a.vpcf_c b/game/particles/portraits/portraits_ssr_get_screen_effect_a.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_screen_effect_a.vpcf_c rename to game/particles/portraits/portraits_ssr_get_screen_effect_a.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_screen_effect_b.vpcf_c b/game/particles/portraits/portraits_ssr_get_screen_effect_b.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_screen_effect_b.vpcf_c rename to game/particles/portraits/portraits_ssr_get_screen_effect_b.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_screen_effect_c.vpcf_c b/game/particles/portraits/portraits_ssr_get_screen_effect_c.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_screen_effect_c.vpcf_c rename to game/particles/portraits/portraits_ssr_get_screen_effect_c.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_screen_effect_d.vpcf_c b/game/particles/portraits/portraits_ssr_get_screen_effect_d.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_screen_effect_d.vpcf_c rename to game/particles/portraits/portraits_ssr_get_screen_effect_d.vpcf_c diff --git a/particles/portraits/portraits_ssr_get_screen_effect_e.vpcf_c b/game/particles/portraits/portraits_ssr_get_screen_effect_e.vpcf_c similarity index 100% rename from particles/portraits/portraits_ssr_get_screen_effect_e.vpcf_c rename to game/particles/portraits/portraits_ssr_get_screen_effect_e.vpcf_c diff --git a/particles/portraits/ran/thtd_ran_portraits.vpcf_c b/game/particles/portraits/ran/thtd_ran_portraits.vpcf_c similarity index 100% rename from particles/portraits/ran/thtd_ran_portraits.vpcf_c rename to game/particles/portraits/ran/thtd_ran_portraits.vpcf_c diff --git a/particles/portraits/ran/thtd_ran_portraits_a.vpcf_c b/game/particles/portraits/ran/thtd_ran_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/ran/thtd_ran_portraits_a.vpcf_c rename to game/particles/portraits/ran/thtd_ran_portraits_a.vpcf_c diff --git a/particles/portraits/reimu/thtd_reimu_portraits.vpcf_c b/game/particles/portraits/reimu/thtd_reimu_portraits.vpcf_c similarity index 100% rename from particles/portraits/reimu/thtd_reimu_portraits.vpcf_c rename to game/particles/portraits/reimu/thtd_reimu_portraits.vpcf_c diff --git a/particles/portraits/reimu/thtd_reimu_portraits_a.vpcf_c b/game/particles/portraits/reimu/thtd_reimu_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/reimu/thtd_reimu_portraits_a.vpcf_c rename to game/particles/portraits/reimu/thtd_reimu_portraits_a.vpcf_c diff --git a/particles/portraits/reisen/thtd_reisen_portraits.vpcf_c b/game/particles/portraits/reisen/thtd_reisen_portraits.vpcf_c similarity index 100% rename from particles/portraits/reisen/thtd_reisen_portraits.vpcf_c rename to game/particles/portraits/reisen/thtd_reisen_portraits.vpcf_c diff --git a/particles/portraits/reisen/thtd_reisen_portraits_a.vpcf_c b/game/particles/portraits/reisen/thtd_reisen_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/reisen/thtd_reisen_portraits_a.vpcf_c rename to game/particles/portraits/reisen/thtd_reisen_portraits_a.vpcf_c diff --git a/particles/portraits/remilia/thtd_remilia_portraits.vpcf_c b/game/particles/portraits/remilia/thtd_remilia_portraits.vpcf_c similarity index 100% rename from particles/portraits/remilia/thtd_remilia_portraits.vpcf_c rename to game/particles/portraits/remilia/thtd_remilia_portraits.vpcf_c diff --git a/particles/portraits/remilia/thtd_remilia_portraits_a.vpcf_c b/game/particles/portraits/remilia/thtd_remilia_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/remilia/thtd_remilia_portraits_a.vpcf_c rename to game/particles/portraits/remilia/thtd_remilia_portraits_a.vpcf_c diff --git a/particles/portraits/renko/thtd_renko_portraits.vpcf_c b/game/particles/portraits/renko/thtd_renko_portraits.vpcf_c similarity index 100% rename from particles/portraits/renko/thtd_renko_portraits.vpcf_c rename to game/particles/portraits/renko/thtd_renko_portraits.vpcf_c diff --git a/particles/portraits/renko/thtd_renko_portraits_a.vpcf_c b/game/particles/portraits/renko/thtd_renko_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/renko/thtd_renko_portraits_a.vpcf_c rename to game/particles/portraits/renko/thtd_renko_portraits_a.vpcf_c diff --git a/particles/portraits/rin/thtd_rin_portraits.vpcf_c b/game/particles/portraits/rin/thtd_rin_portraits.vpcf_c similarity index 100% rename from particles/portraits/rin/thtd_rin_portraits.vpcf_c rename to game/particles/portraits/rin/thtd_rin_portraits.vpcf_c diff --git a/particles/portraits/rin/thtd_rin_portraits_a.vpcf_c b/game/particles/portraits/rin/thtd_rin_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/rin/thtd_rin_portraits_a.vpcf_c rename to game/particles/portraits/rin/thtd_rin_portraits_a.vpcf_c diff --git a/particles/portraits/rumia/thtd_rumia_portraits.vpcf_c b/game/particles/portraits/rumia/thtd_rumia_portraits.vpcf_c similarity index 100% rename from particles/portraits/rumia/thtd_rumia_portraits.vpcf_c rename to game/particles/portraits/rumia/thtd_rumia_portraits.vpcf_c diff --git a/particles/portraits/rumia/thtd_rumia_portraits_a.vpcf_c b/game/particles/portraits/rumia/thtd_rumia_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/rumia/thtd_rumia_portraits_a.vpcf_c rename to game/particles/portraits/rumia/thtd_rumia_portraits_a.vpcf_c diff --git a/particles/portraits/sakuya/thtd_sakuya_portraits.vpcf_c b/game/particles/portraits/sakuya/thtd_sakuya_portraits.vpcf_c similarity index 100% rename from particles/portraits/sakuya/thtd_sakuya_portraits.vpcf_c rename to game/particles/portraits/sakuya/thtd_sakuya_portraits.vpcf_c diff --git a/particles/portraits/sakuya/thtd_sakuya_portraits_a.vpcf_c b/game/particles/portraits/sakuya/thtd_sakuya_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/sakuya/thtd_sakuya_portraits_a.vpcf_c rename to game/particles/portraits/sakuya/thtd_sakuya_portraits_a.vpcf_c diff --git a/particles/portraits/sanae/thtd_sanae_portraits.vpcf_c b/game/particles/portraits/sanae/thtd_sanae_portraits.vpcf_c similarity index 100% rename from particles/portraits/sanae/thtd_sanae_portraits.vpcf_c rename to game/particles/portraits/sanae/thtd_sanae_portraits.vpcf_c diff --git a/particles/portraits/sanae/thtd_sanae_portraits_a.vpcf_c b/game/particles/portraits/sanae/thtd_sanae_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/sanae/thtd_sanae_portraits_a.vpcf_c rename to game/particles/portraits/sanae/thtd_sanae_portraits_a.vpcf_c diff --git a/particles/portraits/sariel/thtd_sariel_portraits.vpcf_c b/game/particles/portraits/sariel/thtd_sariel_portraits.vpcf_c similarity index 100% rename from particles/portraits/sariel/thtd_sariel_portraits.vpcf_c rename to game/particles/portraits/sariel/thtd_sariel_portraits.vpcf_c diff --git a/particles/portraits/sariel/thtd_sariel_portraits_a.vpcf_c b/game/particles/portraits/sariel/thtd_sariel_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/sariel/thtd_sariel_portraits_a.vpcf_c rename to game/particles/portraits/sariel/thtd_sariel_portraits_a.vpcf_c diff --git a/particles/portraits/satori/thtd_satori_portraits.vpcf_c b/game/particles/portraits/satori/thtd_satori_portraits.vpcf_c similarity index 100% rename from particles/portraits/satori/thtd_satori_portraits.vpcf_c rename to game/particles/portraits/satori/thtd_satori_portraits.vpcf_c diff --git a/particles/portraits/satori/thtd_satori_portraits_a.vpcf_c b/game/particles/portraits/satori/thtd_satori_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/satori/thtd_satori_portraits_a.vpcf_c rename to game/particles/portraits/satori/thtd_satori_portraits_a.vpcf_c diff --git a/particles/portraits/seiga/thtd_seiga_portraits.vpcf_c b/game/particles/portraits/seiga/thtd_seiga_portraits.vpcf_c similarity index 100% rename from particles/portraits/seiga/thtd_seiga_portraits.vpcf_c rename to game/particles/portraits/seiga/thtd_seiga_portraits.vpcf_c diff --git a/particles/portraits/seiga/thtd_seiga_portraits_a.vpcf_c b/game/particles/portraits/seiga/thtd_seiga_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/seiga/thtd_seiga_portraits_a.vpcf_c rename to game/particles/portraits/seiga/thtd_seiga_portraits_a.vpcf_c diff --git a/particles/portraits/seija/thtd_seija_portraits.vpcf_c b/game/particles/portraits/seija/thtd_seija_portraits.vpcf_c similarity index 100% rename from particles/portraits/seija/thtd_seija_portraits.vpcf_c rename to game/particles/portraits/seija/thtd_seija_portraits.vpcf_c diff --git a/particles/portraits/seija/thtd_seija_portraits_a.vpcf_c b/game/particles/portraits/seija/thtd_seija_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/seija/thtd_seija_portraits_a.vpcf_c rename to game/particles/portraits/seija/thtd_seija_portraits_a.vpcf_c diff --git a/particles/portraits/shikieiki/thtd_shikieiki_portraits.vpcf_c b/game/particles/portraits/shikieiki/thtd_shikieiki_portraits.vpcf_c similarity index 100% rename from particles/portraits/shikieiki/thtd_shikieiki_portraits.vpcf_c rename to game/particles/portraits/shikieiki/thtd_shikieiki_portraits.vpcf_c diff --git a/particles/portraits/shikieiki/thtd_shikieiki_portraits_a.vpcf_c b/game/particles/portraits/shikieiki/thtd_shikieiki_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/shikieiki/thtd_shikieiki_portraits_a.vpcf_c rename to game/particles/portraits/shikieiki/thtd_shikieiki_portraits_a.vpcf_c diff --git a/particles/portraits/shinki/thtd_shinki_portraits.vpcf_c b/game/particles/portraits/shinki/thtd_shinki_portraits.vpcf_c similarity index 100% rename from particles/portraits/shinki/thtd_shinki_portraits.vpcf_c rename to game/particles/portraits/shinki/thtd_shinki_portraits.vpcf_c diff --git a/particles/portraits/shinki/thtd_shinki_portraits_a.vpcf_c b/game/particles/portraits/shinki/thtd_shinki_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/shinki/thtd_shinki_portraits_a.vpcf_c rename to game/particles/portraits/shinki/thtd_shinki_portraits_a.vpcf_c diff --git a/particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits.vpcf_c b/game/particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits.vpcf_c similarity index 100% rename from particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits.vpcf_c rename to game/particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits.vpcf_c diff --git a/particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits_a.vpcf_c b/game/particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits_a.vpcf_c rename to game/particles/portraits/shinmyoumaru/thtd_shinmyoumaru_portraits_a.vpcf_c diff --git a/particles/portraits/sizuha/thtd_sizuha_portraits.vpcf_c b/game/particles/portraits/sizuha/thtd_sizuha_portraits.vpcf_c similarity index 100% rename from particles/portraits/sizuha/thtd_sizuha_portraits.vpcf_c rename to game/particles/portraits/sizuha/thtd_sizuha_portraits.vpcf_c diff --git a/particles/portraits/sizuha/thtd_sizuha_portraits_a.vpcf_c b/game/particles/portraits/sizuha/thtd_sizuha_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/sizuha/thtd_sizuha_portraits_a.vpcf_c rename to game/particles/portraits/sizuha/thtd_sizuha_portraits_a.vpcf_c diff --git a/particles/portraits/soga/thtd_soga_portraits.vpcf_c b/game/particles/portraits/soga/thtd_soga_portraits.vpcf_c similarity index 100% rename from particles/portraits/soga/thtd_soga_portraits.vpcf_c rename to game/particles/portraits/soga/thtd_soga_portraits.vpcf_c diff --git a/particles/portraits/soga/thtd_soga_portraits_a.vpcf_c b/game/particles/portraits/soga/thtd_soga_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/soga/thtd_soga_portraits_a.vpcf_c rename to game/particles/portraits/soga/thtd_soga_portraits_a.vpcf_c diff --git a/particles/portraits/star/thtd_star_portraits.vpcf_c b/game/particles/portraits/star/thtd_star_portraits.vpcf_c similarity index 100% rename from particles/portraits/star/thtd_star_portraits.vpcf_c rename to game/particles/portraits/star/thtd_star_portraits.vpcf_c diff --git a/particles/portraits/star/thtd_star_portraits_a.vpcf_c b/game/particles/portraits/star/thtd_star_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/star/thtd_star_portraits_a.vpcf_c rename to game/particles/portraits/star/thtd_star_portraits_a.vpcf_c diff --git a/particles/portraits/suika/thtd_suika_portraits.vpcf_c b/game/particles/portraits/suika/thtd_suika_portraits.vpcf_c similarity index 100% rename from particles/portraits/suika/thtd_suika_portraits.vpcf_c rename to game/particles/portraits/suika/thtd_suika_portraits.vpcf_c diff --git a/particles/portraits/suika/thtd_suika_portraits_a.vpcf_c b/game/particles/portraits/suika/thtd_suika_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/suika/thtd_suika_portraits_a.vpcf_c rename to game/particles/portraits/suika/thtd_suika_portraits_a.vpcf_c diff --git a/particles/portraits/sumireko/thtd_sumireko_portraits.vpcf_c b/game/particles/portraits/sumireko/thtd_sumireko_portraits.vpcf_c similarity index 100% rename from particles/portraits/sumireko/thtd_sumireko_portraits.vpcf_c rename to game/particles/portraits/sumireko/thtd_sumireko_portraits.vpcf_c diff --git a/particles/portraits/sumireko/thtd_sumireko_portraits_a.vpcf_c b/game/particles/portraits/sumireko/thtd_sumireko_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/sumireko/thtd_sumireko_portraits_a.vpcf_c rename to game/particles/portraits/sumireko/thtd_sumireko_portraits_a.vpcf_c diff --git a/particles/portraits/sunny/thtd_sunny_portraits.vpcf_c b/game/particles/portraits/sunny/thtd_sunny_portraits.vpcf_c similarity index 100% rename from particles/portraits/sunny/thtd_sunny_portraits.vpcf_c rename to game/particles/portraits/sunny/thtd_sunny_portraits.vpcf_c diff --git a/particles/portraits/sunny/thtd_sunny_portraits_a.vpcf_c b/game/particles/portraits/sunny/thtd_sunny_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/sunny/thtd_sunny_portraits_a.vpcf_c rename to game/particles/portraits/sunny/thtd_sunny_portraits_a.vpcf_c diff --git a/particles/portraits/suwako/thtd_suwako_portraits.vpcf_c b/game/particles/portraits/suwako/thtd_suwako_portraits.vpcf_c similarity index 100% rename from particles/portraits/suwako/thtd_suwako_portraits.vpcf_c rename to game/particles/portraits/suwako/thtd_suwako_portraits.vpcf_c diff --git a/particles/portraits/suwako/thtd_suwako_portraits_a.vpcf_c b/game/particles/portraits/suwako/thtd_suwako_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/suwako/thtd_suwako_portraits_a.vpcf_c rename to game/particles/portraits/suwako/thtd_suwako_portraits_a.vpcf_c diff --git a/particles/portraits/tenshi/thtd_tenshi_portraits.vpcf_c b/game/particles/portraits/tenshi/thtd_tenshi_portraits.vpcf_c similarity index 100% rename from particles/portraits/tenshi/thtd_tenshi_portraits.vpcf_c rename to game/particles/portraits/tenshi/thtd_tenshi_portraits.vpcf_c diff --git a/particles/portraits/tenshi/thtd_tenshi_portraits_a.vpcf_c b/game/particles/portraits/tenshi/thtd_tenshi_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/tenshi/thtd_tenshi_portraits_a.vpcf_c rename to game/particles/portraits/tenshi/thtd_tenshi_portraits_a.vpcf_c diff --git a/particles/portraits/toramaru/thtd_toramaru_portraits.vpcf_c b/game/particles/portraits/toramaru/thtd_toramaru_portraits.vpcf_c similarity index 100% rename from particles/portraits/toramaru/thtd_toramaru_portraits.vpcf_c rename to game/particles/portraits/toramaru/thtd_toramaru_portraits.vpcf_c diff --git a/particles/portraits/toramaru/thtd_toramaru_portraits_a.vpcf_c b/game/particles/portraits/toramaru/thtd_toramaru_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/toramaru/thtd_toramaru_portraits_a.vpcf_c rename to game/particles/portraits/toramaru/thtd_toramaru_portraits_a.vpcf_c diff --git a/particles/portraits/utsuho/thtd_utsuho_portraits.vpcf_c b/game/particles/portraits/utsuho/thtd_utsuho_portraits.vpcf_c similarity index 100% rename from particles/portraits/utsuho/thtd_utsuho_portraits.vpcf_c rename to game/particles/portraits/utsuho/thtd_utsuho_portraits.vpcf_c diff --git a/particles/portraits/utsuho/thtd_utsuho_portraits_a.vpcf_c b/game/particles/portraits/utsuho/thtd_utsuho_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/utsuho/thtd_utsuho_portraits_a.vpcf_c rename to game/particles/portraits/utsuho/thtd_utsuho_portraits_a.vpcf_c diff --git a/particles/portraits/wriggle/thtd_wriggle_portraits.vpcf_c b/game/particles/portraits/wriggle/thtd_wriggle_portraits.vpcf_c similarity index 100% rename from particles/portraits/wriggle/thtd_wriggle_portraits.vpcf_c rename to game/particles/portraits/wriggle/thtd_wriggle_portraits.vpcf_c diff --git a/particles/portraits/wriggle/thtd_wriggle_portraits_a.vpcf_c b/game/particles/portraits/wriggle/thtd_wriggle_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/wriggle/thtd_wriggle_portraits_a.vpcf_c rename to game/particles/portraits/wriggle/thtd_wriggle_portraits_a.vpcf_c diff --git a/particles/portraits/yoshika/thtd_yoshika_portraits.vpcf_c b/game/particles/portraits/yoshika/thtd_yoshika_portraits.vpcf_c similarity index 100% rename from particles/portraits/yoshika/thtd_yoshika_portraits.vpcf_c rename to game/particles/portraits/yoshika/thtd_yoshika_portraits.vpcf_c diff --git a/particles/portraits/yoshika/thtd_yoshika_portraits_a.vpcf_c b/game/particles/portraits/yoshika/thtd_yoshika_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/yoshika/thtd_yoshika_portraits_a.vpcf_c rename to game/particles/portraits/yoshika/thtd_yoshika_portraits_a.vpcf_c diff --git a/particles/portraits/youmu/thtd_youmu_portraits.vpcf_c b/game/particles/portraits/youmu/thtd_youmu_portraits.vpcf_c similarity index 100% rename from particles/portraits/youmu/thtd_youmu_portraits.vpcf_c rename to game/particles/portraits/youmu/thtd_youmu_portraits.vpcf_c diff --git a/particles/portraits/youmu/thtd_youmu_portraits_a.vpcf_c b/game/particles/portraits/youmu/thtd_youmu_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/youmu/thtd_youmu_portraits_a.vpcf_c rename to game/particles/portraits/youmu/thtd_youmu_portraits_a.vpcf_c diff --git a/particles/portraits/yukari/thtd_yukari_portraits.vpcf_c b/game/particles/portraits/yukari/thtd_yukari_portraits.vpcf_c similarity index 100% rename from particles/portraits/yukari/thtd_yukari_portraits.vpcf_c rename to game/particles/portraits/yukari/thtd_yukari_portraits.vpcf_c diff --git a/particles/portraits/yukari/thtd_yukari_portraits_a.vpcf_c b/game/particles/portraits/yukari/thtd_yukari_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/yukari/thtd_yukari_portraits_a.vpcf_c rename to game/particles/portraits/yukari/thtd_yukari_portraits_a.vpcf_c diff --git a/particles/portraits/yumemi/thtd_yumemi_portraits.vpcf_c b/game/particles/portraits/yumemi/thtd_yumemi_portraits.vpcf_c similarity index 100% rename from particles/portraits/yumemi/thtd_yumemi_portraits.vpcf_c rename to game/particles/portraits/yumemi/thtd_yumemi_portraits.vpcf_c diff --git a/particles/portraits/yumemi/thtd_yumemi_portraits_a.vpcf_c b/game/particles/portraits/yumemi/thtd_yumemi_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/yumemi/thtd_yumemi_portraits_a.vpcf_c rename to game/particles/portraits/yumemi/thtd_yumemi_portraits_a.vpcf_c diff --git a/particles/portraits/yuugi/thtd_yuugi_portraits.vpcf_c b/game/particles/portraits/yuugi/thtd_yuugi_portraits.vpcf_c similarity index 100% rename from particles/portraits/yuugi/thtd_yuugi_portraits.vpcf_c rename to game/particles/portraits/yuugi/thtd_yuugi_portraits.vpcf_c diff --git a/particles/portraits/yuugi/thtd_yuugi_portraits_a.vpcf_c b/game/particles/portraits/yuugi/thtd_yuugi_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/yuugi/thtd_yuugi_portraits_a.vpcf_c rename to game/particles/portraits/yuugi/thtd_yuugi_portraits_a.vpcf_c diff --git a/particles/portraits/yuuka/thtd_yuuka_portraits.vpcf_c b/game/particles/portraits/yuuka/thtd_yuuka_portraits.vpcf_c similarity index 100% rename from particles/portraits/yuuka/thtd_yuuka_portraits.vpcf_c rename to game/particles/portraits/yuuka/thtd_yuuka_portraits.vpcf_c diff --git a/particles/portraits/yuuka/thtd_yuuka_portraits_a.vpcf_c b/game/particles/portraits/yuuka/thtd_yuuka_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/yuuka/thtd_yuuka_portraits_a.vpcf_c rename to game/particles/portraits/yuuka/thtd_yuuka_portraits_a.vpcf_c diff --git a/particles/portraits/yuyuko/thtd_yuyuko_portraits.vpcf_c b/game/particles/portraits/yuyuko/thtd_yuyuko_portraits.vpcf_c similarity index 100% rename from particles/portraits/yuyuko/thtd_yuyuko_portraits.vpcf_c rename to game/particles/portraits/yuyuko/thtd_yuyuko_portraits.vpcf_c diff --git a/particles/portraits/yuyuko/thtd_yuyuko_portraits_a.vpcf_c b/game/particles/portraits/yuyuko/thtd_yuyuko_portraits_a.vpcf_c similarity index 100% rename from particles/portraits/yuyuko/thtd_yuyuko_portraits_a.vpcf_c rename to game/particles/portraits/yuyuko/thtd_yuyuko_portraits_a.vpcf_c diff --git a/particles/radiant_fx2/radiant_ancient001_blsss.vpcf_c b/game/particles/radiant_fx2/radiant_ancient001_blsss.vpcf_c similarity index 100% rename from particles/radiant_fx2/radiant_ancient001_blsss.vpcf_c rename to game/particles/radiant_fx2/radiant_ancient001_blsss.vpcf_c diff --git a/particles/radiant_fx2/radiant_ancient001_destruction.vpcf_c b/game/particles/radiant_fx2/radiant_ancient001_destruction.vpcf_c similarity index 100% rename from particles/radiant_fx2/radiant_ancient001_destruction.vpcf_c rename to game/particles/radiant_fx2/radiant_ancient001_destruction.vpcf_c diff --git a/particles/thd/items/item_qijizhixing_xing.vpcf_c b/game/particles/thd/items/item_qijizhixing_xing.vpcf_c similarity index 100% rename from particles/thd/items/item_qijizhixing_xing.vpcf_c rename to game/particles/thd/items/item_qijizhixing_xing.vpcf_c diff --git a/particles/thd2/chen_cast_4.vpcf_c b/game/particles/thd2/chen_cast_4.vpcf_c similarity index 100% rename from particles/thd2/chen_cast_4.vpcf_c rename to game/particles/thd2/chen_cast_4.vpcf_c diff --git a/particles/thd2/chen_cast_4_d.vpcf_c b/game/particles/thd2/chen_cast_4_d.vpcf_c similarity index 100% rename from particles/thd2/chen_cast_4_d.vpcf_c rename to game/particles/thd2/chen_cast_4_d.vpcf_c diff --git a/particles/thd2/denghuo.vpcf_c b/game/particles/thd2/denghuo.vpcf_c similarity index 100% rename from particles/thd2/denghuo.vpcf_c rename to game/particles/thd2/denghuo.vpcf_c diff --git a/particles/thd2/environment/death/act_hero_die.vpcf_c b/game/particles/thd2/environment/death/act_hero_die.vpcf_c similarity index 100% rename from particles/thd2/environment/death/act_hero_die.vpcf_c rename to game/particles/thd2/environment/death/act_hero_die.vpcf_c diff --git a/particles/thd2/environment/jump/jump.vpcf_c b/game/particles/thd2/environment/jump/jump.vpcf_c similarity index 100% rename from particles/thd2/environment/jump/jump.vpcf_c rename to game/particles/thd2/environment/jump/jump.vpcf_c diff --git a/particles/thd2/environment/waterfall/waterfall_1.vpcf_c b/game/particles/thd2/environment/waterfall/waterfall_1.vpcf_c similarity index 100% rename from particles/thd2/environment/waterfall/waterfall_1.vpcf_c rename to game/particles/thd2/environment/waterfall/waterfall_1.vpcf_c diff --git a/particles/thd2/environment/waterfall/waterfall_1_bottom_1.vpcf_c b/game/particles/thd2/environment/waterfall/waterfall_1_bottom_1.vpcf_c similarity index 100% rename from particles/thd2/environment/waterfall/waterfall_1_bottom_1.vpcf_c rename to game/particles/thd2/environment/waterfall/waterfall_1_bottom_1.vpcf_c diff --git a/particles/thd2/environment/waterfall/waterfall_1_bottom_2.vpcf_c b/game/particles/thd2/environment/waterfall/waterfall_1_bottom_2.vpcf_c similarity index 100% rename from particles/thd2/environment/waterfall/waterfall_1_bottom_2.vpcf_c rename to game/particles/thd2/environment/waterfall/waterfall_1_bottom_2.vpcf_c diff --git a/particles/thd2/heroes/aya/ability_aya_02_mark.vpcf_c b/game/particles/thd2/heroes/aya/ability_aya_02_mark.vpcf_c similarity index 100% rename from particles/thd2/heroes/aya/ability_aya_02_mark.vpcf_c rename to game/particles/thd2/heroes/aya/ability_aya_02_mark.vpcf_c diff --git a/particles/thd2/heroes/aya/ability_aya_02_mark_a.vpcf_c b/game/particles/thd2/heroes/aya/ability_aya_02_mark_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/aya/ability_aya_02_mark_a.vpcf_c rename to game/particles/thd2/heroes/aya/ability_aya_02_mark_a.vpcf_c diff --git a/particles/thd2/heroes/byakuren/ability_byakuren_03.vpcf_c b/game/particles/thd2/heroes/byakuren/ability_byakuren_03.vpcf_c similarity index 100% rename from particles/thd2/heroes/byakuren/ability_byakuren_03.vpcf_c rename to game/particles/thd2/heroes/byakuren/ability_byakuren_03.vpcf_c diff --git a/particles/thd2/heroes/eirin/ability_eirin02_arrow_effect.vpcf_c b/game/particles/thd2/heroes/eirin/ability_eirin02_arrow_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/eirin/ability_eirin02_arrow_effect.vpcf_c rename to game/particles/thd2/heroes/eirin/ability_eirin02_arrow_effect.vpcf_c diff --git a/particles/thd2/heroes/eirin/ability_eirin02_heal.vpcf_c b/game/particles/thd2/heroes/eirin/ability_eirin02_heal.vpcf_c similarity index 100% rename from particles/thd2/heroes/eirin/ability_eirin02_heal.vpcf_c rename to game/particles/thd2/heroes/eirin/ability_eirin02_heal.vpcf_c diff --git a/particles/thd2/heroes/flandre/ability_flandre_04_buff.vpcf_c b/game/particles/thd2/heroes/flandre/ability_flandre_04_buff.vpcf_c similarity index 100% rename from particles/thd2/heroes/flandre/ability_flandre_04_buff.vpcf_c rename to game/particles/thd2/heroes/flandre/ability_flandre_04_buff.vpcf_c diff --git a/particles/thd2/heroes/flandre/ability_flandre_04_effect.vpcf_c b/game/particles/thd2/heroes/flandre/ability_flandre_04_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/flandre/ability_flandre_04_effect.vpcf_c rename to game/particles/thd2/heroes/flandre/ability_flandre_04_effect.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_light.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_light.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_light.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_light.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_light_a.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_light_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_light_a.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_light_a.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_light_b.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_light_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_light_b.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_light_b.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_light_c.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_light_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_light_c.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_light_c.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_light_d.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_light_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_light_d.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_light_d.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_light_e.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_light_e.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_light_e.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_light_e.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_light_f.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_light_f.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_light_f.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_light_f.vpcf_c diff --git a/particles/thd2/heroes/iku/ability_iku_04_model.vpcf_c b/game/particles/thd2/heroes/iku/ability_iku_04_model.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/ability_iku_04_model.vpcf_c rename to game/particles/thd2/heroes/iku/ability_iku_04_model.vpcf_c diff --git a/particles/thd2/heroes/iku/iku_02.vpcf_c b/game/particles/thd2/heroes/iku/iku_02.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/iku_02.vpcf_c rename to game/particles/thd2/heroes/iku/iku_02.vpcf_c diff --git a/particles/thd2/heroes/iku/iku_light_hand.vpcf_c b/game/particles/thd2/heroes/iku/iku_light_hand.vpcf_c similarity index 100% rename from particles/thd2/heroes/iku/iku_light_hand.vpcf_c rename to game/particles/thd2/heroes/iku/iku_light_hand.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_a.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_a.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_a.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_b.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_b.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_b.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_c.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_c.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_c.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_d.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_d.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_d.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_e.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_e.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_e.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_e.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_g.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_g.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_g.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_g.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_green.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_green.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_green.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_green.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_green_a.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_green_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_green_a.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_green_a.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_green_b.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_green_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_green_b.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_green_b.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_red.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_red.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_red.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_red.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_red_a.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_red_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_red_a.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_red_a.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya01_light_red_b.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya01_light_red_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya01_light_red_b.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya01_light_red_b.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_a.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_a.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_a.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_b.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_b.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_b.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_c.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_c.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_c.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_d.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_d.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_d.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_e.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_e.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_e.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_brilliant_dragon_bullet_e.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_a.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_a.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_a.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_b.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_b.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_b.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_c.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_c.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_c.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_d.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_d.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_d.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_e.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_e.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_e.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_buddhist_diamond_e.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_life_spring_infinity.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_life_spring_infinity.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_life_spring_infinity.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_life_spring_infinity.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_a.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_a.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_a.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_b.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_b.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_b.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_c.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_c.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_c.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_d.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_d.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya02_salamander_shield_d.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_a.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_b.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_c.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_d.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_e.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_f.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_g.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_h.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_i.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_j.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_k.vpcf_c diff --git a/particles/thd2/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c b/game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c similarity index 100% rename from particles/thd2/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c rename to game/particles/thd2/heroes/kaguya/ability_kaguya04_effect_k0.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_01_rocket.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_01_rocket.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_01_rocket.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_01_rocket.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_01_rocket_a.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_01_rocket_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_01_rocket_a.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_01_rocket_a.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_01_rocket_a_light.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_01_rocket_a_light.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_01_rocket_a_light.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_01_rocket_a_light.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_01_rocket_a_spark.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_01_rocket_a_wind.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_02_stars.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_02_stars.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_02_stars.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_02_stars.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_02_stars_a.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_02_stars_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_02_stars_a.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_02_stars_a.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_02_stars_b.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_02_stars_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_02_stars_b.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_02_stars_b.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_02_stars_c.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_02_stars_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_02_stars_c.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_02_stars_c.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_02_stars_d.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_02_stars_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_02_stars_d.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_02_stars_d.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_02_stars_e.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_02_stars_e.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_02_stars_e.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_02_stars_e.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark_laser.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark_laser.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark_laser.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark_laser.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark_laserlight.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark_laserlight.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark_laserlight.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark_laserlight.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark_light.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark_light.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark_light.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark_light.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark_light_b.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark_light_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark_light_b.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark_light_b.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark_wind.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark_wind.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark_wind.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark_wind.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark_wind_b.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark_wind_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark_wind_b.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark_wind_b.vpcf_c diff --git a/particles/thd2/heroes/marisa/marisa_04_spark_wind_c.vpcf_c b/game/particles/thd2/heroes/marisa/marisa_04_spark_wind_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/marisa/marisa_04_spark_wind_c.vpcf_c rename to game/particles/thd2/heroes/marisa/marisa_04_spark_wind_c.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_a.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_a.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_a.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_a0.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_a0.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_a0.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_a0.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_b.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_b.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_b.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_c.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_c.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_c.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_stage_b.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_stage_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_stage_b.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_stage_b.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_stage_b_a.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_stage_b_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_stage_b_a.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_stage_b_a.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_stage_b_b.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_stage_b_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_stage_b_b.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_stage_b_b.vpcf_c diff --git a/particles/thd2/heroes/miko/ability_miko_01_stage_b_c.vpcf_c b/game/particles/thd2/heroes/miko/ability_miko_01_stage_b_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/miko/ability_miko_01_stage_b_c.vpcf_c rename to game/particles/thd2/heroes/miko/ability_miko_01_stage_b_c.vpcf_c diff --git a/particles/thd2/heroes/mouko/ability_mokou_01_boom.vpcf_c b/game/particles/thd2/heroes/mouko/ability_mokou_01_boom.vpcf_c similarity index 100% rename from particles/thd2/heroes/mouko/ability_mokou_01_boom.vpcf_c rename to game/particles/thd2/heroes/mouko/ability_mokou_01_boom.vpcf_c diff --git a/particles/thd2/heroes/mouko/ability_mokou_02_boom.vpcf_c b/game/particles/thd2/heroes/mouko/ability_mokou_02_boom.vpcf_c similarity index 100% rename from particles/thd2/heroes/mouko/ability_mokou_02_boom.vpcf_c rename to game/particles/thd2/heroes/mouko/ability_mokou_02_boom.vpcf_c diff --git a/particles/thd2/heroes/mouko/ability_mokou_04_wing.vpcf_c b/game/particles/thd2/heroes/mouko/ability_mokou_04_wing.vpcf_c similarity index 100% rename from particles/thd2/heroes/mouko/ability_mokou_04_wing.vpcf_c rename to game/particles/thd2/heroes/mouko/ability_mokou_04_wing.vpcf_c diff --git a/particles/thd2/heroes/mouko/ability_mokou_04_wing_b.vpcf_c b/game/particles/thd2/heroes/mouko/ability_mokou_04_wing_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/mouko/ability_mokou_04_wing_b.vpcf_c rename to game/particles/thd2/heroes/mouko/ability_mokou_04_wing_b.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_01_effect.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_01_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_01_effect.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_01_effect.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_01_effect_b.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_01_effect_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_01_effect_b.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_01_effect_b.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_01_effect_c.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_01_effect_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_01_effect_c.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_01_effect_c.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_01_effect_fire.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_01_effect_fire.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_01_effect_fire.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_01_effect_fire.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_01_effect_light.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_01_effect_light.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_01_effect_light.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_01_effect_light.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_03_effect.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_03_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_03_effect.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_03_effect.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_04_effect.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_04_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_04_effect.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_04_effect.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_04_effect_a.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_04_effect_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_04_effect_a.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_04_effect_a.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_04_effect_b.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_04_effect_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_04_effect_b.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_04_effect_b.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_04_effect_buff.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_04_effect_buff.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_04_effect_buff.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_04_effect_buff.vpcf_c diff --git a/particles/thd2/heroes/reimu/reimu_04_effect_c.vpcf_c b/game/particles/thd2/heroes/reimu/reimu_04_effect_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/reimu/reimu_04_effect_c.vpcf_c rename to game/particles/thd2/heroes/reimu/reimu_04_effect_c.vpcf_c diff --git a/particles/thd2/heroes/rumia/ability_rumia01_effect.vpcf_c b/game/particles/thd2/heroes/rumia/ability_rumia01_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/rumia/ability_rumia01_effect.vpcf_c rename to game/particles/thd2/heroes/rumia/ability_rumia01_effect.vpcf_c diff --git a/particles/thd2/heroes/rumia/ability_rumia01_effect_b.vpcf_c b/game/particles/thd2/heroes/rumia/ability_rumia01_effect_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/rumia/ability_rumia01_effect_b.vpcf_c rename to game/particles/thd2/heroes/rumia/ability_rumia01_effect_b.vpcf_c diff --git a/particles/thd2/heroes/rumia/ability_rumia02_effect.vpcf_c b/game/particles/thd2/heroes/rumia/ability_rumia02_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/rumia/ability_rumia02_effect.vpcf_c rename to game/particles/thd2/heroes/rumia/ability_rumia02_effect.vpcf_c diff --git a/particles/thd2/heroes/sakuya/ability_sakuya_01.vpcf_c b/game/particles/thd2/heroes/sakuya/ability_sakuya_01.vpcf_c similarity index 100% rename from particles/thd2/heroes/sakuya/ability_sakuya_01.vpcf_c rename to game/particles/thd2/heroes/sakuya/ability_sakuya_01.vpcf_c diff --git a/particles/thd2/heroes/sakuya/ability_sakuya_03.vpcf_c b/game/particles/thd2/heroes/sakuya/ability_sakuya_03.vpcf_c similarity index 100% rename from particles/thd2/heroes/sakuya/ability_sakuya_03.vpcf_c rename to game/particles/thd2/heroes/sakuya/ability_sakuya_03.vpcf_c diff --git a/particles/thd2/heroes/sakuya/ability_sakuya_04.vpcf_c b/game/particles/thd2/heroes/sakuya/ability_sakuya_04.vpcf_c similarity index 100% rename from particles/thd2/heroes/sakuya/ability_sakuya_04.vpcf_c rename to game/particles/thd2/heroes/sakuya/ability_sakuya_04.vpcf_c diff --git a/particles/thd2/heroes/sakuya/ability_sakuya_04_a.vpcf_c b/game/particles/thd2/heroes/sakuya/ability_sakuya_04_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/sakuya/ability_sakuya_04_a.vpcf_c rename to game/particles/thd2/heroes/sakuya/ability_sakuya_04_a.vpcf_c diff --git a/particles/thd2/heroes/sakuya/ability_sakuya_04_light.vpcf_c b/game/particles/thd2/heroes/sakuya/ability_sakuya_04_light.vpcf_c similarity index 100% rename from particles/thd2/heroes/sakuya/ability_sakuya_04_light.vpcf_c rename to game/particles/thd2/heroes/sakuya/ability_sakuya_04_light.vpcf_c diff --git a/particles/thd2/heroes/suika/ability_suika_03_effect.vpcf_c b/game/particles/thd2/heroes/suika/ability_suika_03_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/suika/ability_suika_03_effect.vpcf_c rename to game/particles/thd2/heroes/suika/ability_suika_03_effect.vpcf_c diff --git a/particles/thd2/heroes/suika/ability_suika_04_effect.vpcf_c b/game/particles/thd2/heroes/suika/ability_suika_04_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/suika/ability_suika_04_effect.vpcf_c rename to game/particles/thd2/heroes/suika/ability_suika_04_effect.vpcf_c diff --git a/particles/thd2/heroes/thtd_rumia/ability_rumia_03.vpcf_c b/game/particles/thd2/heroes/thtd_rumia/ability_rumia_03.vpcf_c similarity index 100% rename from particles/thd2/heroes/thtd_rumia/ability_rumia_03.vpcf_c rename to game/particles/thd2/heroes/thtd_rumia/ability_rumia_03.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho01_effect.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho01_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho01_effect.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho01_effect.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho03_effect.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho03_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho03_effect.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho03_effect.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho03_effect_a.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho03_effect_a.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_a.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho03_effect_b.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho03_effect_b.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_b.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho03_effect_c.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho03_effect_c.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_c.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho03_effect_d.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho03_effect_d.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho03_effect_d.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise_nuclear.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise_nuclear.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise_nuclear.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_anticlockwise_nuclear.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_clockwise.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_clockwise.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_clockwise.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_clockwise.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_effect.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_effect.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_effect.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_effect_a.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_effect_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_effect_a.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_effect_a.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_effect_b.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_effect_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_effect_b.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_effect_b.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_end.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_end.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_end.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_end.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_exploration.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_exploration.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_exploration.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_exploration.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_exploration_dark.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_exploration_dark.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_exploration_dark.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_exploration_dark.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_firework.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_firework.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_firework.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_firework.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_ripple.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_ripple.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_ripple.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_ripple.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_scorch.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_scorch.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_scorch.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_scorch.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_scorch_b.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_scorch_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_scorch_b.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_scorch_b.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_smoke.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_smoke.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_smoke.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_smoke.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_smoke_lightr.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_smoke_lightr.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_smoke_lightr.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_smoke_lightr.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_spelling_sphere.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_spelling_sphere.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_spelling_sphere.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_spelling_sphere.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_sun.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_sun.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_sun.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_sun.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_wave.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_wave.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_wave.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_wave.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_wave_2.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_wave_2.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_wave_2.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_wave_2.vpcf_c diff --git a/particles/thd2/heroes/utsuho/ability_utsuho04_wave_2_i.vpcf_c b/game/particles/thd2/heroes/utsuho/ability_utsuho04_wave_2_i.vpcf_c similarity index 100% rename from particles/thd2/heroes/utsuho/ability_utsuho04_wave_2_i.vpcf_c rename to game/particles/thd2/heroes/utsuho/ability_utsuho04_wave_2_i.vpcf_c diff --git a/particles/thd2/heroes/youmu/ability_youmu_soul.vpcf_c b/game/particles/thd2/heroes/youmu/ability_youmu_soul.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/ability_youmu_soul.vpcf_c rename to game/particles/thd2/heroes/youmu/ability_youmu_soul.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_01_blink_effect.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_01_blink_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_01_blink_effect.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_01_blink_effect.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_01_blink_effect_a.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_01_blink_effect_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_01_blink_effect_a.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_01_blink_effect_a.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_01_blink_effect_b.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_01_blink_effect_b.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_01_blink_effect_b.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_01_blink_effect_b.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_01_blink_effect_c.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_01_blink_effect_c.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_01_blink_effect_c.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_01_blink_effect_c.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_01_blink_effect_d.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_01_blink_effect_d.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_01_blink_effect_d.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_01_blink_effect_d.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_01_blink_effect_e.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_01_blink_effect_e.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_01_blink_effect_e.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_01_blink_effect_e.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_04_blossoms_effect.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_04_blossoms_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_04_blossoms_effect.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_04_blossoms_effect.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_04_sword_effect.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_04_sword_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_04_sword_effect.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_04_sword_effect.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_04_sword_effect_light.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_04_sword_effect_light.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_04_sword_effect_light.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_04_sword_effect_light.vpcf_c diff --git a/particles/thd2/heroes/youmu/youmu_04_word.vpcf_c b/game/particles/thd2/heroes/youmu/youmu_04_word.vpcf_c similarity index 100% rename from particles/thd2/heroes/youmu/youmu_04_word.vpcf_c rename to game/particles/thd2/heroes/youmu/youmu_04_word.vpcf_c diff --git a/particles/thd2/heroes/yugi/yugi_slam.vpcf_c b/game/particles/thd2/heroes/yugi/yugi_slam.vpcf_c similarity index 100% rename from particles/thd2/heroes/yugi/yugi_slam.vpcf_c rename to game/particles/thd2/heroes/yugi/yugi_slam.vpcf_c diff --git a/particles/thd2/heroes/yugi/yugi_slam_delay.vpcf_c b/game/particles/thd2/heroes/yugi/yugi_slam_delay.vpcf_c similarity index 100% rename from particles/thd2/heroes/yugi/yugi_slam_delay.vpcf_c rename to game/particles/thd2/heroes/yugi/yugi_slam_delay.vpcf_c diff --git a/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c b/game/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c similarity index 100% rename from particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c rename to game/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect.vpcf_c diff --git a/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c b/game/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c similarity index 100% rename from particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c rename to game/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_a.vpcf_c diff --git a/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_g.vpcf_c b/game/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_g.vpcf_c similarity index 100% rename from particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_g.vpcf_c rename to game/particles/thd2/heroes/yuyuko/ability_yuyuko_04_effect_g.vpcf_c diff --git a/particles/thd2/items/item_bad_man_card.vpcf_c b/game/particles/thd2/items/item_bad_man_card.vpcf_c similarity index 100% rename from particles/thd2/items/item_bad_man_card.vpcf_c rename to game/particles/thd2/items/item_bad_man_card.vpcf_c diff --git a/particles/thd2/items/item_ballon.vpcf_c b/game/particles/thd2/items/item_ballon.vpcf_c similarity index 100% rename from particles/thd2/items/item_ballon.vpcf_c rename to game/particles/thd2/items/item_ballon.vpcf_c diff --git a/particles/thd2/items/item_camera.vpcf_c b/game/particles/thd2/items/item_camera.vpcf_c similarity index 100% rename from particles/thd2/items/item_camera.vpcf_c rename to game/particles/thd2/items/item_camera.vpcf_c diff --git a/particles/thd2/items/item_darkred_umbrella_fog_attach.vpcf_c b/game/particles/thd2/items/item_darkred_umbrella_fog_attach.vpcf_c similarity index 100% rename from particles/thd2/items/item_darkred_umbrella_fog_attach.vpcf_c rename to game/particles/thd2/items/item_darkred_umbrella_fog_attach.vpcf_c diff --git a/particles/thd2/items/item_donation_box.vpcf_c b/game/particles/thd2/items/item_donation_box.vpcf_c similarity index 100% rename from particles/thd2/items/item_donation_box.vpcf_c rename to game/particles/thd2/items/item_donation_box.vpcf_c diff --git a/particles/thd2/items/item_donation_box_a.vpcf_c b/game/particles/thd2/items/item_donation_box_a.vpcf_c similarity index 100% rename from particles/thd2/items/item_donation_box_a.vpcf_c rename to game/particles/thd2/items/item_donation_box_a.vpcf_c diff --git a/particles/thd2/items/item_donation_box_b.vpcf_c b/game/particles/thd2/items/item_donation_box_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_donation_box_b.vpcf_c rename to game/particles/thd2/items/item_donation_box_b.vpcf_c diff --git a/particles/thd2/items/item_donation_box_sparkrays.vpcf_c b/game/particles/thd2/items/item_donation_box_sparkrays.vpcf_c similarity index 100% rename from particles/thd2/items/item_donation_box_sparkrays.vpcf_c rename to game/particles/thd2/items/item_donation_box_sparkrays.vpcf_c diff --git a/particles/thd2/items/item_donation_box_sparkrays_a.vpcf_c b/game/particles/thd2/items/item_donation_box_sparkrays_a.vpcf_c similarity index 100% rename from particles/thd2/items/item_donation_box_sparkrays_a.vpcf_c rename to game/particles/thd2/items/item_donation_box_sparkrays_a.vpcf_c diff --git a/particles/thd2/items/item_donation_box_sparkrays_b.vpcf_c b/game/particles/thd2/items/item_donation_box_sparkrays_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_donation_box_sparkrays_b.vpcf_c rename to game/particles/thd2/items/item_donation_box_sparkrays_b.vpcf_c diff --git a/particles/thd2/items/item_dragon_star.vpcf_c b/game/particles/thd2/items/item_dragon_star.vpcf_c similarity index 100% rename from particles/thd2/items/item_dragon_star.vpcf_c rename to game/particles/thd2/items/item_dragon_star.vpcf_c diff --git a/particles/thd2/items/item_frock.vpcf_c b/game/particles/thd2/items/item_frock.vpcf_c similarity index 100% rename from particles/thd2/items/item_frock.vpcf_c rename to game/particles/thd2/items/item_frock.vpcf_c diff --git a/particles/thd2/items/item_frock_b.vpcf_c b/game/particles/thd2/items/item_frock_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_frock_b.vpcf_c rename to game/particles/thd2/items/item_frock_b.vpcf_c diff --git a/particles/thd2/items/item_good_man_card.vpcf_c b/game/particles/thd2/items/item_good_man_card.vpcf_c similarity index 100% rename from particles/thd2/items/item_good_man_card.vpcf_c rename to game/particles/thd2/items/item_good_man_card.vpcf_c diff --git a/particles/thd2/items/item_kafziel.vpcf_c b/game/particles/thd2/items/item_kafziel.vpcf_c similarity index 100% rename from particles/thd2/items/item_kafziel.vpcf_c rename to game/particles/thd2/items/item_kafziel.vpcf_c diff --git a/particles/thd2/items/item_lily.vpcf_c b/game/particles/thd2/items/item_lily.vpcf_c similarity index 100% rename from particles/thd2/items/item_lily.vpcf_c rename to game/particles/thd2/items/item_lily.vpcf_c diff --git a/particles/thd2/items/item_love_man_card.vpcf_c b/game/particles/thd2/items/item_love_man_card.vpcf_c similarity index 100% rename from particles/thd2/items/item_love_man_card.vpcf_c rename to game/particles/thd2/items/item_love_man_card.vpcf_c diff --git a/particles/thd2/items/item_moon_bow.vpcf_c b/game/particles/thd2/items/item_moon_bow.vpcf_c similarity index 100% rename from particles/thd2/items/item_moon_bow.vpcf_c rename to game/particles/thd2/items/item_moon_bow.vpcf_c diff --git a/particles/thd2/items/item_morenjingjuan.vpcf_c b/game/particles/thd2/items/item_morenjingjuan.vpcf_c similarity index 100% rename from particles/thd2/items/item_morenjingjuan.vpcf_c rename to game/particles/thd2/items/item_morenjingjuan.vpcf_c diff --git a/particles/thd2/items/item_morenjingjuan_a.vpcf_c b/game/particles/thd2/items/item_morenjingjuan_a.vpcf_c similarity index 100% rename from particles/thd2/items/item_morenjingjuan_a.vpcf_c rename to game/particles/thd2/items/item_morenjingjuan_a.vpcf_c diff --git a/particles/thd2/items/item_morenjingjuan_b.vpcf_c b/game/particles/thd2/items/item_morenjingjuan_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_morenjingjuan_b.vpcf_c rename to game/particles/thd2/items/item_morenjingjuan_b.vpcf_c diff --git a/particles/thd2/items/item_morenjingjuan_c.vpcf_c b/game/particles/thd2/items/item_morenjingjuan_c.vpcf_c similarity index 100% rename from particles/thd2/items/item_morenjingjuan_c.vpcf_c rename to game/particles/thd2/items/item_morenjingjuan_c.vpcf_c diff --git a/particles/thd2/items/item_morenjingjuan_d.vpcf_c b/game/particles/thd2/items/item_morenjingjuan_d.vpcf_c similarity index 100% rename from particles/thd2/items/item_morenjingjuan_d.vpcf_c rename to game/particles/thd2/items/item_morenjingjuan_d.vpcf_c diff --git a/particles/thd2/items/item_mr_yang.vpcf_c b/game/particles/thd2/items/item_mr_yang.vpcf_c similarity index 100% rename from particles/thd2/items/item_mr_yang.vpcf_c rename to game/particles/thd2/items/item_mr_yang.vpcf_c diff --git a/particles/thd2/items/item_phoenix_wing.vpcf_c b/game/particles/thd2/items/item_phoenix_wing.vpcf_c similarity index 100% rename from particles/thd2/items/item_phoenix_wing.vpcf_c rename to game/particles/thd2/items/item_phoenix_wing.vpcf_c diff --git a/particles/thd2/items/item_pocket_watch.vpcf_c b/game/particles/thd2/items/item_pocket_watch.vpcf_c similarity index 100% rename from particles/thd2/items/item_pocket_watch.vpcf_c rename to game/particles/thd2/items/item_pocket_watch.vpcf_c diff --git a/particles/thd2/items/item_pocket_watch_b.vpcf_c b/game/particles/thd2/items/item_pocket_watch_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_pocket_watch_b.vpcf_c rename to game/particles/thd2/items/item_pocket_watch_b.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing.vpcf_c b/game/particles/thd2/items/item_qijizhixing.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing.vpcf_c rename to game/particles/thd2/items/item_qijizhixing.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_a.vpcf_c b/game/particles/thd2/items/item_qijizhixing_a.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_a.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_a.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_b.vpcf_c b/game/particles/thd2/items/item_qijizhixing_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_b.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_b.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_c.vpcf_c b/game/particles/thd2/items/item_qijizhixing_c.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_c.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_c.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_d.vpcf_c b/game/particles/thd2/items/item_qijizhixing_d.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_d.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_d.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_e.vpcf_c b/game/particles/thd2/items/item_qijizhixing_e.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_e.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_e.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_f.vpcf_c b/game/particles/thd2/items/item_qijizhixing_f.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_f.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_f.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_g.vpcf_c b/game/particles/thd2/items/item_qijizhixing_g.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_g.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_g.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_h.vpcf_c b/game/particles/thd2/items/item_qijizhixing_h.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_h.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_h.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_i.vpcf_c b/game/particles/thd2/items/item_qijizhixing_i.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_i.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_i.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_j.vpcf_c b/game/particles/thd2/items/item_qijizhixing_j.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_j.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_j.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_k.vpcf_c b/game/particles/thd2/items/item_qijizhixing_k.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_k.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_k.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_l.vpcf_c b/game/particles/thd2/items/item_qijizhixing_l.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_l.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_l.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_m.vpcf_c b/game/particles/thd2/items/item_qijizhixing_m.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_m.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_m.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_n.vpcf_c b/game/particles/thd2/items/item_qijizhixing_n.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_n.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_n.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_o.vpcf_c b/game/particles/thd2/items/item_qijizhixing_o.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_o.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_o.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_p.vpcf_c b/game/particles/thd2/items/item_qijizhixing_p.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_p.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_p.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_q.vpcf_c b/game/particles/thd2/items/item_qijizhixing_q.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_q.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_q.vpcf_c diff --git a/particles/thd2/items/item_qijizhixing_r.vpcf_c b/game/particles/thd2/items/item_qijizhixing_r.vpcf_c similarity index 100% rename from particles/thd2/items/item_qijizhixing_r.vpcf_c rename to game/particles/thd2/items/item_qijizhixing_r.vpcf_c diff --git a/particles/thd2/items/item_rocket.vpcf_c b/game/particles/thd2/items/item_rocket.vpcf_c similarity index 100% rename from particles/thd2/items/item_rocket.vpcf_c rename to game/particles/thd2/items/item_rocket.vpcf_c diff --git a/particles/thd2/items/item_shizijia.vpcf_c b/game/particles/thd2/items/item_shizijia.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia.vpcf_c rename to game/particles/thd2/items/item_shizijia.vpcf_c diff --git a/particles/thd2/items/item_shizijia_a.vpcf_c b/game/particles/thd2/items/item_shizijia_a.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_a.vpcf_c rename to game/particles/thd2/items/item_shizijia_a.vpcf_c diff --git a/particles/thd2/items/item_shizijia_b.vpcf_c b/game/particles/thd2/items/item_shizijia_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_b.vpcf_c rename to game/particles/thd2/items/item_shizijia_b.vpcf_c diff --git a/particles/thd2/items/item_shizijia_b0.vpcf_c b/game/particles/thd2/items/item_shizijia_b0.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_b0.vpcf_c rename to game/particles/thd2/items/item_shizijia_b0.vpcf_c diff --git a/particles/thd2/items/item_shizijia_b0a.vpcf_c b/game/particles/thd2/items/item_shizijia_b0a.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_b0a.vpcf_c rename to game/particles/thd2/items/item_shizijia_b0a.vpcf_c diff --git a/particles/thd2/items/item_shizijia_b1.vpcf_c b/game/particles/thd2/items/item_shizijia_b1.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_b1.vpcf_c rename to game/particles/thd2/items/item_shizijia_b1.vpcf_c diff --git a/particles/thd2/items/item_shizijia_b1a.vpcf_c b/game/particles/thd2/items/item_shizijia_b1a.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_b1a.vpcf_c rename to game/particles/thd2/items/item_shizijia_b1a.vpcf_c diff --git a/particles/thd2/items/item_shizijia_b2.vpcf_c b/game/particles/thd2/items/item_shizijia_b2.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_b2.vpcf_c rename to game/particles/thd2/items/item_shizijia_b2.vpcf_c diff --git a/particles/thd2/items/item_shizijia_b3.vpcf_c b/game/particles/thd2/items/item_shizijia_b3.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_b3.vpcf_c rename to game/particles/thd2/items/item_shizijia_b3.vpcf_c diff --git a/particles/thd2/items/item_shizijia_c.vpcf_c b/game/particles/thd2/items/item_shizijia_c.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_c.vpcf_c rename to game/particles/thd2/items/item_shizijia_c.vpcf_c diff --git a/particles/thd2/items/item_shizijia_c0.vpcf_c b/game/particles/thd2/items/item_shizijia_c0.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_c0.vpcf_c rename to game/particles/thd2/items/item_shizijia_c0.vpcf_c diff --git a/particles/thd2/items/item_shizijia_d.vpcf_c b/game/particles/thd2/items/item_shizijia_d.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_d.vpcf_c rename to game/particles/thd2/items/item_shizijia_d.vpcf_c diff --git a/particles/thd2/items/item_shizijia_d0.vpcf_c b/game/particles/thd2/items/item_shizijia_d0.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_d0.vpcf_c rename to game/particles/thd2/items/item_shizijia_d0.vpcf_c diff --git a/particles/thd2/items/item_shizijia_d1.vpcf_c b/game/particles/thd2/items/item_shizijia_d1.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_d1.vpcf_c rename to game/particles/thd2/items/item_shizijia_d1.vpcf_c diff --git a/particles/thd2/items/item_shizijia_d2.vpcf_c b/game/particles/thd2/items/item_shizijia_d2.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_d2.vpcf_c rename to game/particles/thd2/items/item_shizijia_d2.vpcf_c diff --git a/particles/thd2/items/item_shizijia_d3.vpcf_c b/game/particles/thd2/items/item_shizijia_d3.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_d3.vpcf_c rename to game/particles/thd2/items/item_shizijia_d3.vpcf_c diff --git a/particles/thd2/items/item_shizijia_d4.vpcf_c b/game/particles/thd2/items/item_shizijia_d4.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_d4.vpcf_c rename to game/particles/thd2/items/item_shizijia_d4.vpcf_c diff --git a/particles/thd2/items/item_shizijia_e.vpcf_c b/game/particles/thd2/items/item_shizijia_e.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_e.vpcf_c rename to game/particles/thd2/items/item_shizijia_e.vpcf_c diff --git a/particles/thd2/items/item_shizijia_f.vpcf_c b/game/particles/thd2/items/item_shizijia_f.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_f.vpcf_c rename to game/particles/thd2/items/item_shizijia_f.vpcf_c diff --git a/particles/thd2/items/item_shizijia_g.vpcf_c b/game/particles/thd2/items/item_shizijia_g.vpcf_c similarity index 100% rename from particles/thd2/items/item_shizijia_g.vpcf_c rename to game/particles/thd2/items/item_shizijia_g.vpcf_c diff --git a/particles/thd2/items/item_tsundere.vpcf_c b/game/particles/thd2/items/item_tsundere.vpcf_c similarity index 100% rename from particles/thd2/items/item_tsundere.vpcf_c rename to game/particles/thd2/items/item_tsundere.vpcf_c diff --git a/particles/thd2/items/item_unlucky_man_card.vpcf_c b/game/particles/thd2/items/item_unlucky_man_card.vpcf_c similarity index 100% rename from particles/thd2/items/item_unlucky_man_card.vpcf_c rename to game/particles/thd2/items/item_unlucky_man_card.vpcf_c diff --git a/particles/thd2/items/item_yatagarasu.vpcf_c b/game/particles/thd2/items/item_yatagarasu.vpcf_c similarity index 100% rename from particles/thd2/items/item_yatagarasu.vpcf_c rename to game/particles/thd2/items/item_yatagarasu.vpcf_c diff --git a/particles/thd2/items/item_zaiezhizhu_b.vpcf_c b/game/particles/thd2/items/item_zaiezhizhu_b.vpcf_c similarity index 100% rename from particles/thd2/items/item_zaiezhizhu_b.vpcf_c rename to game/particles/thd2/items/item_zaiezhizhu_b.vpcf_c diff --git a/particles/thd2/items/item_zaiezhizhurenxing.vpcf_c b/game/particles/thd2/items/item_zaiezhizhurenxing.vpcf_c similarity index 100% rename from particles/thd2/items/item_zaiezhizhurenxing.vpcf_c rename to game/particles/thd2/items/item_zaiezhizhurenxing.vpcf_c diff --git a/particles/thd2/tiaotai.vpcf_c b/game/particles/thd2/tiaotai.vpcf_c similarity index 100% rename from particles/thd2/tiaotai.vpcf_c rename to game/particles/thd2/tiaotai.vpcf_c diff --git a/particles/thd2/wenquan.vpcf_c b/game/particles/thd2/wenquan.vpcf_c similarity index 100% rename from particles/thd2/wenquan.vpcf_c rename to game/particles/thd2/wenquan.vpcf_c diff --git a/particles/thtd/emoji/thtd_msg_hongliange.vpcf_c b/game/particles/thtd/emoji/thtd_msg_hongliange.vpcf_c similarity index 100% rename from particles/thtd/emoji/thtd_msg_hongliange.vpcf_c rename to game/particles/thtd/emoji/thtd_msg_hongliange.vpcf_c diff --git a/particles/thtd/msg/thtd_msg_food.vpcf_c b/game/particles/thtd/msg/thtd_msg_food.vpcf_c similarity index 100% rename from particles/thtd/msg/thtd_msg_food.vpcf_c rename to game/particles/thtd/msg/thtd_msg_food.vpcf_c diff --git a/particles/thtd/msg/thtd_msg_level.vpcf_c b/game/particles/thtd/msg/thtd_msg_level.vpcf_c similarity index 100% rename from particles/thtd/msg/thtd_msg_level.vpcf_c rename to game/particles/thtd/msg/thtd_msg_level.vpcf_c diff --git a/particles/thtd/msg/thtd_msg_star.vpcf_c b/game/particles/thtd/msg/thtd_msg_star.vpcf_c similarity index 100% rename from particles/thtd/msg/thtd_msg_star.vpcf_c rename to game/particles/thtd/msg/thtd_msg_star.vpcf_c diff --git a/particles/thtd_item/ability_item_2022.vpcf_c b/game/particles/thtd_item/ability_item_2022.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022.vpcf_c rename to game/particles/thtd_item/ability_item_2022.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_a.vpcf_c b/game/particles/thtd_item/ability_item_2022_a.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_a.vpcf_c rename to game/particles/thtd_item/ability_item_2022_a.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_b.vpcf_c b/game/particles/thtd_item/ability_item_2022_b.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_b.vpcf_c rename to game/particles/thtd_item/ability_item_2022_b.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_c.vpcf_c b/game/particles/thtd_item/ability_item_2022_c.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_c.vpcf_c rename to game/particles/thtd_item/ability_item_2022_c.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_d.vpcf_c b/game/particles/thtd_item/ability_item_2022_d.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_d.vpcf_c rename to game/particles/thtd_item/ability_item_2022_d.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_e.vpcf_c b/game/particles/thtd_item/ability_item_2022_e.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_e.vpcf_c rename to game/particles/thtd_item/ability_item_2022_e.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_f.vpcf_c b/game/particles/thtd_item/ability_item_2022_f.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_f.vpcf_c rename to game/particles/thtd_item/ability_item_2022_f.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_g.vpcf_c b/game/particles/thtd_item/ability_item_2022_g.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_g.vpcf_c rename to game/particles/thtd_item/ability_item_2022_g.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_h.vpcf_c b/game/particles/thtd_item/ability_item_2022_h.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_h.vpcf_c rename to game/particles/thtd_item/ability_item_2022_h.vpcf_c diff --git a/particles/thtd_item/ability_item_2022_i.vpcf_c b/game/particles/thtd_item/ability_item_2022_i.vpcf_c similarity index 100% rename from particles/thtd_item/ability_item_2022_i.vpcf_c rename to game/particles/thtd_item/ability_item_2022_i.vpcf_c diff --git a/particles/ui/attacking_process.vpcf_c b/game/particles/ui/attacking_process.vpcf_c similarity index 100% rename from particles/ui/attacking_process.vpcf_c rename to game/particles/ui/attacking_process.vpcf_c diff --git a/particles/ui/card_bar.vpcf_c b/game/particles/ui/card_bar.vpcf_c similarity index 100% rename from particles/ui/card_bar.vpcf_c rename to game/particles/ui/card_bar.vpcf_c diff --git a/particles/ui/card_bar_a.vpcf_c b/game/particles/ui/card_bar_a.vpcf_c similarity index 100% rename from particles/ui/card_bar_a.vpcf_c rename to game/particles/ui/card_bar_a.vpcf_c diff --git a/particles/ui/card_bar_sr.vpcf_c b/game/particles/ui/card_bar_sr.vpcf_c similarity index 100% rename from particles/ui/card_bar_sr.vpcf_c rename to game/particles/ui/card_bar_sr.vpcf_c diff --git a/particles/ui/card_bar_sr_a.vpcf_c b/game/particles/ui/card_bar_sr_a.vpcf_c similarity index 100% rename from particles/ui/card_bar_sr_a.vpcf_c rename to game/particles/ui/card_bar_sr_a.vpcf_c diff --git a/particles/ui/card_bar_ssr.vpcf_c b/game/particles/ui/card_bar_ssr.vpcf_c similarity index 100% rename from particles/ui/card_bar_ssr.vpcf_c rename to game/particles/ui/card_bar_ssr.vpcf_c diff --git a/particles/ui/card_bar_ssr_a.vpcf_c b/game/particles/ui/card_bar_ssr_a.vpcf_c similarity index 100% rename from particles/ui/card_bar_ssr_a.vpcf_c rename to game/particles/ui/card_bar_ssr_a.vpcf_c diff --git a/particles/ui/clicked.vpcf_c b/game/particles/ui/clicked.vpcf_c similarity index 100% rename from particles/ui/clicked.vpcf_c rename to game/particles/ui/clicked.vpcf_c diff --git a/particles/ui/clicked_point.vpcf_c b/game/particles/ui/clicked_point.vpcf_c similarity index 100% rename from particles/ui/clicked_point.vpcf_c rename to game/particles/ui/clicked_point.vpcf_c diff --git a/particles/ui/clicked_point_a.vpcf_c b/game/particles/ui/clicked_point_a.vpcf_c similarity index 100% rename from particles/ui/clicked_point_a.vpcf_c rename to game/particles/ui/clicked_point_a.vpcf_c diff --git a/particles/ui/draw_card_success.vpcf_c b/game/particles/ui/draw_card_success.vpcf_c similarity index 100% rename from particles/ui/draw_card_success.vpcf_c rename to game/particles/ui/draw_card_success.vpcf_c diff --git a/particles/ui/select_card.vpcf_c b/game/particles/ui/select_card.vpcf_c similarity index 100% rename from particles/ui/select_card.vpcf_c rename to game/particles/ui/select_card.vpcf_c diff --git a/particles/ui/wait_extract_card.vpcf_c b/game/particles/ui/wait_extract_card.vpcf_c similarity index 100% rename from particles/ui/wait_extract_card.vpcf_c rename to game/particles/ui/wait_extract_card.vpcf_c diff --git a/particles/units/heroes/hero_abaddon/abaddon_aphotic_shield_explosion_wave.vpcf_c b/game/particles/units/heroes/hero_abaddon/abaddon_aphotic_shield_explosion_wave.vpcf_c similarity index 100% rename from particles/units/heroes/hero_abaddon/abaddon_aphotic_shield_explosion_wave.vpcf_c rename to game/particles/units/heroes/hero_abaddon/abaddon_aphotic_shield_explosion_wave.vpcf_c diff --git a/particles/units/heroes/hero_bane/bane_fiendsgrip_blob.vpcf_c b/game/particles/units/heroes/hero_bane/bane_fiendsgrip_blob.vpcf_c similarity index 100% rename from particles/units/heroes/hero_bane/bane_fiendsgrip_blob.vpcf_c rename to game/particles/units/heroes/hero_bane/bane_fiendsgrip_blob.vpcf_c diff --git a/particles/units/heroes/hero_bane/bane_nightmare.vpcf_c b/game/particles/units/heroes/hero_bane/bane_nightmare.vpcf_c similarity index 100% rename from particles/units/heroes/hero_bane/bane_nightmare.vpcf_c rename to game/particles/units/heroes/hero_bane/bane_nightmare.vpcf_c diff --git a/particles/units/heroes/hero_bane/bane_nightmare_inkblots_thick.vpcf_c b/game/particles/units/heroes/hero_bane/bane_nightmare_inkblots_thick.vpcf_c similarity index 100% rename from particles/units/heroes/hero_bane/bane_nightmare_inkblots_thick.vpcf_c rename to game/particles/units/heroes/hero_bane/bane_nightmare_inkblots_thick.vpcf_c diff --git a/particles/units/heroes/hero_batrider/batrider_firefly_startflash.vpcf_c b/game/particles/units/heroes/hero_batrider/batrider_firefly_startflash.vpcf_c similarity index 100% rename from particles/units/heroes/hero_batrider/batrider_firefly_startflash.vpcf_c rename to game/particles/units/heroes/hero_batrider/batrider_firefly_startflash.vpcf_c diff --git a/particles/units/heroes/hero_batrider/batrider_flamebreak.vpcf_c b/game/particles/units/heroes/hero_batrider/batrider_flamebreak.vpcf_c similarity index 100% rename from particles/units/heroes/hero_batrider/batrider_flamebreak.vpcf_c rename to game/particles/units/heroes/hero_batrider/batrider_flamebreak.vpcf_c diff --git a/particles/units/heroes/hero_batrider/batrider_flamebreak_explosion_g.vpcf_c b/game/particles/units/heroes/hero_batrider/batrider_flamebreak_explosion_g.vpcf_c similarity index 100% rename from particles/units/heroes/hero_batrider/batrider_flamebreak_explosion_g.vpcf_c rename to game/particles/units/heroes/hero_batrider/batrider_flamebreak_explosion_g.vpcf_c diff --git a/particles/units/heroes/hero_beastmaster/beastmaster_primal_roar_dust.vpcf_c b/game/particles/units/heroes/hero_beastmaster/beastmaster_primal_roar_dust.vpcf_c similarity index 100% rename from particles/units/heroes/hero_beastmaster/beastmaster_primal_roar_dust.vpcf_c rename to game/particles/units/heroes/hero_beastmaster/beastmaster_primal_roar_dust.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_cyclone.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_cyclone.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_distort.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_distort.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_cyclone_distort.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_distort.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_energy.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_energy.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_cyclone_energy.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_energy.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_glow.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_cyclone_glow.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_cyclone_glow.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_pulverize.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_pulverize.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock_b.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock_b.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_shock_b.vpcf_c diff --git a/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_soil.vpcf_c b/game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_soil.vpcf_c similarity index 100% rename from particles/units/heroes/hero_brewmaster/brewmaster_pulverize_soil.vpcf_c rename to game/particles/units/heroes/hero_brewmaster/brewmaster_pulverize_soil.vpcf_c diff --git a/particles/units/heroes/hero_chen/chen_holy_persuasion_d.vpcf_c b/game/particles/units/heroes/hero_chen/chen_holy_persuasion_d.vpcf_c similarity index 100% rename from particles/units/heroes/hero_chen/chen_holy_persuasion_d.vpcf_c rename to game/particles/units/heroes/hero_chen/chen_holy_persuasion_d.vpcf_c diff --git a/particles/units/heroes/hero_chen/chen_holy_persuasion_e.vpcf_c b/game/particles/units/heroes/hero_chen/chen_holy_persuasion_e.vpcf_c similarity index 100% rename from particles/units/heroes/hero_chen/chen_holy_persuasion_e.vpcf_c rename to game/particles/units/heroes/hero_chen/chen_holy_persuasion_e.vpcf_c diff --git a/particles/units/heroes/hero_clinkz/clinkz_body_fire.vpcf_c b/game/particles/units/heroes/hero_clinkz/clinkz_body_fire.vpcf_c similarity index 100% rename from particles/units/heroes/hero_clinkz/clinkz_body_fire.vpcf_c rename to game/particles/units/heroes/hero_clinkz/clinkz_body_fire.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats_blur.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats_blur.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats_blur.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_bats_blur.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core01.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core01.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core01.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core01.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core02.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core02.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core02.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_core02.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnbits.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnbits.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnbits.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnbits.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnsmoke.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnsmoke.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnsmoke.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnsmoke.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnswirl.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnswirl.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnswirl.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_carrion_swarm_spawnswirl.vpcf_c diff --git a/particles/units/heroes/hero_death_prophet/death_prophet_spirit_model.vpcf_c b/game/particles/units/heroes/hero_death_prophet/death_prophet_spirit_model.vpcf_c similarity index 100% rename from particles/units/heroes/hero_death_prophet/death_prophet_spirit_model.vpcf_c rename to game/particles/units/heroes/hero_death_prophet/death_prophet_spirit_model.vpcf_c diff --git a/particles/units/heroes/hero_doom_bringer/doom_bringer_ambient.vpcf_c b/game/particles/units/heroes/hero_doom_bringer/doom_bringer_ambient.vpcf_c similarity index 100% rename from particles/units/heroes/hero_doom_bringer/doom_bringer_ambient.vpcf_c rename to game/particles/units/heroes/hero_doom_bringer/doom_bringer_ambient.vpcf_c diff --git a/particles/units/heroes/hero_doom_bringer/doom_bringer_ambient_b.vpcf_c b/game/particles/units/heroes/hero_doom_bringer/doom_bringer_ambient_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_doom_bringer/doom_bringer_ambient_b.vpcf_c rename to game/particles/units/heroes/hero_doom_bringer/doom_bringer_ambient_b.vpcf_c diff --git a/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_b.vpcf_c b/game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_b.vpcf_c rename to game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_b.vpcf_c diff --git a/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_c.vpcf_c b/game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_c.vpcf_c rename to game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_c.vpcf_c diff --git a/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_d.vpcf_c b/game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_d.vpcf_c similarity index 100% rename from particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_d.vpcf_c rename to game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_d.vpcf_c diff --git a/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_e.vpcf_c b/game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_e.vpcf_c similarity index 100% rename from particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_e.vpcf_c rename to game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_ring_e.vpcf_c diff --git a/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_sigil_c.vpcf_c b/game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_sigil_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_doom_bringer/doom_bringer_doom_sigil_c.vpcf_c rename to game/particles/units/heroes/hero_doom_bringer/doom_bringer_doom_sigil_c.vpcf_c diff --git a/particles/units/heroes/hero_ember_spirit/ember_spirit_remnant_dash_trail_base.vpcf_c b/game/particles/units/heroes/hero_ember_spirit/ember_spirit_remnant_dash_trail_base.vpcf_c similarity index 100% rename from particles/units/heroes/hero_ember_spirit/ember_spirit_remnant_dash_trail_base.vpcf_c rename to game/particles/units/heroes/hero_ember_spirit/ember_spirit_remnant_dash_trail_base.vpcf_c diff --git a/particles/units/heroes/hero_invoker/invoker_base_attack.vpcf_c b/game/particles/units/heroes/hero_invoker/invoker_base_attack.vpcf_c similarity index 100% rename from particles/units/heroes/hero_invoker/invoker_base_attack.vpcf_c rename to game/particles/units/heroes/hero_invoker/invoker_base_attack.vpcf_c diff --git a/particles/units/heroes/hero_invoker/invoker_ice_wall_shards.vpcf_c b/game/particles/units/heroes/hero_invoker/invoker_ice_wall_shards.vpcf_c similarity index 100% rename from particles/units/heroes/hero_invoker/invoker_ice_wall_shards.vpcf_c rename to game/particles/units/heroes/hero_invoker/invoker_ice_wall_shards.vpcf_c diff --git a/particles/units/heroes/hero_invoker/invoker_ice_wall_snow_ground.vpcf_c b/game/particles/units/heroes/hero_invoker/invoker_ice_wall_snow_ground.vpcf_c similarity index 100% rename from particles/units/heroes/hero_invoker/invoker_ice_wall_snow_ground.vpcf_c rename to game/particles/units/heroes/hero_invoker/invoker_ice_wall_snow_ground.vpcf_c diff --git a/particles/units/heroes/hero_invoker/invoker_sun_strike.vpcf_c b/game/particles/units/heroes/hero_invoker/invoker_sun_strike.vpcf_c similarity index 100% rename from particles/units/heroes/hero_invoker/invoker_sun_strike.vpcf_c rename to game/particles/units/heroes/hero_invoker/invoker_sun_strike.vpcf_c diff --git a/particles/units/heroes/hero_jakiro/jakiro_base_attack_fire_ember_trail.vpcf_c b/game/particles/units/heroes/hero_jakiro/jakiro_base_attack_fire_ember_trail.vpcf_c similarity index 100% rename from particles/units/heroes/hero_jakiro/jakiro_base_attack_fire_ember_trail.vpcf_c rename to game/particles/units/heroes/hero_jakiro/jakiro_base_attack_fire_ember_trail.vpcf_c diff --git a/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_beam.vpcf_c b/game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_beam.vpcf_c similarity index 100% rename from particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_beam.vpcf_c rename to game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_beam.vpcf_c diff --git a/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring.vpcf_c b/game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring.vpcf_c similarity index 100% rename from particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring.vpcf_c rename to game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring.vpcf_c diff --git a/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring02.vpcf_c b/game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring02.vpcf_c similarity index 100% rename from particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring02.vpcf_c rename to game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_cast_ring02.vpcf_c diff --git a/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_glow.vpcf_c b/game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_glow.vpcf_c rename to game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_glow.vpcf_c diff --git a/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ground.vpcf_c b/game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ground.vpcf_c similarity index 100% rename from particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ground.vpcf_c rename to game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ground.vpcf_c diff --git a/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ring.vpcf_c b/game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ring.vpcf_c similarity index 100% rename from particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ring.vpcf_c rename to game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_ring.vpcf_c diff --git a/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_spiral.vpcf_c b/game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_spiral.vpcf_c similarity index 100% rename from particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_spiral.vpcf_c rename to game/particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic_spiral.vpcf_c diff --git a/particles/units/heroes/hero_leshrac/leshrac_pulse_nova_h.vpcf_c b/game/particles/units/heroes/hero_leshrac/leshrac_pulse_nova_h.vpcf_c similarity index 100% rename from particles/units/heroes/hero_leshrac/leshrac_pulse_nova_h.vpcf_c rename to game/particles/units/heroes/hero_leshrac/leshrac_pulse_nova_h.vpcf_c diff --git a/particles/units/heroes/hero_leshrac/leshrac_pulse_nova_i.vpcf_c b/game/particles/units/heroes/hero_leshrac/leshrac_pulse_nova_i.vpcf_c similarity index 100% rename from particles/units/heroes/hero_leshrac/leshrac_pulse_nova_i.vpcf_c rename to game/particles/units/heroes/hero_leshrac/leshrac_pulse_nova_i.vpcf_c diff --git a/particles/units/heroes/hero_lion/lion_base_attack.vpcf_c b/game/particles/units/heroes/hero_lion/lion_base_attack.vpcf_c similarity index 100% rename from particles/units/heroes/hero_lion/lion_base_attack.vpcf_c rename to game/particles/units/heroes/hero_lion/lion_base_attack.vpcf_c diff --git a/particles/units/heroes/hero_lion/lion_base_attack_arcs.vpcf_c b/game/particles/units/heroes/hero_lion/lion_base_attack_arcs.vpcf_c similarity index 100% rename from particles/units/heroes/hero_lion/lion_base_attack_arcs.vpcf_c rename to game/particles/units/heroes/hero_lion/lion_base_attack_arcs.vpcf_c diff --git a/particles/units/heroes/hero_lion/lion_base_attack_fingera.vpcf_c b/game/particles/units/heroes/hero_lion/lion_base_attack_fingera.vpcf_c similarity index 100% rename from particles/units/heroes/hero_lion/lion_base_attack_fingera.vpcf_c rename to game/particles/units/heroes/hero_lion/lion_base_attack_fingera.vpcf_c diff --git a/particles/units/heroes/hero_lion/lion_base_attack_glow.vpcf_c b/game/particles/units/heroes/hero_lion/lion_base_attack_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_lion/lion_base_attack_glow.vpcf_c rename to game/particles/units/heroes/hero_lion/lion_base_attack_glow.vpcf_c diff --git a/particles/units/heroes/hero_lion/lion_base_attack_launch_glow.vpcf_c b/game/particles/units/heroes/hero_lion/lion_base_attack_launch_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_lion/lion_base_attack_launch_glow.vpcf_c rename to game/particles/units/heroes/hero_lion/lion_base_attack_launch_glow.vpcf_c diff --git a/particles/units/heroes/hero_lion/lion_base_attack_trail.vpcf_c b/game/particles/units/heroes/hero_lion/lion_base_attack_trail.vpcf_c similarity index 100% rename from particles/units/heroes/hero_lion/lion_base_attack_trail.vpcf_c rename to game/particles/units/heroes/hero_lion/lion_base_attack_trail.vpcf_c diff --git a/particles/units/heroes/hero_mirana/mirana_moonlight_owner.vpcf_c b/game/particles/units/heroes/hero_mirana/mirana_moonlight_owner.vpcf_c similarity index 100% rename from particles/units/heroes/hero_mirana/mirana_moonlight_owner.vpcf_c rename to game/particles/units/heroes/hero_mirana/mirana_moonlight_owner.vpcf_c diff --git a/particles/units/heroes/hero_mirana/mirana_moonlight_owner_b.vpcf_c b/game/particles/units/heroes/hero_mirana/mirana_moonlight_owner_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_mirana/mirana_moonlight_owner_b.vpcf_c rename to game/particles/units/heroes/hero_mirana/mirana_moonlight_owner_b.vpcf_c diff --git a/particles/units/heroes/hero_mirana/mirana_moonlight_owner_c.vpcf_c b/game/particles/units/heroes/hero_mirana/mirana_moonlight_owner_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_mirana/mirana_moonlight_owner_c.vpcf_c rename to game/particles/units/heroes/hero_mirana/mirana_moonlight_owner_c.vpcf_c diff --git a/particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction.vpcf_c b/game/particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction.vpcf_c similarity index 100% rename from particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction.vpcf_c rename to game/particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction.vpcf_c diff --git a/particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction_sparkles.vpcf_c b/game/particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction_sparkles.vpcf_c similarity index 100% rename from particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction_sparkles.vpcf_c rename to game/particles/units/heroes/hero_mirana/mirana_spell_arrow_destruction_sparkles.vpcf_c diff --git a/particles/units/heroes/hero_mirana/mirana_spell_arrow_ribbon_b.vpcf_c b/game/particles/units/heroes/hero_mirana/mirana_spell_arrow_ribbon_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_mirana/mirana_spell_arrow_ribbon_b.vpcf_c rename to game/particles/units/heroes/hero_mirana/mirana_spell_arrow_ribbon_b.vpcf_c diff --git a/particles/units/heroes/hero_mirana/mirana_starfall_attack.vpcf_c b/game/particles/units/heroes/hero_mirana/mirana_starfall_attack.vpcf_c similarity index 100% rename from particles/units/heroes/hero_mirana/mirana_starfall_attack.vpcf_c rename to game/particles/units/heroes/hero_mirana/mirana_starfall_attack.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_cloud.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_cloud.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_cloud.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_cloud.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_b.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_b.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_b.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash_b.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash_b.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_explosion_flash_b.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_flash.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_flash.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_flash.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_flash.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_gas.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_gas.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_gas.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_gas.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_glow.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_glow.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_glow.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_b.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_b.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_b.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_exp.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_exp.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_exp.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_exp.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_glow.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_glow.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_launch_glow.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_swirl.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_swirl.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_swirl.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_swirl.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_b.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_b.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_b.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_c.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_c.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_c.vpcf_c diff --git a/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_noise.vpcf_c b/game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_noise.vpcf_c similarity index 100% rename from particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_noise.vpcf_c rename to game/particles/units/heroes/hero_necrolyte/necrolyte_base_attack_trail_noise.vpcf_c diff --git a/particles/units/heroes/hero_obsidian_destroyer/obsidian_death_model.vpcf_c b/game/particles/units/heroes/hero_obsidian_destroyer/obsidian_death_model.vpcf_c similarity index 100% rename from particles/units/heroes/hero_obsidian_destroyer/obsidian_death_model.vpcf_c rename to game/particles/units/heroes/hero_obsidian_destroyer/obsidian_death_model.vpcf_c diff --git a/particles/units/heroes/hero_omniknight/omniknight_purification_cast_b.vpcf_c b/game/particles/units/heroes/hero_omniknight/omniknight_purification_cast_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_omniknight/omniknight_purification_cast_b.vpcf_c rename to game/particles/units/heroes/hero_omniknight/omniknight_purification_cast_b.vpcf_c diff --git a/particles/units/heroes/hero_omniknight/omniknight_repel_buff_cylinder.vpcf_c b/game/particles/units/heroes/hero_omniknight/omniknight_repel_buff_cylinder.vpcf_c similarity index 100% rename from particles/units/heroes/hero_omniknight/omniknight_repel_buff_cylinder.vpcf_c rename to game/particles/units/heroes/hero_omniknight/omniknight_repel_buff_cylinder.vpcf_c diff --git a/particles/units/heroes/hero_phantom_assassin/phantom_assassin_stifling_dagger.vpcf_c b/game/particles/units/heroes/hero_phantom_assassin/phantom_assassin_stifling_dagger.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phantom_assassin/phantom_assassin_stifling_dagger.vpcf_c rename to game/particles/units/heroes/hero_phantom_assassin/phantom_assassin_stifling_dagger.vpcf_c diff --git a/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground.vpcf_c b/game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground.vpcf_c rename to game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground.vpcf_c diff --git a/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_cracks.vpcf_c b/game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_cracks.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_cracks.vpcf_c rename to game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_cracks.vpcf_c diff --git a/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit.vpcf_c b/game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit.vpcf_c rename to game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit.vpcf_c diff --git a/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_fireb.vpcf_c b/game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_fireb.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_fireb.vpcf_c rename to game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_fireb.vpcf_c diff --git a/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_glow.vpcf_c b/game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_glow.vpcf_c rename to game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_glow.vpcf_c diff --git a/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_smoke.vpcf_c b/game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_smoke.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_smoke.vpcf_c rename to game/particles/units/heroes/hero_phoenix/phoenix_fire_spirit_ground_hit_smoke.vpcf_c diff --git a/particles/units/heroes/hero_phoenix/phoenix_sunray_tgt_sphere.vpcf_c b/game/particles/units/heroes/hero_phoenix/phoenix_sunray_tgt_sphere.vpcf_c similarity index 100% rename from particles/units/heroes/hero_phoenix/phoenix_sunray_tgt_sphere.vpcf_c rename to game/particles/units/heroes/hero_phoenix/phoenix_sunray_tgt_sphere.vpcf_c diff --git a/particles/units/heroes/hero_puck/puck_illusory_orb_explode_b.vpcf_c b/game/particles/units/heroes/hero_puck/puck_illusory_orb_explode_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_puck/puck_illusory_orb_explode_b.vpcf_c rename to game/particles/units/heroes/hero_puck/puck_illusory_orb_explode_b.vpcf_c diff --git a/particles/units/heroes/hero_puck/puck_illusory_orb_explode_c.vpcf_c b/game/particles/units/heroes/hero_puck/puck_illusory_orb_explode_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_puck/puck_illusory_orb_explode_c.vpcf_c rename to game/particles/units/heroes/hero_puck/puck_illusory_orb_explode_c.vpcf_c diff --git a/particles/units/heroes/hero_queenofpain/queen_base_attack.vpcf_c b/game/particles/units/heroes/hero_queenofpain/queen_base_attack.vpcf_c similarity index 100% rename from particles/units/heroes/hero_queenofpain/queen_base_attack.vpcf_c rename to game/particles/units/heroes/hero_queenofpain/queen_base_attack.vpcf_c diff --git a/particles/units/heroes/hero_queenofpain/queen_blink_start_model.vpcf_c b/game/particles/units/heroes/hero_queenofpain/queen_blink_start_model.vpcf_c similarity index 100% rename from particles/units/heroes/hero_queenofpain/queen_blink_start_model.vpcf_c rename to game/particles/units/heroes/hero_queenofpain/queen_blink_start_model.vpcf_c diff --git a/particles/units/heroes/hero_queenofpain/queen_blink_start_smoke.vpcf_c b/game/particles/units/heroes/hero_queenofpain/queen_blink_start_smoke.vpcf_c similarity index 100% rename from particles/units/heroes/hero_queenofpain/queen_blink_start_smoke.vpcf_c rename to game/particles/units/heroes/hero_queenofpain/queen_blink_start_smoke.vpcf_c diff --git a/particles/units/heroes/hero_queenofpain/queen_blink_start_sparks.vpcf_c b/game/particles/units/heroes/hero_queenofpain/queen_blink_start_sparks.vpcf_c similarity index 100% rename from particles/units/heroes/hero_queenofpain/queen_blink_start_sparks.vpcf_c rename to game/particles/units/heroes/hero_queenofpain/queen_blink_start_sparks.vpcf_c diff --git a/particles/units/heroes/hero_queenofpain/queen_blink_start_sparks_follow.vpcf_c b/game/particles/units/heroes/hero_queenofpain/queen_blink_start_sparks_follow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_queenofpain/queen_blink_start_sparks_follow.vpcf_c rename to game/particles/units/heroes/hero_queenofpain/queen_blink_start_sparks_follow.vpcf_c diff --git a/particles/units/heroes/hero_queenofpain/queen_blink_start_wisp.vpcf_c b/game/particles/units/heroes/hero_queenofpain/queen_blink_start_wisp.vpcf_c similarity index 100% rename from particles/units/heroes/hero_queenofpain/queen_blink_start_wisp.vpcf_c rename to game/particles/units/heroes/hero_queenofpain/queen_blink_start_wisp.vpcf_c diff --git a/particles/units/heroes/hero_queenofpain/queen_sonic_wave_rings.vpcf_c b/game/particles/units/heroes/hero_queenofpain/queen_sonic_wave_rings.vpcf_c similarity index 100% rename from particles/units/heroes/hero_queenofpain/queen_sonic_wave_rings.vpcf_c rename to game/particles/units/heroes/hero_queenofpain/queen_sonic_wave_rings.vpcf_c diff --git a/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion.vpcf_c b/game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion.vpcf_c similarity index 100% rename from particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion.vpcf_c rename to game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion.vpcf_c diff --git a/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash.vpcf_c b/game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash.vpcf_c similarity index 100% rename from particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash.vpcf_c rename to game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash.vpcf_c diff --git a/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_b.vpcf_c b/game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_b.vpcf_c rename to game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_b.vpcf_c diff --git a/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_c.vpcf_c b/game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_c.vpcf_c rename to game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_c.vpcf_c diff --git a/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_f.vpcf_c b/game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_f.vpcf_c similarity index 100% rename from particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_f.vpcf_c rename to game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_f.vpcf_c diff --git a/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_light.vpcf_c b/game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_light.vpcf_c similarity index 100% rename from particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_light.vpcf_c rename to game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_explosion_flash_light.vpcf_c diff --git a/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_model.vpcf_c b/game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_model.vpcf_c similarity index 100% rename from particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_model.vpcf_c rename to game/particles/units/heroes/hero_rattletrap/rattletrap_rocket_flare_model.vpcf_c diff --git a/particles/units/heroes/hero_silencer/silencer_last_word_status_ring_end_flash.vpcf_c b/game/particles/units/heroes/hero_silencer/silencer_last_word_status_ring_end_flash.vpcf_c similarity index 100% rename from particles/units/heroes/hero_silencer/silencer_last_word_status_ring_end_flash.vpcf_c rename to game/particles/units/heroes/hero_silencer/silencer_last_word_status_ring_end_flash.vpcf_c diff --git a/particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam.vpcf_c b/game/particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam.vpcf_c similarity index 100% rename from particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam.vpcf_c rename to game/particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam.vpcf_c diff --git a/particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam_b.vpcf_c b/game/particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam_b.vpcf_c rename to game/particles/units/heroes/hero_skywrath_mage/skywrath_mage_mystic_flare_beam_b.vpcf_c diff --git a/particles/units/heroes/hero_slark/portrait_slark.vpcf_c b/game/particles/units/heroes/hero_slark/portrait_slark.vpcf_c similarity index 100% rename from particles/units/heroes/hero_slark/portrait_slark.vpcf_c rename to game/particles/units/heroes/hero_slark/portrait_slark.vpcf_c diff --git a/particles/units/heroes/hero_slark/slark_ambient_ring_splash.vpcf_c b/game/particles/units/heroes/hero_slark/slark_ambient_ring_splash.vpcf_c similarity index 100% rename from particles/units/heroes/hero_slark/slark_ambient_ring_splash.vpcf_c rename to game/particles/units/heroes/hero_slark/slark_ambient_ring_splash.vpcf_c diff --git a/particles/units/heroes/hero_slark/slark_ambient_ring_splash_link.vpcf_c b/game/particles/units/heroes/hero_slark/slark_ambient_ring_splash_link.vpcf_c similarity index 100% rename from particles/units/heroes/hero_slark/slark_ambient_ring_splash_link.vpcf_c rename to game/particles/units/heroes/hero_slark/slark_ambient_ring_splash_link.vpcf_c diff --git a/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_dust.vpcf_c b/game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_dust.vpcf_c similarity index 100% rename from particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_dust.vpcf_c rename to game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_dust.vpcf_c diff --git a/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_glow.vpcf_c b/game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_glow.vpcf_c rename to game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_glow.vpcf_c diff --git a/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_mist.vpcf_c b/game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_mist.vpcf_c similarity index 100% rename from particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_mist.vpcf_c rename to game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_mist.vpcf_c diff --git a/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_smoke.vpcf_c b/game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_smoke.vpcf_c similarity index 100% rename from particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_smoke.vpcf_c rename to game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_smoke.vpcf_c diff --git a/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave.vpcf_c b/game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave.vpcf_c similarity index 100% rename from particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave.vpcf_c rename to game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave.vpcf_c diff --git a/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_c.vpcf_c b/game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_c.vpcf_c rename to game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_c.vpcf_c diff --git a/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_d.vpcf_c b/game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_d.vpcf_c similarity index 100% rename from particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_d.vpcf_c rename to game/particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_wave_d.vpcf_c diff --git a/particles/units/heroes/hero_stormspirit/stormspirit_base_attack.vpcf_c b/game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack.vpcf_c similarity index 100% rename from particles/units/heroes/hero_stormspirit/stormspirit_base_attack.vpcf_c rename to game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack.vpcf_c diff --git a/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_explosion_b.vpcf_c b/game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_explosion_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_stormspirit/stormspirit_base_attack_explosion_b.vpcf_c rename to game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_explosion_b.vpcf_c diff --git a/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_glow.vpcf_c b/game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_stormspirit/stormspirit_base_attack_glow.vpcf_c rename to game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_glow.vpcf_c diff --git a/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparkles.vpcf_c b/game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparkles.vpcf_c similarity index 100% rename from particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparkles.vpcf_c rename to game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparkles.vpcf_c diff --git a/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparks_1.vpcf_c b/game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparks_1.vpcf_c similarity index 100% rename from particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparks_1.vpcf_c rename to game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_sparks_1.vpcf_c diff --git a/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_trail.vpcf_c b/game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_trail.vpcf_c similarity index 100% rename from particles/units/heroes/hero_stormspirit/stormspirit_base_attack_trail.vpcf_c rename to game/particles/units/heroes/hero_stormspirit/stormspirit_base_attack_trail.vpcf_c diff --git a/particles/units/heroes/hero_stormspirit/stormspirit_overload_discharge.vpcf_c b/game/particles/units/heroes/hero_stormspirit/stormspirit_overload_discharge.vpcf_c similarity index 100% rename from particles/units/heroes/hero_stormspirit/stormspirit_overload_discharge.vpcf_c rename to game/particles/units/heroes/hero_stormspirit/stormspirit_overload_discharge.vpcf_c diff --git a/particles/units/heroes/hero_templar_assassin/templar_assassin_ambient.vpcf_c b/game/particles/units/heroes/hero_templar_assassin/templar_assassin_ambient.vpcf_c similarity index 100% rename from particles/units/heroes/hero_templar_assassin/templar_assassin_ambient.vpcf_c rename to game/particles/units/heroes/hero_templar_assassin/templar_assassin_ambient.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_ambient.vpcf_c b/game/particles/units/heroes/hero_visage/visage_ambient.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_ambient.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_ambient.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_core.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_core.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_core.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_core.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_core_glow.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_core_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_core_glow.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_core_glow.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_core_glow_trail.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_core_glow_trail.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_core_glow_trail.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_core_glow_trail.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_core_rocks.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_core_rocks.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_core_rocks.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_core_rocks.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_energy.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_energy.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_energy.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_energy.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_fire.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_fire.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_fire.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_fire.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_flash.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_flash.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_flash.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_flash.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_flek.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_flek.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_flek.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_flek.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_hit.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_hit.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_hit.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_hit.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_hit_glow.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_hit_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_hit_glow.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_hit_glow.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_hit_ring.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_hit_ring.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_hit_ring.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_hit_ring.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_base_attack_2_trail_glow.vpcf_c b/game/particles/units/heroes/hero_visage/visage_base_attack_2_trail_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_base_attack_2_trail_glow.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_base_attack_2_trail_glow.vpcf_c diff --git a/particles/units/heroes/hero_visage/visage_loadout.vpcf_c b/game/particles/units/heroes/hero_visage/visage_loadout.vpcf_c similarity index 100% rename from particles/units/heroes/hero_visage/visage_loadout.vpcf_c rename to game/particles/units/heroes/hero_visage/visage_loadout.vpcf_c diff --git a/particles/units/heroes/hero_warlock/warlock_ambient_smoke.vpcf_c b/game/particles/units/heroes/hero_warlock/warlock_ambient_smoke.vpcf_c similarity index 100% rename from particles/units/heroes/hero_warlock/warlock_ambient_smoke.vpcf_c rename to game/particles/units/heroes/hero_warlock/warlock_ambient_smoke.vpcf_c diff --git a/particles/units/heroes/hero_warlock/warlock_ambient_staff.vpcf_c b/game/particles/units/heroes/hero_warlock/warlock_ambient_staff.vpcf_c similarity index 100% rename from particles/units/heroes/hero_warlock/warlock_ambient_staff.vpcf_c rename to game/particles/units/heroes/hero_warlock/warlock_ambient_staff.vpcf_c diff --git a/particles/units/heroes/hero_warlock/warlock_ambient_staff_c.vpcf_c b/game/particles/units/heroes/hero_warlock/warlock_ambient_staff_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_warlock/warlock_ambient_staff_c.vpcf_c rename to game/particles/units/heroes/hero_warlock/warlock_ambient_staff_c.vpcf_c diff --git a/particles/units/heroes/hero_warlock/warlock_ambient_staff_e.vpcf_c b/game/particles/units/heroes/hero_warlock/warlock_ambient_staff_e.vpcf_c similarity index 100% rename from particles/units/heroes/hero_warlock/warlock_ambient_staff_e.vpcf_c rename to game/particles/units/heroes/hero_warlock/warlock_ambient_staff_e.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_base.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_base.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_base.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_base.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction_sparkles.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction_sparkles.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction_sparkles.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_destruction_sparkles.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_b.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_b.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_b.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_c.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_c.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_c.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_c.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_d.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_d.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_d.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_d.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_f.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_f.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_f.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_f.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_g.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_g.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_g.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_g.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_h.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_h.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_h.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_h.vpcf_c diff --git a/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_i.vpcf_c b/game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_i.vpcf_c similarity index 100% rename from particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_i.vpcf_c rename to game/particles/units/heroes/hero_windrunner/windrunner_spell_powershot_trail_i.vpcf_c diff --git a/particles/units/heroes/hero_wisp/wisp_guardian_explosion_2.vpcf_c b/game/particles/units/heroes/hero_wisp/wisp_guardian_explosion_2.vpcf_c similarity index 100% rename from particles/units/heroes/hero_wisp/wisp_guardian_explosion_2.vpcf_c rename to game/particles/units/heroes/hero_wisp/wisp_guardian_explosion_2.vpcf_c diff --git a/particles/units/heroes/hero_wisp/wisp_guardian_explosion_2_b.vpcf_c b/game/particles/units/heroes/hero_wisp/wisp_guardian_explosion_2_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_wisp/wisp_guardian_explosion_2_b.vpcf_c rename to game/particles/units/heroes/hero_wisp/wisp_guardian_explosion_2_b.vpcf_c diff --git a/particles/units/heroes/hero_wisp/wisp_guardian_explosion_b.vpcf_c b/game/particles/units/heroes/hero_wisp/wisp_guardian_explosion_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_wisp/wisp_guardian_explosion_b.vpcf_c rename to game/particles/units/heroes/hero_wisp/wisp_guardian_explosion_b.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_deathward_glow.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_deathward_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_deathward_glow.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_deathward_glow.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_b.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_b.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_b.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_b.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_heal.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_heal.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_heal.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_voodoo_restoration_heal.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_flame_a.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_flame_a.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_ward_flame_a.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_flame_a.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs_glow.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs_glow.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs_glow.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_glyphs_glow.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites_trail.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites_trail.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites_trail.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_satellites_trail.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull.vpcf_c diff --git a/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull_lv.vpcf_c b/game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull_lv.vpcf_c similarity index 100% rename from particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull_lv.vpcf_c rename to game/particles/units/heroes/hero_witchdoctor/witchdoctor_ward_skull_lv.vpcf_c diff --git a/particles/units/towers/aura_dark.vpcf_c b/game/particles/units/towers/aura_dark.vpcf_c similarity index 100% rename from particles/units/towers/aura_dark.vpcf_c rename to game/particles/units/towers/aura_dark.vpcf_c diff --git a/particles/units/towers/aura_dark_a.vpcf_c b/game/particles/units/towers/aura_dark_a.vpcf_c similarity index 100% rename from particles/units/towers/aura_dark_a.vpcf_c rename to game/particles/units/towers/aura_dark_a.vpcf_c diff --git a/particles/units/towers/aura_dark_b.vpcf_c b/game/particles/units/towers/aura_dark_b.vpcf_c similarity index 100% rename from particles/units/towers/aura_dark_b.vpcf_c rename to game/particles/units/towers/aura_dark_b.vpcf_c diff --git a/game/resource/addon_english.txt b/game/resource/addon_english.txt new file mode 100755 index 0000000..6492ffb --- /dev/null +++ b/game/resource/addon_english.txt @@ -0,0 +1,3202 @@ +"lang" +{ + "Language" "english" + "Tokens" + { + "game_mode_15" "Touhou Dream Sign Festival" + "addon_game_name" "Touhou Dream Sign Festival" + "DOTA_Hero_Selection_Team_Good" "Hakurei Shrine" + "DOTA_Hero_Selection_Team_Bad" "Incident" + "dota_match_history_Winner_GoodGuys" "Winner: Hakurei Shrine" + "dota_match_history_Winner_BadGuys" "Winner: Incident" + "npc_dota_goodguys_fort" "Hakurei Shrine" + "npc_dota_hero_lina" "Hakurei Reimu" + "npc_dota_hero_juggernaut" "幻装灵梦" + "DOTA_GoodGuys" "Hakurei Shrine" + "DOTA_BadGuys" "Incident" + "DOTA_Winner_GoodGuys" "The Hakurei Shrine has won." + "DOTA_Winner_BadGuys" "Your whole body is covered in wounds..." + "DOTA_Starting_Team_Radiant" "Hakurei Shrine" + "DOTA_Starting_Team_Dire" "Incident" + "DOTA_GoodGuysCaps" "Hakurei Shrine" + "DOTA_BadGuysCaps" "Incident" + "DOTA_Chat_CourierRespawnedGood" "" + "DOTA_Chat_CourierRespawnedBad" "" + "npc_dota_fort" "Shrine" + "pause_game" "The game has been paused. Press F9 to restore the game!" + "item_locked_tip" "Locked items can not be used as materials for cultivation, star promotion, sale, and can not be picked up by teammates. Please make good use of this function to prevent misoperation or stolen items." + "reach_to_wave" "The specified wave number is successful and the next wave will jump directly to the {d:count} wave." + "power_game_end_info" "The maximum number of wave s that have been successfully passed this time: {d: wave}, the total damage of the wave: {d: damage} * 10,000, 30 seconds after the end of the game and settlement of rewards." + "normal_game_end_info" "{s:name} 已游戏失败,成功通过的波数:{d:wave}。" + "game_will_end" "一分钟后退出游戏,按F6截图。" + "challenge_game_on" "In Challenge mode, the endless preparation time is extended and three gifts from Nazlin Liebert, the autumn dumpling, are given directly from Wave 68." + "funny_game_on" "提示:无尽直接从第70波开始。" + "key_made_tip" "获得1把宠物小灵制造的钥匙。" + "game_start_vip_tip" "欢迎贡献者 {s:name} ,特别奖励持续到:{s:endtime}。" + "user_steam_id" "{s:name}" + "item_is_locked" "The item has been locked. Please click on the right-click items to open and unlock. Locked items can not be used as materials for training, rising stars, not for sale, and can not be picked up by teammates." + "item_disable_sell" "非运营所得物品禁止出售" + "not_has_key_item" "请从宠物小灵那里获取钥匙" + "not_key_unit" "魔法宝箱只能由博丽灵梦拾取" + "only_hero_use" "只能由博丽灵梦使用" + "only_less_ten_item2021" "原始榜只能用5瓶" + "only_target_self" "只能选中自己使用" + "only_unlimited_wave" "只能在无尽之后使用" + "only_water_area_use" "必须在自己的水域上" + "only_unlimited_280wave_before" "只能在无尽280波之前使用" + "only_not_unlimited_wave" "只能在无尽之前使用" + "only_max_wave_exist" "没有上榜波数,请先上榜" + "only_wave12_use" "只能在12波以后使用" + "reach_to_limit" "已达到上限" + "special_boss_exist" "已经使用,请完成挑战后再使用" + "skip_wave_exist" "已经使用了跳波,请通过后再使用" + "no_user_data" "无用户数据,新玩家请下次游戏再试" + "user_server_error" "服务器处理出错" + "connect_server_error" "无法连接服务器" + "not_enough_item_slot" "Not enough inventory space!" + "not_enough_game_point" "没有足够的符卡精华" + "not_enough_key_count" "没有足够的魔法钥匙" + "not_enough_food" "Not enough unit space!" + "the_same_card_reach_to_limit" "同名卡上场超过数量限制(SSR相同卡2张,SR相同卡4张,R相同卡6张)" + "card_cannot_unlock_when_having_equipment" "卡牌存在保留装备,请插拔将装备丢掉之后再回收解锁" + "start_card_cannot_be_sell" "开局初始卡不能出售" + "others_card_cannot_be_sell" "不能出售来自队友的物品" + "item_cannot_be_sell" "该物品无法出售" + "cannot_use_others_item_in_single_mode" "原始排行榜不能使用队友的卡牌和装备" + "cannot_vote_when_over_some_waves" "无尽20波以后不能发起踢人投票" + "new_card_test_tip" "该卡技能当前正在测试中,仅限特别奖励期间使用" + "target_is_error" "无效目标" + "minoriko_cannot_be_material" "娱乐模式下秋穣子不能当作素材" + "minoriko_cannot_be_change" "娱乐模式下,秋穣子在前10波不能使用交换技能" + "minoriko_change_one_tip" "娱乐模式下,秋穣子在前20波只能使用一次交换技能" + "hero_is_game_over" "该商店所在位置已经游戏失败" + "roll_card_reach_to_max" "已经达到最大使用次数" + "roll_card_reach_to_wave" "可用次数已用完需通过一波后再使用" + "random_card_power_up" "{s:user}使用了「艾哲红石」,{s:card}的潜能获得永久提升" + "minoriko_up_to_5_star" "Please note that Minoriko has reached 5 stars!" + "sizuha_up_to_5_star" "Please note that Sizuha has reached 5 stars!" + "bonus_tower_limit" "You can only have a maximum of three income shikigami(Lily, Nazrin, Minoriko, Daiyousei, Shou, Shizuha, Shinki)!" + "player_disconnect" "A player has been disconnected! Enter -kickafk + player number to kick the player. Player number:" + "player_in_vote" "In the voting, one minute after the end of the mandatory, then vote can be launched again.\nCurrently kicked player number: {d:count}" + "player_vote_pass" "The vote has been successful and has been kicked out of the {d:count} player." + "player_vote_no_pass" "The vote was unsuccessful. The {d:count} player objected, and this polls ended." + "spawn_unlimited" "Endless level is imminent, you must stick to the defensive {d:count} bouts. In the endless level, each player will count the number of missing monsters individually. Simultaneously, all income category shikigami near expiry. Please use the last time to configure your shikigami lineup." + "start_unlimited" "已经进入无尽关卡准备时间,所有收益类式神已经失效,已重置秋穣子的交换次数,请利用好最后的时间配置阵容。" + "DOTA_Tooltip_ability_tt1" "拒绝盗版游戏" + "DOTA_Tooltip_ability_tt2" "抵制不良游戏" + "DOTA_Tooltip_ability_tt3" "谨防受骗上当" + "DOTA_Tooltip_ability_tt4" "注意自我保护" + "DOTA_Tooltip_ability_tt5" "沉迷游戏伤身" + "DOTA_Tooltip_ability_tt6" "适度游戏益脑" + "DOTA_Tooltip_ability_tt7" "享受健康生活" + "DOTA_Tooltip_ability_tt8" "合理安排时间" + "open_day_tip" "服务器当前时间:{s:server_time},游戏开始北京时间:{s:start_time},本月开放日:{s:open_day_list}。(贡献者特别奖励期间可随时进入娱乐模式和全部卡组)" + "game_ban_tip" "{s:player_name} 因 {s:reason} 被举报加入黑名单,已将其踢出游戏!" + "team_rank_tip" "{s:player_name}上榜将进入巅峰榜,因为{s:reason}" + "skip_wave_tip" "{s:player_name}召唤了{s:item_name},下一波直接跳到第{d:wave}波" + "power_view_tip" "下方头像栏右边第4行为能量点,第5行为暴击伤害,第6行为暴击概率" + "game_keyboard_tip" "按字母键 i 切换第一视角,输入 -0 至 -6 发表情,商店可购买跳关卷轴" + "funny_mode_bonus_no_use_tip" "娱乐模式所有收益卡收益无效,秋穣子初始三星" + "one_hundred_wave_tip" "恭喜通过100波大关,射命丸文见证了你的强大,急于报道而飞走了,以后不再出现" + "pause_game_forever" "游戏已永久暂停,再次点击或按 F9 可恢复游戏!" + "skip_wave_rank_tip" "本波为跳关后前4波(使用爆弹顺延),不计入有效波数" + "damage_less_rank_tip" "{s:player_name}的上一波最终阵容总伤害量低于90%总血量,不计入有效波数" + "test_tip" "{s:player_name}上一波最终阵容{s:locstring_value}低于{d:int_value}%总血量,{s:ability_name}不计入%s1有效波数" + "dota_tip_advanced_1" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_advanced_10" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_advanced_11" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_advanced_17" "物品可以锁定用来防偷和防误操作。" + "dota_tip_advanced_18" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_advanced_19" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_advanced_2" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_advanced_20" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_advanced_21" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_advanced_22" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_advanced_23" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_advanced_24" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_advanced_25" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_advanced_26" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_advanced_28" "本地图不能开启作弊和控制台启动。" + "dota_tip_advanced_29" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_advanced_3" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_advanced_30" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_advanced_31" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_advanced_32" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_advanced_33" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_advanced_34" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_advanced_35" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_advanced_36" "速度下限为100,最多减速到100为止。" + "dota_tip_advanced_37" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_advanced_38" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_advanced_39" "神绮大魔王的减速不叠加。" + "dota_tip_advanced_4" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_advanced_40" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_advanced_41" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_advanced_42" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_advanced_43" "每日任务一天只能完成一次。" + "dota_tip_advanced_44" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_advanced_45" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_advanced_46" "被动和光环、buff效果一般不会叠加。" + "dota_tip_advanced_47" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_advanced_48" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_advanced_5" "多人游戏时计巅峰排行榜。" + "dota_tip_advanced_6" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_advanced_7" "Buff层数最大为999。" + "dota_tip_advanced_8" "重要节假日一般会开启无限活力活动,开局可自选满潜能圣物" + "dota_tip_advanced_9" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_beginner_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_beginner_10" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_beginner_11" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_beginner_12" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_beginner_13" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_beginner_14" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_beginner_15" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_beginner_16" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_beginner_17" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_beginner_18" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_beginner_19" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_beginner_2" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_beginner_20" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_beginner_21" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_beginner_22" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_beginner_25" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_beginner_26" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_beginner_28" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_beginner_29" "物品可以锁定用来防偷和防误操作。" + "dota_tip_beginner_3" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_beginner_31" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_beginner_32" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_beginner_33" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_beginner_36" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_beginner_4" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_beginner_40" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_beginner_41" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_beginner_42" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_beginner_43" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_beginner_44" "本地图不能开启作弊和控制台启动。" + "dota_tip_beginner_45" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_beginner_46" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_beginner_47" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_beginner_48" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_beginner_49" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_beginner_5" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_beginner_50" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_beginner_51" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_beginner_52" "速度下限为100,最多减速到100为止。" + "dota_tip_beginner_53" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_beginner_54" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_beginner_55" "神绮大魔王的减速不叠加。" + "dota_tip_beginner_56" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_beginner_7" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_abaddon_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_abaddon_2" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_abaddon_3" "每日任务一天只能完成一次。" + "dota_tip_hero_abaddon_4" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_abaddon_5" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_abaddon_6" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_abaddon_7" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_abaddon_8" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_abyssal_underlord_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_alchemist_1" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_alchemist_2" "Buff层数最大为999。" + "dota_tip_hero_alchemist_3" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_alchemist_4" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_alchemist_5" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_alchemist_6" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_alchemist_7" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_ancient_apparition_1" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_antimage_1" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_arc_warden_1" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_arc_warden_2" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_arc_warden_3" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_arc_warden_4" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_axe_1" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_axe_2" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_axe_3" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_axe_4" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_axe_5" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_axe_6" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_axe_7" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_bane_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_bane_2" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_bane_3" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_bane_4" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_bane_5" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_batrider_1" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_beastmaster_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_beastmaster_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_beastmaster_3" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_beastmaster_4" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_beastmaster_5" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_beastmaster_6" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_bloodseeker_1" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_bloodseeker_2" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_bloodseeker_3" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_bloodseeker_4" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_bloodseeker_5" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_bloodseeker_6" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_bloodseeker_7" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_bloodseeker_8" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_bounty_hunter_1" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_bounty_hunter_2" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_brewmaster_1" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_brewmaster_2" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_brewmaster_3" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_brewmaster_4" "神绮大魔王的减速不叠加。" + "dota_tip_hero_brewmaster_5" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_brewmaster_6" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_bristleback_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_bristleback_2" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_bristleback_3" "每日任务一天只能完成一次。" + "dota_tip_hero_bristleback_4" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_bristleback_5" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_bristleback_6" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_bristleback_7" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_broodmother_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_centaur_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_centaur_2" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_centaur_3" "Buff层数最大为999。" + "dota_tip_hero_centaur_4" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_centaur_5" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_centaur_6" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_chaos_knight_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_chaos_knight_2" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_chaos_knight_3" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_chaos_knight_4" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_chaos_knight_5" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_chaos_knight_6" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_chaos_knight_7" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_chen_1" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_clinkz_1" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_crystal_maiden_1" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_crystal_maiden_2" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_crystal_maiden_3" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_crystal_maiden_4" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_dark_seer_1" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_dark_willow_1" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_dazzle_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_death_prophet_1" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_disruptor_1" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_doom_bringer_1" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_doom_bringer_2" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_doom_bringer_3" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_doom_bringer_4" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_doom_bringer_5" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_doom_bringer_6" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_dragon_knight_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_dragon_knight_2" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_dragon_knight_3" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_dragon_knight_4" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_dragon_knight_5" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_dragon_knight_6" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_drow_ranger_1" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_drow_ranger_2" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_drow_ranger_3" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_drow_ranger_4" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_drow_ranger_5" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_earth_spirit_1" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_earth_spirit_2" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_earth_spirit_3" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_earth_spirit_4" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_earth_spirit_5" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_earth_spirit_6" "神绮大魔王的减速不叠加。" + "dota_tip_hero_earth_spirit_7" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_earthshaker_1" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_earthshaker_2" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_earthshaker_3" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_earthshaker_4" "每日任务一天只能完成一次。" + "dota_tip_hero_earthshaker_5" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_earthshaker_6" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_earthshaker_7" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_earthshaker_8" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_elder_titan_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_ember_spirit_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_enchantress_1" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_enchantress_2" "Buff层数最大为999。" + "dota_tip_hero_enchantress_3" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_enigma_1" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_faceless_void_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_furion_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_gyrocopter_1" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_huskar_1" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_huskar_2" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_invoker_1" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_jakiro_1" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_juggernaut_1" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_juggernaut_2" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_juggernaut_3" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_juggernaut_4" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_juggernaut_5" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_juggernaut_6" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_keeper_of_the_light_1" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_kunkka_1" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_legion_commander_1" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_leshrac_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_lich_1" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_lich_2" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_life_stealer_1" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_lina_1" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_lion_1" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_lone_druid_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_lone_druid_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_luna_1" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_lycan_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_lycan_2" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_magnataur_1" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_medusa_1" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_meepo_1" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_mirana_1" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_mirana_2" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_mirana_3" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_mirana_4" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_mirana_5" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_mirana_6" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_mirana_7" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_monkey_king_1" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_morphling_1" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_morphling_2" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_morphling_3" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_morphling_4" "神绮大魔王的减速不叠加。" + "dota_tip_hero_morphling_5" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_morphling_6" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_naga_siren_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_naga_siren_2" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_necrolyte_1" "每日任务一天只能完成一次。" + "dota_tip_hero_necrolyte_2" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_night_stalker_1" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_nyx_assassin_1" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_obsidian_destroyer_1" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_ogre_magi_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_omniknight_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_oracle_1" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_oracle_2" "Buff层数最大为999。" + "dota_tip_hero_oracle_3" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_oracle_4" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_pangolier_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_phantom_assassin_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_phantom_lancer_1" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_phantom_lancer_2" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_phantom_lancer_3" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_phantom_lancer_4" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_phantom_lancer_5" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_phoenix_1" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_puck_1" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_puck_2" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_puck_3" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_puck_4" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_puck_5" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_puck_6" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_pudge_1" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_pudge_10" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_pudge_11" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_pudge_2" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_pudge_3" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_pudge_4" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_pudge_5" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_pudge_6" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_pudge_7" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_pudge_8" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_pudge_9" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_pugna_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_queenofpain_1" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_rattletrap_1" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_rattletrap_2" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_rattletrap_3" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_rattletrap_4" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_rattletrap_5" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_rattletrap_6" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_rattletrap_7" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_razor_1" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_razor_2" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_razor_3" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_razor_4" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_razor_5" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_razor_6" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_razor_7" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_riki_1" "神绮大魔王的减速不叠加。" + "dota_tip_hero_rubick_1" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_sand_king_1" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_sand_king_2" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_sand_king_3" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_sand_king_4" "每日任务一天只能完成一次。" + "dota_tip_hero_sand_king_5" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_sand_king_6" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_shadow_demon_1" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_shadow_fiend_1" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_shadow_fiend_2" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_shadow_fiend_3" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_shadow_fiend_4" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_shadow_fiend_5" "Buff层数最大为999。" + "dota_tip_hero_shadow_fiend_6" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_shadow_shaman_1" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_shredder_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_silencer_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_skeleton_king_1" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_skywrath_mage_1" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_slardar_1" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_slark_1" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_sniper_1" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_spectre_1" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_spirit_breaker_1" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_storm_spirit_1" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_storm_spirit_2" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_storm_spirit_3" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_storm_spirit_4" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_storm_spirit_5" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_storm_spirit_6" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_storm_spirit_7" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_sven_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_sven_2" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_sven_3" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_sven_4" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_sven_5" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_sven_6" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_techies_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_techies_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_templar_assassin_1" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_terrorblade_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_tidehunter_1" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_tinker_1" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_tiny_1" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_tiny_2" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_tiny_3" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_tiny_4" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_tiny_5" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_tiny_6" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_tiny_7" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_treant_1" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_troll_warlord_1" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_tusk_1" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_undying_1" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_ursa_1" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_vengeful_spirit_1" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_vengeful_spirit_2" "神绮大魔王的减速不叠加。" + "dota_tip_hero_vengeful_spirit_3" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_venomancer_1" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_viper_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_visage_1" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_visage_2" "每日任务一天只能完成一次。" + "dota_tip_hero_visage_3" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_visage_4" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_warlock_1" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_weaver_1" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_windrunner_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_winter_wyvern_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_winter_wyvern_2" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_wisp_1" "Buff层数最大为999。" + "dota_tip_hero_witchdoctor_1" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_zuus_1" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_intermediate_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_intermediate_10" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_intermediate_11" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_intermediate_12" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_intermediate_13" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_intermediate_14" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_intermediate_15" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_intermediate_16" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_intermediate_17" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_intermediate_18" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_intermediate_2" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_intermediate_20" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_intermediate_21" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_intermediate_22" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_intermediate_23" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_intermediate_24" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_intermediate_25" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_intermediate_26" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_intermediate_27" "物品可以锁定用来防偷和防误操作。" + "dota_tip_intermediate_28" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_intermediate_29" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_intermediate_3" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_intermediate_30" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_intermediate_31" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_intermediate_33" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_intermediate_34" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_intermediate_35" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_intermediate_36" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_intermediate_37" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_intermediate_38" "本地图不能开启作弊和控制台启动。" + "dota_tip_intermediate_39" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_intermediate_4" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_intermediate_41" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_intermediate_42" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_intermediate_43" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_intermediate_45" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_intermediate_46" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_intermediate_47" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_intermediate_49" "速度下限为100,最多减速到100为止。" + "dota_tip_intermediate_50" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_intermediate_51" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_intermediate_52" "神绮大魔王的减速不叠加。" + "dota_tip_intermediate_53" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_intermediate_54" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_intermediate_55" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_intermediate_56" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_intermediate_57" "每日任务一天只能完成一次。" + "dota_tip_intermediate_58" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_intermediate_59" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_intermediate_6" "被动和光环、buff效果一般不会叠加。" + "dota_tip_intermediate_60" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_intermediate_61" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_intermediate_62" "多人游戏时计巅峰排行榜。" + "dota_tip_intermediate_63" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_intermediate_64" "Buff层数最大为999。" + "dota_tip_intermediate_65" "原神绮的收益技能移到秋穣子商店" + "dota_tip_intermediate_66" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_intermediate_67" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_intermediate_68" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_intermediate_69" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_intermediate_70" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_intermediate_71" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_intermediate_72" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_intermediate_73" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_intermediate_74" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_intermediate_75" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_intermediate_8" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_intermediate_9" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_introduction_1" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_introduction_10" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_introduction_11" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_introduction_2" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_introduction_3" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_introduction_4" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_introduction_5" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_introduction_6" "物品可以锁定用来防偷和防误操作。" + "dota_tip_introduction_7" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_introduction_8" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_introduction_9" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_lore_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_lore_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_lore_3" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_lore_4" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_lore_5" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_lore_6" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_lore_7" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_universal_1" "本地图不能开启作弊和控制台启动。" + "dota_tip_universal_10" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_universal_11" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_universal_12" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_universal_13" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_universal_14" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_universal_15" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_universal_16" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_universal_17" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_universal_18" "速度下限为100,最多减速到100为止。" + "dota_tip_universal_19" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_universal_2" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_universal_20" "神绮大魔王的减速不叠加。" + "dota_tip_universal_21" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_universal_22" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_universal_23" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_universal_24" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_universal_25" "每日任务一天只能完成一次。" + "dota_tip_universal_26" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_universal_27" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_universal_28" "被动和光环、buff效果一般不会叠加。" + "dota_tip_universal_29" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_universal_3" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_universal_30" "多人游戏时计巅峰排行榜。" + "dota_tip_universal_31" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_universal_33" "Buff层数最大为999。" + "dota_tip_universal_34" "原神绮的收益技能移到秋穣子商店" + "dota_tip_universal_35" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_universal_36" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_universal_37" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_universal_38" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_universal_39" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_universal_4" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_universal_40" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_universal_42" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_universal_43" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_universal_44" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_universal_45" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_universal_46" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_universal_47" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_universal_48" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_universal_49" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_universal_5" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_universal_50" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_universal_51" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_universal_52" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_universal_53" "物品可以锁定用来防偷和防误操作。" + "dota_tip_universal_54" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_universal_55" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_universal_56" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_universal_57" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_universal_58" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_universal_59" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_universal_6" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_universal_60" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_universal_61" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_universal_62" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_universal_63" "本地图不能开启作弊和控制台启动。" + "dota_tip_universal_64" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_universal_65" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_universal_66" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_universal_67" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_universal_68" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_universal_69" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_universal_7" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_universal_70" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_universal_71" "速度下限为100,最多减速到100为止。" + "dota_tip_universal_72" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_universal_73" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_universal_74" "神绮大魔王的减速不叠加。" + "dota_tip_universal_8" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_universal_9" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "Unassigned" "Unassigned" + "creature_01" "CREATURE_01" + "creature_02" "CREATURE_02" + "creature_03" "CREATURE_03" + "creature_04" "CREATURE_04" + "creature_05" "CREATURE_05" + "creature_06" "CREATURE_06" + "creature_07" "CREATURE_07" + "creature_08" "CREATURE_08" + "creature_09" "CREATURE_09" + "creature_10" "CREATURE_10" + "creature_11" "CREATURE_11" + "creature_12" "CREATURE_12" + "creature_13" "CREATURE_13" + "creature_14" "CREATURE_14" + "creature_15" "CREATURE_15" + "creature_16" "CREATURE_16" + "creature_17" "CREATURE_17" + "creature_18" "CREATURE_18" + "creature_19" "CREATURE_19" + "creature_20" "CREATURE_20" + "creature_21" "CREATURE_21" + "creature_22" "CREATURE_22" + "creature_23" "CREATURE_23" + "creature_24" "CREATURE_24" + "creature_25" "CREATURE_25" + "creature_26" "CREATURE_26" + "creature_27" "CREATURE_27" + "creature_28" "CREATURE_28" + "creature_29" "CREATURE_29" + "creature_30" "CREATURE_30" + "creature_31" "CREATURE_31" + "creature_32" "CREATURE_32" + "creature_33" "CREATURE_33" + "creature_34" "CREATURE_34" + "creature_35" "CREATURE_35" + "creature_36" "CREATURE_36" + "creature_37" "CREATURE_37" + "creature_38" "CREATURE_38" + "creature_39" "CREATURE_39" + "creature_40" "CREATURE_40" + "creature_41" "CREATURE_41" + "creature_42" "CREATURE_42" + "creature_43" "CREATURE_43" + "creature_44" "CREATURE_44" + "creature_45" "CREATURE_45" + "creature_46" "CREATURE_46" + "creature_47" "CREATURE_47" + "creature_48" "CREATURE_48" + "creature_49" "CREATURE_49" + "creature_50" "CREATURE_50" + "creature_unlimited" "CREATURE_UNLIMITED" + "creature_bosses_alice" "CREATURE_BOSSES_ALICE" + "creature_bosses_aya" "CREATURE_BOSSES_AYA" + "creature_bosses_hina" "CREATURE_BOSSES_HINA" + "creature_bosses_kaguya" "CREATURE_BOSSES_KAGUYA" + "creature_bosses_keine" "CREATURE_BOSSES_KEINE" + "creature_bosses_kisume" "CREATURE_BOSSES_KISUME" + "creature_bosses_marisa" "CREATURE_BOSSES_MARISA" + "creature_bosses_minoriko" "CREATURE_BOSSES_MINORIKO" + "creature_bosses_mokou" "CREATURE_BOSSES_MOKOU" + "creature_bosses_rumia" "CREATURE_BOSSES_RUMIA" + "creature_bosses_yuugi" "CREATURE_BOSSES_YUUGI" + "creature_bosses_nian" "巨兽" + "creature_bosses_long" "巨龙" + "minoriko_shop" "MinoriKonbini" + "christmas_tree" "CHRISTMAS_TREE" + "npc_dummy_unit" "NPC_DUMMY_UNIT" + "npc_dota2x_unit_marisa04_spark" "NPC_DOTA2X_UNIT_MARISA04_SPARK" + "npc_dota2x_unit_yuuka04_spark" "NPC_DOTA2X_UNIT_YUUKA04_SPARK" + "npc_dota2x_unit_yuyuko_04" "NPC_DOTA2X_UNIT_YUYUKO_04" + "npc_thdots_unit_yukari01_unit" "NPC_THDOTS_UNIT_YUKARI01_UNIT" + "yukari_train" "YUKARI_TRAIN" + "reisen_illusion" "REISEN_ILLUSION" + "flandre_illusion" "FLANDRE_ILLUSION" + "yuuka_flower" "YUUKA_FLOWER" + "yuuka_illusion" "YUUKA_ILLUSION" + "kanako_gojou" "Onbashira" + "momiji_wolf" "MOMIJI_WOLF" + "shinki_dragon" "SHINKI_DRAGON" + "tiny_suika" "TINY_SUIKA" + "alice_boom" "ALICE_BOOM" + "alice_falanxi_ningyou" "ALICE_FALANXI_NINGYOU" + "kokoro_jin_yin" "KOKORO_JIN_YIN" + "npc_unit_aya_03_wings" "NPC_UNIT_AYA_03_WINGS" + "reimu_pet" "REIMU_PET" + "inaba_rabbit" "INABA_RABBIT" + "DOTA_Tooltip_ability_item_0001_Description" "Although there is no attack, but can quickly enhance the experience of Shikigamis.\n[★][★]Spring Sign「Proclaim Of spring」\n[★★★★]Spring Sign「Surprise Spring」" + "DOTA_Tooltip_ability_item_0001" "[R]Lily White" + "DOTA_Tooltip_ability_item_1001" "Normal Summon Sign" + "DOTA_Tooltip_ability_item_1001_Description" "Summon a normal Shikigami.\n[N]80%%\n[R]20%%" + "DOTA_Tooltip_ability_item_1002" "Advanced Summon Sign" + "DOTA_Tooltip_ability_item_1002_Description" "Summon a rare Shikigami.\n[R]75%%\n[SR]20%%\n[SSR]5%%" + "DOTA_Tooltip_ability_item_1003" "The Drug Of Evolution Lv1" + "DOTA_Tooltip_ability_item_1003_Description" "It can replace any material with a star level of 1." + "DOTA_Tooltip_ability_item_1004" "The Drug Of Evolution Lv2" + "DOTA_Tooltip_ability_item_1005" "The Drug Of Evolution Lv3" + "DOTA_Tooltip_ability_item_1006" "The Drug Of Evolution Lv4" + "DOTA_Tooltip_ability_item_1004_Description" "It can replace any material with a star level of 2." + "DOTA_Tooltip_ability_item_1005_Description" "It can replace any material with a star level of 3." + "DOTA_Tooltip_ability_item_1006_Description" "It can replace any material with a star level of 4." + "DOTA_Tooltip_ability_item_0001_Lore" "Lily White is a fairy that heralds the coming of spring. Where she passes, there will be warm air in spring." + "DOTA_Tooltip_ability_item_0002" "[R]Nazrin" + "DOTA_Tooltip_ability_item_0002_Description" "Have a certain ability to attack and could steal money by attack.\n[★]Search Sign「Gold Detector」" + "DOTA_Tooltip_ability_item_0003" "[R]Aki Minoriko" + "DOTA_Tooltip_ability_item_0003_Description" "Although there is no attack ability and can not grow through the general way, she can grow up stars with the time, and exchange star with other Shikigami.\n[★]Fruit Sign「Warm Color Harvest」\n[★★★]Bumper Crop「Promise of the Wheat Godg」" + "DOTA_Tooltip_ability_item_0002_Lore" "The Little Dowser General" + "DOTA_Tooltip_ability_item_0003_Lore" "Aki Minoriko and her old sister-Aki Shizuha manipulate the Autumn together." + "DOTA_Tooltip_ability_item_0004" "[N]Graveyard Fairy" + "DOTA_Tooltip_ability_item_0004_Description" "A fairy that can be found everywhere in the GY.\n[★]POISONED DAGGER" + "DOTA_Tooltip_ability_item_0005" "[N]Shanghai Doll" + "DOTA_Tooltip_ability_item_0005_Description" "A doll that was made by Alice.\n[★]CRITICAL STRIKE" + "DOTA_Tooltip_ability_item_0006" "[N]Hourai Doll" + "DOTA_Tooltip_ability_item_0006_Description" "A doll that was made by Alice.\n[★]THUMP" + "DOTA_Tooltip_ability_item_0007" "[N]Flower Field Fairy" + "DOTA_Tooltip_ability_item_0007_Description" "A fairy that can be found everywhere on a flower field.\n[★]MULTI-SHOT" + "DOTA_Tooltip_ability_item_0008" "[N]Maid Fairy" + "DOTA_Tooltip_ability_item_0008_Description" "A fairy that can be found everywhere in Koumakan.\n[★]MOONBLADE" + "DOTA_Tooltip_ability_item_0009" "[R]Cirno" + "DOTA_Tooltip_ability_item_0009_Description" "Cirno is leader of fairies that live near the Misty Lake,hence she has stronger power than other fairies. She is aggressive and has the ability of manipulating cold air,can freeze things flashily. She is more dangerous than normal fairies.\n[★]Frost Sign Card「Frost Columns」\n[★★★★]Freeze Sign「Perfect Freeze」" + "DOTA_Tooltip_ability_item_0009_Lore" "I am the strongest!" + "DOTA_Tooltip_ability_item_0010" "[R]Tatara Kogasa" + "DOTA_Tooltip_ability_item_0010_Description" "Karakasa Obake,is a Tsukumogami which transformed by the umbrella that is not used for a long time.\ndoes not attack people or eat people, only like shock people. \n[★]Halo「Karakasa Surprising Flash」\n[★★★]Rain Sign「A Rainy Night\'s Ghost Story」" + "DOTA_Tooltip_ability_item_0010_Lore" "Just often cannot shock anyone...." + "DOTA_Tooltip_ability_item_0011" "[R]Letty Whiterock" + "DOTA_Tooltip_ability_item_0011_Description" "This youkai only can be seen in Winter, Like cold place, is a kind of scary fairy that can freeze people cause they cannot fight any more. \n[★]Winter Sign「Flower Wither Away」\n[★★★]Cold Sign「Lingering Cold」" + "DOTA_Tooltip_ability_item_0012" "[R]Lyrica Prismriver" + "DOTA_Tooltip_ability_item_0012_Description" "Prismriver Band is formed by Poltergeist Sisters, Lyrica is the youngest sister of Poltergeist Sisters.\nNormally using keyboard or percussion.\n[★]Nether Keys「Fazioli Nether Performance」\n[★★★]Key Spirit「B\?sendorfer Divine Performance」" + "DOTA_Tooltip_ability_item_0013" "[R]Lunasa Prismriver" + "DOTA_Tooltip_ability_item_0012_Lore" "Be different from her sisters, her music is the \'Fantasy Music\' which is nonexistent." + "DOTA_Tooltip_ability_item_0013_Description" "Prismriver Band is formed by Poltergeist Sisters,Lunasa is the oldest sister of Poltergeist Sisters, is good at playing violin. And he is also the captain of Prismriver Band\n[★]String Performance「Guarneri del Gesù」\n[★★★]Fake Strings「Pseudo Stradivarius」" + "DOTA_Tooltip_ability_item_0014" "[R]Merlin Prismriver" + "DOTA_Tooltip_ability_item_0014_Description" "The middle sister of Poltergeist Sisters.\n Has pleasant personality, she is the tallest in three sisters, hence she often stands in the mid of the three when they are in concerts.\n[★]Trumpet Spirit「Hino Phantasm」\n[★★★]Trumpet Spirit「Ghost Clifford」" + "DOTA_Tooltip_ability_item_0014_Lore" "When you heard her music, you will suddenly start dancing or impossible to have fluent conversations." + "DOTA_Tooltip_ability_item_0013_Lore" "Do not make children heard that. Only adults can listen ghost music." + "DOTA_Tooltip_ability_item_0015" "[R]Rumia" + "DOTA_Tooltip_ability_item_0015_Description" "a kind of low level youkai, the ability is manipulate darkness-create some ranges of the dark area circle around her. Although she looks young, she also eats people. \n[★]「SOU~NA~NO~KA!」\n[★★★]Darkness Sign「Demarcation」" + "DOTA_Tooltip_ability_item_0015_Lore" "Actually the ribbon which twines around the hair is the Sign, even if she wants to take off the ribbon, Rumia-herself still cannot touch it" + "DOTA_Tooltip_ability_item_0016" "[R]Komeiji Satori" + "DOTA_Tooltip_ability_item_0016_Description" "Satori Komeiji is the Mistress of the Palace of the Earth Spirits after the underground city was separated from Hell. Her ability to read minds causes various youkai and spirits to fear her, but makes her loved by the animals that normally can\'t be understood. With these animals as pets, she manages the ruins of the Hell of Blazing Fires where her home stands.\n[★]Recollection「Terrible Souvenir」\n[★★★★]Recollection「Terrifying hypnotism」" + "DOTA_Tooltip_ability_item_0016_Lore" "Because she can read others\'minds, there is no secret behind her.\nNo matter any fairies, even ghost feels scary." + "DOTA_Tooltip_ability_item_0017" "[R]Nagae Iku" + "DOTA_Tooltip_ability_item_0017_Description" "The envoy of Dragon Palace who lives in the cloud, Most of time she lives in the cloud, guarding the dragon.\n[★]Thunder Sign「Lightning Fish」\n[★★★★]Fish Sign「Dragonfish Drill」" + "DOTA_Tooltip_ability_item_0017_Lore" "Can understand dragon\'s language, convey important things to humans and youkaies." + "DOTA_Tooltip_ability_item_0018" "[R]Mystia Lorelei" + "DOTA_Tooltip_ability_item_0018_Description" "Mystia Lorelei is a night sparrow with an outgoing egocentric personality, at least she sounds arrogant, that enjoys infusing confusion and terror into the hearts of humans using her ability: a song that creates confusion in those who hear her. Her song seems to attract nearby monsters as well. She roams the Youkai Trail near the Human Village that Keine Kamishirasawa tries to protect, in search of humans to frighten. She is indeed feared by the locals as people around her become blinded by darkness. \nlike bustle environments, she often sings popular songs\n[★]Vocal Sign「Hooting in the Night」\n[★★★]\tVocal Sign「Howl of the Horned Owl」" + "DOTA_Tooltip_ability_item_0018_Lore" "Looking a stall with red lanterns in the Roads at night, feeling strange and walking there, you will find out it\'s Night-Birds\' stall." + "DOTA_Tooltip_ability_item_0019" "[SR]Kirisame Marisa" + "DOTA_Tooltip_ability_item_0019_Description" "Marisa Kirisame is an ordinary human magician who specializes in light and heat magic and currently resides in the Forest of Magic.\nRunning a \'Kirisame Magic Shop\',that place is not only her work place but also her home.\nHer appearance looks like a typical western witch, and she often rides a broom to fly.\n[★]Love Sign「Master Spark」\n[★]Magic Sign「Stardust Reverie」\n[★★★★]Magiccannon「Final Spark」" + "DOTA_Tooltip_ability_item_0019_Lore" "I am a passing magician! Da☆Ze" + "DOTA_Tooltip_ability_item_0020" "[SR]Hinanawi Tenshi" + "DOTA_Tooltip_ability_item_0020_Description" "The celestial who lives in the heaven,the \'Eldest Daughter\' of the Hinanawi clan.\nShe can suppress and trigger the earthquake, and can manipulate the keystones and use Sword Of Hisou.\n[★]Heaven Sign「Sword of Divine Justice」\n[★]Non-Perception「Sword of Neither Perception nor Non-Perception」\n[★★★★]Earth Sign「Sword of Unletting Soil」" + "DOTA_Tooltip_ability_item_0020_Lore" "Celestials is just a kind of nonentity that occationally comes to the earth to give advice. Tell the truth, They are all some fantastic advice as for me." + "DOTA_Tooltip_ability_item_0021" "[SR]Patchouli Knowledge" + "DOTA_Tooltip_ability_item_0021_Description" "Patchouli is the witch and resident of the Scarlet Devil Mansion\nShe\'s friends with the mistress,Remilia,is an about 100-year-old witch.\nShe likes reading, and can manipulate fire,water,wood,metal,earth,sun,and moon. \nShe often stays in the library,has hard asthma,anemia,cause the body is weak, she is weak in hand-to-hand combat.\n[★]Fire Water Wood Metal Earth Sign「Philosopher\'s Stone」\n[★]「Philosopher\'s Stone」\n[★★★]\tMoon Sign「Silent Selene」" + "DOTA_Tooltip_ability_item_0021_Lore" "Everytime she carries books, and think books are apart of herself." + "DOTA_Tooltip_ability_item_0022" "[SR]Sakuya Izayoi" + "DOTA_Tooltip_ability_item_0023" "[SR]Reisen Udongein Inaba" + "DOTA_Tooltip_ability_item_0023_Description" "Reisen Udongein Inaba is a rabbit youkai that has a much different temperament from other fairies.\nit is said keep looking her red eyes will make people mad, and her voice,can\'t be heard even you want to, conversely sometimes in the far place you can hear it is talking beside your ears.\nDue to this makes people mad,hardly ever can talk to her.\n[★]Weak Heart 「Demotivation」\n[★]Illusion Rabbit 「Parallel Cross」\n[★★★★]「Lunatic Red Eyes」" + "DOTA_Tooltip_ability_item_0023_Lore" "Reisen" + "DOTA_Tooltip_ability_item_0024" "[SR]Saigyouji Yuyuko" + "DOTA_Tooltip_ability_item_0024_Description" "Mistress of Saigyouji family,1000 years ago this ghost girl had been living in Hakugyokurou in the Netherworld.\nShe has ability to command ghosts, so she was appointed to the manager of ghosts in the Netherworld by Enma,and can live in the Netherworld forever.\n[★]Deadly Butterfly「Eternal Sleep in Dreamland」\n[★]Deadly Dance「Law of Mortality」\n[★★★★]Death Sign「Life of Drunk, Dream of Death」" + "DOTA_Tooltip_ability_item_0024_Lore" "Sparrows have too much tiny bone, I really don\'t like them." + "DOTA_Tooltip_ability_item_0025_Lore" "Guangzhou people shoot fairies is none of my business." + "DOTA_Tooltip_ability_item_0025" "[SR]Konpaku Youmu" + "DOTA_Tooltip_ability_item_0025_Description" "Youmu is the second generation of the desire of the Saiyouji family. The former generation of the desire, Youmu\'s grandfather - Konpaku Youki, after he had been 300 years desire, one day he suddenly understand something, so he give this job to Youmu, when she was just a young girl, then he lived with himself alone.\nYoumu is different from her pure-ghost master,Saigyouji Yuyuko, she is the \'half-human half-phantom \'. The huge ghost beside her is active by her thought, that is a part of her body.\n[★]Sword Skill「Cherry Blossom Flashing」\n[★]Konpaku「Dharma of Gumonji Wisdom of the Living and Dead」\n[★★★★]Six Realms Sword「A Single Thought and the Infinite Kalpas」" + "DOTA_Tooltip_ability_item_0026" "[SR]Kaenbyou Rin" + "DOTA_Tooltip_ability_item_0026_Description" "living in the Old Hell, one of the fairies which are hated, is called \'Cart\'. appearing in funerals and carrying-away corpses,this ominous behaviour will enrage people who are in sadness.So people hate this youkaies.\nis Satori Komeiji\'s pet, due to it\'s silver tongue and have the ability to have conversations with corpses and souls,it manages the Hell of Blazing Fires\'s ghosts.\n[★]Youkai「Blazing Wheel」\n[★★★]「Rekindling of Dead Ashes」" + "DOTA_Tooltip_ability_item_0026_Lore" "That human is surprisingly strong, reputedly it is called the professor of defeating fairies\nIf that human exactly has some power, perhaps he can give that pretentious Okuu a hard blow.\nNot sure, she thought." + "DOTA_Tooltip_ability_item_0027" "[SR]Reiuji Utsuho" + "DOTA_Tooltip_ability_item_0027_Description" "This crow has special posture\nThe left leg is\'the leg of decomposition\'\\,the right leg is\'\the leg of fusion\',otherwise she also has the right arm\'s \'third leg\'\' for controling rod and fuel, she use these three legs to manipulate ultimate energy. rod\nOkuu\'s mission is guarding the Hell of Blazing Fires\' remain to ensure it would not be out of control.\nThe deity-Yatagarasu lives in her body. Yatagarasu has ultimate power,that is the power of creating the nuclear-nuclear fusion.\n[★]Explosion Sign「Petit Flare」\n[★]Explosion Sign「Peta Flare」\n[★★★★]「Hell\'s Artificial Sun」" + "DOTA_Tooltip_ability_item_0027_Lore" "The envoy from the ground.\nWho is it on earth, and what\'s it target.\nThose questions are asked immediately in Okuu\'s little head." + "DOTA_Tooltip_ability_item_0028" "[SSR]Hakurei Reimu" + "DOTA_Tooltip_ability_item_0028_Description" "Shrine Maiden of the Hakurei Shrine,nominally the manager of Gensokyo\nShe has talented miraculous luck and sensitivity, and many abilities, but lack of practices.\nDon\'t believe \'efforts will pay off,\' hate practicing, lack of sense of danger.\nEveryday she just cleans up the shrine and leisurely enjoys the tea.\nBut everytime something strange happens, she will hurry to investigate.\nShe will be serious when she is defeating the fairies, but she also treats youkais and humans in the same attitude when she doesn\'t need to work.\n[★]Spirit Sign「Fantasy Seal -Spread」\n[★]Bewitched Weapon「Merciless Purification Rod」\n[★★★]Holy Relic「Yin-Yang Demon God Orb」\n[★★★★★]「Fantasy Nature」" + "DOTA_Tooltip_ability_item_0029" "[SSR]Daiyousei" + "DOTA_Tooltip_ability_item_0029_Description" "Daiyousei is a greater fairy who lives around the Misty Lake near the Scarlet Devil Mansion. Like other fairies, she\'s cheerful and mischievous, simple and emotional.\n[★]「Kind Heart of Yousei」\n[★]「Yousei Garden」\n[★★★]「Revelution」\n[★★★★★]「Beyond The World」" + "DOTA_Tooltip_ability_item_0030" "[SSR]Remilia Scarlet" + "DOTA_Tooltip_ability_item_0031" "[SSR]Komeiji Koishi" + "DOTA_Tooltip_ability_ability_touhoutd_release_tower" "Recycle the Shikigami" + "DOTA_Tooltip_ability_ability_touhoutd_release_tower_Description" "Recycle a shikigami to transform it back to card" + "DOTA_Tooltip_ability_ability_touhoutd_blink" "Blink" + "DOTA_Tooltip_ability_ability_touhoutd_blink_Description" "Blink to the target point" + "DOTA_Tooltip_ability_ability_touhoutd_kill" "「Fantasy Seal」" + "DOTA_Tooltip_ability_ability_touhoutd_kill_Description" "Kill an enemy immediately" + "DOTA_Tooltip_ability_ability_touhoutd_buy_normal_card" "Use normal card" + "DOTA_Tooltip_ability_ability_touhoutd_buy_normal_card_Description" "Use normal card by SHORTCUT" + "DOTA_Tooltip_ability_ability_touhoutd_buy_senior_card" "Use senior card by SHORTCUT" + "DOTA_Tooltip_ability_ability_touhoutd_buy_senior_card_Description" "Use senior card by SHORTCUT。" + "DOTA_Tooltip_ability_ability_touhoutd_sort_item" "整理地面物品" + "DOTA_Tooltip_ability_ability_touhoutd_sort_item_Description" "自动分类整齐摆放自己所有地面物品,锁定的物品会忽略。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1" "召唤「初级异变」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1_Description" "在秋穣子商店可以召唤3种异变跳关。\n召唤初级异变,直接跳过%add_wave%波。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1_cost" "消耗金钱:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1_add_wave" "跳关波数:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2" "召唤「高级异变」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_Description" "右键点击切换金钱购买魔法钥匙购买。\n召唤高级异变,直接跳过%add_wave%波。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_cost" "消耗金钱:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_count" "消耗魔法钥匙:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_add_wave" "跳关波数:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3" "召唤「终极异变」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_Description" "右键点击切换金钱购买魔法钥匙购买。\n召唤终级异变,直接跳过%add_wave%波。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_cost" "消耗金钱:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_count" "消耗魔法钥匙:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_add_wave" "跳关波数:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_roll" "开启「结界之门」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_roll_Description" "开启结界之门,随机召唤%card_count%张式神卡(该式神卡可以不在卡池内)并且该式神卡消耗掉将不会回到卡池。无尽之前每通过一波则可开启一次。\n等级1:80%%召唤N卡,20%%召唤R卡,共3张\n等级2:80%%召唤R卡,20%%召唤SR卡,5%%召唤SSR卡,共1张。80%%召唤N卡,20%%召唤R卡,共3张\n等级3:75%%召唤R卡,20%%召唤SR卡,5%%召唤SSR,共5张" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_1" "Buy senior nostrum Lv1" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_1_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_2" "Buy senior nostrum Lv2" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_2_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_3" "Buy senior nostrum Lv3" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_3_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_4" "Buy senior nostrum Lv4" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_4_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_close_star" "Close/Open Star Display" + "DOTA_Tooltip_ability_ability_touhoutd_close_star_Description" "Close/Open Star Display.(After reconnected, you can click twice to look up)" + "DOTA_Tooltip_ability_ability_touhoutd_star_up" "Star-Up the card" + "DOTA_Tooltip_ability_ability_touhoutd_star_up_Description" "You can promote shikigami cards\' star number which has reach max level by feeding shikigamies and cards\'meterial heroes are carrying.\nPromote to ★★ needs 1 ★ max level material\nPromote to ★★★ needs 2 ★★ max level material.\nPromote to ★★★★ needs 3 ★★★ max level material.\nPromote to ★★★★★ needs 4 ★★★★ max level material." + "DOTA_Tooltip_ability_ability_touhoutd_exp_up" "Card feeding" + "DOTA_Tooltip_ability_ability_touhoutd_exp_up_Description" "Can promote cards\' exp by feeding first cell\'s material of shikigami\'s equipment slot.\nThe same type cards feeding can promote special skills\' level." + "DOTA_Tooltip_ability_thtd_lily_01" "Spring Sign「Spring Declaration」" + "DOTA_Tooltip_ability_thtd_lily_01_Description" "Lily White put Spring power into friendly units\'bodies in the area,promote their exp\n\nPromotion Value:Star Parameters*POWER POINTs*6.5\n\nStar Parameters:1,1.8,2.4,3.2,4" + "DOTA_Tooltip_ability_thtd_lily_01_Note0" "潜能Lv10:魔法消耗降低10%%。" + "DOTA_Tooltip_ability_thtd_lily_01_Note1" "潜能Lv50:魔法消耗降低20%%。" + "DOTA_Tooltip_ability_thtd_lily_01_Note2" "潜能Lv100:魔法消耗降低30%%。" + "DOTA_Tooltip_ability_thtd_lily_01_radius" "区域范围:" + "DOTA_Tooltip_ability_thtd_lily_01_power_factor" "经验系数:" + "DOTA_Tooltip_ability_thtd_lily_02" "Spring Sign「Surprise Spring」" + "DOTA_Tooltip_ability_thtd_lily_02_Description" "Lily White opens the barrier, units in the range of barrier\'s cause 125% damages to enemies." + "DOTA_Tooltip_ability_thtd_lily_02_Note0" "潜能Lv10:范围+150。" + "DOTA_Tooltip_ability_thtd_lily_02_Note1" "潜能Lv50:范围+300。" + "DOTA_Tooltip_ability_thtd_lily_02_Note2" "潜能Lv100:范围+450。" + "DOTA_Tooltip_ability_thtd_lily_02_Note3" "\n春天是2月5日至5月5日。" + "DOTA_Tooltip_ability_thtd_lily_02_radius" "区域范围:" + "DOTA_Tooltip_ability_thtd_lily_02_duration" "DURATION:" + "DOTA_Tooltip_ability_thtd_lily_02_damage_up" "%伤害提升:" + "DOTA_Tooltip_modifier_lily_02_buff" "春符「Surprise Spring」" + "DOTA_Tooltip_modifier_lily_02_buff_Description" "受到春之力的影响,造成的伤害提高。" + "DOTA_Tooltip_ability_thtd_nazrin_01" "Search Sign「Gold Detector」" + "DOTA_Tooltip_ability_thtd_nazrin_01_Description" "Every attack, Nazrin has posible to steal targets some money.\n\nSteal Chance:50%%\n\nAmount of Stealing:Star Parameter+POWER POINTs*0.02\n\nStar Parameter:2.4,8.8,21.6,43.2,170.4" + "DOTA_Tooltip_ability_thtd_nazrin_01_Note0" "潜能Lv10:概率+5%%。" + "DOTA_Tooltip_ability_thtd_nazrin_01_Note1" "潜能Lv50:概率+10%%。" + "DOTA_Tooltip_ability_thtd_nazrin_01_Note2" "潜能Lv100:概率+15%%。" + "DOTA_Tooltip_ability_thtd_nazrin_01_bonus_chance" "%偷取概率:" + "DOTA_Tooltip_ability_thtd_nazrin_01_bonus_gold" "基础金钱:" + "DOTA_Tooltip_ability_thtd_nazrin_01_power_percent" "%能量参数:" + "DOTA_Tooltip_ability_thtd_minoriko_01" "Plenty Sign「Warm Color Harvest」" + "DOTA_Tooltip_ability_thtd_minoriko_01_Description" "Although Minoriko can\'t promote star levels by normal ways, she can promote by time.\n\nEvery(270/540/900/1260)seconds will promote a star level." + "DOTA_Tooltip_ability_thtd_minoriko_01_Note0" "潜能Lv10:成长花费时间-10%%。" + "DOTA_Tooltip_ability_thtd_minoriko_01_Note1" "潜能Lv50:成长花费时间-20%%。" + "DOTA_Tooltip_ability_thtd_minoriko_01_Note2" "潜能Lv100:成长花费时间-30%%。" + "DOTA_Tooltip_ability_thtd_minoriko_01_grow_time" "成长花费时间:" + "DOTA_Tooltip_ability_thtd_minoriko_02" "Bumper Crop「Promise of the Wheat God」" + "DOTA_Tooltip_ability_thtd_minoriko_02_Description" "exchange star levels of the target with Minoriko\'s star levels.(The maximum exchange of 3 times)" + "DOTA_Tooltip_ability_thtd_minoriko_02_Note0" "潜能Lv10:交换次数+1。" + "DOTA_Tooltip_ability_thtd_minoriko_02_Note1" "潜能Lv50:交换次数+2。" + "DOTA_Tooltip_ability_thtd_minoriko_02_Note2" "潜能Lv100:交换次数+3。" + "DOTA_Tooltip_ability_thtd_minoriko_02_max_count" "最大交换次数:" + "DOTA_Tooltip_ability_thtd_mugiyousei_01" "POISONED WEAPON" + "DOTA_Tooltip_ability_thtd_mugiyousei_01_Description" "Graveyard Fairies\' attacks apply poison that deals damage over time." + "DOTA_Tooltip_ability_thtd_mugiyousei_01_power_damage" "技能伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_mugiyousei_01_damage_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_shanghainingyou_01" "CRITICAL STRIKE" + "DOTA_Tooltip_ability_thtd_shanghainingyou_01_Description" "Shanghai Dolls\' attacks have a certain chance to critically strike." + "DOTA_Tooltip_ability_thtd_shanghainingyou_01_crit_chance" "CHANCE" + "DOTA_Tooltip_ability_thtd_shanghainingyou_01_crit_mult" "MULTIPLE" + "DOTA_Tooltip_ability_thtd_hourainingyou_01" "THUMP" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_Description" "Hourai Dolls\' attacks have a certain chance to deal additional damage and stun the target." + "DOTA_Tooltip_ability_thtd_hourainingyou_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_stun_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_lock_time" "眩晕后免疫时间:" + "DOTA_Tooltip_ability_thtd_hanadayousei_01" "MULTI-SHOT" + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Description" "Flower Field Fairies can attack up to 3 units at the same time." + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Note0" "潜能Lv10:范围+100,额外攻击数量+3。" + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Note1" "潜能Lv50:范围+200,额外攻击数量+6。" + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Note2" "潜能Lv100:范围+400,额外攻击全部单位。" + "DOTA_Tooltip_ability_thtd_maidyousei_01" "link_DOTA_Tooltip_ability_luna_moon_glaive" + "DOTA_Tooltip_ability_luna_moon_glaive" "飞刃" + "DOTA_Tooltip_ability_luna_moon_glaive_Description" "攻击可以在敌方单位之间弹跳。每次弹跳造成的伤害都会减少。" + "DOTA_Tooltip_ability_luna_moon_glaive_bounces" "弹射次数:" + "DOTA_Tooltip_ability_luna_moon_glaive_range" "弹跳范围:" + "DOTA_Tooltip_ability_luna_moon_glaive_damage_reduction_percent" "%弹跳伤害衰减:" + "DOTA_Tooltip_ability_luna_moon_glaive_Lore" "" + "DOTA_Tooltip_ability_thtd_cirno_01" "Frost Sign「Frost Columns」" + "DOTA_Tooltip_ability_thtd_cirno_01_Description" "Reduce enemies around Cirno 30% movement speed.\n\n[Combination promotion - Letty]\nMovement Speed reduction promote from 30% to 50%." + "DOTA_Tooltip_ability_thtd_cirno_01_move_slow" "MOVEMENT SPEED REDUCTION:" + "DOTA_Tooltip_modifier_cirno_01_slow_buff" "Frost Sign「Frost Columns」" + "DOTA_Tooltip_modifier_cirno_01_slow_buff_Description" "be influenced by Cirno, this units\' Movement Speed reduces." + "DOTA_Tooltip_modifier_cirno_suwako_buff" "霜符「冰袭方阵」" + "DOTA_Tooltip_modifier_cirno_suwako_buff_Description" "受到琪露诺的影响,该单位魔法伤害提高了。" + "DOTA_Tooltip_ability_thtd_cirno_02" "Freeze Sign「Perfect Freeze」" + "DOTA_Tooltip_ability_thtd_cirno_02_Description" "To the target and units around it cause 8 times damages, and has chance to freeze them.\n\n[Damage Multiplier ]DAMAGE:POWER POINTs * Star levels * 2 per time" + "DOTA_Tooltip_ability_thtd_cirno_02_Note0" "潜能Lv10:技能伤害提高至3倍,造成的伤害次数+4。" + "DOTA_Tooltip_ability_thtd_cirno_02_Note1" "潜能Lv50:技能伤害提高至6倍,造成的伤害次数+8。" + "DOTA_Tooltip_ability_thtd_cirno_02_Note2" "潜能Lv100:技能伤害提高至9倍,造成的伤害次数+16。" + "DOTA_Tooltip_ability_thtd_cirno_02_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_cirno_02_ice_count" "次数:" + "DOTA_Tooltip_ability_thtd_cirno_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_cirno_02_stun_time" "Freeze Time:" + "DOTA_Tooltip_modifier_cirno_frozen_unit" "Freeze Sign「Perfect Freeze」" + "DOTA_Tooltip_modifier_cirno_frozen_unit_Description" "be influenced by Cirno,this unit is being freezed." + "DOTA_Tooltip_ability_thtd_cirno_03" "Blowing Ice「Ice Tornado」" + "DOTA_Tooltip_ability_thtd_cirno_03_Description" "Cirno\'s every attack will cause damage to the target and units around it.\n\n[Damage Multiplier]Damage:POWER POINTs * Star levels" + "DOTA_Tooltip_ability_thtd_cirno_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_cirno_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_cirno_04" "Ice Sign「Ultimate Blizzard」" + "DOTA_Tooltip_ability_thtd_cirno_04_Description" "Cirno every 5 times attack will cause Damage Over Time to target area.\n\n[Damage Multiplier]Damage:POWER POINTs * Star levels * 4 per second" + "DOTA_Tooltip_ability_thtd_cirno_04_Note0" "潜能Lv10:技能伤害提高至3倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note1" "潜能Lv50:技能伤害提高至6倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note2" "潜能Lv100:技能伤害提高至9倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note3" "潜能Lv666:\n获得特殊效果:雪符「钻石风暴」,每次攻击召唤钻石冰晶打击目标周围单位,造成 69*能量*星级 的伤害。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note4" "潜能Lv999:\n获得特殊效果:冰王「霜冻之王」,所有伤害提高至9倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_cirno_04_range" "范围:" + "DOTA_Tooltip_ability_thtd_cirno_04_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_letty_01" "Winter Sign「Flower Wither Away」" + "DOTA_Tooltip_ability_thtd_letty_01_Description" "Letty summon 2 blizzards, cause damage to units in the target area.\n\n[Damage Multiplier]Damage:POWER POINT*1/per blizzard\n\n[Combination Promotion - Cirno]\nThe number of blizzards promote at least 3" + "DOTA_Tooltip_ability_thtd_letty_01_Note0" "潜能Lv10:暴风雪阵数+1,技能伤害+1,每阵暴风雪使下一次的暴风雪伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_letty_01_Note1" "潜能Lv50:暴风雪阵数+2,技能伤害+2,每阵暴风雪使下一次的暴风雪伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_letty_01_Note2" "潜能Lv100:暴风雪阵数+4,技能伤害+4,每阵暴风雪使下一次的暴风雪伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_letty_01_power_damage" "技能伤害(能量点*星级/每阵):" + "DOTA_Tooltip_ability_thtd_letty_01_radius" "区域范围:" + "DOTA_Tooltip_ability_thtd_letty_01_max_count" "暴风雪阵数:" + "DOTA_Tooltip_ability_thtd_letty_02" "Cold Sign「Lingering Cold」" + "DOTA_Tooltip_ability_thtd_letty_02_Description" "Reduce units around Letty\'s Magic Resistance." + "DOTA_Tooltip_ability_thtd_letty_02_magic_armor" "Resistance Reduction:" + "DOTA_Tooltip_modifier_letty_02_magic_armor_buff" "Cold Sign「Lingering Cold」" + "DOTA_Tooltip_modifier_letty_02_magic_armor_buff_Description" "Be influenced by Letty, this unit\'s Magic Resistance reduces" + "DOTA_Tooltip_ability_thtd_kogasa_01" "Halo「Karakasa Surprising Flash」" + "DOTA_Tooltip_ability_thtd_kogasa_01_Description" "Kogasa shocks the target and units around it, cause damage to them and reduce the movement speed.\n\n[Damage Multiplier]Initial Damage:60/120/240/480/960\n\n[Damage Multiplier]Damage Over Time:15/30/60/120/240 per second" + "DOTA_Tooltip_ability_thtd_kogasa_01_Note0" "潜能Lv10:范围+100,技能伤害提高200%%,丢魂效果+2%%最大血量和+2倍惊吓伤害。" + "DOTA_Tooltip_ability_thtd_kogasa_01_Note1" "潜能Lv50:范围+200,技能伤害提高400%%,丢魂效果+4%%最大血量和+4倍惊吓伤害。" + "DOTA_Tooltip_ability_thtd_kogasa_01_Note2" "潜能Lv100:范围+400,技能伤害提高800%%,丢魂效果+8%%最大血量和+8倍惊吓伤害。" + "DOTA_Tooltip_ability_thtd_kogasa_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kogasa_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_kogasa_01_radius" "范围:" + "DOTA_Tooltip_modifier_kogasa_debuff" "Halo「Karakasa Surprising Flash」" + "DOTA_Tooltip_modifier_kogasa_debuff_Description" "Be shocked by Karakasa,the unit reduces the Movement Speed and causes Damage Over Time." + "DOTA_Tooltip_ability_thtd_kogasa_02" "Rain Sign「A Rainy Night\'s Ghost Story」" + "DOTA_Tooltip_ability_thtd_kogasa_02_Description" "Reduce units around Kogasa\'s Armor." + "DOTA_Tooltip_ability_thtd_kogasa_02_armor" "ARMOR REDUCTION:" + "DOTA_Tooltip_modifier_kogasa_02_armor_buff" "Rain Sign「A Rainy Night\'s Ghost Story」" + "DOTA_Tooltip_modifier_kogasa_02_armor_buff_Description" "Be influenced by Karakasa, This unit\'s armors reduce." + "DOTA_Tooltip_ability_thtd_kogasa_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_kogasa_03_Description" "选择一个地点来设定AI定点施放:光晕「唐伞惊吓Flash」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_lyrica_01" "Nether Keys「Fazioli Nether Performance」" + "DOTA_Tooltip_ability_thtd_lyrica_01_Description" "Lyrica causes damage to the target and units around it\n\n[Damage Multiplier]Damage:POWER POINTs*Star levels\n\n[Combination Promotion - lunasa - Merlin]\nPromote 50% damages." + "DOTA_Tooltip_ability_thtd_lyrica_01_power_damage1" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_lyrica_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_lyrica_01_damage_up" "%组合提升伤害:" + "DOTA_Tooltip_ability_thtd_lyrica_01_power_damage2" "群体额外伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_lyrica_01_power_damage3" "单体额外伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_lyrica_02" "Key Spirit「B\?sendorfer Divine Performance」" + "DOTA_Tooltip_ability_thtd_lyrica_02_Description" "When Lyrica\'s skill causes damages, Each note in the target will cause each extra damages. \n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*0.5\n\n[Combination Promotion - Lunasa - Merlin]\nPromote 50% damages." + "DOTA_Tooltip_ability_thtd_lunasa_01" "String Performance「Guarneri del Gesù」" + "DOTA_Tooltip_ability_thtd_lunasa_01_Description" "Lunasa causes Damage Over Time and reduces Movement Speed to the target and units around it,and attaching a [ensemble]note\n\n[Damage Multiplier]Damage:40/100/200/400/800 per second" + "DOTA_Tooltip_ability_thtd_lunasa_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_lunasa_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_lunasa_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_lunasa_01_stun_time1" "单体「忧郁」状态持续时间:" + "DOTA_Tooltip_ability_thtd_lunasa_01_stun_time2" "群体「忧郁」状态持续时间:" + "DOTA_Tooltip_modifier_lunasa_01_debuff" "Note - [Sadness]" + "DOTA_Tooltip_modifier_lunasa_01_debuff_Description" "The music of violin makes people sad." + "DOTA_Tooltip_ability_thtd_lunasa_02" "Fake Strings「Pseudo Stradivarius」" + "DOTA_Tooltip_ability_thtd_lunasa_02_Description" "Lunatha\'s normal attack will cause damage to the target, and attaching a [ensemble]note.\n\n[Damage Multiplier]Damage:200/400/800 per second" + "DOTA_Tooltip_ability_thtd_lunasa_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_merlin_01" "Trumpet Spirit「Hino Phantasm」" + "DOTA_Tooltip_ability_thtd_merlin_01_Description" "Merlin plays trumpet to cause damage and reduce the Movement Speed to units in the range, and attaching a [maniac]note\n\n[Damage Multiplier]Damage: 40/100/200/400/800 Per second" + "DOTA_Tooltip_ability_thtd_merlin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_merlin_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_merlin_01_move_slow" "Movement Speed Reduction:" + "DOTA_Tooltip_ability_thtd_merlin_01_move_slow_duration" "减速持续时间:" + "DOTA_Tooltip_ability_thtd_merlin_01_outgoing_percent" "%组合伤害提升:" + "DOTA_Tooltip_ability_thtd_merlin_01_duation_time" "伤害提升持续时间:" + "DOTA_Tooltip_ability_thtd_merlin_01_mana_regen" "魔法值回复:" + "DOTA_Tooltip_modifier_merlin_01_buff" "管灵「日野幻想」" + "DOTA_Tooltip_modifier_merlin_01_buff_Description" "「狂躁」状态下造成的伤害提升。" + "DOTA_Tooltip_modifier_merlin_01_debuff" "Trumpet Spirit「Hino Phantasm」" + "DOTA_Tooltip_modifier_merlin_01_debuff_Description" "Passionate Trumpet music makes people mad." + "DOTA_Tooltip_ability_thtd_merlin_02" "Trumpet Spirit「Ghost Clifford」" + "DOTA_Tooltip_ability_thtd_merlin_02_Description" "Merlin\'s normal attack will cause damages to the target, and attaching a [maniac] note\n\n[Damage Multiplier]Damage:200/400/800 Per second" + "DOTA_Tooltip_ability_thtd_merlin_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_01" "「Is~It~Like~That!」" + "DOTA_Tooltip_ability_thtd_rumia_01_Description" "Rumia\'s attack attach extra damage, every unit Rumia kills will promote herself\'s POWER POINTs.\n\n[Damage Multiplier]Max POWER POINT Promotion:50/100/200/400/600" + "DOTA_Tooltip_ability_thtd_rumia_01_power_damage" "额外伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_01_max_bonus" "Max POWER POINTs:" + "DOTA_Tooltip_ability_thtd_rumia_02" "Darkness Sign「Demarcation」" + "DOTA_Tooltip_ability_thtd_rumia_02_Description" "Rumia\'s every 10 normal attacks will shoot arc Danmakus, units which touch Danmakus will be hurt.\n\n[Damage Multiplier]Damage: POWER POINTs*1/every barrage" + "DOTA_Tooltip_ability_thtd_rumia_02_Note0" "潜能Lv10:攻击次数需求-2。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note1" "潜能Lv50:攻击次数需求-4。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note2" "潜能Lv100:攻击次数需求-6。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note3" "潜能Lv666:\n获得特殊效果:十字架or十进制,解开封印,暗符伤害提升至10倍。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note4" "潜能Lv999:\n获得特殊效果:大胃王,击杀单位能量点提高上限提高至10倍。" + "DOTA_Tooltip_ability_thtd_rumia_02_power_damage1" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_02_power_damage2" "觉醒后伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_02_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_rumia_03" "「Dark Mastery」" + "DOTA_Tooltip_ability_thtd_rumia_03_Description" "Rumia attack have 10%% probability outstretched Dark Claws to70%%HP unit,this unit will be directly spiked." + "DOTA_Tooltip_ability_thtd_rumia_03_chance" "%概率:" + "DOTA_Tooltip_modifier_rumia_03_pause" "" + "DOTA_Tooltip_ability_thtd_rumia_04" "「A story that has been forgotten by fantasy」" + "DOTA_Tooltip_ability_thtd_rumia_04_Description" "Rumia each attack creates a dark and damage to the target area.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL/3 /per Danmaku\n\n[COOPERATION PROMOTION - Hakurei Reimu]\n\nimprove50%%damage.。" + "DOTA_Tooltip_ability_thtd_rumia_04_Note0" "潜能Lv10:技能伤害+3。" + "DOTA_Tooltip_ability_thtd_rumia_04_Note1" "潜能Lv50:技能伤害+8。" + "DOTA_Tooltip_ability_thtd_rumia_04_Note2" "潜能Lv100:技能伤害+13。" + "DOTA_Tooltip_ability_thtd_rumia_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_04_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_satori_01" "Recollection「Terrible Souvenir」" + "DOTA_Tooltip_ability_thtd_satori_01_Description" "Reducing units around Satori\'s Movement Speed, during 3s.\n\n[Damage Multiplier]Movement Speed Reduction:35/40/45/50/55%%" + "DOTA_Tooltip_ability_thtd_satori_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_satori_01_move_slow" "Movement Speed Reduction:" + "DOTA_Tooltip_ability_thtd_satori_01_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_satori_01_debuff" "Recollection「Terrible Souvenir」" + "DOTA_Tooltip_modifier_satori_01_debuff_Description" "Be influenced by Satori, this unit\'s Movement Speed reduces." + "DOTA_Tooltip_ability_thtd_satori_02" "Recollection「Terrifying Hypnotism」" + "DOTA_Tooltip_ability_thtd_satori_02_Description" "Units enter terrible souvenir\' HP will be recorded, they will get damage which base on the damage in these 3s again after 3s. \n\n[Damage Multiplier]Damage:40%%/100%%\n\n[Combination Promotion - Komeiji Koishi]\nUnits in terrible Hypnotism area will get 120% physical damages" + "DOTA_Tooltip_ability_thtd_satori_02_Note0" "伤害上限在基础伤害计算时判断。\n" + "DOTA_Tooltip_ability_thtd_satori_02_Note1" "潜能Lv10:伤害上限提升50%%。" + "DOTA_Tooltip_ability_thtd_satori_02_Note2" "潜能Lv50:伤害上限提升100%%。" + "DOTA_Tooltip_ability_thtd_satori_02_Note3" "潜能Lv100:伤害上限提升150%%。" + "DOTA_Tooltip_ability_thtd_satori_02_Note4" "潜能Lv666:\n获得特殊效果:地灵符「心灵恒星蒸馏器」,对目标的伤害上限提高4倍。" + "DOTA_Tooltip_ability_thtd_satori_02_Note5" "潜能Lv999:\n获得特殊效果:地妖符「自我的式神」,享受古明地恋「本我的解放」效果提高10倍。" + "DOTA_Tooltip_ability_thtd_satori_02_damage_percent" "%伤害比例:" + "DOTA_Tooltip_ability_thtd_satori_02_damage_up" "%物理伤害加深:" + "DOTA_Tooltip_modifier_thtd_satori_02_combo_buff" "【组合提升 - 古明地恋】" + "DOTA_Tooltip_modifier_thtd_satori_02_combo_buff_Description" "在恐怖催眠术作用范围下的单位受到的物理伤害加深。" + "DOTA_Tooltip_ability_thtd_iku_01" "Thunder Sign「Lightning Fish」" + "DOTA_Tooltip_ability_thtd_iku_01_Description" "Iku\'s every 8 attacks will cause extra damages and Paralysis 0.5s to the target and units in that area around the target.\n\n[Damage Multiplier]Damage:50 * 2^star-levels\n\n[Combination Promotion - Tenshi Hinanawi]\nParalysis time will promote 1s." + "DOTA_Tooltip_ability_thtd_iku_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_iku_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_iku_01_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_iku_01_stun_time" "麻痹时间:" + "DOTA_Tooltip_ability_thtd_iku_01_lock_time" "麻痹后免疫时间:" + "DOTA_Tooltip_modifier_iku_01_debuff" "Thunder Sign「Lightning Fish」" + "DOTA_Tooltip_modifier_iku_01_debuff_Description" "be attacked by Iku Nagae, this unit paralysises." + "DOTA_Tooltip_ability_thtd_iku_02" "Fish Sign「Dragonfish Drill」" + "DOTA_Tooltip_ability_thtd_iku_02_Description" "Iku uses Drill to cause Damage Over Time to front area.\n\n[Damage Multiplier]Damage: Star-levels * POWER POINTs * 3 per second" + "DOTA_Tooltip_ability_thtd_iku_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_iku_02_radius" "范围:" + "DOTA_Tooltip_ability_thtd_iku_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_iku_02_tick_time" "伤害间隔时间:" + "DOTA_Tooltip_ability_thtd_mystia_01" "Vocal Sign「Hooting in the Night」" + "DOTA_Tooltip_ability_thtd_mystia_01_Description" "Promote surrounding friendly units\' physical strike ability.\n\n[Damage Multiplier]Strike Values:10/20/30/40/60" + "DOTA_Tooltip_ability_thtd_mystia_01_penetration" "Strike Value" + "DOTA_Tooltip_modifier_mystia_01_buff" "Vocal Sign「Hooting in the Night」" + "DOTA_Tooltip_modifier_mystia_01_buff_Description" "Be influenced by night sparrow\'s voice, this units\' physical strike promotes." + "DOTA_Tooltip_ability_thtd_mystia_02" "Vocal Sign「Howl of the Horned Owl」" + "DOTA_Tooltip_ability_thtd_mystia_02_Description" "Promote surrounding units\' normal attack damages.\n\n[Damage Multiplier]Normal attack damage promotion:50/100/200" + "DOTA_Tooltip_ability_thtd_mystia_02_critdamage" "Normal attack damage Promotion:" + "DOTA_Tooltip_modifier_mystia_02_buff" "Vocal Sign「Howl of the Horned Owl」" + "DOTA_Tooltip_modifier_mystia_02_buff_Description" "Be influenced by night sparrow\'s voice, this units\' attack damage promotes." + "DOTA_Tooltip_ability_thtd_marisa_01" "Love Sign「Master Spark」" + "DOTA_Tooltip_ability_thtd_marisa_01_Description" "Marisa shoots Magicannon to front, cause large Damage Over Time to enemies on straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star levels*3.5 per second\n\n[Combination Promotion - Hakurei Reimu]\nDuration of Magic Connon promotes to 7s." + "DOTA_Tooltip_ability_thtd_marisa_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_marisa_01_damage_width" "WIDTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_01_damage_lenth" "LENGTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_01_channel_time" "DURATION:" + "DOTA_Tooltip_modifier_thdots_marisa01_think_interval" "Magicannon「Final Spark」" + "DOTA_Tooltip_modifier_thdots_marisa01_think_interval_Description" "Marisa is shooting Magicannon." + "DOTA_Tooltip_ability_thtd_marisa_03" "Magicannon「Final Spark」" + "DOTA_Tooltip_ability_thtd_marisa_03_Description" "Marisa shoots magicannon to front, cause large Damage Over Time to enemies on straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star level*7.0 per second\n\n[Combination Promotion - Hakurei Reimu]\nDuration of Magic Connon promotes to 7s." + "DOTA_Tooltip_ability_thtd_marisa_03_Note0" "潜能Lv10:技能伤害+8,能量提升+40%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note1" "潜能Lv50:技能伤害+18,能量提升+80%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note2" "潜能Lv100:技能伤害+28,能量提升+160%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note3" "潜能Lv666:\n获得特殊效果:二重火花,能量提升效果和伤害翻倍。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note4" "潜能Lv999:\n获得特殊效果:超究极火花,魔炮伤害提升至400%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_marisa_03_power_up" "%能量提升:" + "DOTA_Tooltip_ability_thtd_marisa_03_damage_width" "WIDTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_03_damage_lenth" "LENGTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_03_channel_time" "DURATION:" + "DOTA_Tooltip_ability_thtd_marisa_02" "Magic Sign「Stardust Reverie」" + "DOTA_Tooltip_ability_thtd_marisa_02_Description" "When Marisa attacks or use skills,Starlike Danmakus will be shooted, enemies are killed by Danmakus will make Marisa\'s MP recover." + "DOTA_Tooltip_ability_thtd_marisa_02_Note0" "潜能Lv10:技能伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_marisa_02_Note1" "潜能Lv50:技能伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_marisa_02_Note2" "潜能Lv100:技能伤害提高400%%。" + "DOTA_Tooltip_ability_thtd_marisa_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_marisa_02_mana" "回复法力值:" + "DOTA_Tooltip_ability_thtd_tenshi_01" "Heaven Sign「Sword of Divine Justice」" + "DOTA_Tooltip_ability_thtd_tenshi_01_Description" "causing damage to a small range to the units in target area. \n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*1.5" + "DOTA_Tooltip_ability_thtd_tenshi_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_tenshi_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_tenshi_01_bonus_attack_power" "攻击力和能量提升:" + "DOTA_Tooltip_ability_thtd_tenshi_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_tenshi_02" "Non-Perception「Sword of Neither Perception nor Non-Perception」" + "DOTA_Tooltip_ability_thtd_tenshi_02_Description" "Effect 1:\nTenshi\'s attack has chance to attach Quadruple Critical Strike.\nEffect 2:\nTenshi\'s attack will attach a small range cleave effect." + "DOTA_Tooltip_ability_thtd_tenshi_02_Note0" "潜能Lv10:暴击概率 +10%%。" + "DOTA_Tooltip_ability_thtd_tenshi_02_Note1" "潜能Lv50:暴击概率 +20%%。" + "DOTA_Tooltip_ability_thtd_tenshi_02_Note2" "潜能Lv100:暴击概率 +40%%。" + "DOTA_Tooltip_ability_thtd_tenshi_02_chance" "%暴击概率:" + "DOTA_Tooltip_ability_thtd_tenshi_02_crit" "%暴击伤害:" + "DOTA_Tooltip_ability_thtd_tenshi_02_range" "分裂范围:" + "DOTA_Tooltip_ability_thtd_tenshi_03" "Earth Sign「Sword of Unletting Soil」" + "DOTA_Tooltip_ability_thtd_tenshi_03_Description" "Effect 1:Tenshi\'s EVERY 15 TIMES attack will shoot a STRAIGHT-LINE WAVE to the target,it will cause huge damages.\n\nEffect 2:Promote surrounding units 20% ATTACK SPEED.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*2.5\n\n[Combination Promotion - Iku Nagae]\nAttack times for triggering the wave REDUCE TO 8 TIMES." + "DOTA_Tooltip_ability_thtd_tenshi_03_Note0" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note1" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note2" "潜能Lv100:技能伤害+40。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note3" "潜能Lv666:\n获得特殊效果:地符「一击震乾坤」,攻击时施放,造成 星级*能量*666 伤害。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note4" "潜能Lv999:\n获得特殊效果:气符「无念无想的境界」,进入空灵之境,非想之剑增加的暴击伤害翻倍。" + "DOTA_Tooltip_ability_thtd_tenshi_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_tenshi_03_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_tenshi_03_attack_speed" "ATTACK SPEED Promotion" + "DOTA_Tooltip_modifier_tenshi_03_attack_speed_buff" "Earth Sign「Sword of Unletting Soil」" + "DOTA_Tooltip_modifier_tenshi_03_attack_speed_buff_Description" "Be influenced by Tenshi, this unit\'s ATTACK SPEED promotes" + "DOTA_Tooltip_ability_thtd_patchouli_01" "Fire Water Wood Metal Earth Sign「Philosopher\'s Stone」" + "DOTA_Tooltip_ability_thtd_patchouli_01_Description" "Patchouli can switch elements, use different kinds of magic:\n\nFire Sign「Agni Shine」\n\nCause large amount of damage to the target area.\n[Damage Multiplier]Damage:POWER POINTs*2^Star levels\n\nWater Sign「Bury In Lake」\n\nCause Damage Over Time to the target area, and if enemies\' HP is less than 30% of the total HP, they will directly die.\n[Damage Multiplier]Damage:POWER POINTs*Star-levels per second\n\nMetal& Water Sign「Mercury poison」\n\nAttaching Posion to units in the target area, cause Damage Over Time and reduce Armors and resistance.\n[Damage Multiplier]Damage:POWER POINTs*Star-levels Per Second\n[Damage Multiplier]Resistance Reduction:10/20/30/40/60" + "DOTA_Tooltip_ability_thtd_patchouli_01_Note0" "潜能Lv10:贤者之石效果提升,伤害提高50%%。" + "DOTA_Tooltip_ability_thtd_patchouli_01_Note1" "潜能Lv50:贤者之石效果提升,伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_patchouli_01_Note2" "潜能Lv100:贤者之石效果提升,伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_patchouli_01_power_damage1" "「火神之光」伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_patchouli_01_range1" "「火神之光」作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_01_power_damage2" "「湖葬」伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_patchouli_01_range2" "「湖葬」作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_01_duration_time2" "「湖葬」持续时间:" + "DOTA_Tooltip_ability_thtd_patchouli_01_power_damage3" "「水银之毒」伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_patchouli_01_range3" "「水银之毒」作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_01_duration_time3" "「水银之毒」持续时间:" + "DOTA_Tooltip_modifier_patchouli_01_mercury_poison_debuff" "Metal & Water Sign「Mercury poison」" + "DOTA_Tooltip_modifier_patchouli_01_mercury_poison_debuff_Description" "Be effected by Mercury poison, this unit is getting Damage Over Time and reducing the resistance." + "DOTA_Tooltip_modifier_patchouli_01_buff_fire" "「火神的光辉」" + "DOTA_Tooltip_modifier_patchouli_01_buff_fire_Description" "造成暴击伤害。" + "DOTA_Tooltip_modifier_patchouli_01_buff_water" "「精灵公主」" + "DOTA_Tooltip_modifier_patchouli_01_buff_water_Description" "增强了自身的伤害。" + "DOTA_Tooltip_modifier_patchouli_01_debuff_gold" "「金属疲劳」" + "DOTA_Tooltip_modifier_patchouli_01_debuff_gold_Description" "受到七元素符卡的伤害提高了。" + "DOTA_Tooltip_ability_thtd_patchouli_02" "「Philosopher\'s Stone」" + "DOTA_Tooltip_ability_thtd_patchouli_02_Description" "Switch Philosopher\'s Stone\'s effects" + "change_to_patchouli_agni_shine" "Switch to「Agni Shine」" + "change_to_patchouli_bury_in_lake" "Switch to「Bury In Lake」" + "change_to_patchouli_mercury_poison" "Switch to「Mercury poison」" + "DOTA_Tooltip_ability_thtd_patchouli_03" "Moon Sign「Silent Selene」" + "DOTA_Tooltip_ability_thtd_patchouli_03_Description" "Promote friendly units around Patchouli 30% Magic Damages." + "DOTA_Tooltip_ability_thtd_patchouli_03_magic_outgoing" "%魔法伤害提高:" + "DOTA_Tooltip_modifier_patchouli_03_buff" "Moon Sign「Silent Selene」" + "DOTA_Tooltip_modifier_patchouli_03_buff_Description" "Be influenced by Patchouli, this unit\'s Magic Damage promotes." + "DOTA_Tooltip_ability_thtd_patchouli_04" "Sun Sign「Royal Flare」" + "DOTA_Tooltip_ability_thtd_patchouli_04_Description" "Patchouli through guide Sun Sign「Royal Flare」,enemies in 1000 distance get huge damages and stun,For two seconds.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5 /EACH TIME\n\n[COOPERATION PROMOTION - Koakuma]\nNeed five stars and Koakuma on the court." + "DOTA_Tooltip_ability_thtd_patchouli_04_Note0" "潜能Lv10:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note1" "潜能Lv50:技能伤害+30。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note2" "潜能Lv100:技能伤害+60。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note3" "潜能Lv666:\n获得特殊效果:知识就是力量,获得三千大界能量+3000(施放贤者之石符卡后获得)。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note4" "潜能Lv999:\n获得特殊效果:魔法阵,布下五芒星法阵,增强七元素之威力,造成伤害提升至5倍。" + "DOTA_Tooltip_ability_thtd_patchouli_04_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_patchouli_04_range" "作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_reisen_01" "Weak Heart「Demotivation」" + "DOTA_Tooltip_ability_thtd_reisen_01_Description" "Reisen\'s attack will knockback the target, this skill only can trigger one time to one target." + "DOTA_Tooltip_ability_thtd_reisen_02" "Illusion Rabbit「Parallel Cross」" + "DOTA_Tooltip_ability_thtd_reisen_02_Description" "Reisen\'s attack has chance to create an illusion, at most have 3 illusions.\n\n[Combination Promotion - Youmu Konpaku]\nThe max illusions promotes to 5 illusions." + "DOTA_Tooltip_ability_thtd_reisen_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_reisen_02_max_count" "分身最大数量:" + "DOTA_Tooltip_ability_thtd_reisen_03" "「Lunatic Red Eyes」" + "DOTA_Tooltip_ability_thtd_reisen_03_Description" "Reisen causes damage and knockback units in the target area.\n\n[Damage Multiplier]Damage: POWER POINTs*5" + "DOTA_Tooltip_ability_thtd_reisen_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_reisen_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_reisen_03_damage_up" "%分身增加伤害:" + "DOTA_Tooltip_ability_thtd_yuyuko_01" "Deadly Butterfly「Eternal Sleep in Dreamland」" + "DOTA_Tooltip_ability_thtd_yuyuko_01_Description" "Yuyuko use light butterfly to track surrouding units and cause damages\n\n[Damage Multiplier]Damage:POWER POINTs*0.6" + "DOTA_Tooltip_ability_thtd_yuyuko_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuyuko_02" "Deadly Dance「Law of Mortality」" + "DOTA_Tooltip_ability_thtd_yuyuko_02_Description" "The Damage from Yuyuko has 5% chance to directly kill units (max damage: power * star * 100).\n\n[Combination Promotion - Youmu Konpaku]\nChance of directly killing promotes to 10%%." + "DOTA_Tooltip_ability_thtd_yuyuko_02_Note0" "潜能Lv10:概率+5%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_02_Note1" "潜能Lv50:概率+10%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_02_Note2" "潜能Lv100:概率+15%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_yuyuko_03" "Death Sign「Life of Drunk, Dream of Death」" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Description" "Yuyuko opens barrier, if units in target area\'s HP less than 30%%, they will be DIRECTLY KILLED." + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note0" "潜能Lv10:生命值秒杀下限+10%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note1" "潜能Lv50:生命值秒杀下限+20%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note2" "潜能Lv100:生命值秒杀下限+30%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note3" "潜能Lv666:\n获得特殊效果:「蝴蝶风暴阎魔笏」,死蝶每次放出光蝶数量+3。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note4" "潜能Lv999:\n获得特殊效果:「反魂蝶-三分咲」,吸收能量提高至3倍最大次数。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_health_kill" "%秒杀生命值:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_damage_radius" "作用范围:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_power_bonus" "死亡吸收能量:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_max_count" "最大叠加次数:" + "DOTA_Tooltip_modifier_yuyuko_03_think" "死符「醉人之生,死的梦幻」" + "DOTA_Tooltip_modifier_yuyuko_03_think_Description" "幽幽子正在展开结界" + "DOTA_Tooltip_modifier_yuyuko04_killed" "死符已触发" + "DOTA_Tooltip_modifier_yuyuko04_killed_Description" "该单位已经触发过死符「醉人之生,死的梦幻」,同一目标每秒只能触发一次。" + "DOTA_Tooltip_ability_thtd_youmu_01" "Sword Skill「Cherry Blossom Flashing」" + "DOTA_Tooltip_ability_thtd_youmu_01_Description" "Youmu\'s every 8 times attack will shoot a Swordkee, cause damage to units on the straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*2\n\n[Combination Promotion - Yuyuko Saigyouji]\nATTACK SPEED promotes 50%%." + "DOTA_Tooltip_ability_thtd_youmu_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_youmu_01_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_youmu_01_length" "直线长度:" + "DOTA_Tooltip_ability_thtd_youmu_01_attack_speed" "攻击速度提升:" + "DOTA_Tooltip_ability_thtd_youmu_02" "Konpaku「Dharma of Gumonji Wisdom of the Living and Dead」" + "DOTA_Tooltip_ability_thtd_youmu_02_Description" "When Youmu use Sword Skill「Cherry Blossom Flashing」or Six Realms Sword「A Single Thought and the Infinite Kalpas」,have 30% chance to summon half spirit to do an extra kill hit.\n\n[Combination Promotion - Reisen]\nChance to trigger promote to 70%%." + "DOTA_Tooltip_ability_thtd_youmu_02_Note0" "潜能Lv10:概率+10%%。" + "DOTA_Tooltip_ability_thtd_youmu_02_Note1" "潜能Lv50:概率+20%%。" + "DOTA_Tooltip_ability_thtd_youmu_02_Note2" "潜能Lv100:概率+30%%。" + "DOTA_Tooltip_ability_thtd_youmu_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_youmu_03" "Six Realms Sword「A Single Thought and the Infinite Kalpas」" + "DOTA_Tooltip_ability_thtd_youmu_03_Description" "Effect 1:Youmu Konpaku\'s every attack will recover 1 MP.\n\nEffect 2:Youmu Konpaku waves her double swords to hit units in the target area continously.\n\n[Damage Multiplier]Damage:POWER POINTs*Sta-levels*5, total 10 hits" + "DOTA_Tooltip_ability_thtd_youmu_03_Note0" "转化成能量的攻击力为白字攻击力。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note1" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note2" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note3" "潜能Lv100:技能伤害+40。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note4" "潜能Lv666:\n获得特殊效果:迷符「半身大悟」,召唤半灵后获得冥罚效果,使目标受到妖梦的伤害增加200%%。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note5" "潜能Lv999:\n获得特殊效果:四生剑「众生无情之声」,斩击伤害提升至4倍。" + "DOTA_Tooltip_ability_thtd_youmu_03_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_rin_01" "Youkai「Blazing Wheel」" + "DOTA_Tooltip_ability_thtd_rin_01_Description" "Rin creates a wheel to cause damage to the target and units behind it, and attaching a [inferno] effect.\n\n[Damage Multiplier]Damage:POWER POINTs\n\n[Combination Promotion - Reiuji Utsuho]\nPromote surrounding units 20%% physical damage." + "DOTA_Tooltip_ability_thtd_rin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_modifier_utsuho_rin_buff" "「Blazing ground」" + "DOTA_Tooltip_modifier_utsuho_rin_buff_Description" "Be influenced by ground youseis, this unit\'s physical damage promotes." + "DOTA_Tooltip_modifier_rin_01_debuff" "Youkai「Blazing Wheel」" + "DOTA_Tooltip_modifier_rin_01_debuff_Description" "Bumped by the wheel, this unit is under the inferno effect." + "DOTA_Tooltip_ability_thtd_rin_02" "「Rekindling of Dead Ashes」" + "DOTA_Tooltip_ability_thtd_rin_02_Description" "If units attached [inferno] effect are killed, the surrounding units of the target will get HP-percent damage. \n\n[Damage Multiplier]Damage:4%%/6%%/15%%" + "DOTA_Tooltip_ability_thtd_rin_02_hp_damage" "%生命上限伤害:" + "DOTA_Tooltip_ability_thtd_rin_02_power_damage" "伤害上限(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rin_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_01" "Explosion Sign「Petit Flare」" + "DOTA_Tooltip_ability_thtd_utsuho_01_Description" "Utsuho\'s every attack will cause damage to the target and units around it.\n\n[Damage Multiplier]Damage: POWER POINTs*1\n\n[Combination Promotion - Rin Kaenbyou]\nPromote surrounding units 20% physical damage." + "DOTA_Tooltip_ability_thtd_utsuho_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_utsuho_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_01_damage_up" "%组合提升物理伤害:" + "DOTA_Tooltip_ability_thtd_utsuho_02" "Explosion Sign「Giga Flare」" + "DOTA_Tooltip_ability_thtd_utsuho_02_Description" "Utsuho\'s every 6 times attack will cause huge damage to the target and units around it.\n\n[Damage Multiplier]Damage:POWER POINTs * Star-levels" + "DOTA_Tooltip_ability_thtd_utsuho_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_utsuho_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_02_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_utsuho_03" "「Hell\'s Artificial Sun」" + "DOTA_Tooltip_ability_thtd_utsuho_03_Description" "Utsuho makes artificial sun to the target area, cause tractive effort to surrouding units, and cause damage to units in the area when the skill finishes.\n\n[Damage Multiplier]Damage:POWER POINTs * Star-levels * 24" + "DOTA_Tooltip_ability_thtd_utsuho_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_utsuho_03_radius" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_03_duration_time" "牵引时间:" + "DOTA_Tooltip_ability_thtd_utsuho_04" "AI定点施放" + "DOTA_Tooltip_ability_thtd_utsuho_04_Description" "选择一个地点来设定AI定点施放:「地狱的人造太阳」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_reimu_01" "Spirit Sign「Fantasy Seal-Spread-」" + "DOTA_Tooltip_ability_thtd_reimu_01_Description" "Reimu\'s every 6 attacks will throw many spirit signs to the target.\n\n[Damage Multiplier]Damage:POWER POINTs*Star*2.0 Every Spirit Sign\n\n[Combination Promotion - Rumia]\nAttack times for triggering the wave REDUCE TO 3 TIMES." + "DOTA_Tooltip_ability_thtd_reimu_01_power_damage" "技能伤害(能量点*星级/每道灵符):" + "DOTA_Tooltip_ability_thtd_reimu_01_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_reimu_02" "Bewitched Weapon「Merciless Purification Rod」" + "DOTA_Tooltip_ability_thtd_reimu_02_Description" "Reimu\'s skill has 20% chance to cause double damage.\n\n[Combination Promotion - Marisa Kirisame]\nThe chance will promote to 50%." + "DOTA_Tooltip_ability_thtd_reimu_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_reimu_03" "Holy Relic「Yin-Yang Demon God Orb」" + "DOTA_Tooltip_ability_thtd_reimu_03_Description" "Reimu throw a huge Yin-Yang Orb.\n\nYin-Yang orb will cleave to smaller Yin-Yang orbs and reduce the damage when dropping the floor.\n\nUnits that are punched by Yin-Ynag orb will get damage and stun. \n\n[Damage Multiplier]Damage:POWER POINTs*Star*3 every time." + "DOTA_Tooltip_ability_thtd_reimu_03_Note0" "潜能Lv10:附带力符「阴阳玉将」,伤害提高至5倍。" + "DOTA_Tooltip_ability_thtd_reimu_03_Note1" "潜能Lv50:附带力符「阴阳玉将」,伤害提高至10倍。" + "DOTA_Tooltip_ability_thtd_reimu_03_Note2" "潜能Lv100:附带力符「阴阳玉将」,伤害提高至15倍。" + "DOTA_Tooltip_ability_thtd_reimu_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_reimu_03_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_reimu_03_max_count" "分裂次数:" + "DOTA_Tooltip_ability_thtd_reimu_03_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_reimu_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_reimu_05_Description" "选择一个地点来设定AI定点施放:宝具「阴阳鬼神玉」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_reimu_04" "「Fantasy Nature」" + "DOTA_Tooltip_ability_thtd_reimu_04_Description" "Everytime Reimu trigger Bewitched Weapon「Merciless Purification Rod」\'s effect, a Yin-Yang orb will be counted.\n\nWhen 7 Yin-Yang orbs are triggered, Yin-Yang orbs will automatically track and attack around enemies, cause damage to units in the target area.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*5 every attack \n\n[Combination Promotion - Yukari]\n\\The damage will promote to 150%." + "DOTA_Tooltip_ability_thtd_reimu_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note2" "潜能Lv100:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note3" "潜能Lv666:\n获得特殊效果:梦想妙珠,阴阳玉发射速度提高至3倍。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note4" "潜能Lv999:\n获得特殊效果:神灵宝珠,祈愿后的能量提升效果提高至7倍。" + "DOTA_Tooltip_ability_thtd_reimu_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_reimu_04_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_reimu_04_power_up" "%祈愿能量提升:" + "DOTA_Tooltip_ability_thtd_daiyousei_01" "「Kind Heart of Yousei」" + "DOTA_Tooltip_ability_thtd_daiyousei_01_Description" "Daiyousei manipulate yousei\'s power, promote target\'s level\n\n[Damage Multiplier]level Promotion:Star-levels*1" + "DOTA_Tooltip_ability_thtd_daiyousei_01_level_up" "提升等级:" + "DOTA_Tooltip_ability_thtd_daiyousei_02" "「Yousei Garden」" + "DOTA_Tooltip_ability_thtd_daiyousei_02_Description" "Daiyousei manipulate yousei\'s power,Recovering surrounding units 10 MP." + "DOTA_Tooltip_ability_thtd_daiyousei_02_Note0" "潜能Lv10:恢复魔法值+1点。" + "DOTA_Tooltip_ability_thtd_daiyousei_02_Note1" "潜能Lv50:恢复魔法值+2点。" + "DOTA_Tooltip_ability_thtd_daiyousei_02_Note2" "潜能Lv100:恢复魔法值+3点。" + "DOTA_Tooltip_ability_thtd_daiyousei_02_mana_reg" "魔法恢复:" + "DOTA_Tooltip_ability_thtd_daiyousei_03" "「Revelution」" + "DOTA_Tooltip_ability_thtd_daiyousei_03_Description" "Daiyousei links with the target unit, transform its skill damage to magic damage, and promote its skill damage.\n\n[Damage Multiplier]Damage Promotion:30%%/40%%/60%%\n\n[Combination Promotion - Cirno]\nWhen linking with Cirno,The damage promotes to 45%%/60%%/90%%." + "DOTA_Tooltip_ability_thtd_daiyousei_03_Note0" "潜能Lv10:技能伤害提升+10%%。" + "DOTA_Tooltip_ability_thtd_daiyousei_03_Note1" "潜能Lv50:技能伤害提升+20%%。" + "DOTA_Tooltip_ability_thtd_daiyousei_03_Note2" "潜能Lv100:技能伤害提升+30%%。" + "DOTA_Tooltip_ability_thtd_daiyousei_03_damage_up" "%技能伤害提升:" + "DOTA_Tooltip_ability_thtd_daiyousei_03_crino_up" "%琪露诺技能伤害提升:" + "DOTA_Tooltip_modifier_daiyousei_03" "「Revelution」" + "DOTA_Tooltip_modifier_daiyousei_03_Description" "Linking with Daiyousei, this unit\'s skill damage is transformed to magic damage, and promotes skill damage." + "DOTA_Tooltip_modifier_thtd_daiyousei_03_combo_buff" "【组合提升 - 琪露诺】" + "DOTA_Tooltip_modifier_thtd_daiyousei_03_combo_buff_Description" "与琪露诺相连时伤害提升效果增加,且可以额外连接一个目标。" + "DOTA_Tooltip_ability_thtd_daiyousei_04" "「Beyond The World」" + "DOTA_Tooltip_ability_thtd_daiyousei_04_Description" "Daiyousei can release Cirno\'s hiding power.(This Cirno must be ★★★★★, this skill only can use one time.)" + "DOTA_Tooltip_ability_ability_common_attack_speed_buff" "Special Skill - ATTACK SPEED Promotion" + "DOTA_Tooltip_ability_ability_common_attack_speed_buff_Description" "Promote this unit\'s ATTACK SPEED.\n\nThis skill can upgrade by CARD FEEDING." + "DOTA_Tooltip_ability_ability_common_attack_speed_buff_attack_speed" "ATTACK SPEED Promotion:" + "DOTA_Tooltip_ability_ability_common_power_buff_Description" "Promote this unit\'s POWER POINTs.\n\nThis skill can upgrade by CARD FEEDING.\n\n[Power Promotion]:20%%/40%%/60%%/80%%" + "DOTA_Tooltip_ability_ability_common_power_buff" "Special Skill - Power Promotion" + "DOTA_Tooltip_ability_ability_common_power_buff_power_up" "%能量和攻击提升:" + "DOTA_Tooltip_ability_ability_common_mana_regen_buff" "Special Skill - MP Recovery Promotion" + "DOTA_Tooltip_ability_ability_common_mana_regen_buff_Description" "Promote this unit\'s MP RECOVERY SPEED.\n\nThis skill can upgrade by CARD FEEDING." + "DOTA_Tooltip_ability_ability_common_mana_regen_buff_mana_regen" "MP RECOVERY SPEED:" + "DOTA_Tooltip_ability_ability_common_ai" "关闭/开启AI" + "DOTA_Tooltip_ability_ability_common_ai_Description" "关闭/开启该单位的AI。如果要手动施放技能,请先关闭AI,防止施法前摇被AI指令打断导致施放失败。" + "minoriko_shop" "MinoriKonbini" + "lily" "Lily White" + "nazrin" "Nazrin" + "minoriko" "Aki Minoriko" + "mugiyousei" "Mugiyousei" + "shanghainingyou" "Shanghainingyou" + "hourainingyou" "Hourainingyou" + "hanadayousei" "Hanadayousei" + "maidyousei" "Maidyousei" + "cirno" "Cirno" + "letty" "Letty Whiterock" + "kogasa" "Tatara Kogasa" + "lyrica" "Lyrica Prismriver" + "lunasa" "Lunasa Prismriver" + "merlin" "Merlin Prismriver" + "rumia" "Rumia" + "satori" "Komeiji Satori" + "iku" "Nagae Iku" + "mystia" "Mystia Lorelei" + "marisa" "Kirisame Marisa" + "tenshi" "Hinanawi Tenshi" + "patchouli" "Patchouli Knowledge" + "reisen" "Reisen Udongein Inaba" + "yuyuko" "Saigyouji Yuyuko" + "youmu" "Konpaku Youmu" + "rin" "Kaenbyou Rin" + "utsuho" "Reiuji Utsuho" + "reimu" "Hakurei Reimu" + "daiyousei" "Daiyousei" + "DOTA_Tooltip_ability_item_0032" "[SSR]Flandre Scarlet" + "DOTA_Tooltip_ability_item_0032_Description" "Flandre has lived for at least 495 years.\n She is young sister of the host of Scarlet Devil Mansion.Like her sister-Remilia Scarlet, she also has a lolita body shape.\nShe seems to has abnormal mentality and thought, and she has uncontrollable collapsing force, so she is shutted in Scarlet Devil Mansion by her sister, not allowed to going out, even hardly ever join parties.\nHuman being is her dessert which she usually have, although she doesn\'t know at all.\nMany Spell cards of hers have [Taboo] meanings\' words.\nThe crystal wings in her back are her biggest feature.\n\n[★][Taboo]Four of a Kind\n[★]Taboo「L\?vatein」\n[★★★]Taboo「Kagome, Kagome」\n[★★★★★]Secret Barrage「And Then Will There Be None\?」" + "DOTA_Tooltip_ability_item_0032_Lore" "Sometimes diving Scarlet Devil Mansion aboveboard, would meet young sister. it can pass save without stimulating her. It is rarely for me to dive in, wish not to meet her.(Kirisame Marisa)" + "DOTA_Tooltip_ability_item_0031_Description" "The young sister of Master of Palace of the Earth Spirits. The same as Satori, she also has mind-reading ability.\nBut she knows people hate this ability, so she closes her third-eye which can read minds, makes herself cannot read other people\'s minds.\nRelatively she gains the ability to manipulate the level of subconciousness, but actually her mind-reading ability isn\'t disappear.\nShe also often acts under subconciousness, makes people cannot find her out.\nShe normally rambles in the earth or Palace of the Earth Spirits.\nSometimes she will pop up on the earth, but due to her own abilities, even looking at her,while you have a distraction, you will forget her soon.\nActually there are also many youkaies in underworld feel self-condemned about Koishi\'s current situation.\n\n[★]「Rose Hell」\n[★]「Philosophy of a Hated Person」\n[★★★]\tInstinct「Release of the Id」\n[★★★★★]「Subterranean Rose」" + "DOTA_Tooltip_ability_item_0030_Description" "Remilia\'s a 500-year-old vampire lord, king of night.\nShe is the host of Scarlet Devil Mansion, the old sister of Flandre.\nShe has a lolita body shape,wearing a pink dress.\nAs the host of Scarlet Devil Mansion, she really pays attention to majesty and dignity like ordinary nobilities. \nBut her character is like her appearance, very wilful and childish.\nShe has「Ability of manipulating the fate」, seems to be able to make people which are affected have high chance to meet something precious.\n\n[★]「Red Magic」\n[★]Night Lord「Dracula Cradle」\n[★★★]\tDivine Spear「Spear the Gungnir」\n[★★★★★]Scarlet Sign「Red the Nightless Castle」" + "remilia" "Remilia Scarlet" + "flandre" "Flandre Scarlet" + "sakuya" "Izayoi Sakuya" + "koakuma" "Koakuma" + "meirin" "Hong Meiling" + "yuuka" "Kazami Yuuka" + "DOTA_Tooltip_ability_item_0033" "[R]Little Devil" + "DOTA_Tooltip_ability_item_0033_Description" "The devil is a powerful race in Gensoukyou, like Magicians and vampires.\nBut relative to others, little devils are still weak.\n Similar with fairies, her life is light-hearted, her character is so naughty and usually looks really free\n\n[★]「Pyro Match」\n[★★★]「Taboo Grimoire Index」" + "DOTA_Tooltip_ability_item_0034" "[R]Hong Meiling" + "DOTA_Tooltip_ability_item_0034_Description" "Chinese youkai,the guard of Scarlet Devil Mansion.\n She is also a Kungfu master, as first line of defense to against intruders.\nThe appearance is just like human.\nHer ability is very comprehensive, without obvious weaknesses,causes when she compares with youkais that reinforced some skills specificly, she will be not outstanding enough.\nBut only of intruding rudely,she is so kind to human and hardly ever attack human.\nDuring she is doing the guard, she also managing the garden of Scarlet Devil Mansion, being the gardener of Scarlet Devil Mansion.\n\n[★]Flowery Sign「Colorful Light Lotus Flower Palm」\n[★★★]Three Blasts「Colorful Ultimate Mountain Breaker」" + "DOTA_Tooltip_ability_item_0034_Lore" "「A...abasolutely don\'t laze any more.」" + "DOTA_Tooltip_ability_item_0033_Lore" "Living in Scarlet Devil Mansion at ordinary time, also not be allocated some work, are a group of free characters." + "DOTA_Tooltip_ability_item_0035" "[SSR]Kazami Yuuka" + "DOTA_Tooltip_ability_item_0035_Description" "The youkai lives in Gensokyo. Has ability to control flowers.\nReally like flowers open seasonally, Spring flowers on Spring,\nSummer flowers on Summer,Autumn flowers on Autumn,\n and there are still a few Winter flowers on Winter\nas having flowers open in all year to the goal to work hard.\nLiving around flowers in all year, if human or youkai intrude to bother her, she will use her powerful power to kill them without any explaining.\nAs a flower youkai, she is more like the incarnation of nature. Differ from fairies, She is much more dangerous than all youkaies that had been introduced until now.\nAt ordinary time she lives in the place surrounding by flowers, looks like a kind man but in fact she is no mercy to others.\n\n[★]Flower Sign「Blossoming of Gensokyo」\n[★]「Fantastic Spring Flowers」\n[★★★]Fantasy「The Beauties of Nature」\n[★★★★★]Extremity「Double Spark」" + "DOTA_Tooltip_ability_thtd_remilia_01" "「Red Magic」" + "DOTA_Tooltip_ability_thtd_remilia_01_Description" "Remilia causes one time of damage to units in target areas.\n\n[Damage Multiplier]DAMAGE:POWER POINT*STAR-LEVEL*1" + "DOTA_Tooltip_ability_thtd_remilia_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_01_range" "目标区域范围:" + "DOTA_Tooltip_ability_thtd_remilia_01_power_bonus" "能量点增加:" + "DOTA_Tooltip_ability_thtd_remilia_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_remilia_02" "Night Lord「Dracula Cradle」" + "DOTA_Tooltip_ability_thtd_remilia_02_Description" "When Remilia\'s skills cause damage, she will absorb targets\'power,promote herself 1%% magic damage.(max to promote 50%%)\n\n[COOPERATION PROMOTION -Flandre]\n\nPROMOTE DAMAGES BECOME TO 2%%." + "DOTA_Tooltip_ability_thtd_remilia_02_damage_up" "%魔法伤害提升:" + "DOTA_Tooltip_ability_thtd_remilia_02_max_up" "%最大提升:" + "DOTA_Tooltip_ability_thtd_remilia_02_duration_time" "每次持续时间:" + "DOTA_Tooltip_ability_thtd_remilia_03" "Divine Spear「Spear the Gungnir」" + "DOTA_Tooltip_ability_thtd_remilia_03_Description" "Remilia flings out the divine spear, causes damage to enemies in the straight line.\n\n[Damage Multiplier]DAMAGE:POWER POINTS*STAR LEVEL*3" + "DOTA_Tooltip_ability_thtd_remilia_03_Note0" "潜能Lv10:冷却时间-1秒。" + "DOTA_Tooltip_ability_thtd_remilia_03_Note1" "潜能Lv50:冷却时间-3秒。" + "DOTA_Tooltip_ability_thtd_remilia_03_Note2" "潜能Lv100:冷却时间-5秒。" + "DOTA_Tooltip_ability_thtd_remilia_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_03_distance" "距离:" + "DOTA_Tooltip_ability_thtd_remilia_04" "Scarlet Sign「Red the Nightless Castle」" + "DOTA_Tooltip_ability_thtd_remilia_04_Description" "While the divine spear pierces targets, there is 5%% CHANCE to cause targets attaching a [Fate]Sign.\n\nMake targets\' HP REDUCE 5%%, and REDUCING 1000 PHYSICAL RESISTANCES AND MAGIC RESISTANCES.\n\nAfter targets dead,it will perform[Nightless Castle] in dead place,causes damage over time to units around the target. \n\n[Relative to Star Level]Nightless Castle DAMAGE:POWER POINTS*STAR LEVEL*7 PER SECOND\n\n[COOPERATION PROMOTION - Sakuya Izayoi]\n\nACTIVATION CHANCE BECOME TO 10%%." + "DOTA_Tooltip_ability_thtd_remilia_04_Note0" "潜能Lv10:不夜城伤害+10。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note1" "潜能Lv50:不夜城伤害+20。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note2" "潜能Lv100:不夜城伤害+30。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note3" "潜能Lv666:\n获得特殊效果:红符「Scarlet Meister」,获得6倍红魔法血液增强效果。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note4" "潜能Lv999:\n获得特殊效果:神罚「年幼的恶魔之王」,操纵恶魔的魔法力,所有伤害+400%%。" + "DOTA_Tooltip_ability_thtd_remilia_04_chance" "%触发概率:" + "DOTA_Tooltip_ability_thtd_remilia_04_power_damage_03" "【命运】神枪技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_04_damage_up" "%【命运】魔法和物理伤害加深:" + "DOTA_Tooltip_ability_thtd_remilia_04_power_damage" "不夜城技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_04_tick_time" "不夜城伤害间隔:" + "DOTA_Tooltip_ability_thtd_remilia_04_duration_time" "不夜城持续时间:" + "DOTA_Tooltip_ability_thtd_remilia_04_range" "不夜城伤害范围:" + "DOTA_Tooltip_modifier_reimilia_02_buff" "夜王「德古拉的摇篮」" + "DOTA_Tooltip_modifier_reimilia_02_buff_Description" "蕾米莉亚的技能造成伤害时,会汲取目标的能量,提高自己的魔法伤害" + "DOTA_Tooltip_modifier_remilia_03_debuff" "命运" + "DOTA_Tooltip_modifier_remilia_03_debuff_Description" "【命运】标记,双抗降低为零,受到的魔法和物理伤害加深,在目标死亡后,会在原地释放【不夜城】" + "DOTA_Tooltip_ability_thtd_flandre_01" "Taboo「Four of a Kind」" + "DOTA_Tooltip_ability_thtd_flandre_01_Description" "Flandre creates 3 replications, WHEN FLANDRE CAUSES SKILL DAMAGES, REPLICATIONS WILL ALSO CAUSE DAMAGES." + "DOTA_Tooltip_ability_thtd_flandre_02" "Taboo「L\?vatein」" + "DOTA_Tooltip_ability_thtd_flandre_02_Description" "WHEN FLANDRE IS DOING NORMAL ATTACKS, THEY WILL CAUSE EXTRA DAMAGES TP TARGETS, AND ABSORB POWER TO PROMOTE HERSELF 1%% PHYSICAL DAMAGES.(MAX TO PROMOTE 50%%)\n\nIF FLANDRE\'S SKILL DAMAGES KILL THE TARGET, THE OVERFLOW DAMAGES WILL TRANSFER TO SURROUNDDING UNITS.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL/4\n\n[COOPERATION PROMOTION - Remilia Scarlet]\n\nPROMOTE DAMAGE BECOME TO 2%%." + "DOTA_Tooltip_ability_thtd_flandre_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_flandre_02_damage_up" "%物理伤害提升:" + "DOTA_Tooltip_ability_thtd_flandre_02_max_up" "%最大提升:" + "DOTA_Tooltip_ability_thtd_flandre_02_duration_time" "每次持续时间:" + "DOTA_Tooltip_ability_thtd_flandre_03" "Taboo「Kagome, Kagome」" + "DOTA_Tooltip_ability_thtd_flandre_03_Description" "When Flandre causes damage to targets, TARGETS\' LOWER HP WILL CAUSE HIGHER DAMAGES. h\n\n TARGETS REDUCE EACH 1%% HP, THE DAMAGE WILL PROMOTE 1%%." + "DOTA_Tooltip_ability_thtd_flandre_03_damage_up" "%每损失百分之一生命值提高伤害:" + "DOTA_Tooltip_ability_thtd_flandre_03_Note0" "潜能Lv10:提高伤害+1%%。" + "DOTA_Tooltip_ability_thtd_flandre_03_Note1" "潜能Lv50:提高伤害+2%%。" + "DOTA_Tooltip_ability_thtd_flandre_03_Note2" "潜能Lv100:提高伤害+3%%。" + "DOTA_Tooltip_ability_thtd_flandre_04" "Secret Barrage「And Then Will There Be None\?」" + "DOTA_Tooltip_ability_thtd_flandre_04_Description" "Flandre catches targets\' weakness, CAUSES HUGE SINGLE DAMAGE TO THE TARGET.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*24/4" + "DOTA_Tooltip_ability_thtd_flandre_04_Note0" "潜能Lv10:冷却时间-1秒。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note1" "潜能Lv50:冷却时间-2秒。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note2" "潜能Lv100:冷却时间-3秒。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note3" "潜能Lv666:\n获得特殊效果:禁弹「星弧破碎」,秘弹技能伤害造成4倍伤害。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note4" "潜能Lv999:\n获得特殊效果:禁忌「四重存在」,技能施放获得多重施法效果。" + "DOTA_Tooltip_ability_thtd_flandre_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_item_0022_Description" "The only human in Scarlet Devil Mansion,the maid manager there. \nHaving the highest level of ability relative to human: ability of manipulating time.\nAt ordinary time she serves Remilia and manages daily routines in Scarlet Devil Mansion.\nBut due to work is so heavy, she often needs to use ability to help her complete work.\nHaving absolute loyalty to Madam, but sometimes her thinking ways seem to a little be natural dullness.\nbeing able to play magic show, using throwing knives to be danmuku, and her knife-throwing skill is excellent.\nThe actual spokesperson in Scarlet Devil Mansion.\n\n[★]Buriallusion「Phantom Killer in Night Mist」\n[★★★]Time Sign「Sakuya\'s Special Stopwatch」\n[★★★★]Time Sign「Private Square」" + "DOTA_Tooltip_ability_item_0022_Lore" "「Thd World!」" + "DOTA_Tooltip_ability_ability_dummy_unit" "" + "DOTA_Tooltip_ability_thtd_sakuya_01_Description" "Sakuya throws a row of throwing knives, causes damage to enemies in the sector areas.\n\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1 /EACH KNIFE" + "DOTA_Tooltip_ability_thtd_sakuya_01_Note0" "潜能Lv10:飞刀伤害+5。" + "DOTA_Tooltip_ability_thtd_sakuya_01_Note1" "潜能Lv50:飞刀伤害+10。" + "DOTA_Tooltip_ability_thtd_sakuya_01_Note2" "潜能Lv100:飞刀伤害+15。" + "DOTA_Tooltip_ability_thtd_sakuya_01" "Buriallusion「Phantom Killer in Night Mist」" + "DOTA_Tooltip_ability_thtd_sakuya_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_sakuya_02" "Time Sign「Sakuya\'s Special Stopwatch」" + "DOTA_Tooltip_ability_thtd_sakuya_02_Description" "REFRESH A UNIT\'S TIME, REGEN ITS SKILL\'S FREEZING TIME, AND REGEN ITS MP IS USED(NOT USEFUL TO SOME SKILLS).\n\nA UNIT ONLY CAN HAVE ONE REFRESH IN 15S.\n\n[COOPERATION PROMOTION - Remilia Scarlet]\n\nWHEN REFRESHING REMILIA\'S TIME, THIS SKILL\'S FREEZING TIME REDUCE TO A HALF, AND REFRESHING TIME ALSO REDUCE TO A HALF." + "DOTA_Tooltip_ability_thtd_sakuya_02_mana_reg" "%魔法恢复增加:" + "DOTA_Tooltip_modifier_sakuya_02_buff" "Time Sign「Sakuya\'s Special Stopwatch」" + "DOTA_Tooltip_modifier_sakuya_02_buff_Description" "THIS UNIT HAS GOT REFRESH EFFECT." + "DOTA_Tooltip_ability_thtd_sakuya_03" "Time Sign「Private Square」" + "DOTA_Tooltip_ability_thtd_sakuya_03_Description" "Sakuya enter private time, open a forbidden barrier, ALL ENEMIES STOP THEIR TIME IN THIS BARRIER, DURING 2 SECONDS.\n\nDURING THIS TIME SAKUYA\'S Buriallusion「Phantom Killer in Night Mist」WILL NOT EXPEND MP, BUT DAMAGE REDUCE 75%%.\n\n[COOPERATION PROMOTION - Hong Meiling]\nDAMAGE REDUCTION REDUCES TO 50%%." + "DOTA_Tooltip_ability_thtd_sakuya_03_Note0" "潜能Lv10:冷却时间-5秒。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note1" "潜能Lv50:冷却时间-10秒。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note2" "潜能Lv100:冷却时间-15秒。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note3" "潜能Lv666:\n获得特殊效果:奇术「永恒的温柔」,飞刀获得窒息之刃效果,造成400%%暴击伤害。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note4" "潜能Lv999:\n获得特殊效果:幻象「月神之钟」,飞刀伤害提升至12倍。" + "DOTA_Tooltip_ability_thtd_sakuya_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sakuya_03_damage_down" "%伤害降低:" + "DOTA_Tooltip_ability_thtd_sakuya_03_range" "结界范围:" + "DOTA_Tooltip_modifier_sakuya_03_time_pause_debuff" "Time Sign「Private Square」" + "DOTA_Tooltip_modifier_sakuya_03_time_pause_debuff_Description" "THIS UNIT\'S TIME IS STOPPED BY SAKUYA." + "koishi" "Komeiji Koishi" + "DOTA_Tooltip_ability_thtd_koishi_01_Description" "Koishi Komeiji\'S ATTACK WILL ATTACK ALL UNITS IN ATTACK RANGES IN SAME TIME.\n\nAND HAS 30% CHANCE TO ATTACH EXTRA DAMAGES.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_koishi_01" "「Rose Hell」" + "DOTA_Tooltip_ability_thtd_koishi_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_koishi_01_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_koishi_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_koishi_02" "「Philosophy of a Hated Person」" + "DOTA_Tooltip_ability_thtd_koishi_02_Description" "Koishi Komeiji\'s EACH ATTACK WILL PROMOTE 5% ATTACK SPEED, MAX TO STACK 10 BUFFS." + "DOTA_Tooltip_ability_thtd_koishi_02_attack_speed_bonus" "攻击速度提高:" + "DOTA_Tooltip_ability_thtd_koishi_02_max_count" "最大叠加层数:" + "DOTA_Tooltip_ability_thtd_koishi_02_count_bonus" "封闭状态最大叠加层数:" + "DOTA_Tooltip_ability_thtd_koishi_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_koishi_02_attack_speed" "「Philosophy of a Hated Person」" + "DOTA_Tooltip_modifier_koishi_02_attack_speed_Description" "Koishi Komeiji\'s attack speed promotes." + "DOTA_Tooltip_ability_thtd_koishi_03" "Instinct「Release of the Id」" + "DOTA_Tooltip_ability_thtd_koishi_03_Description" "Koishi Komeiji PROMOTES TARGET UNITS\' POWER POINTS. DURING 10 SECONDS.\n\n[RELATIVE TO STAR LEVEL]POWER PROMOTION:200/400/1000\n\n[COOPERATION PROMOTION - Koishi Komeiji]\n\nDURATION PROMOTES TO 20 SECONDS." + "DOTA_Tooltip_ability_thtd_koishi_03_Note0" "潜能Lv10:古明地姐妹获得倍数+1。" + "DOTA_Tooltip_ability_thtd_koishi_03_Note1" "潜能Lv50:古明地姐妹获得倍数+2。" + "DOTA_Tooltip_ability_thtd_koishi_03_Note2" "潜能Lv100:古明地姐妹获得倍数+3。" + "DOTA_Tooltip_ability_thtd_koishi_03_power_bonus" "基础攻击力和能量提高:" + "DOTA_Tooltip_ability_thtd_koishi_03_self_crit" "古明地姐妹获得倍数:" + "DOTA_Tooltip_ability_thtd_koishi_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_koishi_03_combo_time" "组合持续时间:" + "DOTA_Tooltip_modifier_koishi_03_buff" "本能「本我的解放」" + "DOTA_Tooltip_modifier_koishi_03_buff_Description" "基础攻击力和能量点提高。" + "DOTA_Tooltip_ability_thtd_koishi_04" "「Subterranean Rose」" + "DOTA_Tooltip_ability_thtd_koishi_04_Description" "Koishi Komeiji enter mental closing status, PROMOTE HER OWN POWER POINTS HUGELY, AND MAKES ATTACK STYLE TO BE MELEE-ATTACK. \n\nIN THE DURATION,「Philosophy of a Hated Person」BUFF CAN STACK MAX TO 20." + "DOTA_Tooltip_ability_thtd_koishi_04_Note0" "潜能Lv10:持续时间+2秒。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note1" "潜能Lv50:持续时间+4秒。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note2" "潜能Lv100:持续时间+8秒。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note3" "潜能Lv666:\n获得特殊效果:「Super Ego」,封闭状态基础能量和攻击力增加+1000。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note4" "潜能Lv999:\n获得特殊效果:本能「Freudian」,封闭状态能量和攻击力提升+300%%。" + "DOTA_Tooltip_ability_thtd_koishi_04_power_base" "基础能量和攻击力增加:" + "DOTA_Tooltip_ability_thtd_koishi_04_power_up" "%能量和攻击力提升:" + "DOTA_Tooltip_ability_thtd_koishi_04_count_bonus" "叠加上限提高到:" + "DOTA_Tooltip_ability_thtd_koishi_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_koakuma_01" "「Pyro Match」" + "DOTA_Tooltip_ability_thtd_koakuma_01_Description" "Little devil throws a fire ball to the target, THE FIRE BALL WILL BOUNCE IN THE TARGET AND ITS AROUND UNITS, MAX TO BOUNCE 25 TIMES.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Patchouli Knowledge]\n\nFIRE BALLS GET EXTRA 35%% RANGE DAMAGES." + "DOTA_Tooltip_ability_thtd_koakuma_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_koakuma_01_max_count" "弹射次数:" + "DOTA_Tooltip_ability_thtd_koakuma_01_range1" "弹射范围:" + "DOTA_Tooltip_ability_thtd_koakuma_01_range_damage" "%附加范围伤害:" + "DOTA_Tooltip_ability_thtd_koakuma_01_range2" "附加范围:" + "DOTA_Tooltip_ability_thtd_koakuma_02" "「Taboo Grimoire Index」" + "DOTA_Tooltip_ability_thtd_koakuma_02_Description" "Little devil promotes her surrounding units\' MAGEC PENETRATION.\n\n[RELATIVE TO STAR LEVEL]PENETRATION PROMOTION:10/20/40" + "DOTA_Tooltip_ability_thtd_koakuma_02_penetration" "魔法穿透:" + "DOTA_Tooltip_modifier_koakuma_02_buff" "「Taboo Grimoire Index」" + "DOTA_Tooltip_modifier_koakuma_02_buff_Description" "Influencing by little devil, this unit\'s magic penetration has been promoted." + "DOTA_Tooltip_ability_thtd_meirin_01" "Flowery Sign「Colorful Light Lotus Flower Palm」" + "DOTA_Tooltip_ability_thtd_meirin_01_Description" "Hong Meiling doesn\'t have normal attack way, but if there are units go through her, she will do continous attack to her front side.\n\nFirst Trick:Rainbow Sign「Intense Rainbow Fist」\nCausing (power points *1) DAMAGES TO THE TARGETS IN FRONT STRAIGHT-LINE AREAS.\nSecond Trick:Chi Sign「Earth Dragon Sky Dragon Kick」\nCausing (POWER POINTS*1) DAMAGES TO UNITS IN FRONT SECTOR AREAS.\nThird Trick:Flower Sign「Gorgeous Sweet Flower」\nCausing (POWER POINTS*STAR LEVEL*1) DAMAGES TO UNITS IN FRONT CIRCLE AREAS, AND REDUCING MOVEMENT SPEED." + "DOTA_Tooltip_ability_thtd_meirin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_meirin_01_slow" "%第三式减速:" + "DOTA_Tooltip_ability_thtd_meirin_01_slow_time" "减速持续时间:" + "DOTA_Tooltip_modifier_meirin_01_pause" "Flowery Sign「Colorful Light Lotus Flower Palm」" + "DOTA_Tooltip_modifier_meirin_01_slow_buff" "Flowery Sign「Colorful Light Lotus Flower Palm」" + "DOTA_Tooltip_modifier_meirin_01_pause_Description" "Meiling is releasing Colorful Light Lotus Flower Palm." + "DOTA_Tooltip_modifier_meirin_01_slow_buff_Description" "Affecting by Colorful Light Lotus Flower Palm, this unit\'s movement speed is reduced." + "DOTA_Tooltip_ability_thtd_meirin_02" "Three Blasts「Colorful Ultimate Mountain Breaker」" + "DOTA_Tooltip_ability_thtd_meirin_02_Description" "After Hong Meiling release 「Colorful Light Lotus Flower Palm」, HAVE 50% CHANCE TO RELEASE ADVANCED 4 KUNGFU TRICKS.\n\nFourth Trick[★★★Unlock]:Chi Sign「Fierce Tiger Energy Release」\nCause (POWER POINTS*2) DAMAGE TO UNITS IN FRONT SECTOR AREAS.\nFifth Trick[★★★Unlock]:Flowery Sign「Mountain Breaker」\nCause (POWER POINTS*STAR LEVEL*2) DAMAGE TO UNITS IN FRONT CIRCLE AREAS, AND STUN ENEMIES 0.5 SECOND.\nSixth Trick[★★★★★Unlock]:Colorful Flower「Rainbow Taijiquan」\nCause (POWER POINTS*4) DAMAGES TO UNITS IN FRONT STRAIGHT LINE AREAS.\nSeventh Trick[★★★★★Unlock]:Three Blasts「Colorful Ultimate Mountain Breaker」\nCausing (POWER POINTS*STAR LEVEL*4) DAMAGE TO UNITS IN FRONT CIRCLE AREAS, AND STUN ENEMIES 1.0 SECOND.\n\n[COOPERATION PROMOTION- Izayoi Sakuya]\nACTIVATION CHANCE PROMOTES TO 75%%." + "DOTA_Tooltip_ability_thtd_meirin_02_level4_chance" "%第四式概率:" + "DOTA_Tooltip_ability_thtd_meirin_02_level5_stun_time" "第五式眩晕时间:" + "DOTA_Tooltip_ability_thtd_meirin_02_level6_chance" "%第六式概率:" + "DOTA_Tooltip_ability_thtd_meirin_02_level7_stun_time" "第七式眩晕时间:" + "yukari" "Yakumo Yukari" + "ran" "Yakumo Ran" + "chen" "Chen" + "eirin" "Yagokoro Eirin" + "mokou" "Fujiwara no mokou" + "DOTA_Tooltip_ability_thtd_yuuka_01" "Flower Sign「Blossoming of Gensokyo」" + "DOTA_Tooltip_ability_thtd_yuuka_01_Description" "Causing a damage to enemies near Yuuka.\n\nIf there are seeds in the area, the seeds will bloom and attack nearby enemies. \n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_yuuka_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuuka_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_yuuka_01_crit" "爆炸伤害倍数:" + "DOTA_Tooltip_ability_thtd_yuuka_01_radius" "爆炸范围:" + "DOTA_Tooltip_ability_thtd_yuuka_02" "「Fantastic Spring Flowers」" + "DOTA_Tooltip_ability_thtd_yuuka_02_Description" "Creating a flower field in front of Yuuka.\n\nThe flower field will constantly sow.\n\n[Relative to Star level]FLOWER ATTACK DAMAGE:Yuuka ATTACK DAMAGE*1" + "DOTA_Tooltip_ability_thtd_yuuka_02_attack_crit" "倍数:" + "DOTA_Tooltip_ability_thtd_yuuka_03" "Fantasy「The Beauties of Nature」" + "DOTA_Tooltip_ability_thtd_yuuka_03_Description" "Creating a illusion of Yuuka in the target point, at the same time FLOWER FIELD WILL APPEAR BETWEEN YUUKA AND ILLUSION.\n\nUNITS GO CROSS THE FLOWER FIELD WILL GET DAMAGE OVER TIME, IF UNITS DIE IN FLOWER FIELD, IT WILL PROMOTE YUUKA 0.5%% SKILL DAMAGES AND 0.5%% FLOWER ATTACK DAMAGES.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1 /PER SEC\n[Relative to Star level]MAX DAMAGE PROMOTION:50%%/100%%/200%%" + "DOTA_Tooltip_ability_thtd_yuuka_03_Note0" "潜能Lv10:最大叠加层数+50。" + "DOTA_Tooltip_ability_thtd_yuuka_03_Note1" "潜能Lv50:最大叠加层数+100。" + "DOTA_Tooltip_ability_thtd_yuuka_03_Note2" "潜能Lv100:最大叠加层数+150。" + "DOTA_Tooltip_ability_thtd_yuuka_03_power_damage" "技能伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_yuuka_03_damage_up" "%提升效果:" + "DOTA_Tooltip_ability_thtd_yuuka_03_max_count" "最大叠加层数:" + "DOTA_Tooltip_modifier_yuuka_03_kill" "Fantasy「The Beauties of Nature」" + "DOTA_Tooltip_modifier_thtd_yuuka_03_death" "Fantasy「The Beauties of Nature」" + "DOTA_Tooltip_modifier_thtd_yuuka_03_death_Description" "This unit intrude the flower field, will become fertilizers soon." + "DOTA_Tooltip_modifier_yuuka_03_kill_Description" "Due to the fertilizers,Yuuka\'s power promotes." + "DOTA_Tooltip_ability_thtd_yuuka_04" "Extremity「Double Spark」" + "DOTA_Tooltip_ability_thtd_yuuka_04_Description" "Yuuka control the power of nature, release devastating magic cannon with her replication.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*7 /PER SECOND" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note0" "潜能Lv10:冷却时间-2秒。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note1" "潜能Lv50:冷却时间-4秒。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note2" "潜能Lv100:冷却时间-8秒。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note3" "潜能Lv666:\n获得特殊效果:变异的花朵,花田提升最大叠加层数+250。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note4" "潜能Lv999:\n获得特殊效果:压倒性力量,魔炮伤害提高至5倍。" + "DOTA_Tooltip_ability_thtd_yuuka_04_power_damage" "技能伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_yuuka_04_channel_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yuuka_04_times" "伤害频率(次/秒):" + "DOTA_Tooltip_modifier_thdots_yuuka04_think_interval" "Extremity「Double Spark」" + "DOTA_Tooltip_modifier_thdots_yuuka04_think_interval_Description" "This unit is releasing magic cannon." + "DOTA_Tooltip_ability_thtd_yukari_01" "Evil Spirits「Yukari Yakumo\'s Spiriting Away」" + "DOTA_Tooltip_ability_thtd_yukari_01_Description" "Yukari manipulates space crack to hide the target.\n\n[COOPERATION PROMOTION - Hakurei Reimu]\n\nSTORAGE NUMBER PROMOTES TO 5." + "DOTA_Tooltip_ability_thtd_yukari_01_max_count" "储存数量:" + "DOTA_Tooltip_ability_thtd_yukari_01_limit_count" "最大次数:" + "DOTA_Tooltip_ability_thtd_yukari_01_duration_time" "境界吸收持续时间:" + "DOTA_Tooltip_modifier_yukari_01_hidden_Description" "This unit is in the space crack." + "DOTA_Tooltip_modifier_yukari_01_hidden" "Evil Spirits「Yukari Yakumo\'s Spiriting Away」" + "DOTA_Tooltip_ability_thtd_yukari_02" "Barrier「Balance of Motion and Stillness」" + "DOTA_Tooltip_ability_thtd_yukari_02_Description" "Yukari throw units in space crack into target point. CAUSING DAMAGE AND STUN TO TARGET POINTS.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_yukari_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yukari_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_yukari_02_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_yukari_03" "「Profound Danmaku Barrier -Phantasm, Foam and Shadow-」" + "DOTA_Tooltip_ability_thtd_yukari_03_Description" "Yukari CHANNEL 1 SECOND, TELEPORT TO TARGET POINT.\n\nAFTER 3 SECONDS TELEPORT BACK BY 1 SECOND CHANNEL.\n\n[COOPERATION PROMOTION - Ran Yakumo,Chen]\n\nRan and Chen will be teleported together" + "DOTA_Tooltip_ability_thtd_yukari_03_Note0" "潜能Lv10:弹幕伤害+5。" + "DOTA_Tooltip_ability_thtd_yukari_03_Note1" "潜能Lv50:弹幕伤害+10。" + "DOTA_Tooltip_ability_thtd_yukari_03_Note2" "潜能Lv100:弹幕伤害+15。" + "DOTA_Tooltip_ability_thtd_yukari_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yukari_03_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_yukari_04" "Abandoned Line「Aimless Journey to the Abandoned Station」" + "DOTA_Tooltip_modifier_yukari_04_speed" "Abandoned Line「Aimless Journey to the Abandoned Station」" + "DOTA_Tooltip_modifier_yukari_04_speed_Description" "This unit is galloping." + "DOTA_Tooltip_ability_thtd_yukari_04_Description" "Yukari summons abandoned trolley bus, galloping from enemies\'starting point in the path.\n\nCAUSING DAMAGE TO UNITS ARE CRASHED BY TROLLEY BUS AND STUN.TROLLEY BUS\'S DURATION IS 30 SECONDS.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*10 /PER SEC\n\n[COOPERATION PROMOTION - Ran Yakumo, Chen]\n\nADD 5 MORE CARRIAGES FOR TROLLEY BUS." + "DOTA_Tooltip_ability_thtd_yukari_04_Note0" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note1" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note2" "潜能Lv100:技能伤害+30。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note3" "潜能Lv666:\n获得特殊效果:幻想「第一类永动机」,电车车厢数量翻倍,神隐境界效果持续时间翻倍。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note4" "潜能Lv999:\n获得特殊效果:境符「四重结界」,八云紫的能量加成+400%%。" + "DOTA_Tooltip_ability_thtd_yukari_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yukari_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_yukari_04_max_count" "车厢数量:" + "DOTA_Tooltip_ability_thtd_yukari_04_damage_up" "%每增加一节车厢伤害提升:" + "DOTA_Tooltip_ability_thtd_yukari_04_stun_time" "撞击晕眩时间:" + "DOTA_Tooltip_ability_thtd_yukari_04_duration_time" "电车持续时间:" + "DOTA_Tooltip_ability_thtd_ran_01" "Shikigami\'s Radiance「Fox-Tanuki Youkai Laser」" + "DOTA_Tooltip_ability_thtd_ran_01_Description" "Ran shoots laser to a target, and bounces in the target and random targets around the first target.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*2 /EACH TIME" + "DOTA_Tooltip_ability_thtd_ran_01_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_ran_01_jump_radius" "弹射距离:" + "DOTA_Tooltip_ability_thtd_ran_01_jump_count" "最大次数:" + "DOTA_Tooltip_ability_thtd_ran_01_jump_interval" "间隔时间:" + "DOTA_Tooltip_ability_thtd_ran_02" "Shikigami\'s Shot「Ultimate Buddhist」" + "DOTA_Tooltip_ability_thtd_ran_02_Description" "Ran rotates large Sign, CAUSING MOVEMENT SPEED REDUCTION TO ENEMIES TOUCHED THE SIGN. DURING 3.4 SECONDS.\n\n[Relative to Star level]MOVEMENT SPEED REDUCTION:20%%/35%%/50%%/65%%/80%%" + "DOTA_Tooltip_ability_thtd_ran_02_radius" "作用范围:" + "DOTA_Tooltip_ability_thtd_ran_02_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_ran_02_slow_movement_pct" "%减速:" + "DOTA_Tooltip_modifier_thdots_ran02_debuff" "Shikigami\'s Shot「Ultimate Buddhist」" + "DOTA_Tooltip_modifier_thdots_ran02_debuff_Description" "Due to Ran\'s influence, this unit\'s movement speed is reduced." + "DOTA_Tooltip_ability_thtd_ran_03" "Illusion God「Descent of Izuna Gongen」" + "DOTA_Tooltip_ability_thtd_ran_03_Description" "Every time when there are units release skills and expand MP around Ran, Ran will shoot a Shikigami\'s Radiance「Fox-Tanuki Youkai Laser」to surrounding random units.\n\n[COOPERATION PROMOTION - Yukari Yakumo,Chen]\n\nWhen activate this skill, it will regen the target this skill\'s 25% MP expense." + "DOTA_Tooltip_ability_thtd_ran_03_Note0" "对莉莉白、大妖精无效。" + "DOTA_Tooltip_ability_thtd_ran_03_mana_regen" "%恢复魔法值:" + "DOTA_Tooltip_modifier_ran_03_spell_buff" "Illusion God「Descent of Izuna Gongen」" + "DOTA_Tooltip_modifier_ran_03_spell_buff_Description" "Getting Ran\'s supports." + "DOTA_Tooltip_ability_thtd_chen_01" "Yin Yang「Large Pentagram Crest」" + "DOTA_Tooltip_ability_thtd_chen_01_Description" "PASSIVE: EACH TIME CHEN MOVES, CAUSING A SHOCKING ATTACK, SHOCKING ATTACK WILL PROMOTES RANGES AND DAMAGES BY MOVEMENT DISTANCES PROMOTION.\n\nACTIVE:Chen roll to target point.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.7 / PER 100 DISTANCE (MAX TO PROMOTE TO *5)\n\n[COOPERATION PROMOTION - Ran Yakumo,Yukari Yakumo]\n\nPER 100 DISTANCE CHANGE TO PER 75 DISTANCE(MAX TO PROMOTE TO *20)" + "DOTA_Tooltip_ability_thtd_chen_01_power_damage" "技能伤害(能量点*星级/距离):" + "DOTA_Tooltip_ability_thtd_eirin_01" "Revival「Seimei Yūgi -Life Game-」" + "DOTA_Tooltip_ability_thtd_eirin_01_Description" "WHEN EIRIN IS ATTACKING, WILL ATTACH A DANMUKU ATTACK AROUND UNITS RANDOMLY, AND REDUCE 10 MP.\n\nWHEN RELEASING DANMUKU, HAVE CHANCE TO REGEN SELF 40% MP.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5\n[Relative to star level]CHANCE TO REGEN:10%%/20%%/30%%/40%%/50%%" + "DOTA_Tooltip_ability_thtd_eirin_01_Note0" "潜能Lv10:技能伤害+2。" + "DOTA_Tooltip_ability_thtd_eirin_01_Note1" "潜能Lv50:技能伤害+4。" + "DOTA_Tooltip_ability_thtd_eirin_01_Note2" "潜能Lv100:技能伤害+6。" + "DOTA_Tooltip_ability_thtd_eirin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_eirin_01_mana_cost" "魔法消耗:" + "DOTA_Tooltip_ability_thtd_eirin_01_mana_chance" "%基础概率:" + "DOTA_Tooltip_ability_thtd_eirin_01_mana_bonus" "%魔法回复:" + "DOTA_Tooltip_ability_thtd_eirin_01_power_bonus" "每50分奖励攻击和能量点:" + "DOTA_Tooltip_ability_thtd_eirin_01_crit_bonus" "%每50分奖励暴击伤害:" + "DOTA_Tooltip_ability_thtd_eirin_01_crit_chance" "%每50分奖励暴击概率:" + "DOTA_Tooltip_modifier_eirin_01_count" "「生命游戏」" + "DOTA_Tooltip_modifier_eirin_01_count_Description" "生命游戏每击中一次目标则获得1点游戏分数,每波结束时兑换奖励并重置积分。" + "DOTA_Tooltip_ability_thtd_eirin_02" "「Heaven Spider\'s Butterfly-Capturing Web」" + "DOTA_Tooltip_ability_thtd_eirin_02_Description" "Every time there is unit attack near Eirin, she will release a Revival「Seimei Yūgi -Life Game-」to around random targets." + "DOTA_Tooltip_modifier_eirin_02_spell_buff" "「Heaven Spider\'s Butterfly-Capturing Web」" + "DOTA_Tooltip_modifier_eirin_02_spell_buff_Description" "This unit get Eirin\'s support." + "DOTA_Tooltip_ability_thtd_eirin_03" "Medicine Sign「Large Galaxy in a Pot」" + "DOTA_Tooltip_ability_thtd_eirin_03_Description" "Creating an unescapable barrier in target point." + "DOTA_Tooltip_ability_thtd_eirin_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_eirin_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_eirin_04" "God Sign「Genealogy of the Celestials」" + "DOTA_Tooltip_ability_thtd_eirin_04_Description" "Eirin shoots danmuku to around in target point, DANMUKU WILL REBOUNCE WHEN CRACK THE BARRIER, EACH REBOUNCE WILL PROMOTE 20% DAMAGE, MAX TO PROMOTE 5 TIMES.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.1 /EACH DANMUKU" + "DOTA_Tooltip_ability_thtd_eirin_04_Note0" "潜能Lv10:弹幕伤害+5。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note1" "潜能Lv50:弹幕伤害+10。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note2" "潜能Lv100:弹幕伤害+15。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note3" "潜能Lv666:\n获得特殊效果:苏生「Rising Game」,游戏奖励提高至5倍。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note4" "潜能Lv999:\n获得特殊效果:秘药「仙香玉兔」,永琳觉醒压倒性的力量,不再保留实力,能量和攻击力+1200。" + "DOTA_Tooltip_ability_thtd_eirin_04_power_damage" "技能伤害(能量点*星级/每个弹幕):" + "DOTA_Tooltip_ability_thtd_eirin_04_damage_up" "%反弹伤害提高:" + "DOTA_Tooltip_ability_thtd_eirin_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_eirin_05_Description" "选择一个地点来设定AI定点施放:药符「壶中的大银河」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_mokou_01" "Hourai「South Wind, Clear Sky -Fujiyama Volcano-」" + "DOTA_Tooltip_ability_thtd_mokou_01_Description" "Fujiwara no Mokou\'s attack HAS 10%% CHANCE TO CRIT.\n\nAND EACH ATTACK WILL PROMOTE 5%% CRIT CHANCE\n\n[Relative to Star level]MAX CRIT CHANCE:30%%/40%%/50%%/60%%/70%%" + "DOTA_Tooltip_ability_thtd_mokou_01_base_chance" "%基础概率:" + "DOTA_Tooltip_ability_thtd_mokou_01_bonus_chance" "%每次提升概率:" + "DOTA_Tooltip_ability_thtd_mokou_01_max_chance" "%概率上限:" + "DOTA_Tooltip_ability_thtd_mokou_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_mokou_01_range" "范围:" + "DOTA_Tooltip_passive_mokou_01_crit" "Hourai「South Wind, Clear Sky -Fujiyama Volcano-」" + "DOTA_Tooltip_passive_mokou_01_crit_Description" "This unit\'s crit chance promotes." + "DOTA_Tooltip_ability_thtd_mokou_02" "Forgiveness「Honest Man\'s Death」" + "DOTA_Tooltip_ability_thtd_mokou_02_Description" "Fujiwara no Mokou\'s EACH CRIT WILL PROMOTE HERSELF DOUBLE CRIT DAMAGE.\n\nIF THIS ATTACK DOESN\'T CRIT, THE MULTIPLE WILL BE CLEARED.\n\n[Relative to star level]MAX CRIT DAMAGE:2/4/8/16/32 TIMNES." + "DOTA_Tooltip_ability_thtd_mokou_02_base_crit" "每次提升倍数:" + "DOTA_Tooltip_ability_thtd_mokou_02_max_crit" "倍数上限:" + "DOTA_Tooltip_modifier_mokou_crit_buff" "灭罪「正直者之死」" + "DOTA_Tooltip_modifier_mokou_crit_buff_Description" "当前致命一击倍数。" + "DOTA_Tooltip_ability_thtd_mokou_03" "Inextinguishable「Phoenix\'s Tail」" + "DOTA_Tooltip_ability_thtd_mokou_03_Description" "Fujiwara no Mokou releases phoenix\'s power,promotes self\'s ATTACK DAMAGE, and RELEASE Undying「Fire Bird -Flying Phoenix-」IN CRIT.\n\n[Relative to star level]ATTACK DAMAGE PROMOTION:500/2000" + "DOTA_Tooltip_ability_thtd_mokou_03_bonus_attack" "攻击力增加:" + "DOTA_Tooltip_ability_thtd_mokou_03_bonus_range" "伤害范围增加:" + "DOTA_Tooltip_ability_thtd_mokou_03_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_mokou_03_buff" "不灭「不死鸟之尾」" + "DOTA_Tooltip_modifier_mokou_03_buff_Description" "藤原妹红释放不死鸟的力量,增加自身的攻击力,伤害范围提升。" + "DOTA_Tooltip_ability_item_0035_Lore" "Don\'t have some special target, just enjoy life: sleeping, waking up,apprecationg flowers,and sleeping repeatedly." + "DOTA_Tooltip_ability_item_0036" "[SSR]Yukari Yakumo" + "DOTA_Tooltip_ability_item_0037" "[SR]Ran Yakumo" + "DOTA_Tooltip_ability_item_0038" "[R]cHEN" + "DOTA_Tooltip_ability_item_0039" "[SSR]Eirin Yagokoro" + "DOTA_Tooltip_ability_item_0040" "[SR]Fujiwara no Mokou" + "DOTA_Tooltip_ability_item_0036_Lore" "I am purple mother so what\?\nPoped up behind me, Caught my head and pressed to the keyboard if you could anghhkjl;l\'klhjhgfsdfhjkl;\' lkhjfcxsdffhjkhl;lkjhgfsdhjkl;" + "DOTA_Tooltip_ability_item_0036_Description" "Experience and power are both powerful, has high intelligence, always looks like understand everything.\nShe is called Youkai Oracle, t Before thousands of years one of the Gensokyo\'s founders.\nAs one of a few youkaies know the essence of Gensokyo, she also extremely cherishes Gensokyo.\nGap Youkai, this race only constitutes by herself, at ordinary time she stays in her gap.\nTwice Lunar War\'s originator.\n\n[★]Evil Spirits「Yukari Yakumo\'s Spiriting Away」\n[★]Barrier「Balance of Motion and Stillness」\n[★★★]「Profound Danmaku Barrier -Phantasm, Foam and Shadow-」\n[★★★★★]Abandoned Line「Aimless Journey to the Abandoned Station」" + "DOTA_Tooltip_ability_item_0037_Description" "Ran Yakumo is a Kyuubi, herself has been powerful,and being shikigami of Yukari Yakumo for a long time makes her abilities more powerful than normal youkaies.\nDue to most of time Yukari Yakumo sleeps, the barrier\'s daily maintenance work is also belongs to her.\nBeing able to work independently and has her own Shikigami(Chen), so she is The Most Powerful Monster.\n\n[★]Shikigami\'s Radiance「Fox-Tanuki Youkai Laser」\n[★]Shikigami\'s Shot「Ultimate Buddhist」\n[★★★★]\"Illusion God「Descent of Izuna Gongen」" + "DOTA_Tooltip_ability_item_0037_Lore" "When I am working busily, my own lord is keeping sleeping." + "DOTA_Tooltip_ability_item_0038_Description" "A youkai cat lives in Mayohiga, and also she is Ran Yakumo\'s shikigami.\nHaving quick action, youkai power will promote in shikigami state, but still scared to water.\nLooks so smart, but actually her IQ is only like nearby human children.\n\n[★]Yin Yang「Large Pentagram Crest」" + "DOTA_Tooltip_ability_item_0039_Description" "The oracle of Lunar Capital. Her appearance looks young, and knowledgeable. But her speaking style, facial expressions, acts and so on all have unapproachable atmosphere seems like immortal exclusively have.\nShe called herself Forever Person, treats Remilia(500 years old) like treating a child.\nHer age has beyonded billions.\nPharmacology and archery are both excellent,\\can use magic medicine and archery to knit the barrier.\nBut the really powerful of her is magic and wisdom.\n\n[★]Revival「Seimei Yūgi -Life Game-」\n[★]「Heaven Spider\'s Butterfly-Capturing Web」\n[★★★]Medicine Sign「Large Galaxy in a Pot」\n[★★★★★]God Sign「Genealogy of the Celestials」" + "kaguya" "Houraisan Kaguya" + "aya" "Shameimaru Aya" + "DOTA_Tooltip_ability_thtd_kaguya_01" "Impossible Request「Bullet Branch of Hourai -Rainbow Danmaku-」" + "DOTA_Tooltip_ability_thtd_kaguya_01_Description" "Kaguya RELEASE 3 TIMES DANMUKU TO THE TARGET POINT, DANMUKU WILL NARROW GRADUALLY.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*0.5" + "DOTA_Tooltip_ability_thtd_kaguya_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kaguya_01_max_count" "弹幕次数:" + "DOTA_Tooltip_ability_thtd_kaguya_01_range" "弹幕伤害范围:" + "DOTA_Tooltip_ability_thtd_kaguya_02" "「End of Imperishable Night」" + "DOTA_Tooltip_ability_thtd_kaguya_02_Description" "The ability of kaguya: manipulates forever and moment, makes surrounding units\' speed change constantly. \n\nEACH 2 SECONDS SWITCH 1 TIME, MAKES AROUND UNITS SPEED UP OR SPEED DOWN, WHEN SPEED UP, UNITS GET MORE DAMAGES, WHEN SPEED DOWN, UNITS GET LESS DAMAGES.\n\n[Relative to Star level]SPEED UP/DOWN EFFECT:50%%\n[Relative to Star level]More/LESS DAMAGE EFFECT:15%%/20%%/25%%/30%%/50%%(LESS-DAMAGE EFFECT IS ONLY HALF OF THE MORE-DAMAGE EFFECT)" + "DOTA_Tooltip_ability_thtd_kaguya_02_bonus_chance" "%暴击概率:" + "DOTA_Tooltip_ability_thtd_kaguya_02_bonus_crit" "%暴击伤害:" + "DOTA_Tooltip_modifier_kaguya_02_buff" "永夜返「光明之世」" + "DOTA_Tooltip_modifier_kaguya_02_buff_Description" "暴击概率和暴击伤害提高了。" + "DOTA_Tooltip_ability_thtd_kaguya_03" "「Divine Treasure」" + "DOTA_Tooltip_ability_thtd_kaguya_03_Description" "Kaguya summon Divine Treasures,Inflicts damage on impacted enemies,Adds bonus effect to allied forces.\nActive release will Stop rotating.\n\nDivine Treasures「Brilliant Dragon Bullet」\nFor friendly units:Increase Attack speed\nFor enemy units:Reduce Movement Speed\nDivine Treasures「Buddhist Diamond」\nFor friendly units:Increase Attack\nFor enemy units:Double up Divine Treasures Damage\nDivine Treasures「Salamander Shield」\nFor friendly units:Increase Damage\nFor enemy units:Increase enemy units injured damage\nDivine Treasures「Life Spring Infinity」\nFor friendly units:Increase Physical Penetration\nFor enemy units:Reduce Armor\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*3.5 Per second" + "DOTA_Tooltip_ability_thtd_kaguya_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_kaguya_03_attack_speed" "Attack speed increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_move_slow" "Movement Speed reduced:" + "DOTA_Tooltip_ability_thtd_kaguya_03_attack_percent" "Attack increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_damage_up" "%「佛体的金刚石」本技能伤害增加:" + "DOTA_Tooltip_ability_thtd_kaguya_03_outgoing_percent" "Damage increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_incoming_percent" "Injured damage increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_penetration" "Physical Penetration increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_armor" "Armor reduced:" + "DOTA_Tooltip_ability_thtd_kaguya_03_range" "作用范围:" + "DOTA_Tooltip_modifier_kaguya_03_1_buff" "Divine Treasures「Brilliant Dragon Bullet」" + "DOTA_Tooltip_modifier_kaguya_03_1_debuff" "Divine Treasures「Brilliant Dragon Bullet」" + "DOTA_Tooltip_modifier_kaguya_03_2_buff" "Divine Treasures「Buddhist Diamond」" + "DOTA_Tooltip_modifier_kaguya_03_3_buff" "Divine Treasures「Salamander Shield」" + "DOTA_Tooltip_modifier_kaguya_03_3_debuff" "Divine Treasures「Salamander Shield」" + "DOTA_Tooltip_modifier_kaguya_03_4_debuff" "Divine Treasures「Life Spring Infinity」" + "DOTA_Tooltip_modifier_kaguya_03_4_buff" "Divine Treasures「Life Spring Infinity」" + "DOTA_Tooltip_modifier_kaguya_03_1_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Attack Speed increased." + "DOTA_Tooltip_modifier_kaguya_03_2_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Attack increased." + "DOTA_Tooltip_modifier_kaguya_03_3_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Damage increased." + "DOTA_Tooltip_modifier_kaguya_03_4_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Physical Penetration increased." + "DOTA_Tooltip_modifier_kaguya_03_1_debuff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Movement Speed reduced." + "DOTA_Tooltip_modifier_kaguya_03_3_debuff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Injured damage increased" + "DOTA_Tooltip_modifier_kaguya_03_4_debuff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Armor reduced." + "DOTA_Tooltip_ability_ability_common_decrease_armor_buff" "Special skill - Armor Reduction" + "DOTA_Tooltip_ability_ability_common_decrease_armor_buff_Description" "Promote this unit\'s ARMOR REDUCTION.\n\nThis skill can upgrade by SPELL CARDS FEEDING." + "DOTA_Tooltip_ability_ability_common_decrease_armor_buff_armor" "ARMOR REDUCTION:" + "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff_Description" "Promote this unit\'s MAGIC RESISTANCE REDUCTION.\n\nThis skill can upgrade by SPELL CARDS FEEDING." + "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff" "SPECIAL SKILL - MAGIC RESISTANCE REDUCTION" + "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff_magic_armor" "MAGIC RESISTANCE REDUCTION:" + "DOTA_Tooltip_ability_item_2001_Description" "CLEAR ALL ENEMIES(ESCAPE FROM YOUR HAND) IN THE MAP(CONSUMABLES)" + "DOTA_Tooltip_ability_item_2001" "Four Dimensional Bomb" + "DOTA_Tooltip_ability_item_2002" "Hakurei Gohei" + "DOTA_Tooltip_ability_item_2002_Description" "Choose a SSR card from your deck and draw it out(consumables)" + "DOTA_Tooltip_ability_item_2003_Description" "Choose a SR card from your deck and draw it out(consumable)" + "DOTA_Tooltip_ability_item_2003" "Wind Priest Gohei" + "DOTA_Tooltip_ability_item_2004_Description" "Choose a R card from your deck and draw it out(consumable)" + "DOTA_Tooltip_ability_item_2004" "Gohei" + "DOTA_Tooltip_ability_item_2005_Description" "[Single Item Effect]PROMOTE 10%% ATTACK DAMAGE\n\n[Double Item Effect]PROMOTE 30% ATTACK DAMAGE\n\n[Quadruple Item Effect]PROMOTE UNITS 50%% ATTACK DAMAGE IN 1000 DISTANCES." + "DOTA_Tooltip_ability_item_2005" "Bloody Parasol" + "DOTA_Tooltip_ability_item_2006_Description" "[Single Item Effect]PROMOTE 4%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% MP REGEN\n\n[Quadruple Item Effect]PROMOTE UNITS 20%% MP REGEN IN 1000 DISTANCES" + "DOTA_Tooltip_ability_item_2006" "Moonlight Secret Mineral" + "DOTA_Tooltip_ability_item_2007" "Lord Of Calamity Ningyou" + "DOTA_Tooltip_ability_item_2007_Description" "[Single Item Effect]PROMOTE 4%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% MP REGEN\n\n[Quadruple Item Effect]REDUCE ENEMIES 10%% MOVEMENT SPEED IN 1000 DISTANCES" + "DOTA_Tooltip_ability_item_2008" "Shinigami\'s Oar" + "DOTA_Tooltip_ability_item_2008_Description" "[Single Item Effect]PROMOTE 4%% CHANCE OF CRIT\n\n[Double Item Effect]PROMOTE 10%% CHANCE OF CRIT\n\n[Quadruple Item Effect]PROMOTE 100%% CRIT DAMAGE" + "DOTA_Tooltip_ability_item_2009" "Reality Ripper" + "DOTA_Tooltip_ability_item_2009_Description" "[Single Item Effect]+10 POWER POINT +5%% Magic Damage\n\n[Set of 2] +25 POWER POINT +15%% Magic Damage\n\n[Set of 4]Deals 2x Damage to enemy over 70%% health." + "DOTA_Tooltip_ability_item_2010" "Reaper\'s Scythe" + "DOTA_Tooltip_ability_item_2010_Description" "[Single Item Effect]+10 POWER POINT +5%% Physical Damage\n\n[Set of 2] +25 POWER POINT 15%% Physical Damage\n\n[Set of 4]Deals 2x Damage to enemy under 30%% health" + "DOTA_Tooltip_ability_item_2011" "Moon Rabbit Smashing Blade" + "DOTA_Tooltip_ability_item_2011_Description" "[Single Item Effect]PROMOTE 20 ATTACK DAMAGE, 10 POWER POINTS\n\n[Double Item Effect]PROMOTE 50 ATTACK DAMAGE 25 POWER POINT\n\n[Quadruple Item Effect]PROMOTE 150%% CRIT DAMAGE AND SPLASH ATTACK IN 400 RANGE" + "DOTA_Tooltip_ability_item_2012" "Mini-Hakkero" + "DOTA_Tooltip_ability_item_2012_Description" "[Single Item Effect]PROMOTE 10%% MAGIC SKILL DAMAGE\n\n[Double Item Effect]PROMOTE 25%% MAGIC SKILL DAMAGE\n\n[Quadruple Item Effect]ENEMIES IN 1000 DISTANCES GET 120% MAGIC SKILL DAMAGES" + "DOTA_Tooltip_ability_item_2013" "L\?vateinn" + "DOTA_Tooltip_ability_item_2013_Description" "[Single Item Effect]PROMOTE 10%% PHYSICAL DAMAGE\n\n[Double Item Effect]PROMOTE 25%% PHYSICAL DAMAGE\n\n[Quadruple Item Effect]ENEMIES IN 1000 DISTANCES GET 120%% PHYSICAL DAMAGES." + "DOTA_Tooltip_ability_item_2014" "Spear Gungnir" + "DOTA_Tooltip_ability_item_2014_Description" "[Single Item Effect]PROMOTE 10%% DAMAGE\n\n[Double Item Effect]PROMOTE 20%% DAMAGE\n\n[Quadruple Item Effect]PROMOTE DAMAGE OF UNITS IN 1000 RANGE BY 15%%" + "DOTA_Tooltip_ability_item_2015" "Mind-WRAITH\'s Hooks" + "DOTA_Tooltip_ability_item_2015_Description" "[Single Item Effect]PROMOTE 5%% CHANCE OF CRIT.\n\n[Double Item Effect]PROMOTE 20%% CHANCE OF CRIT.\n\n[Quadruple Item Effect]PROMOTE 45%% CHANCE OF CRIT" + "DOTA_Tooltip_ability_item_2016" "Eutectic Karyogamy Stick" + "DOTA_Tooltip_ability_item_2016_Description" "[Single Item Effect]PROMOTE 5%% DAMAGE AND 5%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% DAMAGE AND 10%% MP REGEN\n\n[Quadruple Item Effect]REDUCE 25% SKILL FREEZING TIME." + "DOTA_Tooltip_ability_item_2017" "Devil\'s Baby Teeth" + "DOTA_Tooltip_ability_item_2017_Description" "[Single Item Effect]PROMOTE 10 ATTACK SPEED\n\n[Double Item Effect]PROMOTE 25 ATTACK SPEED.\n\n[Quadruple Item Effect]PROMOTE 45 ATTACK SPEED." + "DOTA_Tooltip_ability_item_2018" "Moon Crossbow" + "DOTA_Tooltip_ability_item_2018_Description" "[Single Item Effect]PROMOTE 15 ATTACK DAMAGE AND 5 POWER POINTS\n\n[Double Item Effect]PROMOTE 45 ATTACK DAMAGE AND 15 POWER POINTS\n\n[Quadruple Item Effect]PROMOTE 70 ATTACK DAMAGE AND 30% CRIT CHANCE." + "DOTA_Tooltip_ability_item_2019" "Yin-yang Orb for Tax Payment" + "DOTA_Tooltip_ability_item_2019_Description" "[Single Item Effect]PROMOTE 4%% POWER POINTS\n\n[Double Item Effect]PROMOTE 12%% POWER POINTS\n\n[Quadruple Item Effect]PROMOTE 40 POWER POINTS" + "DOTA_Tooltip_ability_item_2020" "Hi-Tech Camera" + "DOTA_Tooltip_ability_item_2020_Description" "[Single Item Effect]PROMOTE 20 POWER POINTS\n\n[Double Item Effect]PROMOTE 60 POWER POINTS\n\n[Quadruple Item Effect]WHEN SKLLS CAUSE DAMAGE TO UNITS, UNITS GET EXTRA 2 TIMES (STAR * POWER POINT) DAMAGE." + "DOTA_Tooltip_ability_item_2021" "Good Wine(cannot sell)" + "DOTA_Tooltip_ability_item_2021_Description" "All basic attributes are increased %bonus%%%, the first use lasts %duration_max% seconds, the duration of each subsequent use decreases %step% seconds until it is reduced to %duration_min% seconds. (Consumable)" + "DOTA_Tooltip_ability_item_2021_Note0" "Basic attributes include: attack speed, mana regen, energy, attack power, crit chance, crit damage." + "DOTA_Tooltip_modifier_item_2021_buff" "Good Wine" + "DOTA_Tooltip_modifier_item_2021_buff_Description" "All stats increased" + "DOTA_Tooltip_ability_item_2022_Description" "PROMOTE A UNIT TO MAX LEVEL." + "DOTA_Tooltip_ability_item_2022" "Hakurei Shrine\'s Amulet(cannot sell)" + "DOTA_Tooltip_ability_item_0042" "[SR]Shameimaru Aya" + "hatate" "Himekaidou Hatate" + "momiji" "Inubashiri Momiji" + "DOTA_Tooltip_ability_thtd_aya_01" "Wind Sign「Wind God\'s Fan」" + "DOTA_Tooltip_ability_thtd_aya_01_Description" "Aya Shameimaru\'s attack has 12%% CHANCE TO RELEASE A HURRICANE, CAUSE DAMAGE AND SPEED REDUCTION TO TARGETS AND UNITS AROUND IT.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5" + "DOTA_Tooltip_ability_thtd_aya_01_Note0" "潜能Lv10:技能伤害+1。" + "DOTA_Tooltip_ability_thtd_aya_01_Note1" "潜能Lv50:技能伤害+2,「文文新闻」每层增加伤害+1%%。" + "DOTA_Tooltip_ability_thtd_aya_01_Note2" "潜能Lv100:技能伤害+4,「文文新闻」每层增加伤害+2%%。" + "DOTA_Tooltip_ability_thtd_aya_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_aya_01_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_aya_01_move_slow" "MOVEMENT SPEED REDUCTION EFFECT:" + "DOTA_Tooltip_ability_thtd_aya_01_duration_time" "减速持续时间:" + "DOTA_Tooltip_ability_thtd_aya_01_range" "作用范围:" + "DOTA_Tooltip_ability_thtd_aya_01_buff_time" "「文文新闻」持续时间:" + "DOTA_Tooltip_ability_thtd_aya_01_damage_up" "%每层「文文新闻」伤害增加:" + "DOTA_Tooltip_modifier_aya01_slow" "Wind Sign「Wind God\'s Fan」" + "DOTA_Tooltip_modifier_aya01_slow_Description" "Due to Aya\'s affection, this units\' movement speed is reduced." + "DOTA_Tooltip_ability_thtd_aya_02" "「Illusionary Dominance」" + "DOTA_Tooltip_ability_thtd_aya_02_Description" "Shameimaru Aya fly to the destination,Injuries the enemy units that collided.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5\n\n[COOPERATION PROMOTION - Himekaidou Hatate]\nwith「Kakashi Spirit News」sharing information." + "DOTA_Tooltip_ability_thtd_aya_02_Note0" "潜能Lv10:碰撞技能伤害+2。" + "DOTA_Tooltip_ability_thtd_aya_02_Note1" "潜能Lv50:碰撞技能伤害+4。" + "DOTA_Tooltip_ability_thtd_aya_02_Note2" "潜能Lv100:碰撞技能伤害+8。" + "DOTA_Tooltip_ability_thtd_aya_02_Note3" "潜能Lv666:\n获得特殊效果:突符「天狗巨暴流」,所有伤害造成4倍暴击。" + "DOTA_Tooltip_ability_thtd_aya_02_Note4" "潜能Lv999:\n获得特殊效果:鸦符「暗夜昼魇」,「文文新闻」每层增加伤害+4%%。" + "DOTA_Tooltip_ability_thtd_aya_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_aya_03" "「Peerless Wind God」" + "DOTA_Tooltip_ability_thtd_aya_03_Description" "When Shameimaru Aya trigger Wind Sign 「Wind God\'s Fan」,「Illusionary Dominance」freezing time will refresh,moreover incidental once attack on the enemy unit." + "DOTA_Tooltip_ability_thtd_hatate_01" "Reporting 「Hatate Himekaidou\'s Reporting Training」" + "DOTA_Tooltip_ability_thtd_hatate_01_Description" "Himekaidou Hatate injury to the target area and attach all enemy units「Kakashi Spirit News」。\nAll attach「Kakashi Spirit News」units will be harmed once damage\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Shameimaru Aya]\nwith「Bunbunmaru Newspape」sharing information." + "DOTA_Tooltip_ability_thtd_hatate_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hatate_01_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_hatate_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_hatate_01_damage_up" "%每层「花果子念报」伤害增加:" + "DOTA_Tooltip_ability_thtd_hatate_02" "Far-sightedness 「Tengu Psychography」" + "DOTA_Tooltip_ability_thtd_hatate_02_Description" "Himekaidou Hatate make sustained damage to the enemy units in own area,attach all enemy units「Kakashi Spirit News」,for 5 seconds。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*4 /per second" + "DOTA_Tooltip_ability_thtd_hatate_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_hatate_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_hatate_02_tick_time" "伤害间隔时间:" + "DOTA_Tooltip_modifier_aya01_news_buff" "「Bunbunmaru Newspaper」" + "DOTA_Tooltip_modifier_aya01_news_buff_Description" "This unit photographed by Aya." + "DOTA_Tooltip_modifier_hatate01_news_buff" "「Kakashi Spirit News」" + "DOTA_Tooltip_modifier_hatate01_news_buff_Description" "This unit photographed by Hatate." + "DOTA_Tooltip_modifier_thdots_hatate02_think_interval" "「Kakashi Spirit News」" + "DOTA_Tooltip_modifier_thdots_hatate02_think_interval_Description" "Himekaidou Hatate thoughtography now" + "DOTA_Tooltip_modifier_momiji_02" "Tengu 「Guardian of Shield」" + "DOTA_Tooltip_modifier_momiji_02_Description" "Affected by Momiji,this unit\'s Skill damage change to physical type." + "DOTA_Tooltip_ability_thtd_momiji_02" "Tengu「Shield of the Guardian」" + "DOTA_Tooltip_ability_thtd_momiji_02_Description" "Make traget friendly unit\'s skill damage change to physical type and increase 30%%/40%%/60%%。\n\n[COOPERATION PROMOTION - Shameimaru Aya]\nWhen Momiji guard Shameimaru Aya,Aya attack inner circle enemy units will take 50%% effect,attack outer ring enemy units will ignore target unit\'s Armor." + "DOTA_Tooltip_ability_thtd_momiji_02_damage_up" "%物理伤害提高:" + "DOTA_Tooltip_ability_thtd_momiji_02_aya_damage_up" "%射命丸文物理伤害提高:" + "DOTA_Tooltip_ability_item_0041" "[SR]Houraisan Kaguya" + "DOTA_Tooltip_ability_item_0043" "[R]Himekaidou Hatate" + "DOTA_Tooltip_ability_item_0044" "[R]Inubashiri Momiji" + "DOTA_Tooltip_ability_item_0041_Description" "Houraisan Kaguya is the main antagonist of Imperishable Night.\nShe was once a princess of the Lunarians, a race of people living on the Moon. Due to illegally creating the Hourai Elixir with Eirin Yagokoro, they ended up living on Earth and what would eventually be Gensokyo.\n She is currently the princess of Eientei.\n\n[★]Impossible Request「Bullet Branch of Hourai -Rainbow Danmaku-」\n[★]「End of Imperishable Night」\n[★★★★]「Divine Treasure」" + "DOTA_Tooltip_ability_item_0040_Description" "Fujiwara no Mokou was formerly an ordinary human, but she became an immortal being after drinking the Hourai Elixir about 1300 years ago. \nNot close to humans,but it will secretly help humanity.she has the ability to manipulate the flame。\nNow she is never able to die, though she still feels the pain of injuries as normal.\nShe\'s considered to be very powerful, given her long life, the power she earned through her life, and her immortal status since she can keep fighting until she can no longer stand the pain.\n\n[★]Hourai「South Wind, Clear Sky -Fujiyama Volcano-」\n[★]Forgiveness「Honest Man\'s Death」\n[★★★★]Inextinguishable「Phoenix\'s Tail」" + "DOTA_Tooltip_ability_item_0042_Description" "Aya is unrelenting when it comes to getting sensationalist news stories, and she frequently twists the truth in her writing to her own advantage. It is her policy as a reporter to only report the truth, but there have been many instances where she has written blatant lies. \n It is said that she will come politely asking interviews of humans and youkai alike if she sees them as worth writing an article about, but will forcefully drive away any who interfere. \n \nHowever, Aya has shown a serious side as well. She can be thoughtful about the effect her stories will have on those who read them. She resents the rigid tengu caste system, as even though she works hard, she is unable to advance in rank due to being a crow tengu. \n\n[★]Wind Sign 「Wind God\'s Fan」\n[★★★★]「Illusionary Dominance」\n[★★★★]「Peerless Wind God」" + "DOTA_Tooltip_ability_item_0043_Description" "Himekaidou Hatate is a tengu reporter who produces the Kakashi Spirit News. \nUnlike her colleague Aya Shameimaru, she never goes outside for her newspaper research. Instead, she uses her ability called thoughtography.\nAfter reading Aya\'s Bunbunmaru Newspaper, she decided to observe Aya\'s way of gathering for her articles.\n\n[★]Reporting 「Hatate Himekaidou\'s Reporting Training」\n[★★★★]\tFar-sightedness 「Tengu Psychography」" + "DOTA_Tooltip_ability_item_0044_Description" "Inubashiri Momiji is a white wolf tengu whose duty is to patrol the Youkai Mountain. \nHer good sense of smell and sight are helpful for this duty.\nIt is usually idle, and Kappa is a friend and often plays chess together.\n\n[★]White wolf「Tengu Guardian」\n[★★★]\tTengu 「Guardian of Shield」" + "minoriko_max_change" "Minoriko Aki can only exchange up to three times!" + "DOTA_Tooltip_ability_thtd_sanae_01" "Miracle「Daytime Guest Stars」" + "DOTA_Tooltip_ability_thtd_sanae_01_Description" "Sanae miracle to the target,Increase the power point of the target,and transfer(1/times)effect to next unit。\n\n[Relative to star level]attribute increased:25/50/100/200/500" + "DOTA_Tooltip_ability_thtd_sanae_01_power_bonus" "能量点增加:" + "DOTA_Tooltip_ability_thtd_sanae_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sanae_01_down_percent" "%效果降低:" + "DOTA_Tooltip_ability_thtd_sanae_01_range" "传递范围:" + "DOTA_Tooltip_ability_thtd_sanae_01_max_count" "传递次数:" + "DOTA_Tooltip_modifier_sanae_01" "奇迹「白昼新星」" + "DOTA_Tooltip_modifier_sanae_01_Description" "早苗降下奇迹,能量点增加。" + "DOTA_Tooltip_ability_thtd_sanae_02" "Great Miracle 「Yasaka\'s Divine Wind」" + "DOTA_Tooltip_ability_thtd_sanae_02_Description" "Sanae hurricane blowing at the target,Inflicts damage to nearby units and slows them down.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2 /per second\n[Relative to star level]slow down:15%%/25%%/35%%/50%%" + "DOTA_Tooltip_ability_thtd_sanae_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_sanae_02_move_slow" "%减速:" + "DOTA_Tooltip_ability_thtd_sanae_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sanae_02_duration_range" "范围:" + "DOTA_Tooltip_modifier_sanae_debuff" "Great Miracle 「Yasaka\'s Divine Wind」" + "DOTA_Tooltip_modifier_sanae_debuff_Description" "Affected by Sanae,the unit was decelerated." + "DOTA_Tooltip_ability_thtd_sanae_03" "Sea Opening 「The Day the Sea Split」" + "DOTA_Tooltip_ability_thtd_sanae_03_Description" "Sanae randomly drop lightning at the target area,Each lightning strike damages the target and stun 0.5 seconds。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL\n\n[Special Effects - Beliefs]\n\nincrease(1+Belief value/250)multiple stun time,and improve(1+Belief value/250)multiple damage." + "DOTA_Tooltip_ability_thtd_sanae_03_power_damage" "技能伤害(能量点*星级/每个雷击):" + "DOTA_Tooltip_ability_thtd_sanae_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sanae_03_stun_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_sanae_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_sanae_03_stun_up" "%每点信仰提升眩晕时间:" + "DOTA_Tooltip_ability_thtd_sanae_03_damage_up" "%每点信仰提升伤害:" + "DOTA_Tooltip_ability_thtd_sanae_04" "Divine Virtue 「Bumper Crop Rice Shower」" + "DOTA_Tooltip_ability_thtd_sanae_04_Description" "Sanae inspires all special effects for units that gain belief.\n\n[COOPERATION PROMOTION - Yasaka Kanako,Moriya Suwako]\n\nTurn on this skill.\n\nMake Sanae,Kanako and Suwako both can gain belief by killing units." + "DOTA_Tooltip_ability_thtd_sanae_04_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_sanae_04_combo_buff" "神德「五谷丰登」" + "DOTA_Tooltip_modifier_sanae_04_combo_buff_Description" "可通过击杀单位来获得信仰值。" + "DOTA_Tooltip_modifier_sanae_04_buff" "神德「五谷丰登」" + "DOTA_Tooltip_modifier_sanae_04_buff_Description" "所有获得信仰值单位的能量升了。" + "DOTA_Tooltip_ability_thtd_nue_01" "「Nightmare of Heiankyou」" + "DOTA_Tooltip_ability_thtd_nue_02" "Grudge Bow 「The Bow of Genzanmi Yorimasa」" + "DOTA_Tooltip_ability_thtd_nue_03" "「Stars ○□△× bug」" + "DOTA_Tooltip_ability_thtd_nue_01_Description" "Nue Can impose a nightmare on anyone,Damage adds additional spell damage。When you take the initiative, the effect will double.\nAttack:Add 1x damage to this skill damage\nPositive judgment:Added 2x damage to this skill damage\nThe Bow of Genzanmi Yorimasa:Added 3x damage to this skill damage\n\nRelative to star level]DAMAGE:POWER POINT*1\n\n[COOPERATION PROMOTION - Murasa Minamitsu]\n\nWhen causing damage to enemies in the waters,increased damage50%%。" + "DOTA_Tooltip_ability_thtd_nue_01_Note0" "Skipping waves will decrease stacks by 20 per" + "DOTA_Tooltip_ability_thtd_nue_01_Note1" "Expiration removes 1/3rd stacks" + "DOTA_Tooltip_ability_thtd_nue_01_power_damage" "Damage:" + "DOTA_Tooltip_ability_thtd_nue_01_attack_bonus" "Bonus From Attacks:" + "DOTA_Tooltip_ability_thtd_nue_01_spell_bonus" "Bonus from Spells:" + "DOTA_Tooltip_ability_thtd_nue_01_damage_up" "% Damage Up:" + "DOTA_Tooltip_passive_nue01_attack" "「Nightmare of Heiankyou」" + "DOTA_Tooltip_passive_nue01_attack_Description" "Houjuu Nue\'s damage will take extra damage." + "DOTA_Tooltip_modifier_nue_01_extradamage" "「Nightmare of Heiankyou」" + "DOTA_Tooltip_modifier_nue_01_extradamage_Description" "「Nightmare of Heiankyou」the number of overlays." + "DOTA_Tooltip_modifier_nue_killed" "封兽鵺击杀触发" + "DOTA_Tooltip_modifier_nue_killed_Description" "该单位已经触发过封兽鵺击杀,暂时无法再次触发" + "DOTA_Tooltip_ability_thtd_nue_02_Description" "Shoot a powerful arrow that full of hatred,The penetrated will receive a large amount of spell damage.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_nue_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_nue_03_Description" "When nue kill a unit, it resets the skill cooldown." + "DOTA_Tooltip_modifier_thdots_nue_03" "「Stars ○□△× bug」" + "DOTA_Tooltip_modifier_thdots_nue_03_Description" "When nue kill a unit, it resets the skill cooldown." + "DOTA_Tooltip_ability_item_0046" "[SR]Kochiya Sanae" + "DOTA_Tooltip_ability_item_0046_Description" "Kochiya Sanae is a human, but is also a distant descendant of the goddess Suwako Moriya. \nHer role at the Moriya Shrine is similar to a shrine maiden, but with her inherited power Sanae has also become a minor deity herself. \nOriginally from the Outside World, Sanae migrated to Gensokyo with the shrine and its two resident goddesses, Kanako Yasaka and Suwako Moriya. As a result, she is rather knowledgeable about the outside world and modern living, although her attempts to explain scientific concepts usually just confuse the locals. \n\n[★]Miracle「Daytime Guest Stars\n[★]Great Miracle 「Yasaka\'s Divine Wind」\n[★★★★]Sea Opening 「The Day the Sea Split」" + "DOTA_Tooltip_ability_item_0047" "[SSR]Yasaka Kanako" + "DOTA_Tooltip_ability_item_0047_Description" "Yasaka Kanako is the main antagonist of Mountain of Faith. She\'s the current goddess of the Moriya Shrine after defeating its previous resident goddess Suwako Moriya in the Great Suwa War. \nShe desires to collect large amounts of faith, but since the humans of the Outside World no longer place much importance on gods, she has transported the shrine to Gensokyo.\nShe currently lives on top of the Youkai Mountain, where she has an uneasy relationship with the leaders of the tengu. \n\n[★]Divine Festival「Expanded Onbashira」\n[★★★]Onbashira「descent」\n[★★★]Onbashira「recover」\n[★★★★★]「Sacred Authority of the Gods」" + "DOTA_Tooltip_ability_item_0048" "[SR]Moriya Suwako" + "DOTA_Tooltip_ability_item_0048_Description" "Moriya Suwako is the original god of the Moriya Shrine.\nOfficially the shrine now belongs to Kanako Yasaka, but in Suwako\'s words she handles most of the divine services while Kanako handles the \'sales\'. \n\n[★]Divine Tool「Moriya\'s Iron Ring」\n[★★★]Scourge God 「Mishaguchi-sama」\n[★★★★]「Hellish Heat Geyser」" + "DOTA_Tooltip_ability_item_0048_Note0" "" + "DOTA_Tooltip_ability_item_0049" "[SR]Murasa Minamitsu" + "DOTA_Tooltip_ability_item_0050" "[SR]Houjuu Nue" + "DOTA_Tooltip_ability_item_0050_Description" "Houjuu Nue is said to be one of the most mysterious and feared youkai in many years, yet has been defeated by humans many times. \nThere are many differing legends according to her appearance because she hides her \nAt some point, she was sealed underground, and because of the events of Subterranean Animism, she resurfaced back in Gensokyo. \n\n[★]「Nightmare of Heiankyou」\n[★★★]Grudge Bow 「The Bow of Genzanmi Yorimasa」\n[★★★★]「Stars ○□△× bug」" + "DOTA_Tooltip_ability_item_0049_Description" "Murasa Minamitsu is the spirit of a young drowning victim who afterwards became a notorious threat due to her power to sink ships. \nShe is currently the captain of the Palanquin Ship, searching for the fragments of the Flying Storage. \nShe meets the heroine as she is completing the preparations to travel to Makai. \n\n[★]Harbor Sign 「Eternally Anchored Phantom Ship」\n[★]Captain「spinach」\n[★★★★]Drowning Sign 「Sinkable Vortex」\n[★★★★★]Harbor Sign 「Phantom Ship\'s Port」" + "sanae" "Kochiya Sanae" + "kanako" "Yasaka Kanako" + "suwako" "Moriya Suwako" + "nue" "Houjuu Nue" + "kanako_gojou" "Onbashira" + "DOTA_Tooltip_ability_thtd_momiji_01" "White wolf「Tengu Guardian」」" + "DOTA_Tooltip_ability_thtd_momiji_01_Description" "Summon four white wolf to automatically attack the surrounding units,White Wolf Doesn\'t Leave momiji to Walk Over 600 Yards.\n\nRelative to star level]white wolf attack:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_momiji_01_wolf_attack" "攻击力参数:" + "DOTA_Tooltip_ability_thtd_momiji_01_range" "白狼活动范围:" + "DOTA_Tooltip_ability_thtd_momiji_01_max_count" "白狼数量:" + "DOTA_Tooltip_ability_ability_common_star_up_speed_Description" "Increase the growth rate of the unit.\n\nThis skill can be upgraded through card cultivation.\n\n[Growth rate increased]:10%%/20%%/30%%/40%%" + "DOTA_Tooltip_ability_ability_common_star_up_speed" "Special Skill - Growth rate increased" + "DOTA_Tooltip_ability_ability_common_star_up_speed_speed_tooltips" "Growth rate increased:" + "DOTA_Tooltip_ability_ability_touhoutd_ex_up" "Awakening" + "DOTA_Tooltip_ability_ability_touhoutd_ex_up_Description" "Can stimulate the hidden power of some units" + "DOTA_Tooltip_ability_item_0069" "[R]Toramaru Shou" + "DOTA_Tooltip_ability_item_0088" "[R]Aki Shizuha" + "sizuha" "Aki Shizuha" + "toramaru" "Toramaru Shou" + "DOTA_Tooltip_ability_thtd_sizuha_01" "Autumn SignFall in Blast」" + "DOTA_Tooltip_ability_thtd_sizuha_01_Description" "Shizuha Aalthough it is impossible to improve the star in a normal way,but it can grow through time.\n\nEvery(216/432/720/1008)seconds will raise one star。" + "DOTA_Tooltip_ability_thtd_sizuha_01_Note0" "潜能Lv10:成长花费时间-10%%。" + "DOTA_Tooltip_ability_thtd_sizuha_01_Note1" "潜能Lv50:成长花费时间-20%%。" + "DOTA_Tooltip_ability_thtd_sizuha_01_Note2" "潜能Lv100:成长花费时间-30%%。" + "DOTA_Tooltip_ability_thtd_sizuha_01_grow_time" "成长花费时间:" + "DOTA_Tooltip_ability_thtd_sizuha_02" "Wilted Path「Lost Windrow」" + "DOTA_Tooltip_ability_thtd_sizuha_02_Description" "Shizuha can through reduce your own(1)star raise target (1)star,the star rating of the promotion goal cannot exceed Shizuha own star rating." + "DOTA_Tooltip_ability_thtd_toramaru_01" "Treasure Sign 「Dazzling Gold」" + "DOTA_Tooltip_ability_thtd_toramaru_01_Description" "Toramaru Shou inflicts damage on one unit and gains money,And at the end of each turn,Toramaru Shou will cause harm 1%%Tturn into money.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n[Relative to star level]Harvest quantity:12/44/108/216/852" + "DOTA_Tooltip_ability_thtd_toramaru_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_toramaru_01_bonus_gold" "获取金钱:" + "DOTA_Tooltip_ability_thtd_toramaru_01_gold_damage_percent" "%回合结束转化比例:" + "DOTA_Tooltip_ability_thtd_suwako_01" "Divine Tool「Moriya\'s Iron Ring」" + "DOTA_Tooltip_ability_thtd_suwako_01_Description" "Suwako attack will come with an iron wheel,Repel hit targets 150distances and cause damage。(Each unit will only be knocked back once)\n\n[Relative to star level]DAMAGE:POWER POINT*1\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/500)multiple knocked back distance." + "DOTA_Tooltip_ability_thtd_suwako_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suwako_02" "Scourge God 「Mishaguchi-sama」" + "DOTA_Tooltip_ability_thtd_suwako_02_Description" "Suwako create one Mishaguchi at the target location,when the unit through Mishaguchi will chained for 1 second.\n\nUnits are not subject to two binding effects,Leave the Mishaguchi will refresh.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2.5 /per second\n\n[Special Effects - Beliefs]\n\nimprove(1+Beliefs value/500)multiple damage." + "DOTA_Tooltip_ability_thtd_suwako_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_suwako_02_range" "赤口范围:" + "DOTA_Tooltip_ability_thtd_suwako_02_stay_time" "停留时间判定:" + "DOTA_Tooltip_ability_thtd_suwako_02_root_time" "束缚时间:" + "DOTA_Tooltip_ability_thtd_suwako_02_up_percent" "%每点信仰提升:" + "DOTA_Tooltip_ability_thtd_suwako_03" "「Hellish Heat Geyser」" + "DOTA_Tooltip_ability_thtd_suwako_03_Description" "Suwako use Geyser to bounce all units,Bounce it to a random area within 200 yards and cause damage when landing.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*5.0" + "DOTA_Tooltip_ability_thtd_suwako_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suwako_03_up_percent" "%每点信仰提升:" + "DOTA_Tooltip_ability_thtd_suwako_04" "「好运降临」" + "DOTA_Tooltip_ability_thtd_suwako_04_Description" "诹访子给目标带来好运,提升其暴击伤害,如果目标为守矢神社单位则获得更强的效果。" + "DOTA_Tooltip_ability_thtd_suwako_04_crit" "%暴击伤害提升:" + "DOTA_Tooltip_ability_thtd_suwako_04_self_crit" "%守矢神社暴击伤害提升:" + "DOTA_Tooltip_ability_thtd_suwako_04_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_suwako_04_buff" "「好运降临」" + "DOTA_Tooltip_modifier_suwako_04_buff_Description" "暴击伤害提升。" + "minamitsu" "Murasa Minamitsu" + "DOTA_Tooltip_ability_thtd_minamitsu_01" "Harbor Sign 「Eternally Anchored Phantom Ship」」" + "DOTA_Tooltip_ability_thtd_minamitsu_01_Description" "Minamitsu release a ghost ship in the opposite direction of the target,Where the ghost ship passes, water will be generated,Units in the waters will be slowed down." + "DOTA_Tooltip_ability_thtd_minamitsu_01_move_slow" "movement slow:" + "DOTA_Tooltip_modifier_minamitsu_01_slow_buff" "Harbor Sign 「Eternally Anchored Phantom Ship」" + "DOTA_Tooltip_modifier_minamitsu_01_slow_buff_Description" "Affected by Minamitsu,the unit was decelerated." + "DOTA_Tooltip_ability_thtd_minamitsu_02" "Captain「spinach」" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Description" "Minamitsu eat the ancestral spinach,improve50%%power point in 7 seconds,and Attacks can cause power point-based splash damage to the target area。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Houjuu Nue]\n\npower point improve to 75%%。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Note0" "潜能Lv10:提高效果+25%%,冷却时间-2秒。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Note1" "潜能Lv50:提高效果+50%%,冷却时间-4秒。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Note2" "潜能Lv100:提高效果+75%%,冷却时间-7秒。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_minamitsu_02_power_bonus" "%能量点和攻击力提升:" + "DOTA_Tooltip_ability_thtd_minamitsu_02_ability_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_minamitsu_02_radius" "溅射范围:" + "DOTA_Tooltip_ability_thtd_minamitsu_03" "Drowning Sign 「Sinkable Vortex」" + "DOTA_Tooltip_ability_thtd_minamitsu_03_Description" "Minamitsu release a vortex to the target area,Involved in the surrounding unit and caused damage.Units in the whirlpool will be rolled out of the waters.(Each unit is rolled up at most once)\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2.5 /per second" + "DOTA_Tooltip_ability_thtd_minamitsu_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_minamitsu_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_minamitsu_04" "Harbor Sign 「Phantom Ship\'s Port」」" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Description" "Minamitsu from upstream waters summon a ghost ship,Crash into the waters downstream,enemy unit will be hurt.\n\nEveryone in the team「Undefined Fantastic Object」shikigami,Each character is additionally boosted by this skill 50%%damage.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*10 /per impact" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note1" "潜能Lv50:技能伤害+10,召唤小型幽灵船舰队。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note2" "潜能Lv100:技能伤害+20,召唤大型幽灵船舰队。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note3" "潜能Lv666:\n获得特殊效果:连续打击,幽灵船舰队前面船的撞击会使下艘船的撞击技能伤害+20。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note4" "潜能Lv999:\n获得特殊效果:北纬38度,村纱水蜜将所有神秘失踪的船重组成究极幽灵船舰队。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_minamitsu_04_damage_up" "%每个角色额外提升:" + "DOTA_Tooltip_modifier_thdots_minamitsu03_bonus" "Captain「spinach」" + "DOTA_Tooltip_modifier_thdots_minamitsu03_bonus_Description" "Minamitsu is a big deal!" + "DOTA_Tooltip_ability_thtd_kanako_01" "Divine Festival「Expanded Onbashira」" + "DOTA_Tooltip_ability_thtd_kanako_01_Description" "Kanako fire a Onbashira toward the target\'s direction,Damage units and constantly repelled(Each unit will only be knocked back once),Lasts 2.5 seconds.\n\n[Relative to star level]DAMAGE:POWER POINT*5 /per second" + "DOTA_Tooltip_ability_thtd_kanako_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_01_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_kanako_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_kanako_02" "Onbashira「descent」" + "DOTA_Tooltip_ability_thtd_kanako_02_Description" "Drop a Onbashira at the target location,Onbashira can connect with other Onbashira,Touching the linked unit will injured damage.\n\nMaximum descent(2/4/6)Onbashiras。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*(5/6/8) /times\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/1000)multiple damage." + "DOTA_Tooltip_ability_thtd_kanako_02_Note0" "潜能Lv10:链接造成2倍伤害。" + "DOTA_Tooltip_ability_thtd_kanako_02_Note1" "潜能Lv50:链接造成4倍伤害。" + "DOTA_Tooltip_ability_thtd_kanako_02_Note2" "潜能Lv100:链接造成8倍伤害。" + "DOTA_Tooltip_ability_thtd_kanako_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_02_max_count" "御柱最大数量:" + "DOTA_Tooltip_ability_thtd_kanako_03" "Onbashira「recover」" + "DOTA_Tooltip_ability_thtd_kanako_03_Description" "recover target Onbashira." + "DOTA_Tooltip_ability_thtd_kanako_03_unit" "Onbashira「link」" + "DOTA_Tooltip_ability_thtd_kanako_03_unit_Description" "Connect with the target Onbashira." + "DOTA_Tooltip_ability_thtd_kanako_04" "「Mountain of Faith」" + "DOTA_Tooltip_ability_thtd_kanako_04_Description" "Kanako create a Suwa Foughten Field,All units entering and leaving the battlefield are subject to an injury,Units in the battlefield will continue to be harmed.\n\n[Relative to star level]entering/leaving damage:POWER POINT*STAR LEVEL*8\n[Relative to star level]Continuous damage:POWER POINT*STAR LEVEL*0.25 /per second\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/1000)multiple damage." + "DOTA_Tooltip_ability_thtd_kanako_04_Note0" "潜能Lv10:古战场技能伤害提高50%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note1" "潜能Lv50:古战场技能伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note2" "潜能Lv100:古战场技能伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note3" "潜能Lv666:\n获得特殊效果:「风神之神德」,每点信仰值提升伤害+0.6%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note4" "潜能Lv999:\n获得特殊效果:「神明的威光」,神奈子在战场中的暴击伤害+600%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_power_damage1" "进入/离开伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_04_power_damage2" "持续伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_kanako_04_range" "古战场范围:" + "DOTA_Tooltip_ability_thtd_kanako_04_crit_chance" "%暴击概率增加:" + "DOTA_Tooltip_ability_thtd_kanako_04_damage_up" "%每点信仰值提升伤害:" + "DOTA_Tooltip_ability_thtd_toramaru_02" "Buddhist Art 「Most Valuable Vajra」" + "DOTA_Tooltip_ability_thtd_toramaru_02_Description" "Toramaru Shou Gather the power of money point,Make huge damage to single target.\n\nEnter Endless mode. This skill will have no cooldown,Increases damage to 4x.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*10" + "DOTA_Tooltip_ability_thtd_toramaru_02_Note0" "无尽20波后AI自动使用本技能。" + "DOTA_Tooltip_ability_thtd_toramaru_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_toramaru_02_cost_gold" "消耗金钱:" + "DOTA_Tooltip_ability_thtd_toramaru_03" "Buddha\'s Light 「Vajra of Perfect Buddhism」" + "DOTA_Tooltip_ability_thtd_toramaru_03_Description" "Toramaru Shou Gather the power of money point,Make huge damage to all targets on the inner ring.\n\nEnter Endless mode. This skill will have no cooldown,Increases damage to 4x.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*5" + "DOTA_Tooltip_ability_thtd_toramaru_03_Note0" "无尽20波后AI自动使用本技能。" + "DOTA_Tooltip_ability_thtd_toramaru_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_toramaru_03_cost_gold" "消耗金钱:" + "DOTA_Tooltip_ability_thtd_toramaru_04" "光符「正义之威光」" + "DOTA_Tooltip_ability_thtd_toramaru_04_Description" "寅丸星将毘沙门天宝塔的能量通过护心镜反射出来,对周围全体目标造成伤害。\n寅丸星消耗的金钱还会造成(累计消耗金钱 * 星级 * %power_damage%%%)的额外伤害。" + "DOTA_Tooltip_ability_thtd_toramaru_04_Note0" "累计消耗金钱不扣除返还金钱。" + "DOTA_Tooltip_ability_thtd_toramaru_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_item_0069_Description" "Toramaru Shou is a disciple of the god Bishamonten.\nAlong with Minamitsu Murasa and the other youkai aboard the Palanquin Ship, she seeks to revive Byakuren Hijiri after she had been sealed away in Makai by humans.\n\n[★]Treasure Sign 「Dazzling Gold」\n[★★★]Buddhist Art 「Most Valuable Vajra」」\n[★★★★★]Buddha\'s Light 「Vajra of Perfect Buddhism」" + "DOTA_Tooltip_ability_item_0088_Description" "" + "DOTA_Tooltip_ability_thtd_byakuren_01" "Good Omen「Nirvana\'s Cloudy Way in Purple」I" + "DOTA_Tooltip_ability_thtd_byakuren_01_Description" "-0.1 Attack Interval,decrease spell damage.\nAttack Interval cannot be smaller than 0.2s.\nWhen Attack Interval is greater than 1.0s, this spell deals Magic Damage.\nWhen Attack Interval is equal to 1.0s, deals Pure Damage.\nWhen Attack Interval Is less than 1.0s, deals Physical Damage.\n\nEach attack will damage the target and all surrounding units.\n\n[Damage Multiplier]Damage Multiplier: Power Point* Star * (1+ 0.1*Number of believers) " + "DOTA_Tooltip_ability_thtd_byakuren_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_byakuren_01_damage_up" "%每个教徒提升伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_01_tick_step" "攻击间隔减少:" + "DOTA_Tooltip_ability_thtd_byakuren_01_extra_damage" "%降低技能伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_01_min_tick" "最小攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_01_max_tick" "最大攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_01_base_tick" "初始攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_01_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_byakuren_02" "Good Omen「Nirvana\'s Cloudy Way in Purple」II" + "DOTA_Tooltip_ability_thtd_byakuren_02_Description" "+0.1 Attack Interval,decrease spell damage.\nAttack Interval cannot be smaller than 0.2s.\nWhen Attack Interval is greater than 1.0s, this spell deals Magic Damage.\nWhen Attack Interval is equal to 1.0s, deals Pure Damage.\nWhen Attack Interval Is less than 1.0s, deals Physical Damage.\n\nEach attack will damage the target and all surrounding units.\n\n[Damage Multiplier]Damage Multiplier: Power Point* Star * (1+ 0.1*Number of believers)" + "DOTA_Tooltip_ability_thtd_byakuren_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_byakuren_02_damage_up" "%每个教徒提升伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_02_tick_step" "攻击间隔减少:" + "DOTA_Tooltip_ability_thtd_byakuren_02_extra_damage" "%降低技能伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_02_min_tick" "最小攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_02_max_tick" "最大攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_02_base_tick" "初始攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_02_range" "伤害范围:" + "DOTA_Tooltip_modifier_byakuren_attack_up" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_attack_up_Description" "技能伤害因当前攻击间隔变为魔法。" + "DOTA_Tooltip_modifier_byakuren_attack_down" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_attack_down_Description" "技能伤害因当前攻击间隔变为物理。" + "DOTA_Tooltip_modifier_byakuren_attack_equal" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_attack_equal_Description" "技能伤害因当前攻击间隔变为纯粹。" + "DOTA_Tooltip_modifier_byakuren_damage_percent" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_damage_percent_Description" "当前技能伤害百分比,每层表示1%%。" + "DOTA_Tooltip_ability_thtd_byakuren_03" "「Yugyou Hijiri」" + "DOTA_Tooltip_ability_thtd_byakuren_03_Description" "With any other \'Seirensen\' Unit, Byakuren will preach them into believers,increasing Religious Point over time. \nWhen Religious point reaches 6000, the unit turns into a Believer.\nBelievers can accelerate the preaching process,\nBelievers gain additional abilities and enhences Byakuren’s Damage\n\nNazrin:In Endless Mode, attacks deals additional damage to target and surrounding units. Damage= Rank *0.2* Current Gold. \nToramaru Shou:Spell gold cost reduced by 50%.\nTatara Kogasa: [Karakasa Surprising]reduces 50%% movement speed and deals more damage.\nHoujuu Nue: Instantly kill units damaged by her abilities that are under 10% health.\nMurasa Minamitsu: \'Phantom Ship\'s Port\' \'s cooldown to 15s." + "DOTA_Tooltip_ability_thtd_byakuren_03_nazrin" "%纳兹琳金钱伤害系数:" + "DOTA_Tooltip_ability_thtd_byakuren_03_toramaru" "%寅丸星返还消耗金钱:" + "DOTA_Tooltip_ability_thtd_byakuren_03_kogasa" "%「唐伞惊吓」最大生命值:" + "DOTA_Tooltip_ability_thtd_byakuren_03_nue" "%封兽鵺秒杀血量:" + "DOTA_Tooltip_ability_thtd_byakuren_03_minamitsu" "「幽灵船之港」冷却时间:" + "DOTA_Tooltip_ability_thtd_byakuren_03_kyouko" "%「尖刺之圆」基础伤害提高:" + "DOTA_Tooltip_modifier_byakuren_03_aura" "Yugyou Hijiri" + "DOTA_Tooltip_modifier_byakuren_03_buff" "Yugyou Hijiri" + "DOTA_Tooltip_modifier_byakuren_03_aura_Description" "Byakuren is preaching." + "DOTA_Tooltip_modifier_byakuren_03_buff_Description" "This unit is a Believer of Byakuren." + "DOTA_Tooltip_ability_thtd_byakuren_04" "Superhuman[Byakuren Hijiri]/Heaven Sign[Brilliance of Mahavairocana]/Great Magic[Devil\'s Recitation]" + "DOTA_Tooltip_ability_thtd_byakuren_04_Description" "When Byakuren’s attack interval is <1.0s, uses uperhuman[Byakuren Hijiri].\nEach attack has a 10% chance to increase Power Point after channeling, increasing attack speed to maximum. \n[Damage Multiplie]Power Point Multiplier: Power Point * Believer *0.2.\n\nWhen Byakuren’s attack interval is 1.0s, uses Heaven Sign [Brilliance of Mahavairocana].\nEvery (6/ (1+believer*0.2)) attack will also damage surrounding units.\n\nWhen Byakuren’s attack interval is >1.0s, uses Great Magic [Devil\'s Recitation].\nIncrease Magic Penetration by 50, each attack releases 4 laser that deals damage to a random surrounding units.\n[Damage Multiplier] Power Point Multiplier: Power Point * Number of Believer*6*(1+ Number of Believer*0.1)" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note0" "潜能Lv10:教徒加成效果+20%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note1" "潜能Lv50:教徒加成效果+40%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note2" "潜能Lv100:教徒加成效果+60%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note3" "潜能Lv666:\n获得特殊效果:「三千大千世界之主」,教徒加成额外+100%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note4" "潜能Lv999:\n获得特殊效果:「释迦牟尼的五行山」,所有技能伤害提高至5倍。" + "DOTA_Tooltip_ability_thtd_byakuren_04_power_bonus" "%教徒奖励参数:" + "DOTA_Tooltip_ability_thtd_byakuren_04_chance" "%超人「圣白莲」触发概率:" + "DOTA_Tooltip_ability_thtd_byakuren_04_duration_time" "超人「圣白莲」持续时间:" + "DOTA_Tooltip_ability_thtd_byakuren_04_attack_speed" "超人「圣白莲」攻速增加:" + "DOTA_Tooltip_ability_thtd_byakuren_04_attack_bonus" "超人「圣白莲」基础能量和攻击增加:" + "DOTA_Tooltip_ability_thtd_byakuren_04_max_count" "「大日如来的光辉」攻击次数需求:" + "DOTA_Tooltip_ability_thtd_byakuren_04_crit_change" "%「大日如来的光辉」暴击概率提高:" + "DOTA_Tooltip_ability_thtd_byakuren_04_crit_damage" "%「大日如来的光辉」暴击伤害提高:" + "DOTA_Tooltip_ability_thtd_byakuren_04_penetration" "Magic Penetration:" + "DOTA_Tooltip_ability_thtd_byakuren_04_damage_count" "「魔神复诵」发射激光数:" + "DOTA_Tooltip_ability_thtd_byakuren_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_byakuren_04_range" "伤害范围:" + "DOTA_Tooltip_modifier_byakuren_04_physical_buff" "superhuman [Byakuren Hijiri]" + "DOTA_Tooltip_modifier_byakuren_04_physical_buff_Description" "Byakuren uses magic to vastly enhance her strength." + "DOTA_Tooltip_modifier_byakuren_04_pure_buff" "超人「圣白莲」" + "DOTA_Tooltip_modifier_byakuren_04_pure_buff_Description" "圣白莲暴击提升了。" + "DOTA_Tooltip_modifier_byakuren_04_magic_buff" "Great Magic[Devil\'s Recitation]" + "DOTA_Tooltip_modifier_byakuren_04_magic_buff_Description" "Byakuren channels magic to increase her magic penetration." + "DOTA_Tooltip_ability_item_0051" "[SSR]Byakuren Hijiri" + "DOTA_Tooltip_ability_item_0051_Description" "After Myouren dies, Byakuren fears the mortality of life and seeks immortality.\nFailing to achieve immortality through the way of the Buddha, Byakuren turns to magic and sorcery. \nIn her contact wit youkai , she realizes that only the strong can survival. “Survival of the fittest” became her cornerstone. \nOn the one hand, she accepts to beat off youkaies, on the other hand, she helps youkaies, this is the \'balance\' she thinks.\nAs mankind rejects her, Byakuren was banished to devil\'s world --- where Palanquin Ship sails towards.\n\n[★]Good Omen [Nirvana\'s Cloudy Way in Purple]I\n[★]Good Omen [Nirvana\'s Cloudy Way in Purple]II\n[★★★] [Yugyou Hijiri]\n[★★★★★]Superhuman [Byakuren Hijiri]/Heaven Sign [Brilliance of Mahavairocana]/Great Magic [Devil\'s Recitation]" + "byakuren" "Hijiri Byakuren" + "soga" "Soga no Tojiko" + "futo" "Mononobe no Futo" + "miko" "Toyosatomimi no Miko" + "DOTA_Tooltip_ability_thtd_soga_01" "Vengeful Spirit [Iruka\'s Thunder]" + "DOTA_Tooltip_ability_thtd_soga_01_Description" "Deals damage to enemies in a straight line, and deals 1s stun.\n\n After releasing, a ball lightning will be created in the track, next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage:POWER POINT * STAR LEVEL" + "DOTA_Tooltip_ability_thtd_soga_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_soga_01_stun_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_soga_01_length" "直线长度:" + "DOTA_Tooltip_ability_thtd_soga_02" "Thunder Arrow [Gagouji\'s Tornado]" + "DOTA_Tooltip_ability_thtd_soga_02_Description" "Deals 1 time of damage to units in target areas.\n\nAfter releasing, a ball lightning will be created in the track, next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage: POWER POINT * STAR LEVEL*4" + "DOTA_Tooltip_ability_thtd_soga_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_soga_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_soga_02_damage_down" "%再次触发伤害:" + "DOTA_Tooltip_ability_thtd_soga_03" "Thunder Arrow [Gagouji\'s Tornado]" + "DOTA_Tooltip_ability_thtd_soga_03_Description" "After a short-time delay, deals a huge damage to units in target areas.\n\nAfter releasing, a ball lightning will be created in the track,next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 10\n\n[COOPERATION PROMOTION - Mononobe no Futo]\n\n+20%% Magic Damage to units are hitted, during 10s." + "DOTA_Tooltip_ability_thtd_soga_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_soga_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_soga_03_damage_down" "%再次触发伤害:" + "DOTA_Tooltip_ability_thtd_soga_03_damage_up" "%被击中单位魔法伤害提升:" + "DOTA_Tooltip_ability_thtd_soga_03_duration_time" "魔法伤害提升持续时间:" + "DOTA_Tooltip_ability_thtd_futo_01" "Throwing Dishes [Mononobe\'s Eighty Sake Cups]" + "DOTA_Tooltip_ability_thtd_futo_01_Description" "Each attack will randomly change a dish, each dish deals different effect.\nGreen Deals 1 time of (POWER POINT * Star Level) damage to all units behind the target.\nOrange Throwes dishes to all surrounding units and deals (POWER POINT * Star Level) damage.\nGreen Inflicting poison to units in target areas and decreasing HP over time.\nRed makes a flame burst to deal (POWER POINT * Star Level * 4) damage to enemies in the area.\nYellow Deals 0.5s stun to enemies in the area.\nBlue Deals critical strike( x 32) to enemies in ther area(this critical strike damage is MAGIC DAMAGE.)" + "DOTA_Tooltip_ability_thtd_futo_01_damage1" "青伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_futo_01_damage2" "橙伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_futo_01_damage3" "绿伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_futo_01_duration_time" "绿持续时间:" + "DOTA_Tooltip_ability_thtd_futo_01_damage4" "红伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_futo_01_stun_time" "黄眩晕时间:" + "DOTA_Tooltip_ability_thtd_futo_01_crit" "蓝暴击伤害倍数:" + "DOTA_Tooltip_ability_thtd_futo_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_futo_02" "Saint Girl [Sun Goddess\'s Sacrifice]" + "DOTA_Tooltip_ability_thtd_futo_02_Description" "Each time kill unit, deals self 10%% more magic damage.\n\nAt most overlay 10 times, during 10s.\n\n[COOPERATION PROMOTION - Soga no Tojiko]\n\nOverlay times increase from 10 to 15." + "DOTA_Tooltip_ability_thtd_futo_02_damage_up" "%魔法伤害提升:" + "DOTA_Tooltip_ability_thtd_futo_02_max_count" "最大叠加层数:" + "DOTA_Tooltip_ability_thtd_futo_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_futo_02_buff" "圣童女「太阳神的贡品」" + "DOTA_Tooltip_modifier_futo_02_buff_Description" "每次击杀单位,提升自身魔法伤害。" + "DOTA_Tooltip_ability_thtd_futo_03" "Blaze Sign [Sakuraiji in Flames]" + "DOTA_Tooltip_ability_thtd_futo_03_Description" "Sets big fire to the area, deals damage to enemies in the area over time.\n\n[Damage Multiplier]Damage:POWER POINT * Star Level * 2.5 /Per-sec" + "DOTA_Tooltip_ability_thtd_futo_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_futo_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_futo_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_item_0052" "" + "DOTA_Tooltip_ability_item_0094" "[SR]Soga no Tojiko" + "DOTA_Tooltip_ability_item_0095" "[SR]Mononobe no Futo" + "extra_bonus_minoriko_limit" "Minoriko\'s Gift: Aki Minoriko\'s exchange time refreshes." + "extra_bonus_nazrin" "Nazrin\'s Gift: Get 3500 gold." + "extra_bonus_lily" "Lily White\'s Gift: Promote all Shikigamis\'level to Max." + "extra_bosses_minoriko" "Boss Mission: Aki Minoriko: Each 10s regen 30% HP." + "extra_bosses_keine" "Boss Mission: Kamishirasawa Keine: When HP < 70%, record current HP and recover after 5s." + "extra_bosses_aya" "Boss Mission: Shameimaru Aya: Immune most of movement speed decreasing." + "extra_bosses_kisume" "Boss Mission: Kisume: Reduce self 2000 damage." + "extra_bosses_alice" "Boss Mission: Alice: After she died, she will split into 3 ningyous, each ningyou has 30% HP, food spawns will be occupied when ningyous enter the circle." + "DOTA_Tooltip_modifier_bosses_alice" "替死符" + "DOTA_Tooltip_modifier_bosses_alice_Description" "当受到致死伤害时使用人偶代替自己死亡,但替死后生命值和生命上限降低为最初的33%%。" + "extra_bosses_kaguya" "Boss Mission: Houraisan Kaguya: Resurrection" + "extra_bosses_yuugi" "Boss Mission: Hoshiguma Yuugi: Have double HP" + "extra_bosses_mokou" "Boss Mission: Fujiwara no mokou: IMMUNE ITEM\'S CRITICAL STRIKE effect." + "extra_bosses_hina" "Boss Mission: giyama Hina: When she gets hurt, if damage > (the source of damage * 4 * Star Level * POWER POINT), this damage will decrease a half." + "extra_bosses_marisa" "Boss Mission: Kirisame Marisa: Each 3s she will rush 0.3s." + "extra_bosses_rumia" "Boss Mission: Rumia: Each 3s will have 1s Invincibility." + "DOTA_Tooltip_ability_thtd_miko_04" "[Newborn Divine Spirit]" + "DOTA_Tooltip_ability_thtd_miko_02" "Hermit Sign [Emperor of the Land of the Rising Sun]" + "DOTA_Tooltip_ability_thtd_miko_03" "Honor [Colors of Twelve Levels]" + "DOTA_Tooltip_ability_thtd_miko_01" "[Cipangu the Golden Sword]" + "DOTA_Tooltip_ability_thtd_miko_01_Description" "Miko releases 3 golden swords to target direction, units hit by golden swords will get damage, the damage will attach Miko (POWER POINT * 1)\'s\' damage.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 4" + "DOTA_Tooltip_ability_thtd_miko_01_power_damage1" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_01_power_damage2" "附带伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_01_range" "黄金剑距离:" + "DOTA_Tooltip_ability_thtd_miko_01_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_miko_01_pose" "[Cipangu the Golden Sword]" + "DOTA_Tooltip_modifier_miko_01_pose_Description" "正在施放黄金剑" + "DOTA_Tooltip_modifier_miko_01_debuff" "[Cipangu the Golden Sword]" + "DOTA_Tooltip_modifier_miko_01_debuff_Description" "This unit is hitted by golden swords." + "DOTA_Tooltip_ability_thtd_miko_02_Description" "Each time there is 1 \'Divine Spirit Mausoleum\' unit, it will be \'Listen\' by Miko\nEach time \'Listen a unit, Religious Point will increase constantly.\'\nWhen Religious Points reach 6000, Miko can do \'Teach\' to every \'Divine Spirit Mausoleum\' unit.\nUnits success to be \'Teach\' will get extra ability.\n\nSoga no Tojiko: [Iruka\'s Thunder] Cooldown time reduces to 4s, [Gagouji\'s Tornado] Cooldown time reduces to 10s.\nMononobe no Futo: [Sakuraiji in Flames]Deals 25%% more damage.\nMiyako Yoshika: Attack attaches an extra [poison] buff." + "DOTA_Tooltip_ability_thtd_miko_02_soga01_cd" "「入鹿之雷」冷却降低:" + "DOTA_Tooltip_ability_thtd_miko_02_soga03_cd" "「元兴寺的龙卷」冷却降低:" + "DOTA_Tooltip_ability_thtd_miko_02_futo03_up" "%「樱井寺炎上」伤害提升:" + "DOTA_Tooltip_ability_thtd_miko_02_yoshika" "附加「毒」层数:" + "DOTA_Tooltip_ability_thtd_miko_02_seiga" "死亡伤害参数:" + "DOTA_Tooltip_ability_thtd_miko_02_bonus_power" "传授能量和攻击增加:" + "DOTA_Tooltip_ability_thtd_miko_02_bonus_chance" "%传授爆击概率增加:" + "DOTA_Tooltip_ability_thtd_miko_02_bonus_crit" "%传授爆击伤害增加:" + "DOTA_Tooltip_modifier_miko_02_aura" "Hermit Sign [Emperor of the Land of the Rising Sun]" + "DOTA_Tooltip_modifier_miko_02_aura_Description" "Miko is \'Listening\'." + "DOTA_Tooltip_modifier_miko_02_buff" "Hermit Sign [Emperor of the Land of the Rising Sun]" + "DOTA_Tooltip_modifier_miko_02_buff_Description" "This unit has been \'Taught\'." + "DOTA_Tooltip_modifier_miko_02_ready" "仙符「日出之处的天子」" + "DOTA_Tooltip_modifier_miko_02_ready_Description" "宗教值达到6000。「传授」已就绪" + "DOTA_Tooltip_ability_thtd_miko_03_Description" "Each 0.3s Miko will release a colorful light ball to attack surrounding random targets.\n\nEach \'Be Taught\' unit there will cause release 1 extra light ball.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level" + "DOTA_Tooltip_ability_thtd_miko_03_Note0" "潜能Lv10:光球造成2倍伤害。" + "DOTA_Tooltip_ability_thtd_miko_03_Note1" "潜能Lv50:光球造成4倍伤害。" + "DOTA_Tooltip_ability_thtd_miko_03_Note2" "潜能Lv100:光球造成6倍伤害。" + "DOTA_Tooltip_ability_thtd_miko_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_03_tick" "发射间隔:" + "DOTA_Tooltip_ability_thtd_miko_04_Description" "Miko asks all \'Be Taught\' units there to release \'Meteor Shower\' to inner enemies with itself together.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 2.5/Per Meteor Shower." + "DOTA_Tooltip_ability_thtd_miko_04_Note0" "潜能Lv10:流星雨伤害+5。" + "DOTA_Tooltip_ability_thtd_miko_04_Note1" "潜能Lv50:流星雨伤害+10。" + "DOTA_Tooltip_ability_thtd_miko_04_Note2" "潜能Lv100:流星雨伤害+20。" + "DOTA_Tooltip_ability_thtd_miko_04_Note3" "潜能Lv666:\n获得特殊效果:光符「王道的威光」,光球额外造成12倍伤害,且增加400%%暴击伤害。" + "DOTA_Tooltip_ability_thtd_miko_04_Note4" "潜能Lv999:\n获得特殊效果:星神符「十七条的超人」,流星雨伤害+170。" + "DOTA_Tooltip_ability_thtd_miko_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_04_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_thdots_miko04_think_interval" "[Newborn Divine Spirit]" + "DOTA_Tooltip_modifier_thdots_miko04_think_interval_Description" "神子召唤所有场上的「传授」单位与自己一同对内圈单位持续释放流星雨。" + "DOTA_Tooltip_modifier_miko_04_pose" "[Newborn Divine Spirit]" + "DOTA_Tooltip_modifier_miko_04_pose_Description" "正在释放流星雨中" + "DOTA_Tooltip_ability_thtd_yoshika_01" "poison Nail[Undead Murderer]" + "DOTA_Tooltip_ability_thtd_yoshika_01_Description" "Miyako\'s every attack will attach a [poison] buff to units in target area, and decrease their movement speed, during 5s.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level *1/Per-Sec." + "DOTA_Tooltip_ability_thtd_yoshika_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_yoshika_01_move_slow" "%移速降低:" + "DOTA_Tooltip_ability_thtd_yoshika_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yoshika_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_yoshika_01_attack_speed" "组合提升攻击速度:" + "DOTA_Tooltip_modifier_thtd_yoshika_01_combo_buff" "【组合提升 - 霍青娥】" + "DOTA_Tooltip_modifier_thtd_yoshika_01_combo_buff_Description" "攻击速度得到提升。" + "DOTA_Tooltip_modifier_yoshika_01_slow" "Poison Nail [Undead Murderer]" + "DOTA_Tooltip_modifier_yoshika_01_slow_Description" "This unit affects by [Poison], movement speed decreases." + "DOTA_Tooltip_ability_thtd_yoshika_02" "Poison Nail [Poison Murder]" + "DOTA_Tooltip_ability_thtd_yoshika_02_Description" "Depends on the number of [poison] buff,Miyako deals damage to units are attaching [poison] in inner circle.\n(This [poison] includes other units\' poisoned Spell cards.)\n\n[Damage Multiplier]Damage:POWER POINT * Star Level * 0.5 * Num of Buff" + "DOTA_Tooltip_ability_thtd_yoshika_02_power_damage" "技能伤害(能量点*星级/每层毒):" + "DOTA_Tooltip_ability_item_0097" "[R]Yoshika Miyako" + "DOTA_Tooltip_ability_item_0052_Description" "The saint Wakes up from sleeping eternally, when she was born she has got unbelievable gift, has beyond the mankind a lot.\nShe can undersatnd 10 people\'s spoken at the same time and give correct answers. It is said when she was a child, she used phus to make Four King\'s Shapes and built Four King Temple.On another hand, although there are some stories said she was born in the barn, they seems like jokes.\nNow she has become an immortal.But she still has not broken off with mankind\'s world, sometimes she even meddles in mankind\'s stuff. It perhaps is a habit was left due to be an Emperor before.\nHer character is so kind and humorous. However if you are meet face by face, you would make fault easily, even felt you have no secret now, so people mostly revered her.\n\n[★][Cipangu the Golden Sword]\n[★]Hermit Sign[Emperor of the Land of the Rising Sun]\n[★★★]Honor[Colors of Twelve Levels]\n[★★★★★][Newborn Divine Spirit]" + "DOTA_Tooltip_ability_item_0094_Description" "Ancients\' spirit. Serving Toyosatomimi no Miko with Mononobe no Futo together.\nshe becomes a spirit due to be cheated by Futo, but she is not mind now.\nShe has the ability to fall the thunder.\n\n[★]Vengeful Spirit[Iruka\'s Thunder]\n[★★★]Thunder Arrow[Gagouji\'s Cyclone]\n[★★★★]Thunder Arrow[Gagouji\'s Tornado]" + "DOTA_Tooltip_ability_item_0095_Description" "The ancient keeps sleeping by cursing self in a long time.\nShe trys reaching immortal by using death to divide into Metempsychosis wheel.\nBut in fact it is not that simple, finally she was still found out by Death god.\nComparing with Toyosatomimi no Miko who lives until now, she seems not really like Gensokyo, perhaps it is because she is not suitable.\nThis can be found out some from her past.\nWhen she was alive, she didn\'t accept Buddhism preached from the mainland, oppositely believed Tao near the ancient Shintoism.\nHence Her magic and style of using magic are not really old. It can say it is her personal style.\n\n[★]Throwing Dishes[Mononobe\'s Eighty Sake Cups]\n[★★★]Saint Girl[Sun Goddess\'s Sacrifice]\n[★★★★]Blaze Sign[Sakuraiji in Flames]" + "DOTA_Tooltip_ability_item_0097_Description" "The corpses that are revived and controlled Kaku Seiga.\nThey are never feeling pain and exhausted,so they can break out huge power,\nand they are Loyal but a little bit stupid.\n\n[★]Poison Nail[Poison Murder]\n[★★★]Poison Nail[Undead Murderer]" + "yoshika" "Miyako Yoshika" + "DOTA_Tooltip_ability_thtd_seiga_01" "Evil Sign[Yang Xiaogui]" + "DOTA_Tooltip_ability_thtd_seiga_01_Description" "Each unit dies around Seiga have chance to produce a [zombie].\n\n[★]1%% probability to produce 1 [★]zombie.\n[★★]2%% probability to produce 1 [★]zombie,\n[★★★]2%% probability to produce 1 [★]zombie,1%% probability to produce 1 [★★] zombie.\n[★★★★]2%% probability to produce a [★★] zombie,1%% probability to produce 1 [★★★] zombie.\n[★★★★★]3%% probability to produce 1 [★★★] zombie, 1%% probability to produce 1 [★★★★] zombie." + "DOTA_Tooltip_ability_thtd_seiga_02_Description" "increase a units\' attack speed, during 10s." + "DOTA_Tooltip_ability_thtd_seiga_02" "Demonify[Zouhuo Rumo]" + "DOTA_Tooltip_ability_thtd_seiga_02_attack_speed" "Attack Speed Increase:" + "DOTA_Tooltip_ability_thtd_seiga_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_seiga_02_attack_speed_buff" "Demonify[Zouhuo Rumo]" + "DOTA_Tooltip_modifier_seiga_02_attack_speed_buff_Description" "Affecting by Kaku Seiga, this unit\'s attack speed increases." + "DOTA_Tooltip_ability_thtd_seiga_03" "Necromancy[Corpse Tongji]" + "DOTA_Tooltip_ability_thtd_seiga_03_Description" "Each unit dies near her, other units around the dead unit will be hurt by amount of [Poison] buffs in dead units near her.\n\n[Damage Multiplier]Damage:Power Point*Star Level*0.5*amount of buffs" + "DOTA_Tooltip_ability_thtd_seiga_03_power_damage" "技能伤害(能量点*星级/每层毒):" + "DOTA_Tooltip_ability_thtd_seiga_03_range" "伤害范围:" + "DOTA_Tooltip_ability_item_0096" "[SR]Kaku Seiga" + "seiga" "Kaku Seiga" + "DOTA_Tooltip_ability_item_1011" "Zombie Lv1" + "DOTA_Tooltip_ability_item_1011_Description" "Can replace any 1 [★] Shikigami." + "DOTA_Tooltip_ability_item_1012" "Zombie Lv2" + "DOTA_Tooltip_ability_item_1012_Description" "Can replace any 1 [★★] Shikigami." + "DOTA_Tooltip_ability_item_1013" "Zombie Lv3" + "DOTA_Tooltip_ability_item_1013_Description" "Can replace any 1 [★★★] Shikigami." + "DOTA_Tooltip_ability_item_1014" "Zombie Lv4" + "DOTA_Tooltip_ability_item_1014_Description" "Can replace any 1 [★★★★] Shikigami." + "change_to_keine_04_jade" "Switch to [Three Sacred Treasures] - Orb" + "change_to_keine_04_mirror" "Switch to [Three Sacred Treasures] - Mirror" + "change_to_keine_04_sword" "Switch to [Three Sacred Treasures] - Sword" + "change_to_keine_shirasawa" "" + "change_to_keine_humen" "" + "keine" "Kamishirasawa Keine" + "change_to_close_ai" "" + "change_to_open_ai" "" + "change_to_open_cast_on_fixed_point" "已开启AI定点施放于所选地点" + "change_to_close_cast_on_fixed_point" "已关闭AI定点施放" + "cast_range_out" "超出技能施法范围" + "medicine" "Medicine Melancholy" + "luna" "Luna Child" + "sunny" "Sunny Milk" + "star" "Star Sapphire" + "DOTA_Tooltip_ability_thtd_keine_01" "Spiritual Birth [First Pyramid]" + "DOTA_Tooltip_ability_thtd_keine_01_Description" "Human Form: Increase a unit\'s attack damage, during 10s.\n\n[Damage Multiplier] Attack Increase:100/200/400/800/2000\n\nKeine Form: Ambition Sign [General Headquarters Crisis]\n\nAttack has 25%% Chance to stun units in target area 1s, and cause extra damage.\n\n[Damage Multiplier] Damage: Power Point*Star Level*1.0" + "DOTA_Tooltip_ability_thtd_keine_01_attack_bonus" "攻击力增加:" + "DOTA_Tooltip_ability_thtd_keine_01_bonus_time" "攻击力持续时间:" + "DOTA_Tooltip_ability_thtd_keine_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_keine_01_chance" "%触发概率:" + "DOTA_Tooltip_ability_thtd_keine_01_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_keine_01_lock_time" "晕眩后免疫时间:" + "DOTA_Tooltip_ability_thtd_keine_01_range" "区域范围:" + "DOTA_Tooltip_modifier_keine_01_buff" "产灵「最初的金字塔」" + "DOTA_Tooltip_modifier_keine_01_buff_Description" "攻击力得到提升。" + "DOTA_Tooltip_ability_thtd_keine_02" "Switch [Human]/[Keine] Form" + "DOTA_Tooltip_ability_thtd_keine_02_Description" "Switch to Human or Keine Form." + "DOTA_Tooltip_ability_thtd_keine_03" "Pseudo-History [The Legend of Gensokyo]" + "DOTA_Tooltip_ability_thtd_keine_03_Description" "Human Form: Each attack has 20%% chance to devour target units [History],make Keine record this unit\'s current position and HP.\n\nKeine Form:Each attack has 20%% chance to create target units\' [History], this unit will be back to the position and HP in devoured [History] recording.\n\nActive Use:\nHuman Form: Devour all units\' [History] in target area.\n\nKeine Form: Create all units\' [History] in target area.\n\n[Cooperation Promotion - Fujiwara no mokou]\n\nChance increases to 50%%." + "DOTA_Tooltip_ability_thtd_keine_03_chance" "%触发概率:" + "DOTA_Tooltip_ability_thtd_keine_03_range1" "主动范围:" + "DOTA_Tooltip_ability_thtd_keine_03_range2" "被动范围:" + "DOTA_Tooltip_ability_thtd_keine_03_max_count" "每个单位最大吞噬次数:" + "DOTA_Tooltip_thtd_keine_03_debuff" "Pseudo-History [The Legend of Gensokyo]" + "DOTA_Tooltip_thtd_keine_03_debuff_Description" "This unit is devoured [History]." + "DOTA_Tooltip_ability_thtd_keine_04" "Land Sign [Three Sacred Treasures]" + "DOTA_Tooltip_ability_thtd_keine_04_Description" "When Keine creates [History], [History]\'s effect can be changed by current treasure. \n\nLand Sign [Three Sacred Treasures - Sword]: Shoot a sword to target, cause Power Point*Star Level*5 damage to the target.\n\n[Three Sacred Treasures] - Orb: Cause damage bases of distances between current position and creating [History].\n\n[Three Sacred Treasures] - Mirror: make target units\' HP become (Current HP - HP when Devouring [History ])*0.5." + "DOTA_Tooltip_ability_thtd_keine_04_power_damage" "「剑」技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_keine_04_distance_damage" "「玉」技能伤害(能量点*星级/每百码):" + "DOTA_Tooltip_ability_thtd_keine_04_hp_percent" "「镜」技能参数:" + "DOTA_Tooltip_ability_thtd_medicine_01" "Poison Sign[Poison Breath]" + "DOTA_Tooltip_ability_thtd_medicine_01_Description" "Medicine attacks targets will cause targets enter [Lost] Form and decrease movement speed, during 1.0s, then cause damage over time to them.\n\n[Damage Multiplier]Damage: Power Point*Star Level*1.0/per-sec" + "DOTA_Tooltip_ability_thtd_medicine_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_medicine_01_move_slow" "Movement speed Decrease Effect:" + "DOTA_Tooltip_ability_thtd_medicine_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_medicine_01_tick_time" "伤害间隔:" + "DOTA_Tooltip_modifier_medicine_01_slow" "Poison Sign[Poison Breath]" + "DOTA_Tooltip_modifier_medicine_01_slow_Description" "This unit\'s movement speed is decreased, because Medicine\'s posion attack." + "DOTA_Tooltip_ability_thtd_medicine_02" "Fog Sign[Gassing Garden]" + "DOTA_Tooltip_ability_thtd_medicine_02_Description" "Release gas to target area, attract nearby units, and cause damage over time.\n\n[Damage Multiplier]Damage:Power Point*Star Level*4.0/per-sec" + "DOTA_Tooltip_ability_thtd_medicine_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_medicine_02_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_medicine_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_medicine_02_tick_time" "伤害间隔时间:" + "DOTA_Tooltip_ability_thtd_medicine_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_medicine_03_Description" "选择一个地点来设定AI定点施放:雾符「毒气花园」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_star_01" "Shooting Star[Petit Comet]" + "DOTA_Tooltip_ability_thtd_star_01_Description" "Star releases shooting star in target position, cause damage to target and decrease the movement speed.\n\n[Damage Multiplier]Damage:Power Point*Star Level*1.0\n\n[Cooperation Promotion - Sunny Milk, Luna Child]\n\nUnits in fairies\' area will gain 1 shooting star attack." + "DOTA_Tooltip_ability_thtd_star_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_star_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_star_01_move_slow" "Movement Speed Decrease effect:" + "DOTA_Tooltip_ability_thtd_star_01_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_star_01_slow" "Shooting Star[Petit Comet]" + "DOTA_Tooltip_modifier_star_01_slow_Description" "This unit\'s movement speed is decreased because Star\'s influence." + "DOTA_Tooltip_ability_thtd_star_02" "Star Sign[Starlight Rain]" + "DOTA_Tooltip_ability_thtd_star_02_Description" "Release 20 times shooting star in target area, each time will increase 5%% damage.\n\n[Damage Multiplier] Damage:Power Point*Star Level*5\n\n[Cooperation Promotion - Sunny Milk, Luna Child]\n\nUnits in fairies\' area will also get 1 time shooting star attack." + "DOTA_Tooltip_ability_thtd_star_02_power_damage" "技能伤害(能量点*星级/每阵):" + "DOTA_Tooltip_ability_thtd_star_02_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_star_02_max_count" "流量阵数:" + "DOTA_Tooltip_ability_thtd_star_02_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_sunny_01" "Rainbow Light[Prism Flash]" + "DOTA_Tooltip_ability_thtd_sunny_01_Description" "Shoot laser to target to make laser reflect to 2 units, each reflection increase 100%% damage.\n\n[Damage Multiplier] Damage: Power Point*Star Level*1.0\n\n[Cooperation Promotion - Star Sapphire, Luna Child]\n\nUnits in fairies\' area will also gain 1 laser effect." + "DOTA_Tooltip_ability_thtd_sunny_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_sunny_01_range" "折射范围:" + "DOTA_Tooltip_ability_thtd_sunny_01_max_count" "折射单位数量:" + "DOTA_Tooltip_ability_thtd_sunny_01_damage_up" "%每次伤害提升:" + "DOTA_Tooltip_ability_thtd_sunny_02" "Light Sign[Yellow Deflection]" + "DOTA_Tooltip_ability_thtd_sunny_02_Description" "Switch damage which units in target area gain to pure damage, and make units in the area gain 110%%/115%%/125%% pure damage.\n\n[Cooperation Promotion - Star Sapphire, Luna Child]\n\nUnits in fairies\' area will also get same effect." + "DOTA_Tooltip_ability_thtd_sunny_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_sunny_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sunny_02_damage_up" "%伤害提升:" + "DOTA_Tooltip_ability_thtd_sunny_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_sunny_03_Description" "选择一个地点来设定AI定点施放:光符「黄色偏移」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_luna_01" "Moonlight[Moon Stillness]" + "DOTA_Tooltip_ability_thtd_luna_01_Description" "Luna\'s each attack will summon a moonlight to target and 2 units around it, and cause damage.Damage to surrounding units will increase 100%%.\n\n[Cooperation Promotion]Damage:Power Point*Star Level*1.0\n\n[Cooperation Promotion - Sunny Milk, Star Sapphire]\n\nUnits in fairies\' area will also gain a moonlight attack." + "DOTA_Tooltip_ability_thtd_luna_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_luna_01_max_count" "单位个数:" + "DOTA_Tooltip_ability_thtd_luna_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_luna_01_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_luna_02" "Light Sign[Full Moon Night]" + "DOTA_Tooltip_ability_thtd_luna_02_Description" "Shooting to target position, every time shoot a unit will increase self\'s Power Points.\n\n[Damage Multiplier]Damage: Power Point*Star Level*5.0\n[Damage Multiplier]Power Point Increase: 100/250/500 /per-unit\n\n[Cooperation Promotion - Sunny Milk, Star Sapphire]\n\nUnits in faries\' area will also increase Luna\'s Power Points." + "DOTA_Tooltip_ability_thtd_luna_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_luna_02_bonus_power" "能量点和攻击力增加:" + "DOTA_Tooltip_ability_thtd_luna_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_luna_02_buff" "光符「满月之夜」" + "DOTA_Tooltip_modifier_luna_02_buff_Description" "每击中一个单位,提高自身的能量点和攻击力。" + "DOTA_Tooltip_modifier_sunny_02_debuff" "Light Sign[Yellow Deflection]" + "DOTA_Tooltip_modifier_sunny_02_debuff_Description" "Skill damage this unit gains will be switched to Pure Damage." + "DOTA_Tooltip_ability_item_0092" "[R]Medicine Melancholy" + "DOTA_Tooltip_ability_item_0056" "[R]Star Sapphire" + "DOTA_Tooltip_ability_item_0057" "[R]Sunny Milk" + "DOTA_Tooltip_ability_item_0058" "[R]Luna Child" + "DOTA_Tooltip_ability_item_0061" "[SR]Kamishirasawa Keine" + "DOTA_Tooltip_ability_thtd_suika_01" "Ghastly Atmosphere[Dense Fog Labyrinth]/Oni Sign[Ooeyama Complete Massacre]" + "DOTA_Tooltip_ability_thtd_suika_01_Description" "Using her ability to manipulate density and sparsity, Suika splits herself into Tiny Suikas. The Tiny Suikas inherit the main body\'s attack damage and abilities, however, they deal less damage and have reduced range.\n\nOni Sign[Ooeyama Complete Massacre]\n\nSuika\'s attacks have a 25%% chance to deal damage to units around the target and slow them.\n\n[Star Level Correlation]Damage: POWER*Star Level*1.0" + "DOTA_Tooltip_ability_thtd_suika_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suika_01_move_slow" "Slow:" + "DOTA_Tooltip_modifier_suika_01_slow_debuff" "Oni Sign[Ooeyama Complete Massacre]" + "DOTA_Tooltip_modifier_suika_01_slow_debuff_Description" "Due to Suika\'s doing this unit\'s movement speed has been reduced." + "DOTA_Tooltip_ability_thtd_suika_02" "Oni God[Missing Purple Power]" + "DOTA_Tooltip_ability_thtd_suika_02_Description" "Using her ability to manipulate density and sparsity, Suika turns into GIANT SUIKA.\n\n GIANT SUIKA deals more damage and has increased range, however, she has a lower chance to proc [Ooeyama Complete Massacre]." + "DOTA_Tooltip_ability_thtd_suika_03" "Onibi[Super-High-Density Phosphor Calamity Technique]" + "DOTA_Tooltip_ability_thtd_suika_03_Description" "Suika throws a fireball at the targeted location, damaging all enemies within the impact area." + "DOTA_Tooltip_ability_thtd_suika_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suika_04" "Drunken Dream[Segaki Binding Technique]" + "DOTA_Tooltip_ability_thtd_suika_04_Description" "Suika uses her chain to pull a targeted unit, preventing her from moving away from Suika any more than 800 units while receiving damage over time. If the target tries to break free, she will receive double damage.\n\n[Star Level Correlation]Damage: POWER * Star Level * 1.0" + "DOTA_Tooltip_ability_thtd_suika_04_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_suika_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_suika_04_range" "距离:" + "DOTA_Tooltip_ability_thtd_yuugi_01" "Shackle Sign[Shackles A Criminal Can\'t Take Off]" + "DOTA_Tooltip_ability_thtd_yuugi_01_Description" "Yuugi stamps on the ground, dealing damage to all enemies within 1000 units around her. The more enemies around her, the higher the chance to deal increased damage.\n\n[Star Level Correlation]Damage: POWER * Star Level * (5-15)" + "DOTA_Tooltip_ability_thtd_yuugi_01_power_damage1" "最小技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuugi_01_power_damage2" "最大技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuugi_02" "Feat of Strength[Ooeyama Storm]" + "DOTA_Tooltip_ability_thtd_yuugi_02_Description" "Yuugi\'s attack have a 30%% chance to slam the ground around the target, dealing damage and knocking back all enemies within that area.\n\n[Star Level Correlation]Damage: POWER * Star Level * 2" + "DOTA_Tooltip_ability_thtd_yuugi_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuugi_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_yuugi_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_yuugi_03" "Secret Technique of the Four Heavenly Kings[Three Step Kill]" + "DOTA_Tooltip_ability_thtd_yuugi_03_Description" "Yuugi stops any enemy movement in the targeted area for 2 seconds. If an enemy leaves the targeted area, she will receive a great amount of damage after taking three steps. \n\n[Star Level Correlation]Damage: POWER * Star Level * 20" + "DOTA_Tooltip_ability_thtd_yuugi_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yuugi_03_range" "区域范围:" + "DOTA_Tooltip_modifier_yuugi_03_pause_unit" "Secret Technique of the Four Heavenly Kings[Three Step Kill]" + "DOTA_Tooltip_modifier_yuugi_03_pause_unit_Description" "Omae wa mou shindeiru!" + "DOTA_Tooltip_modifier_yuugi_02_pause_unit" "Feat of Strength[Ooeyama Storm]" + "DOTA_Tooltip_modifier_yuugi_02_pause_unit_Description" "This unit has been knocked back by Yuugi." + "DOTA_Tooltip_ability_item_0054" "【SR】Hoshiguma Yuugi" + "DOTA_Tooltip_ability_item_0055" "【SR】Ibuki Suika" + "suika" "Ibuki Suika" + "yuugi" "Hoshiguma Yuugi" + "DOTA_Tooltip_ability_item_0073" "【SSR】Junko" + "DOTA_Tooltip_ability_item_0073_Lore" "This vengeance will be repeated forever." + "DOTA_Tooltip_ability_item_0073_Description" "Hou Yi\'s imperial concubine has strong hatred for Chang\'e. The husband had killed his son, which was the first resentment, but the resentment had been purified. Pure fox purifies her hatred so that her identity is no longer important. Now anger and hatred are the only motive force that drives her to act, that is, where her heart exists." + "junko" "Junko" + "DOTA_Tooltip_ability_thtd_junko_01" "Shackle Sign「purification」" + "DOTA_Tooltip_ability_thtd_junko_01_Description" "Pure fox releases its pure power, so that the target has the same ability to purify itself. \n[Purified Damage] Skills directly cause the final damage according to the skill damage. They don\'t eat any other additions or subtractions, including the explosion and special effects of items, and ignore the enemy\'s damage reduction. Equipments only have basic attributes and energy to be useful." + "DOTA_Tooltip_ability_thtd_junko_01_damage_up" "%技能伤害提升:" + "DOTA_Tooltip_ability_thtd_junko_01_hecatia_up" "%对赫卡提亚伤害提升:" + "DOTA_Tooltip_modifier_thtd_junko_01_combo_buff" "【组合提升 - 赫卡提亚】" + "DOTA_Tooltip_modifier_thtd_junko_01_combo_buff_Description" "可以额外激活一个目标。" + "DOTA_Tooltip_ability_thtd_junko_02" "Shackle Sign「pure light」" + "DOTA_Tooltip_ability_thtd_junko_02_Description" "Pure fox transforms its resentment into an arrow of light, injure the target and add mental damage.\nDamage: energy point * star * 3. Mental injury: the highest superposition is to the 10 level." + "DOTA_Tooltip_ability_thtd_junko_02_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_junko_02_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_junko_02_Note2" "潜能Lv100:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_junko_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_junko_02_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_junko_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_junko_03" "Shackle Sign「Kill the meaning」" + "DOTA_Tooltip_ability_thtd_junko_03_Description" "Pure fox transforms the killing around it into pure power, causing damage to the target, and adds additional effects according to the number of wound layers of the target.\nStar related injury: energy point * star * 5. Additional effects: The number of wound layers increasing the damage of this skill by 10% per layer; the number of wound layers is equal to 10 layers, stunning target for 2 second; and the effect of the wound will be removed." + "DOTA_Tooltip_ability_thtd_junko_03_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_junko_03_power_suck" "吸收能量点:" + "DOTA_Tooltip_ability_thtd_junko_03_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_junko_03_buff" "「纯粹的疯狂」" + "DOTA_Tooltip_modifier_junko_03_buff_Description" "所有伤害提升,并吸收所有友方单位的基础能量。" + "DOTA_Tooltip_ability_thtd_junko_04" "「战栗的寒冷之星」" + "DOTA_Tooltip_ability_thtd_junko_04_Description" "纯狐造成一次范围伤害,受影响的目标会受到持续伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_junko_04_Note0" "潜能Lv10:初始伤害+10,持续伤害+2。" + "DOTA_Tooltip_ability_thtd_junko_04_Note1" "潜能Lv50:初始伤害+20,持续伤害+4。" + "DOTA_Tooltip_ability_thtd_junko_04_Note2" "潜能Lv100:初始伤害+30,持续伤害+6。" + "DOTA_Tooltip_ability_thtd_junko_04_Note3" "潜能Lv666:\n获得特殊效果:「用于杀人的纯粹弹幕」,所有技能伤害提高至4倍。" + "DOTA_Tooltip_ability_thtd_junko_04_Note4" "潜能Lv999:\n获得特殊效果:「原始的神灵界」,纯狐的能量和攻击提升400%%。" + "DOTA_Tooltip_ability_thtd_junko_04_power_damage1" "初始伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_junko_04_power_damage2" "持续伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_junko_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_junko_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_junko_04_range" "范围:" + "DOTA_Tooltip_modifier_junko_04_debuff" "「战栗的寒冷之星」" + "DOTA_Tooltip_modifier_junko_04_debuff_Description" "该单位正受到持续伤害。" + "DOTA_Tooltip_ability_item_0074" "【SSR】Hecatia Lapislazuli" + "DOTA_Tooltip_ability_item_0074_Lore" "There is resentment against Chang\'e because the husband of Chang\'e is the one who shot down the sun (Apollo)." + "DOTA_Tooltip_ability_item_0074_Description" "The mysterious spirit of the moon, the earth and the outer boundary. She has the body in three worlds at the same time, and can freely come and go in different worlds. By the way, dreams are equivalent to different worlds." + "hecatia" "Hecatia Lapislazuli" + "DOTA_Tooltip_ability_thtd_hecatia_01" "earth" + "DOTA_Tooltip_ability_thtd_hecatia_01_Description" "Hcartiya releases the sphere representing the earth floating around, and the body transforms every second.\nThe ball hits the enemy to launch the following effects according to its own form. If the form is Earth, the first effect will be launched, otherwise the second effect will be launched.\n1. foul play: damage to target and wound for 1 second, damage: energy * star *2. Each enemy can only be hit in 2 seconds, range: 350.\n2. Rainfall in Hell: Each rainfall will damage the target, range: 500, damage: energy * STAR * 3." + "DOTA_Tooltip_ability_thtd_hecatia_01_power_damage1" "邪秽缠身伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_01_range1" "邪秽缠身作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_01_root_time" "邪秽缠身缠绕时间:" + "DOTA_Tooltip_ability_thtd_hecatia_01_lock_time" "缠绕后免疫时间:" + "DOTA_Tooltip_ability_thtd_hecatia_01_power_damage2" "地狱的降雨伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_01_range2" "地狱的降雨作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_01_power_up" "%能量提高:" + "DOTA_Tooltip_ability_thtd_hecatia_02" "Moon" + "DOTA_Tooltip_ability_thtd_hecatia_02_Description" "Hcartiya releases the sphere that represents the moon floating around, and the body transforms every second.\n\nWhen the ball collides with the enemy, it launches the following effects according to its own form. If the form is the moon, it launches the first effect, otherwise the second effect.\n1. Apollo mirror: from the body to the moon, reflecting to the surrounding units, damage: energy * STAR * 4.5, range: 350.\n2. month frenzy impact: each hit the enemy will cause damage and repulse, damage: energy * star *4.5. Each enemy can only be hit in 2 seconds, range: 250" + "DOTA_Tooltip_ability_thtd_hecatia_02_power_damage1" "月狂冲击伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_02_range1" "月狂冲击作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_02_back_distance" "月狂冲击击退距离:" + "DOTA_Tooltip_ability_thtd_hecatia_02_lock_time" "击退后免疫时间:" + "DOTA_Tooltip_ability_thtd_hecatia_02_power_damage2" "阿波罗反射镜伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_02_range2" "阿波罗反射镜作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_02_chance" "%暴击概率提高:" + "DOTA_Tooltip_ability_thtd_hecatia_02_crit" "%暴击伤害提高:" + "DOTA_Tooltip_ability_thtd_hecatia_03" "Alien border" + "DOTA_Tooltip_ability_thtd_hecatia_03_Description" "Hcartiya releases the sphere that represents the other side floating around, and the body transforms every second.\n\nThe ball hits the enemy to launch the following effects according to its own form. If the form is different, the first effect will be launched, otherwise the second effect will be launched.\n1. Dusk and dusk: leaving fog, causing sustained damage and attracting targets, damage: energy * star, activation range: 350, attraction range: 500, duration: 3 seconds.\n2. the non ideal barrage of Hell: Launch 12 barrage, damage: energy * star *3, range: 350." + "DOTA_Tooltip_ability_thtd_hecatia_03_power_damage1" "黄昏薄暮伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_03_active_range" "黄昏薄暮激活范围:" + "DOTA_Tooltip_ability_thtd_hecatia_03_full_range" "黄昏薄暮作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_03_suck_duration" "吸引持续时间:" + "DOTA_Tooltip_ability_thtd_hecatia_03_power_damage2" "地狱的非理想弹幕伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_03_range2" "地狱的非理想弹幕作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_03_damage_up" "%伤害提高:" + "DOTA_Tooltip_modifier_thtd_hecatia_03_combo_buff" "【组合提升 - 纯狐】" + "DOTA_Tooltip_modifier_thtd_hecatia_03_combo_buff_Description" "组合提升已生效。" + "DOTA_Tooltip_ability_thtd_hecatia_04" "Three-in-one" + "DOTA_Tooltip_ability_thtd_hecatia_04_Description" "Hcartiya manipulated three spheres to launch the trinity of Rhapsody.\n\nOntology will constantly change shape. When the shape sphere hits the target release skill, it will produce a triangle. When it forms three triangles, it will link three triangles and use laser to scan the surrounding units.\nDamage: energy * star *5, lasts 5 seconds." + "DOTA_Tooltip_ability_thtd_hecatia_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note2" "潜能Lv100:技能伤害+15,各形态至少6秒覆盖一次。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note3" "潜能Lv666:\n获得特殊效果:「纯粹与不纯的弹幕」,各球提高暴击/能量/伤害效果提升至3倍。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note4" "潜能Lv999:\n获得特殊效果:「Trinitarian Rhapsody」,发动三位一体扫射时基础能量+900。" + "DOTA_Tooltip_ability_thtd_hecatia_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_hecatia_04_power_bonus" "能量增加:" + "DOTA_Tooltip_modifier_hecatia_01_earth_lock" "邪秽缠身" + "DOTA_Tooltip_modifier_hecatia_01_earth_lock_Description" "该单位已经触发过邪秽缠身效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_hecatia_01_moon_lock" "月狂冲击" + "DOTA_Tooltip_modifier_hecatia_01_moon_lock_Description" "该单位已经触发过月狂冲击效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_hourainingyou_01_stun_lock" "重击" + "DOTA_Tooltip_modifier_hourainingyou_01_stun_lock_Description" "该单位已经触发过重击效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_keine_01_lock" "野符「GHQ的危机」" + "DOTA_Tooltip_modifier_keine_01_lock_Description" "该单位已经触发过「GHQ的危机」效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_futo_01_lock" "投皿「物部氏的八十平瓮」" + "DOTA_Tooltip_modifier_futo_01_lock_Description" "该单位已经触发过「物部氏的八十平瓮」晕眩效果,暂时无法再次触发该效果" + "shinki" "Shinki" + "DOTA_Tooltip_ability_item_0080" "[SSR]Shinki" + "DOTA_Tooltip_ability_item_0080_Description" "Shinki is the creator of Makai.Shinki has light-blue eyes with white hair and wears red robes. \nShe\'s able to summon six white wings, which can turn purple with red markings. " + "DOTA_Tooltip_ability_thtd_shinki_01" "「Makai gate」" + "DOTA_Tooltip_ability_thtd_shinki_01_Description" "At the end of each round,Randomly Summon X shikigami card(The shikigami card maybe not be in your card pool)And the consumption of this type of shikigami card will not return to the card pool(X=star level)\n1X:100%%Summon 1 N card\n2X:100%% 2 N cards\n3X:80%%Summon N card,20%%Summon R card,A total of 3\n4X:80%%Summon R cards,20%%Summon SR cards,5%%Summon SSR cards,A total of 1. 80%%Summon N card,20%%Summon R cards,A total of 3.\n5X:80%Summon R cards,20%%Summon SR cards,5%%Summon SSR,A total of 5." + "DOTA_Tooltip_ability_thtd_shinki_01_Note0" "魔界式神包括:神绮、爱丽丝、小恶魔、魅魔。" + "DOTA_Tooltip_ability_thtd_shinki_01_kill_bonus" "击杀获得能量:" + "DOTA_Tooltip_ability_thtd_shinki_01_max_count" "最大叠加次数:" + "DOTA_Tooltip_modifier_shinki_01_buff_kill" "「魔神降临」" + "DOTA_Tooltip_modifier_shinki_01_buff_kill_Description" "击杀目标时获得能量提升。" + "DOTA_Tooltip_ability_thtd_shinki_02" "「Enze earth」" + "DOTA_Tooltip_ability_thtd_shinki_02_Description" "When per unit upgrade around 2000 yards ,Then the unit gets(Shinki star level*1)extra power points." + "DOTA_Tooltip_ability_thtd_shinki_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_shinki_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shinki_02_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_shinki_03" "「魔神降临」" + "DOTA_Tooltip_ability_thtd_shinki_03_Description" "唤起本源的力量,获得额外的能量。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_shinki_03_power_bonus" "能量增加:" + "DOTA_Tooltip_ability_thtd_shinki_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shinki_03_Note0" "潜能Lv10:能量增加+200,持续+1秒。" + "DOTA_Tooltip_ability_thtd_shinki_03_Note1" "潜能Lv50:能量增加+400,持续+2秒。" + "DOTA_Tooltip_ability_thtd_shinki_03_Note2" "潜能Lv100:能量增加+600,持续+3秒。" + "DOTA_Tooltip_modifier_shinki_03_buff_self" "「魔神降临」" + "DOTA_Tooltip_modifier_shinki_03_buff_self_Description" "唤起本源的力量,获得额外的能量提升。" + "DOTA_Tooltip_ability_thtd_shinki_04" "「Return of the devil」" + "DOTA_Tooltip_ability_thtd_shinki_04_Description" "Goddess summons the Devil King as the Lord of the Devil World, so that the great Devil King lost in time and space can return. The great Devil King\'s attack power is a star-rated energy of the Devil King.\nThe great devil has three skills:\nDevouring: Devouring an enemy every 30 seconds and growing up. Each 5%% increase in attack requires digestion before it can devour the next one. When the enemy is digested, it suffers pure damage with the same attack power per second. When the size grows to the extreme, it does not grow.\nStrike: The Devil\'s attack has a 50%% chance of stunning an enemy 300 yards around the target and causing 5 times the pure damage of a normal attack.\nWrath: The Great Devil gets angry and slams the ground, causing a wide range of shocks, hitting the affected enemy hard and slowing down by 60%%, causing pure damage in double attacks.\nAt the same time, there is only one big devil." + "DOTA_Tooltip_ability_thtd_shinki_04_Note0" "潜能Lv10:大魔王获得1层狂热效果。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note1" "潜能Lv50:大魔王获得2层狂热效果。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note2" "潜能Lv100:大魔王获得3层狂热效果。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note3" "潜能Lv666:\n获得特殊效果:混乱冲击,魔王震荡波持续不断,伤害提高4倍。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note4" "潜能Lv999:\n获得特殊效果:究极魔王,成长上限提高至极限。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note5" "\n狂热:攻击力+200,攻速+40。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note6" "\n激活潜能后需要插拔重新召唤一次才能获得狂热效果。" + "shinki_dragon" "SHINKI_DRAGON" + "shinki_dragon_casted" "只能存在一个大魔王" + "DOTA_Tooltip_ability_shinki_dragon_01" "吞噬" + "DOTA_Tooltip_ability_shinki_dragon_01_Description" "吞噬一个敌人供自己成长,每次成长提升%damage_up%%%基础攻击力。\n需要消化完毕后才能吞噬下一个敌人,当体型成长到极致后不再成长。\n在跳关时会按所跳波数每波2次吞噬补全至下一次吞噬中(必须在施放跳关后至该波结束前吞噬一次)。" + "DOTA_Tooltip_ability_shinki_dragon_01_Note0" "" + "DOTA_Tooltip_ability_shinki_dragon_01_damage_up" "%成长提升攻击力:" + "DOTA_Tooltip_ability_shinki_dragon_01_max_count" "最大成长次数:" + "DOTA_Tooltip_modifier_shinki_dragon_01_buff" "成长" + "DOTA_Tooltip_modifier_shinki_dragon_01_buff_Description" "大魔王吞噬一个敌人供自己成长,每次成长提升基础攻击力" + "DOTA_Tooltip_ability_shinki_dragon_02" "重击" + "DOTA_Tooltip_ability_shinki_dragon_02_Description" "大魔王的攻击有概率对目标造成%damage_crit%倍攻击伤害,并击晕和伤害目标周围的敌人。" + "DOTA_Tooltip_ability_shinki_dragon_02_Note0" "击晕有1秒内置CD。" + "DOTA_Tooltip_ability_shinki_dragon_02_chance" "%概率:" + "DOTA_Tooltip_ability_shinki_dragon_02_damage_crit" "伤害倍数:" + "DOTA_Tooltip_ability_shinki_dragon_02_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_shinki_dragon_02_range" "击晕范围:" + "DOTA_Tooltip_ability_shinki_dragon_02_aoe_crit" "范围伤害倍数:" + "DOTA_Tooltip_ability_shinki_dragon_03" "震荡波" + "DOTA_Tooltip_ability_shinki_dragon_03_Description" "大魔王发怒,猛击地面造成一个大范围的震荡波,造成%damage_times%倍攻击伤害并减速%movement_slow%%%。" + "DOTA_Tooltip_ability_shinki_dragon_03_shock_radius" "范围:" + "DOTA_Tooltip_ability_shinki_dragon_03_movement_slow" "%移速降低:" + "DOTA_Tooltip_ability_shinki_dragon_03_debuff_duration" "持续时间:" + "DOTA_Tooltip_ability_shinki_dragon_03_damage_times" "伤害倍数:" + "DOTA_Tooltip_modifier_earthshock_debuff_datadriven" "shockwave" + "DOTA_Tooltip_modifier_earthshock_debuff_datadriven_Description" "Affected by the shock wave of the devil, the speed is reduced." + "DOTA_Tooltip_ability_item_0059" "【SR】Alice Margatroid" + "DOTA_Tooltip_ability_item_0059_Lore" "As a collector, he often meets magic, and the relationship between the two is incompatible with fire and water." + "DOTA_Tooltip_ability_item_0059_Description" "Alice Margaret Loyd is a magical manipulator who can manipulate dolls with magic and make them vivid and artistic. Alice is also a collector. He has a hobby of collecting magic books and other things." + "alice" "Alice Margatroid" + "alice_falanxi_ningyou" "ALICE_FALANXI_NINGYOU" + "DOTA_Tooltip_ability_thtd_alice_01" "Magic operation 「puppet ambush」" + "DOTA_Tooltip_ability_thtd_alice_01_Description" "Alice placed a doll in a fixed place. The doll remained in a latent state. When the target approached, the doll exploded, causing range damage and increasing subsequent damage to the target for 2 minutes.\n\nStar related injury: energy * star *5\nDamage increased: 3%% 6%% 9%% 12%% 18%%\nDuration: 3 seconds.\nDetonation range: 150, damage range: 300" + "DOTA_Tooltip_ability_thtd_alice_01_power_damage" "最小技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_alice_01_range1" "引爆范围:" + "DOTA_Tooltip_ability_thtd_alice_01_range2" "伤害范围:" + "DOTA_Tooltip_ability_thtd_alice_01_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_alice_01_duration_time" "人偶持续时间:" + "DOTA_Tooltip_modifier_alice_power666" "狡猾的献祭" + "DOTA_Tooltip_modifier_alice_power666_Description" "人偶爆炸后形成了献祭效果,所有伤害提高。" + "DOTA_Tooltip_ability_thtd_alice_02" "Curse the 「Falanxi Doll」" + "DOTA_Tooltip_ability_thtd_alice_02_Description" "Alice calls on elaborate dolls to fight instead of herself, and observes the command in the rear." + "DOTA_Tooltip_ability_thtd_alice_02_power_up" "%基础能量提升:" + "DOTA_Tooltip_ability_thtd_alice_02_Note0" "潜能Lv10:法兰西人偶攻击+200,攻速+40。" + "DOTA_Tooltip_ability_thtd_alice_02_Note1" "潜能Lv50:法兰西人偶攻击+400,攻速+80。" + "DOTA_Tooltip_ability_thtd_alice_02_Note2" "潜能Lv100:法兰西人偶攻击+600,攻速+120。" + "DOTA_Tooltip_ability_thtd_alice_02_Note3" "激活潜能后需要重新召唤一次才生效。" + "DOTA_Tooltip_ability_thtd_alice_03" "War symbol 「small military force」" + "DOTA_Tooltip_ability_thtd_alice_03_Description" "Alice placed the doll in front of her to protect herself closely, and sent a laser across the front, causing a lot of damage.\n[star correlation] damage: energy * star *7, times: 10" + "DOTA_Tooltip_ability_thtd_alice_03_Note0" "潜能Lv10:技能伤害提升100%%。" + "DOTA_Tooltip_ability_thtd_alice_03_Note1" "潜能Lv50:技能伤害提升200%%。" + "DOTA_Tooltip_ability_thtd_alice_03_Note2" "潜能Lv100:技能伤害提升400%%。" + "DOTA_Tooltip_ability_thtd_alice_03_Note3" "潜能Lv666:\n获得特殊效果:狡猾的献祭,人偶爆炸后形成献祭效果,所有伤害提高至3倍。" + "DOTA_Tooltip_ability_thtd_alice_03_Note4" "潜能Lv999:\n获得特殊效果:惨虐之光,激光伤害提升至5倍。" + "DOTA_Tooltip_ability_thtd_alice_03_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_alice_03_max_count" "发射次数:" + "DOTA_Tooltip_ability_thtd_alice_03_damage_up" "人偶伤害提升倍数:" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01" "重击" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01_Description" "攻击对目标周围所有单位造成伤害。" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01_power_damage" "技能伤害(爱丽丝的能量点*星级):" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02" "致命一击" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02_Description" "攻击有概率发起致命一击,造成%health%%%的最大生命值伤害。" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02_crit_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02_health" "%生命值伤害:" + "DOTA_Tooltip_ability_thtd_alice_04" "AI定点施放" + "DOTA_Tooltip_ability_thtd_alice_04_Description" "选择一个地点来设定AI定点施放:魔操「人偶伏兵」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "kokoro" "秦心" + "DOTA_Tooltip_ability_item_0053" "【SR】秦心" + "DOTA_Tooltip_ability_item_0053_Lore" "猿乐之祖秦河胜使用的面具历经漫长的时间后化作的妖怪" + "DOTA_Tooltip_ability_item_0053_Description" "表情丰富的扑克脸,每个面具都代表固定的感情,戴上面具后感情就会变化,感情也会影响到在附近的人。" + "DOTA_Tooltip_ability_thtd_kokoro_01" "凭依「喜怒哀乐附体」" + "DOTA_Tooltip_ability_thtd_kokoro_01_Description" "秦心操纵感情的力量,将喜怒哀乐化成面具攻击目标,并降低目标基础护甲和持续造成伤害。\n【星级相关】伤害: 能量*星级*5 每秒\n【星级相关】护甲降低:10 20 30 40 60 (与水银之毒不叠加)" + "DOTA_Tooltip_ability_thtd_kokoro_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kokoro_02" "怒面「吼怒的妖狐面」" + "DOTA_Tooltip_ability_thtd_kokoro_02_Description" "戴上狐面,将面具化成灵气变成狐狸扑向目标并咬住目标,造成伤害并晕眩目标1.5秒。\n【星级相关】伤害: 能量*星级*5。" + "DOTA_Tooltip_ability_thtd_kokoro_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kokoro_02_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_kokoro_03" "喜符「狂喜的火男面」" + "DOTA_Tooltip_ability_thtd_kokoro_03_Description" "戴上火男面具,从面具和心洋溢出来的喜悦的感情撒向周围,提升物理伤害。\n【星级相关】物理伤害提升: 30%%" + "DOTA_Tooltip_ability_thtd_kokoro_03_crit_mult" "伤害倍数:" + "DOTA_Tooltip_ability_thtd_kokoro_04" "特技「表情丰富的扑克脸」" + "DOTA_Tooltip_ability_thtd_kokoro_04_Description" "她能将感情车转轮换,但是自身却始终是面无表情。使用技能后心会释放「喜」「忧」「怒」三种感情,在这些感情有效的期间增强对应的技能。\n「喜」: 狂喜的火男面效果提高50%%。\n「忧」: 喜怒哀乐伤害提高50%%。\n「怒」: 吼怒的妖狐面冷却加快50%%。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note0" "潜能Lv10:每个面具提升1%%伤害。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note1" "潜能Lv50:每个面具提升5%%伤害。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note2" "潜能Lv100:每个面具提升10%%伤害。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note3" "潜能Lv666:\n获得特殊效果:「喜怒哀乐附体」,每种感情对应的增强效果提高至4倍。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note4" "潜能Lv999:\n获得特殊效果:「暗黑能乐」,获得999点能量和攻击力,还会基于周围目标损失生命值来提升自己的能量点和攻击力(每损失1%%生命值获得1点)。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note5" "\n秦心总共有66个面具。" + "DOTA_Tooltip_modifier_kokoro_04_buff_1" "「忧」" + "DOTA_Tooltip_modifier_kokoro_04_buff_1_Description" "喜怒哀乐附体附加了减速" + "DOTA_Tooltip_modifier_kokoro_04_buff_2" "「怒」" + "DOTA_Tooltip_modifier_kokoro_04_buff_2_Description" "吼怒的妖狐面效果提高了" + "DOTA_Tooltip_modifier_kokoro_04_buff_3" "「喜」" + "DOTA_Tooltip_modifier_kokoro_04_buff_3_Description" "狂喜的火男面效果提高了" + "hina" "键山雏" + "DOTA_Tooltip_ability_item_0091" "【R】键山雏" + "DOTA_Tooltip_ability_item_0091_Lore" "收集厄运,是因为厄运可以成为她的力量。厄运的负面能量本身是使她行动的原动力。疫病神虽然名字里有个神字,但却不追求信仰。她并非普通的神明,而是妖怪的一种。" + "DOTA_Tooltip_ability_item_0091_Description" "收集厄运的神明,但她本人却完全没有恶意,倒不如说她是个待人友好的神明,收集厄运的本意也只是为了不让厄运转移到人类身上。" + "DOTA_Tooltip_ability_thtd_hina_01" "创符「痛苦之流」" + "DOTA_Tooltip_ability_thtd_hina_01_Description" "降低周围单位的移速。\n【星级相关】移速减少:20/30/40/50/65%%" + "DOTA_Tooltip_ability_thtd_hina_01_move_slow" "移速降低:" + "DOTA_Tooltip_modifier_hina_01_slow_debuff" "创符「痛苦之流」" + "DOTA_Tooltip_modifier_hina_01_slow_debuff_Description" "该单位受到键山雏「痛苦之流」影响" + "DOTA_Tooltip_ability_thtd_hina_02" "厄符「厄运」" + "DOTA_Tooltip_ability_thtd_hina_02_Description" "对「痛苦之流」影响的单位施加厄运,每4秒造成伤害,目标在受到纯粹伤害时会附加额外伤害:当超过伤害来源的星级*能量*4时,附加星级*能量*4的伤害,低于时40%%概率伤害提高40%%。\n【星级相关】伤害: 能量*星级*4" + "DOTA_Tooltip_ability_thtd_hina_02_Note0" "厄运会叠加,最大叠加999次。\n" + "DOTA_Tooltip_ability_thtd_hina_02_Note1" "潜能Lv10:概率和伤害+7%%。" + "DOTA_Tooltip_ability_thtd_hina_02_Note2" "潜能Lv50:概率和伤害+15%%。" + "DOTA_Tooltip_ability_thtd_hina_02_Note3" "潜能Lv100:概率和伤害+30%%。" + "DOTA_Tooltip_ability_thtd_hina_02_Note4" "潜能Lv666:\n获得特殊效果:创符「痛苦之流」,技能伤害提升4倍。" + "DOTA_Tooltip_ability_thtd_hina_02_Note5" "潜能Lv999:\n获得特殊效果:悲运「大钟婆之火」,每个单位还会受到附近单位40%%厄运影响。" + "DOTA_Tooltip_ability_thtd_hina_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hina_02_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_hina_02_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_hina_02_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_hina_02_chance" "%伤害提升概率:" + "DOTA_Tooltip_ability_thtd_hina_02_bonus_crit" "%叠加厄运增加伤害:" + "DOTA_Tooltip_ability_thtd_hina_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_hina_03_Description" "选择一个地点来设定AI定点施放:恶灵「厄运之轮」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_modifier_touhoutd_luck" "幸运日" + "DOTA_Tooltip_modifier_touhoutd_luck_Description" "今天捡到四叶草,全身充满正能量!每层提高1%%的伤害输出!" + "DOTA_Tooltip_modifier_touhoutd_poison" "「毒」" + "DOTA_Tooltip_modifier_touhoutd_poison_Description" "该单位已经中毒!" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_pure" "纯粹输出提高" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_pure_Description" "该单位造成的纯粹伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_physical" "物理输出提高" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_physical_Description" "该单位造成的物理伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_magical" "魔法输出提高" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_magical_Description" "该单位造成的魔法伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_pure" "受到纯粹伤害提高" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_pure_Description" "受到的纯粹伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_physical" "受到物理伤害提高" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_physical_Description" "受到的物理伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_magical" "受到魔法伤害提高" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_magical_Description" "受到的魔法伤害提高,每层1%%。" + "random_boss_has_buff" "注意,异变BOSS获得特殊能力:" + "DOTA_Tooltip_modifier_bosses_random_resist_aura" "「无常」" + "DOTA_Tooltip_modifier_bosses_random_resist_aura_Description" "使周围500码范围单位获得无常效果,减少25%%硬控时间。" + "DOTA_Tooltip_modifier_bosses_random_resist_effect" "「无常」" + "DOTA_Tooltip_modifier_bosses_random_resist_effect_Description" "获得「无常」效果,减少25%%硬控时间(对大部分技能有效)。" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_aura" "「震荡」" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_aura_Description" "对周围1200码范围施加「震荡」效果,降低50%%攻速。" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_effect" "「震荡」" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_effect_Description" "受到「震荡」效果影响,攻速降低了(每层降低1攻速)。" + "DOTA_Tooltip_modifier_bosses_random_move_aura" "「疾速」" + "DOTA_Tooltip_modifier_bosses_random_move_aura_Description" "使周围500码范围单位获得疾速效果,提高25%%移动速度。" + "DOTA_Tooltip_modifier_bosses_random_move_effect" "「疾速」" + "DOTA_Tooltip_modifier_bosses_random_move_effect_Description" "获得「疾速」效果,提高25%%移动速度。" + "DOTA_Tooltip_modifier_bosses_random_health_aura" "「坚韧」" + "DOTA_Tooltip_modifier_bosses_random_health_aura_Description" "使周围500码范围单位获得坚韧效果,增加25%%生命值。" + "DOTA_Tooltip_modifier_bosses_random_health_effect" "「坚韧」" + "DOTA_Tooltip_modifier_bosses_random_health_effect_Description" "获得「坚韧」效果,增加25%%生命值。" + "DOTA_Tooltip_modifier_bosses_random_dead_heal" "「血池」" + "DOTA_Tooltip_modifier_bosses_random_dead_heal_Description" "死亡时形成一个300码范围的血池,治疗站在其中的单位,每秒回复5%%的最大生命值,持续5秒。" + "DOTA_Tooltip_modifier_bosses_random_aura_dark" "「黑暗光环」" + "DOTA_Tooltip_modifier_bosses_random_aura_dark_Description" "周围1200码范围单位的能量、攻击和暴击降低25%%。" + "DOTA_Tooltip_modifier_bosses_random_aura_dark_effect" "「黑暗」" + "DOTA_Tooltip_modifier_bosses_random_aura_dark_effect_Description" "受到黑暗光环影响,能量和攻击力性降低了。" + "DOTA_Tooltip_modifier_touhoutd_unlimited_resist" "少女之抵抗" + "DOTA_Tooltip_modifier_touhoutd_unlimited_resist_Description" "受到伤害后会吸收伤害,每层吸收1%%的伤害。" + "kagerou" "今泉影狼" + "DOTA_Tooltip_ability_item_0045" "【SR】今泉影狼" + "DOTA_Tooltip_ability_item_0045_Lore" "因为比较在意满月之夜的时候全身体毛会变多,所以平常都遮住皮肤,一个人静静的生活。" + "DOTA_Tooltip_ability_item_0045_Description" "她是在外面的世界已经绝种的日本狼的狼女。有着狼的特征,会在满月变成狼,毛发会变多,但是依旧能保持理智。\n因为她自己比较在意体毛变多这件事,平常都是遮住皮肤,独自生活在迷途竹林里。\n因为被万宝槌的魔力所影响,正当她变得凶暴之时就被灵梦等人狠狠的教训了一顿。如今又再度变得温顺了。\n【★】特质「奔狼之血」\n【★】爪符「刚猛利爪」\n【★】咆哮「陌生的咆哮」\n【★★★】变身「星形齿」" + "DOTA_Tooltip_ability_thtd_kagerou_01" "link_DOTA_Tooltip_ability_sven_great_cleave" + "DOTA_Tooltip_ability_thtd_kagerou_01_Description" "影狼以利爪攻击,造成分裂攻击伤害。" + "DOTA_Tooltip_ability_thtd_kagerou_01_Lore" "影狼有着锋利的利爪,横扫前面敌人。" + "DOTA_Tooltip_ability_thtd_kagerou_01_Note0" "分裂伤害会计算护甲。" + "DOTA_Tooltip_ability_thtd_kagerou_01_Note1" "变身后的致命一击对分裂伤害有效。" + "DOTA_Tooltip_ability_thtd_kagerou_01_range" "分裂范围:" + "DOTA_Tooltip_ability_thtd_kagerou_01_percent" "%分裂伤害:" + "DOTA_Tooltip_ability_thtd_kagerou_02" "link_DOTA_Tooltip_ability_lycan_howl" + "DOTA_Tooltip_ability_thtd_kagerou_02_Lore" "毛骨悚然的狼嚎让敌人明白影狼就在它们之中。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Description" "影狼将能量转化为攻击力,每点能量增加%bonus_attack%点攻击力,并提升攻击速度。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Note0" "潜能Lv10:每点能量增加攻击力+2。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Note1" "潜能Lv50:每点能量增加攻击力+5。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Note2" "潜能Lv100:每点能量增加攻击力+10。" + "DOTA_Tooltip_ability_thtd_kagerou_02_bonus_attack" "每点能量增加攻击力:" + "DOTA_Tooltip_ability_thtd_kagerou_02_attack_speed" "攻击速度增加:" + "DOTA_Tooltip_ability_thtd_kagerou_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_kagerou_02_buff" "咆哮「陌生的咆哮」" + "DOTA_Tooltip_modifier_kagerou_02_buff_Description" "将能量转化为攻击力,并增加攻击速度。" + "DOTA_Tooltip_ability_thtd_kagerou_03" "link_DOTA_Tooltip_ability_lycan_shapeshift" + "DOTA_Tooltip_ability_thtd_kagerou_03_Lore" "影狼接受了永恒的狼人诅咒,拥抱了她的野性。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Description" "影狼展现出她的凶狼形态,攻击力增加%attack_up%%%,并获得致命一击的能力。每次攻击有%crit_chance%%%的概率造成%crit_damage%%%的致命一击伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note0" "潜能Lv10:攻击力增加+100%%,变身持续时间+2秒,概率+10%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note1" "潜能Lv50:攻击力增加+200%%,变身持续时间+4秒,概率+20%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note2" "潜能Lv100:攻击力增加+400%%,变身持续时间+8秒,概率+30%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note3" "潜能Lv666:\n获得特殊效果:满月咆哮,每点能量增加攻击力+30。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note4" "潜能Lv999:\n获得特殊效果:三角齿,致命一击伤害+500%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_attack_up" "%攻击力增加:" + "DOTA_Tooltip_ability_thtd_kagerou_03_crit_chance" "%致命一击概率:" + "DOTA_Tooltip_ability_thtd_kagerou_03_crit_damage" "%致命一击伤害:" + "DOTA_Tooltip_ability_thtd_kagerou_03_duration_time" "变身持续时间:" + "wriggle" "莉格露·奈特巴格" + "DOTA_Tooltip_ability_item_0060" "【R】莉格露·奈特巴格" + "DOTA_Tooltip_ability_item_0060_Lore" "当发现莉格露身边没有虫子并且看起来很有自信的话,那时是最危险的。说不定在她的身边,已集满了恙虫。" + "DOTA_Tooltip_ability_item_0060_Description" "莉格露被称为虫之妖怪,更准确的说法是萤火虫妖怪。她伴随着大群昆虫出现,让昆虫自由地活动。\n她身边总是围绕着很多虫子。大量集结的萤火虫之所以能分秒不差,整齐地同时闪烁,正是因为当中存在着她这样的命令中枢。不要以为只是藐小的虫子而已,一旦被大量的虫子袭击绝不会好受。特别于她发怒而使出真正实力的时候,召唤出来的恙虫大军,可会令人高烧致死。\n【★】蠢符「小虫风暴」\n【★★★】萤符「地上的恒星」" + "DOTA_Tooltip_ability_thtd_wriggle_01" "link_DOTA_Tooltip_ability_death_prophet_exorcism" + "DOTA_Tooltip_ability_death_prophet_exorcism" "蠢符「小虫风暴」" + "DOTA_Tooltip_ability_death_prophet_exorcism_Lore" "莉格露身边总是围绕着很多虫子听从号令。" + "DOTA_Tooltip_ability_death_prophet_exorcism_Description" "莉格露释放虫群攻击敌人。" + "DOTA_Tooltip_ability_death_prophet_exorcism_Note0" "作用范围代表莉格露周围的虫群寻找目标的范围。" + "DOTA_Tooltip_ability_death_prophet_exorcism_Note1" "虫群的伤害为物理技能伤害。" + "DOTA_Tooltip_ability_death_prophet_exorcism_radius" "作用范围:" + "DOTA_Tooltip_ability_death_prophet_exorcism_spirits" "虫群数量:" + "DOTA_Tooltip_ability_death_prophet_exorcism_heal_percent" "伤害(莉格露的能量点*星级):" + "DOTA_Tooltip_ability_death_prophet_exorcism_average_damage" "虫群移动速度:" + "DOTA_Tooltip_modifier_death_prophet_exorcism" "蠢符「小虫风暴」" + "DOTA_Tooltip_modifier_death_prophet_exorcism_description" "\?" + "DOTA_Tooltip_ability_thtd_wriggle_02" "link_DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp" + "DOTA_Tooltip_ability_thtd_wriggle_02_Description" "在目标区域大量集结大个头的源氏萤火虫,施放强光,交替闪亮和熄灭。闪亮时将使附近所有敌人被蛊惑,强制凝视并向萤火虫群加速移动。\n支持AI定点施放。\n支持AI自动错开施放。" + "DOTA_Tooltip_ability_thtd_wriggle_02_Note0" "对击退、迷失等失控状态的单位无效" + "DOTA_Tooltip_ability_thtd_wriggle_02_Note1" "3次时控制总时间为4.0秒" + "DOTA_Tooltip_ability_thtd_wriggle_02_range" "作用范围:" + "DOTA_Tooltip_ability_thtd_wriggle_02_max_count" "闪亮次数:" + "DOTA_Tooltip_ability_thtd_wriggle_02_on_time" "闪亮持续时间:" + "DOTA_Tooltip_ability_thtd_wriggle_02_off_time" "熄灭持续时间:" + "DOTA_Tooltip_ability_thtd_wriggle_02_move_speed" "%被蛊惑时移速增加:" + "DOTA_Tooltip_ability_thtd_wriggle_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_wriggle_03_Description" "选择一个地点来设定AI定点施放:萤符「地上的恒星」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "inaba" "因幡帝" + "DOTA_Tooltip_ability_item_0062" "【R】因幡帝" + "DOTA_Tooltip_ability_item_0062_Lore" "于竹林里迷路的人,偶然会看到她的身影。据说只要见到她就必定能够找到出路,所以人们都将她看成是竹林的引路人。" + "DOTA_Tooltip_ability_item_0062_Description" "她懂人话,而且能变成人的样子。虽说是妖怪兔,但她别名是幸运的白兔,据说见到她的人能得到幸运。不过她常常在迷失竹林,而且身法敏捷,可不容易看得到。\n性格喜欢捉弄人,受惊吓会立刻逃跑,很狡猾。喜怒哀乐鲜明,和妖精性情相似。\n【★】爆头「幸运之击」\n【★】兔符「开运大纹」" + "DOTA_Tooltip_ability_thtd_inaba_01" "link_DOTA_Tooltip_ability_sniper_headshot" + "DOTA_Tooltip_ability_thtd_inaba_01_Description" "将运气带给一个友方单位,增加其暴击概率和攻击速度,并降低魔法消耗。" + "DOTA_Tooltip_ability_thtd_inaba_01_Lore" "幸运的白兔,据说见到她的人能得到幸运。" + "DOTA_Tooltip_ability_thtd_inaba_01_Note0" "魔法消耗效果对莉莉白和大妖精无效。" + "DOTA_Tooltip_ability_thtd_inaba_01_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_inaba_01_chance" "%暴击概率提升:" + "DOTA_Tooltip_ability_thtd_inaba_01_attack_speed" "攻击速度增加:" + "DOTA_Tooltip_ability_thtd_inaba_01_mana_cost" "%魔法消耗降低:" + "DOTA_Tooltip_modifier_inaba_01_buff" "兔符「开运大纹」" + "DOTA_Tooltip_modifier_inaba_01_buff_description" "提升了暴击概率和攻击速度,并且降低了技能魔法消耗。" + "DOTA_Tooltip_ability_thtd_inaba_02" "link_DOTA_Tooltip_ability_ogre_magi_bloodlust" + "DOTA_Tooltip_ability_thtd_inaba_02_Description" "每攻击%count1%次召唤一只白兔撞向目标位置后自爆,每攻击%count2%次发射竹林弹雨。\n每自爆一只白兔会使因幡帝的伤害提高%damage_up%%%,该效果在停止攻击时结束,可以线性叠加,最大%max_count%次。\n竹林弹雨造成持续伤害,持续%duration%秒。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note0" "潜能Lv10:白兔使因幡帝的伤害提高+5%%。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note1" "潜能Lv50:白兔使因幡帝的伤害提高+10%%。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note2" "潜能Lv100:白兔使因幡帝的伤害提高+20%%。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note3" "潜能Lv666:\n获得特殊效果:「幸运的因番」,提升300%%能量点。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note4" "潜能Lv999:\n获得特殊效果:「大穴牟迟大人的药」,白兔自爆效果叠加次数翻倍。" + "DOTA_Tooltip_ability_thtd_inaba_02_power_damage1" "自爆伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_inaba_02_power_damage2" "弹雨伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_inaba_02_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_inaba_02_count1" "召唤白兔攻击次数需求:" + "DOTA_Tooltip_ability_thtd_inaba_02_count2" "召唤弹雨攻击次数需求:" + "DOTA_Tooltip_ability_thtd_inaba_02_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_inaba_02_max_count" "最大叠加:" + "DOTA_Tooltip_ability_thtd_inaba_02_duration" "弹雨持续时间:" + "DOTA_Tooltip_modifier_inaba_02_buff" "兔符「因幡的白兔」" + "DOTA_Tooltip_modifier_inaba_02_buff_description" "白兔自爆使得因幡帝的伤害提高了。" + "kisume" "琪斯美" + "DOTA_Tooltip_ability_item_0063" "【R】琪斯美" + "DOTA_Tooltip_ability_item_0063_Lore" "妖怪的专家,八云紫女士这么说道,「恩——,这应该是地底的妖怪干的,它们的力量来自人类的负的能量,所以或许是想吓唬一下一点紧张感都没有的人类呐。」" + "DOTA_Tooltip_ability_item_0063_Description" "走在夜路上的时候突然从正上方掉落,撞在头顶上的恐怖妖怪。平常都呆在洞窟或者水井里。非常喜欢狭窄的地方所以一直都在桶里,是个内向的妖怪。\n【★】怪奇「钓瓶落之怪」\n【★★★】钓瓶「井下的毁灭者」" + "DOTA_Tooltip_ability_thtd_kisume_01" "怪奇「钓瓶落之怪」" + "DOTA_Tooltip_ability_thtd_kisume_01_Description" "琪斯美降下鬼火打击周围目标。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kisume_01_Note0" "潜能Lv10:鬼火伤害提升200%%。" + "DOTA_Tooltip_ability_thtd_kisume_01_Note1" "潜能Lv50:鬼火伤害提升400%%。" + "DOTA_Tooltip_ability_thtd_kisume_01_Note2" "潜能Lv100:鬼火伤害提升800%%。" + "DOTA_Tooltip_ability_thtd_kisume_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kisume_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_kisume_02" "钓瓶「井下的毁灭者」" + "DOTA_Tooltip_ability_thtd_kisume_02_Description" "琪斯美将深井的恐惧化为鬼爪抓住目标,使其失去行动能力并持续受到伤害,同时每%tick%秒额外造成%damage_hp%%%的当前生命值伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kisume_02_Note0" "潜能Lv10:额外伤害+4%%当前生命值。" + "DOTA_Tooltip_ability_thtd_kisume_02_Note1" "潜能Lv50:额外伤害+8%%当前生命值。" + "DOTA_Tooltip_ability_thtd_kisume_02_Note2" "潜能Lv100:额外伤害+12%%当前生命值,并额外作用附近的1个目标。" + "DOTA_Tooltip_ability_thtd_kisume_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kisume_02_damage_hp" "%额外伤害:" + "DOTA_Tooltip_ability_thtd_kisume_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_kisume_02_tick" "伤害间隔:" + "komachi" "小野塚小町" + "DOTA_Tooltip_ability_item_0068" "【SSR】小野塚小町" + "DOTA_Tooltip_ability_item_0068_Lore" "三途之河的宽度,会随着渡河的人的不同而变化。河面的宽度,由死神引渡前收取的摆渡钱的多寡决定,钱越多,距离越短。钱不是自己生前的财产,而是在人间衷心悼念死者的人的财产总合,死者都会为这个而惊讶吧。" + "DOTA_Tooltip_ability_item_0068_Description" "小野塚小町是担任三途之河的摆渡人一职的死神。小町手持一把极其巨大的镰刀,威严感十足。她喜欢找人聊天,说话语气中也透露着强烈的压迫感,渡河期间还是闭上嘴老老实实地忍着听她说话为好。\n【★】「死神的大镰」\n【★★★】「无间之道」\n【★★★★】恨符「充满留恋的紧缚灵」\n【★★★★★】死符「区别死者的镰刀」" + "DOTA_Tooltip_ability_thtd_komachi_01" "「死神的大镰」" + "DOTA_Tooltip_ability_thtd_komachi_01_Description" "将镰以圆弧状瞬间挥下,对附近敌人造成伤害,并且小町的暴击概率增加%chance%%%。\n攻击范围内每有一个目标损失生命值,则会增加小町的暴击伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_komachi_01_Note0" "潜能Lv10:技能伤害+2。" + "DOTA_Tooltip_ability_thtd_komachi_01_Note1" "潜能Lv50:技能伤害+4。" + "DOTA_Tooltip_ability_thtd_komachi_01_Note2" "潜能Lv100:技能伤害+6。" + "DOTA_Tooltip_ability_thtd_komachi_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_komachi_01_chance" "%暴击概率增加:" + "DOTA_Tooltip_ability_thtd_komachi_01_crit_bonus" "%每损失4%生命增加暴击伤害:" + "DOTA_Tooltip_ability_thtd_komachi_02" "「无间之道」" + "DOTA_Tooltip_ability_thtd_komachi_02_Description" "驱使操作距离的能力,将目标区域的距离变为零,范围的单位将会挤作一团。" + "DOTA_Tooltip_ability_thtd_komachi_02_Lore" "小町具有操纵距离的能力。" + "DOTA_Tooltip_ability_thtd_komachi_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_komachi_02_radius" "范围:" + "DOTA_Tooltip_ability_thtd_komachi_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_komachi_03" "恨符「充满留恋的紧缚灵」" + "DOTA_Tooltip_ability_thtd_komachi_03_Description" "在目标周围召唤出具有强力跟踪性能的恶灵。恶灵不会攻击,仅仅会跟踪并缠绕着敌人,缠绕期间使其受到的伤害提高。" + "DOTA_Tooltip_ability_thtd_komachi_03_max_count" "恶灵数量:" + "DOTA_Tooltip_ability_thtd_komachi_03_duration_time" "恶灵持续时间:" + "DOTA_Tooltip_ability_thtd_komachi_03_damage_up" "%目标受到伤害提高:" + "DOTA_Tooltip_modifier_komachi_03_debuff" "恨符「充满留恋的紧缚灵」" + "DOTA_Tooltip_modifier_komachi_03_debuff_Description" "被恶灵缠绕,受到的伤害提高。" + "DOTA_Tooltip_ability_thtd_komachi_04" "死符「区别死者的镰刀」" + "DOTA_Tooltip_ability_thtd_komachi_04_Description" "把目标作为索命对象,斩杀目标,如果生命值低于斩杀线则无视防御立即杀死目标,否则造成秒杀伤害。\n斩杀致死后获得魂之游戏效果,小町的攻击速度和造成的伤害提升。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note0" "被斩杀期间目标最终只能由小町击杀,优先级最高。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note1" "潜能Lv10:魂之游戏效果持续时间+2秒。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note2" "潜能Lv50:魂之游戏效果持续时间+4秒。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note3" "潜能Lv100:魂之游戏效果持续时间+6秒。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note4" "潜能Lv666:\n获得特殊效果:「超渡体验版」,斩杀线翻倍,魂之游戏效果翻倍。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note5" "潜能Lv999:\n获得特殊效果:「夺魂之镰」,爆击概率+40%%,斩杀致死后永久获得4点能量。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note6" "夺魂之镰效果在跳关时会按所跳波数每波2次斩杀补全至下一次斩杀中(必须在施放跳关后至该波结束前成功斩杀一次)。" + "DOTA_Tooltip_ability_thtd_komachi_04_hp_kill" "%生命值斩杀线:" + "DOTA_Tooltip_ability_thtd_komachi_04_attack_speed" "魂之游戏攻速提升:" + "DOTA_Tooltip_ability_thtd_komachi_04_damage_up" "%魂之游戏伤害提升:" + "DOTA_Tooltip_ability_thtd_komachi_04_duration_time" "魂之游戏持续时间:" + "DOTA_Tooltip_modifier_komachi_04_kill_power_bonus" "夺魂之镰" + "DOTA_Tooltip_modifier_komachi_04_kill_power_bonus_Description" "斩杀致死后永久获得能量。" + "DOTA_Tooltip_ability_thtd_komachi_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_komachi_05_Description" "选择一个地点来设定AI定点施放:「无间之道」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "clownpiece" "克劳恩皮丝" + "DOTA_Tooltip_ability_item_0075" "【SR】克劳恩皮丝" + "DOTA_Tooltip_ability_item_0075_Lore" "「只要你们一直在这里玩下去,月之民就无法动手。」听到这样的话语,她开始盛大地玩耍起来。" + "DOTA_Tooltip_ability_item_0075_Description" "地狱的妖精,赫卡提亚的部下。她受赫卡提亚的命令,令静海充满了自己从地狱带来的妖精们。静海因她的伙伴们变成了妖精乐园。然后由于纯狐的能力,她们觉醒了。\n【★】「阿波罗捏造说」\n【★★★】狱符「喷薄的恶意」\n【★★★★★】狱符「双色地狱火」" + "DOTA_Tooltip_ability_thtd_clownpiece_01" "「阿波罗捏造说」" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Description" "在指定地点召唤月球投影,向四周发射激光,对范围内的敌人造成伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Note0" "潜能Lv10:技能伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Note1" "潜能Lv50:技能伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Note2" "潜能Lv100:技能伤害提高400%%。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_clownpiece_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_clownpiece_02" "狱符「喷薄的恶意」" + "DOTA_Tooltip_ability_thtd_clownpiece_02_Description" "使范围内目标陷入疯狂,以增强所有妖精的力量。\n每使一个目标陷入疯狂,所有妖精的技能伤害提高%damage_up_other%%%,克劳恩皮丝获得%damage_up_self%倍效果。\n支持AI自动错开施放。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_clownpiece_02_Note0" "潜能Lv50:范围+200,持续时间+2秒,克劳恩皮丝伤害提高+1倍。" + "DOTA_Tooltip_ability_thtd_clownpiece_02_Note1" "潜能Lv100:范围+400,持续时间+4秒,克劳恩皮丝伤害提高+2倍。" + "DOTA_Tooltip_ability_thtd_clownpiece_02_radius" "范围:" + "DOTA_Tooltip_ability_thtd_clownpiece_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_clownpiece_02_damage_up_other" "%妖精技能伤害提高:" + "DOTA_Tooltip_ability_thtd_clownpiece_02_damage_up_self" "克劳恩皮丝加成倍数:" + "DOTA_Tooltip_modifier_clownpiece_buff" "狱符「喷薄的恶意」" + "DOTA_Tooltip_modifier_clownpiece_buff_Description" "克劳恩皮丝使目标陷入疯狂,从中吸取力量增强妖精的技能伤害,克劳恩皮丝获得多倍效果。层数为陷入疯狂目标数量" + "DOTA_Tooltip_ability_thtd_clownpiece_03" "狱炎「双重地狱火」" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Description" "克劳恩皮丝挥出双重地狱火燃烧目标,造成持续的伤害(可叠加),并降低%speed_down%%%移速。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note2" "潜能Lv100:技能伤害+20,燃烧时间+5秒。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note3" "潜能Lv666:\n获得特殊效果:擦弹地狱火,向自身360度施放双重地狱火,技能伤害+30。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note4" "潜能Lv999:\n获得特殊效果:拉姆帕德斯火炬,燃烧伤害增加3倍。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Lore" "地狱火拥有极端危险的气息;而将各种的特性混合起来,就简直难以想象。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_power_damage" "燃烧伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_clownpiece_03_distance" "冲击距离:" + "DOTA_Tooltip_ability_thtd_clownpiece_03_duration_time" "燃烧时间:" + "DOTA_Tooltip_ability_thtd_clownpiece_03_speed_down" "%减速:" + "DOTA_Tooltip_modifier_clownpiece_03_debuff" "狱炎「双重地狱火」" + "DOTA_Tooltip_modifier_clownpiece_03_debuff_Description" "正受到地狱火燃烧,并且移动速度降低%dMODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE%%%。" + "kyouko" "幽谷响子" + "DOTA_Tooltip_ability_item_0093" "【R】幽谷响子" + "DOTA_Tooltip_ability_item_0093_Lore" "爬山时,不知你有没有大喊过:「呀吼—!」呢。而之后那响亮的一声「Yahoo!」回话,正是妖怪山彦。" + "DOTA_Tooltip_ability_item_0093_Description" "当冲着山谷喊叫时,会正直地响应声音的妖怪。对愉快的的声音就愉快地响应,对愤怒的吼叫则会做出反击回应。她觉得这样的世界太空虚了,便出家了。现在正在命莲寺修行的样子。修行内容是,每日都在门前进行打扫的工作。\n【★】劈音「尖刺之圆」\n【★★★】响符「强力共振」" + "DOTA_Tooltip_ability_thtd_kyouko_01" "劈音「尖刺之圆」" + "DOTA_Tooltip_ability_thtd_kyouko_01_Description" "幽谷响子在她面前制造出强大的声波,对其轨迹上的所有敌人造成伤害,并使其下次受到声波伤害提高%damage_up%%%。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note0" "叠加效果为线性叠加,最大999次,对两个技能均有效。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note1" "潜能Lv10:冲击波伤害叠加+5%%。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note2" "潜能Lv50:冲击波伤害叠加+25%%。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note3" "潜能Lv100:冲击波伤害叠加+50%%。" + "DOTA_Tooltip_ability_thtd_kyouko_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kyouko_01_damage_up" "%叠加伤害:" + "DOTA_Tooltip_modifier_thtd_kyouko_01_debuff" "劈音「尖刺之圆」" + "DOTA_Tooltip_modifier_thtd_kyouko_01_debuff_Description" "受到声波伤害提高。" + "DOTA_Tooltip_ability_thtd_kyouko_02" "响符「强力共振」" + "DOTA_Tooltip_ability_thtd_kyouko_02_Description" "在指定位置创建一次强力共振,发出穿过地面的冲击波,伤害敌方单位并眩晕%duration_time%秒。每个受到攻击的目标都会引起伤害附近单位的反射波。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note0" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note1" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note2" "潜能Lv100:技能伤害+40。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note3" "潜能Lv666:\n获得特殊效果:回声,所有技能会再次触发若干次。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note4" "潜能Lv999:\n获得特殊效果:激动Yahoo,暴击概率+75%%,暴击伤害+500%%。" + "DOTA_Tooltip_ability_thtd_kyouko_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kyouko_02_duration_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_kyouko_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_kyouko_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_kyouko_03_Description" "选择一个地点来设定AI定点施放:响符「强力共振」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "shikieiki" "四季映姬·夜摩仙那度" + "DOTA_Tooltip_ability_item_0064" "【SSR】四季映姬" + "DOTA_Tooltip_ability_item_0064_Lore" "绝对不要对她说谎、隐瞒一些事使自己看起来像好人。因为谎言被揭穿后会被施以重罪。" + "DOTA_Tooltip_ability_item_0064_Description" "在地狱居住制裁死者的神。拥有判断是非黑白程度的能力。她的名字是四季·映姬,夜摩仙那度是阎魔大人中的官职之一。她从来不会说出有失偏颇的话语,会令人油然而生一种难以接近的氛围。不过,她的说教多数还是为了幻想乡中的人类着想,面对她的说教,要坦率地表达自己的感激之情并洗耳恭听。阎魔大人时刻持于手中的棒,是用来书写受审者的罪孽,并用其击打受审者的道具。\n【★】审判「有罪或无罪」\n【★★★】审判「十王审判」\n【★★★★】审判「最终审判」\n【★★★★★】罪符「彷徨的大罪」" + "DOTA_Tooltip_ability_thtd_shikieiki_01" "审判「有罪或无罪」" + "DOTA_Tooltip_ability_thtd_shikieiki_01_Lore" "单纯以强大的力量裁决对方是否有罪,宛如地狱一般的审判。" + "DOTA_Tooltip_ability_thtd_shikieiki_01_Description" "审判周围单位,造成伤害并添加1至3条罪名,最多叠加10条。" + "DOTA_Tooltip_ability_thtd_shikieiki_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_modifier_thtd_shikieiki_01_debuff" "罪名" + "DOTA_Tooltip_modifier_thtd_shikieiki_01_debuff_Description" "被阎魔大人审判" + "DOTA_Tooltip_ability_thtd_shikieiki_02" "审判「十王审判」" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Description" "阎魔大人发动十王审判,对周围目标造成伤害,每条罪名额外造成%damage_up%%%伤害。\n目标在被审判之后罪名会被全部消除,清除罪名后会增加阎魔大人的能量点,持续%duration_time%秒。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Note0" "潜能Lv10:清除罪名获得能量点数+2。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Note1" "潜能Lv50:清除罪名获得能量点数+4。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Note2" "潜能Lv100:清除罪名获得能量点数+8。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_shikieiki_02_damage_up" "%每条罪名伤害提升:" + "DOTA_Tooltip_ability_thtd_shikieiki_02_power_bonus" "每清除一条罪名获得能量点数:" + "DOTA_Tooltip_ability_thtd_shikieiki_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shikieiki_03" "审判「最终审判」" + "DOTA_Tooltip_ability_thtd_shikieiki_03_Description" "对目标进行最终审判,在持续时间内每秒对其造成%hp_damage%%%最大生命值的伤害。" + "DOTA_Tooltip_ability_thtd_shikieiki_03_Lore" "阎魔大人的说教是名不虚传的,面对她的说教,要坦率地表达自己的感激之情并洗耳恭听。\n右键切换是否播放说教语音。" + "DOTA_Tooltip_ability_thtd_shikieiki_03_hp_damage" "%额外伤害:" + "DOTA_Tooltip_ability_thtd_shikieiki_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shikieiki_04" "罪符「彷徨的大罪」" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Description" "召唤一个强引力漩涡吸收世间的罪。被影响的单位持续受到大量伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note2" "潜能Lv100:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note3" "潜能Lv666:\n获得特殊效果:坠入地狱,漩涡受18层地狱加持,造成18倍伤害。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note4" "潜能Lv999:\n获得特殊效果:当头棒喝,暴击伤害+700%%,暴击概率+70%%。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_shikieiki_04_radius" "作用范围:" + "DOTA_Tooltip_ability_thtd_shikieiki_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shikieiki_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_shikieiki_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_shikieiki_05_Description" "选择一个地点来设定AI定点施放:罪符「彷徨的大罪」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_kogasa_00" "link_DOTA_Tooltip_ability_ability_common_decrease_armor_buff" + "DOTA_Tooltip_ability_thtd_utsuho_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_medicine_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_sunny_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_alice_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_wriggle_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_lily_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_nazrin_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_minoriko_00" "link_DOTA_Tooltip_ability_ability_common_star_up_speed" + "DOTA_Tooltip_ability_thtd_mugiyousei_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_shanghainingyou_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_hourainingyou_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_hanadayousei_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_maidyousei_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_cirno_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_letty_00" "link_DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff" + "DOTA_Tooltip_ability_thtd_lyrica_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_lunasa_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_merlin_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_rumia_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_satori_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_iku_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_mystia_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_marisa_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_tenshi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_patchouli_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_reisen_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yuyuko_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_youmu_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_rin_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_reimu_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_daiyousei_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_remilia_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_flandre_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_sakuya_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_koishi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_koakuma_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_meirin_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yuuka_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yukari_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_ran_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_chen_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_eirin_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_mokou_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_kaguya_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_aya_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_hatate_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_momiji_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_sanae_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_kanako_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_suwako_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_minamitsu_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_nue_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_sizuha_00" "link_DOTA_Tooltip_ability_ability_common_star_up_speed" + "DOTA_Tooltip_ability_thtd_byakuren_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_toramaru_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_shinki_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_soga_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_futo_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_miko_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yoshika_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_seiga_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_keine_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_luna_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_star_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_suika_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yuugi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_junko_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_hecatia_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kokoro_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_hina_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kagerou_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_inaba_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_clownpiece_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kisume_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_komachi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kyouko_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_shikieiki_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_modifier_equip_item" "装备" + "DOTA_Tooltip_modifier_equip_item_Description" "已携带装备" + "DOTA_Tooltip_modifier_item_2005_attack_aura" "「血染的太阳伞」四件套" + "DOTA_Tooltip_modifier_item_2005_attack_aura_Description" "提升周围友方单位的攻击力。" + "DOTA_Tooltip_ability_item_3001" "猪年气球" + "DOTA_Tooltip_ability_item_3001_Description" "

使用

吹出一个可爱又有弹性的芳晓气球。" + "DOTA_Tooltip_ability_item_3001_Lore" "他最爱吃白日梦。" + "DOTA_Tooltip_ability_item_3002" "击掌" + "DOTA_Tooltip_ability_item_3002_Description" "

使用

和队友击掌庆祝。" + "DOTA_Tooltip_ability_item_3002_Lore" "一起Happy!" + "DOTA_Tooltip_ability_item_3003" "足球" + "DOTA_Tooltip_ability_item_3003_Description" "

使用

射门看看。" + "DOTA_Tooltip_ability_item_3003_Lore" "能击中球门么?" + "DOTA_Tooltip_ability_item_3004" "鞭炮" + "DOTA_Tooltip_ability_item_3004_Description" "

使用

扔串鞭炮。真的,快扔!" + "DOTA_Tooltip_ability_item_3004_Lore" "没有比爆炸更喜庆的了!" + "DOTA_Tooltip_ability_item_3005" "投掷雪球" + "DOTA_Tooltip_ability_item_3005_Description" "

使用

向一名友军或敌人投掷雪球。" + "DOTA_Tooltip_ability_item_3005_Lore" "纯手工打造,温度完美。" + "DOTA_Tooltip_ability_item_3006" "召唤雪人" + "DOTA_Tooltip_ability_item_3006_Description" "

使用

召唤一个欢乐的雪人。" + "DOTA_Tooltip_ability_item_3006_Lore" "只要可以,他会一直做你的朋友。" + "DOTA_Tooltip_ability_item_3007" "装饰树木" + "DOTA_Tooltip_ability_item_3007_Description" "

使用

给任意树木加上一丝欢快的节日气氛。" + "DOTA_Tooltip_ability_item_3007_Lore" "节日的装束, 即使是战场上最血腥的斗士也会喜欢。" + "DOTA_Tooltip_ability_item_3008" "节日烟花" + "DOTA_Tooltip_ability_item_3008_Description" "

使用

将烟花射向半空。" + "DOTA_Tooltip_ability_item_3008_Lore" "没有比爆炸更喜庆的了!" + "DOTA_Tooltip_ability_item_3009" "2019年芳晓佳节消耗品捆绑包" + "DOTA_Tooltip_ability_item_3009_Description" "

使用

包含一整套芳晓佳节消耗品。" + "DOTA_Tooltip_ability_item_3010" "凌霜圣地消耗品捆绑包" + "DOTA_Tooltip_ability_item_3010_Description" "

使用

包含一整套凌霜圣地特殊活动的消耗品。" + "DOTA_Tooltip_ability_item_3011" "烁热同盟" + "DOTA_Tooltip_ability_item_3011_Description" "

T5

每有一个不同的地灵殿联动效果,则地灵殿单位获得+30%%物理伤害提升。(古明地觉、古明地恋、火焰猫燐、灵乌路空)" + "DOTA_Tooltip_modifier_bb_buff_3011" "烁热同盟" + "DOTA_Tooltip_modifier_bb_buff_3011_Description" "每有一个不同的地灵殿联动效果,则地灵殿单位获得+30%%物理伤害提升。(古明地觉、古明地恋、火焰猫燐、灵乌路空)" + "DOTA_Tooltip_ability_item_3012" "幸运者的烦恼" + "DOTA_Tooltip_ability_item_3012_Description" "

T2

抽卡有15%%概率额外获得一张对应品质的御币。" + "DOTA_Tooltip_modifier_bb_buff_3012" "幸运者的烦恼" + "DOTA_Tooltip_modifier_bb_buff_3012_Description" "抽卡有15%%概率额外获得一张对应品质的御币。" + "DOTA_Tooltip_ability_item_3013" "无敌意识" + "DOTA_Tooltip_ability_item_3013_Description" "

T4

受到负面效果影响降低50%%(如震荡、黒暗光环)。" + "DOTA_Tooltip_modifier_bb_buff_3013" "无敌意识" + "DOTA_Tooltip_modifier_bb_buff_3013_Description" "受到负面效果影响降低50%%(如震荡、黒暗光环)。" + "DOTA_Tooltip_ability_item_3014" "战斗中铸就" + "DOTA_Tooltip_ability_item_3014_Description" "

T4

无尽回合每通过一波,阵容中的主角单位永久+1点能量(灵梦、魔理沙、东风谷早苗、爱丽丝),999波之后无效。" + "DOTA_Tooltip_modifier_bb_buff_3014" "战斗中铸就" + "DOTA_Tooltip_modifier_bb_buff_3014_Description" "无尽回合每通过一波,阵容中的主角单位永久+1点能量(灵梦、魔理沙、东风谷早苗、爱丽丝),999波之后无效。" + "DOTA_Tooltip_ability_item_3015" "失去天恩" + "DOTA_Tooltip_ability_item_3015_Description" "

T5

在经历失去月之都后,所有月之民进入战斗后战力提升,每有一个不同的月之都单位,则获得+15%%纯粹伤害提升。(八意永琳、蓬莱山辉夜、铃仙、因幡帝)" + "DOTA_Tooltip_modifier_bb_buff_3015" "失去天恩" + "DOTA_Tooltip_modifier_bb_buff_3015_Description" "在经历失去月之都后,所有月之民进入战斗后战力提升,每有一个不同的月之都单位,则获得+15%%纯粹伤害提升。(八意永琳、蓬莱山辉夜、铃仙、因幡帝)" + "DOTA_Tooltip_ability_item_3016" "召唤神石" + "DOTA_Tooltip_ability_item_3016_Description" "

T4

所有召唤物+200攻击力和+40%%攻速(在召唤时生效)。" + "DOTA_Tooltip_modifier_bb_buff_3016" "召唤神石" + "DOTA_Tooltip_modifier_bb_buff_3016_Description" "所有召唤物+200攻击力和+40%%攻速(在召唤时生效)。" + "DOTA_Tooltip_ability_item_3017" "一线希望" + "DOTA_Tooltip_ability_item_3017_Description" "

T3

每有一个外圈漏怪,则对内圈敌方单位的伤害提升5%%。" + "DOTA_Tooltip_modifier_bb_buff_3017" "一线希望" + "DOTA_Tooltip_modifier_bb_buff_3017_Description" "每有一个外圈漏怪,则对内圈敌方单位的伤害提升5%%。" + "DOTA_Tooltip_ability_item_3018" "亲友折扣" + "DOTA_Tooltip_ability_item_3018_Description" "

T2

抽卡价格优惠20%%。" + "DOTA_Tooltip_modifier_bb_buff_3018" "亲友折扣" + "DOTA_Tooltip_modifier_bb_buff_3018_Description" "抽卡价格优惠20%%。" + "DOTA_Tooltip_ability_item_3019" "绝望手段" + "DOTA_Tooltip_ability_item_3019_Description" "

T3

每波最后5秒如果漏怪数量达到30则造成的伤害提高50%%,持续5秒。" + "DOTA_Tooltip_modifier_bb_buff_3019" "绝望手段" + "DOTA_Tooltip_modifier_bb_buff_3019_Description" "每波最后5秒如果漏怪数量达到30则造成的伤害提高50%%,持续5秒。" + "DOTA_Tooltip_ability_item_3020" "扩大阵容" + "DOTA_Tooltip_ability_item_3020_Description" "

T3

同名卡上场最大数量提高50%%(向下取整)。" + "DOTA_Tooltip_modifier_bb_buff_3020" "扩大阵容" + "DOTA_Tooltip_modifier_bb_buff_3020_Description" "同名卡上场最大数量提高50%%(向下取整)。" + "DOTA_Tooltip_ability_item_3021" "邪恶意念" + "DOTA_Tooltip_ability_item_3021_Description" "

T4

秒杀伤害上限提高75%%。" + "DOTA_Tooltip_modifier_bb_buff_3021" "邪恶意念" + "DOTA_Tooltip_modifier_bb_buff_3021_Description" "秒杀伤害上限提高75%%。" + "DOTA_Tooltip_ability_item_3022" "金币满箱" + "DOTA_Tooltip_ability_item_3022_Description" "

T2

获得10000金钱。" + "DOTA_Tooltip_ability_item_3023" "虹吸意图" + "DOTA_Tooltip_ability_item_3023_Description" "

T5

神灵庙单位的神子附加伤害加成效果提高50%%。" + "DOTA_Tooltip_modifier_bb_buff_3023" "虹吸意图" + "DOTA_Tooltip_modifier_bb_buff_3023_Description" "神灵庙单位的神子附加伤害加成效果提高50%%。" + "DOTA_Tooltip_ability_item_3024" "香火长存" + "DOTA_Tooltip_ability_item_3024_Description" "

T5

守矢神社的信仰收集上限提高50%%。" + "DOTA_Tooltip_modifier_bb_buff_3024" "香火长存" + "DOTA_Tooltip_modifier_bb_buff_3024_Description" "守矢神社的信仰收集上限提高50%%。" + "DOTA_Tooltip_ability_item_3025" "终极闪烁" + "DOTA_Tooltip_ability_item_3025_Description" "

T5

红魔馆单位施放技能时有5%%概率刷新技能。" + "DOTA_Tooltip_modifier_bb_buff_3025" "终极闪烁" + "DOTA_Tooltip_modifier_bb_buff_3025_Description" "红魔馆单位施放技能时有5%%概率刷新技能。" + "DOTA_Tooltip_ability_item_3026" "口袋细沙" + "DOTA_Tooltip_ability_item_3026_Description" "

T3

进入无尽波数后怪物移动速度降低30。" + "DOTA_Tooltip_modifier_bb_buff_3026" "口袋细沙" + "DOTA_Tooltip_modifier_bb_buff_3026_Description" "进入无尽波数后怪物移动速度降低30。" + "DOTA_Tooltip_ability_item_3027" "鉴宝大师" + "DOTA_Tooltip_ability_item_3027_Description" "

T5

星莲船单位装备4件套效果所需装备数量降低1件" + "DOTA_Tooltip_modifier_bb_buff_3027" "鉴宝大师" + "DOTA_Tooltip_modifier_bb_buff_3027_Description" "星莲船单位装备4件套效果所需装备数量降低1件" + "DOTA_Tooltip_ability_item_3028" "鬼影一击" + "DOTA_Tooltip_ability_item_3028_Description" "

T5

鬼族单位攻击有5%%概率击晕目标并造成20%%最大生命值伤害。(星熊勇仪、伊吹萃香)" + "DOTA_Tooltip_modifier_bb_buff_3028" "鬼影一击" + "DOTA_Tooltip_modifier_bb_buff_3028_Description" "鬼族单位攻击有5%%概率击晕目标并造成20%%最大生命值伤害。(星熊勇仪、伊吹萃香)" + "DOTA_Tooltip_ability_item_3029" "四季馈赠" + "DOTA_Tooltip_ability_item_3029_Description" "

T2

相关单位获得一个对应的效果。\n春:莉莉白增伤效果提高20%%。\n夏:风见幽香花田加成效果提高20%%。\n秋:秋姐妹每级成长时间减少20秒,成长速度加快20%%。\n冬:蕾蒂和琪露诺伤害提高20%%。" + "DOTA_Tooltip_modifier_bb_buff_3029" "四季馈赠" + "DOTA_Tooltip_modifier_bb_buff_3029_Description" "相关单位获得一个对应的效果。\n春:莉莉白增伤效果提高20%%。\n夏:风见幽香花田加成效果提高20%%。\n秋:秋姐妹每级成长时间减少20秒,成长速度加快20%%。\n冬:蕾蒂和琪露诺伤害提高20%%。" + "DOTA_Tooltip_ability_item_3030" "人多力量大" + "DOTA_Tooltip_ability_item_3030_Description" "

T4

分身加成效果提高50%%。(芙兰朵露、铃仙)" + "DOTA_Tooltip_modifier_bb_buff_3030" "人多力量大" + "DOTA_Tooltip_modifier_bb_buff_3030_Description" "分身加成效果提高50%%。(芙兰朵露、铃仙)" + "DOTA_Tooltip_ability_item_3031" "资深专家" + "DOTA_Tooltip_ability_item_3031_Description" "" + "DOTA_Tooltip_modifier_bb_buff_3031" "资深专家" + "DOTA_Tooltip_modifier_bb_buff_3031_Description" "" + "DOTA_Tooltip_ability_item_3050" "丢失的宝藏" + "DOTA_Tooltip_ability_item_3050_Description" "待解锁。\n宠物成长等级每5级获得1个额外奖励选择。\n使用魔法钥匙开箱有概率获取增加额外奖励选择的物品。" + "DOTA_Tooltip_modifier_fairy_count" "潜能等级" + "DOTA_Tooltip_modifier_fairy_count_Description" "使用觉醒来激活潜能,激活后每级提升3点能量和攻击力,达到特定等级时还会增强某些技能效果。" + "DOTA_Tooltip_ability_faceless_void_time_lock" "鬼影一击" + "DOTA_Tooltip_ability_faceless_void_time_lock_Description" "攻击有%chance_pct%%%概率击晕目标并造成%bonus_damage%%%最大生命值伤害。" + "DOTA_Tooltip_ability_faceless_void_time_lock_chance_pct" "%触发概率:" + "DOTA_Tooltip_ability_faceless_void_time_lock_duration" "持续时间:" + "DOTA_Tooltip_ability_faceless_void_time_lock_bonus_damage" "%生命值伤害:" + "DOTA_Tooltip_ability_faceless_void_time_lock_Lore" "鬼族的突袭伴随着恐怖的大力。" + "DOTA_Tooltip_ability_faceless_void_time_lock_Note0" "眩晕效果无视技能免疫。" + "DOTA_Tooltip_ability_faceless_void_time_lock_Note1" "多个战利品效果叠加。" + "DOTA_Tooltip_modifier_faceless_void_timelock_freeze" "鬼影一击" + "DOTA_Tooltip_modifier_faceless_void_timelock_freeze_Description" "被鬼影一击击晕了!" + "sumireko" "宇佐见堇子" + "renko" "宇佐见莲子" + "maribel" "玛艾露贝莉·赫恩" + "mamizou" "二岩猯藏" + "seija" "鬼人正邪" + "shinmyoumaru" "少名针妙丸" + "kishin" "稀神探女" + "matara" "摩多罗隐岐奈" + "sariel" "萨丽爱尔" + "mima" "魅魔" + "gengetu" "幻月" + "elly" "艾丽" + "yumemi" "冈崎梦美" + "AbilityDamage" "基础伤害:" + "DOTA_HUD_Evasion" "闪避:" + "DOTA_AbilityTooltip_ScepterUpgrade_Header" "" + "DOTA_Tooltip_ability_death_prophet_exorcism_aghanim_description" "" + "reimu_pet" "REIMU_PET" + "DOTA_Tooltip_ability_reimu_pet_01" "「我变我变」" + "DOTA_Tooltip_ability_reimu_pet_01_Description" "变换一个外形。\n外形数量等于成长等级。" + "DOTA_Tooltip_ability_reimu_pet_02" "「我炫我炫」" + "DOTA_Tooltip_ability_reimu_pet_02_Description" "更换一个特效。\n特效数量等于成长等级。" + "DOTA_Tooltip_ability_reimu_pet_03" "「保存形态」" + "DOTA_Tooltip_ability_reimu_pet_03_Description" "保存当前的外形和特效。" + "DOTA_Tooltip_ability_reimu_pet_04" "「劳动小能手」" + "DOTA_Tooltip_ability_reimu_pet_04_Description" "主动:消耗%point%个符卡精华来快速制作一把钥匙(放置于主人背包中)。\n被动:小灵每天会制作5把魔法钥匙,按成长等级每级增加1把,每5级额外增加1把。\n钥匙当天有效,游戏结束会保存未使用的钥匙。\n每日开箱任务只能完成一次(奖励符卡精华),最多保留7天的开箱任务。" + "DOTA_Tooltip_ability_reimu_pet_05" "「主人我懂你」" + "DOTA_Tooltip_ability_reimu_pet_05_Description" "小灵协助主人取得胜利。\n主动:将小灵拴在指定位置,点击自身200码范围内则恢复跟随。\n被动:效果1:成长等级≥2级时,将四次元爆弹放置背包中(前6格),在漏怪超标时自动使用。\n效果2:增加战利品奖励可供选择的数量,每5级额外1个。" + "DOTA_Tooltip_modifier_reimu_pet_01_level" "成长等级" + "DOTA_Tooltip_modifier_reimu_pet_01_level_Description" "小灵的当前成长等级,点击左上角赞助获得等级提升。" + "change_to_pet_model" "当前外形代号:{s:key}" + "change_to_pet_effect" "当前特效代号:{s:key}" + "pet_cumstom_saved" "外形和特效已保存" + "DOTA_Tooltip_ability_item_3101" "博丽魔法宝箱" + "DOTA_Tooltip_ability_item_3102" "博丽魔法宝箱" + "DOTA_Tooltip_ability_item_3103" "博丽魔法宝箱" + "DOTA_Tooltip_ability_item_3121" "魔法钥匙" + "DOTA_Tooltip_ability_item_3121_Description" "可以开启博丽神社的魔法宝箱,或者在商店购买物品。\n由宠物小灵制作,小灵每天制作数量为自身等级,也可以使用符卡精华快速制作。" + "DOTA_Tooltip_ability_item_3149" "「凤凰之灵」" + "DOTA_Tooltip_ability_item_3149_Description" "给目标服用后,提升潜能至满级(Lv%point%)。\n使用灵梦觉醒技能激活潜能,本场游戏有效。\n若不使用,则会保留,后续游戏有效。最多保留4个。" + "DOTA_Tooltip_ability_item_3150" "「布都御魂」" + "DOTA_Tooltip_ability_item_3150_Description" "幻想乡三灵剑之一,只有幸运者才能使用。\n剑技乱舞,数把灵刀在使用者周围环绕,每%damage_interval%秒对进入其中的单位额外进行一次普通攻击并造成星级*能量*%power_damage%的物理伤害(前3个目标可触发攻击特效)。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3150_power_bonus" "攻击力和能量增加:" + "DOTA_Tooltip_ability_item_3151" "「天丛云剑」" + "DOTA_Tooltip_ability_item_3151_Description" "幻想乡三灵剑之一,只有幸运者才能使用。\n攻击时剑气形成一把巨大的神剑从天而降,对范围内的目标造成攻击者星级*能量*%power_damage%的魔法伤害。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3151_power_damage" "伤害(星级*能量点):" + "DOTA_Tooltip_ability_item_3151_range" "范围:" + "DOTA_Tooltip_ability_item_3151_power_bonus" "攻击力和能量增加:" + "DOTA_Tooltip_ability_item_3152" "「天羽羽斩」" + "DOTA_Tooltip_ability_item_3152_Description" "幻想乡三灵剑之一,只有幸运者才能使用。\n攻击时对目标周围%range%范围造成攻击者星级*能量*%power_damage%的纯粹伤害,并封印%duration_time%秒,进入幻境停止移动。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3152_power_bonus" "攻击力和能量增加:" + "DOTA_Tooltip_modifier_item_3152_debuff" "「天羽羽斩」" + "DOTA_Tooltip_modifier_item_3152_debuff_Description" "被封印正在幻境之中。" + "DOTA_Tooltip_ability_item_3153" "「轩辕剑」" + "DOTA_Tooltip_ability_item_3153_Description" "流落幻想乡的圣剑,只有幸运者才能使用。\n攻击时对目标周围造成星级*能量*%power_damage%伤害(伤害类型取增伤最高一类),受影响的单位受到的所有伤害提高%damage_debuff%%%,持续%duration_time%秒。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3153_power_bonus" "攻击力和能量增加:" + "DOTA_NeutralItemSlot_Title" "饰品槽位" + "DOTA_NeutralItemSlot_Description" "可以存放饰品,只有装备在此槽位时才能使用。饰品将逐步推出,请进群讨论。" + "DOTA_ToolTip_Ability_AutoCast" "右键点击切换方式" + "DOTA_InventoryMenu_DropAtFountain" "丢到地上" + } +} diff --git a/resource/addon_schinese.txt b/game/resource/addon_schinese.txt similarity index 100% rename from resource/addon_schinese.txt rename to game/resource/addon_schinese.txt diff --git a/resource/custom_game_whitelist.txt b/game/resource/custom_game_whitelist.txt similarity index 100% rename from resource/custom_game_whitelist.txt rename to game/resource/custom_game_whitelist.txt diff --git a/resource/flash3/custom_ui.txt b/game/resource/flash3/custom_ui.txt similarity index 100% rename from resource/flash3/custom_ui.txt rename to game/resource/flash3/custom_ui.txt diff --git a/resource/flash3/images/heroes/juggernaut.png b/game/resource/flash3/images/heroes/juggernaut.png similarity index 100% rename from resource/flash3/images/heroes/juggernaut.png rename to game/resource/flash3/images/heroes/juggernaut.png diff --git a/resource/flash3/images/heroes/lina.png b/game/resource/flash3/images/heroes/lina.png similarity index 100% rename from resource/flash3/images/heroes/lina.png rename to game/resource/flash3/images/heroes/lina.png diff --git a/resource/flash3/images/heroes/selection/npc_dota_hero_juggernaut.png b/game/resource/flash3/images/heroes/selection/npc_dota_hero_juggernaut.png similarity index 100% rename from resource/flash3/images/heroes/selection/npc_dota_hero_juggernaut.png rename to game/resource/flash3/images/heroes/selection/npc_dota_hero_juggernaut.png diff --git a/resource/flash3/images/heroes/selection/npc_dota_hero_lina.png b/game/resource/flash3/images/heroes/selection/npc_dota_hero_lina.png similarity index 100% rename from resource/flash3/images/heroes/selection/npc_dota_hero_lina.png rename to game/resource/flash3/images/heroes/selection/npc_dota_hero_lina.png diff --git a/resource/flash3/images/items/0001.png b/game/resource/flash3/images/items/0001.png similarity index 100% rename from resource/flash3/images/items/0001.png rename to game/resource/flash3/images/items/0001.png diff --git a/resource/flash3/images/items/0002.png b/game/resource/flash3/images/items/0002.png similarity index 100% rename from resource/flash3/images/items/0002.png rename to game/resource/flash3/images/items/0002.png diff --git a/resource/flash3/images/items/0003.png b/game/resource/flash3/images/items/0003.png similarity index 100% rename from resource/flash3/images/items/0003.png rename to game/resource/flash3/images/items/0003.png diff --git a/resource/flash3/images/items/0004.png b/game/resource/flash3/images/items/0004.png similarity index 100% rename from resource/flash3/images/items/0004.png rename to game/resource/flash3/images/items/0004.png diff --git a/resource/flash3/images/items/0005.png b/game/resource/flash3/images/items/0005.png similarity index 100% rename from resource/flash3/images/items/0005.png rename to game/resource/flash3/images/items/0005.png diff --git a/resource/flash3/images/items/0006.png b/game/resource/flash3/images/items/0006.png similarity index 100% rename from resource/flash3/images/items/0006.png rename to game/resource/flash3/images/items/0006.png diff --git a/resource/flash3/images/items/0007.png b/game/resource/flash3/images/items/0007.png similarity index 100% rename from resource/flash3/images/items/0007.png rename to game/resource/flash3/images/items/0007.png diff --git a/resource/flash3/images/items/0008.png b/game/resource/flash3/images/items/0008.png similarity index 100% rename from resource/flash3/images/items/0008.png rename to game/resource/flash3/images/items/0008.png diff --git a/resource/flash3/images/items/0009.png b/game/resource/flash3/images/items/0009.png similarity index 100% rename from resource/flash3/images/items/0009.png rename to game/resource/flash3/images/items/0009.png diff --git a/resource/flash3/images/items/0010.png b/game/resource/flash3/images/items/0010.png similarity index 100% rename from resource/flash3/images/items/0010.png rename to game/resource/flash3/images/items/0010.png diff --git a/resource/flash3/images/items/0011.png b/game/resource/flash3/images/items/0011.png similarity index 100% rename from resource/flash3/images/items/0011.png rename to game/resource/flash3/images/items/0011.png diff --git a/resource/flash3/images/items/0012.png b/game/resource/flash3/images/items/0012.png similarity index 100% rename from resource/flash3/images/items/0012.png rename to game/resource/flash3/images/items/0012.png diff --git a/resource/flash3/images/items/0013.png b/game/resource/flash3/images/items/0013.png similarity index 100% rename from resource/flash3/images/items/0013.png rename to game/resource/flash3/images/items/0013.png diff --git a/resource/flash3/images/items/0014.png b/game/resource/flash3/images/items/0014.png similarity index 100% rename from resource/flash3/images/items/0014.png rename to game/resource/flash3/images/items/0014.png diff --git a/resource/flash3/images/items/0015.png b/game/resource/flash3/images/items/0015.png similarity index 100% rename from resource/flash3/images/items/0015.png rename to game/resource/flash3/images/items/0015.png diff --git a/resource/flash3/images/items/0016.png b/game/resource/flash3/images/items/0016.png similarity index 100% rename from resource/flash3/images/items/0016.png rename to game/resource/flash3/images/items/0016.png diff --git a/resource/flash3/images/items/0017.png b/game/resource/flash3/images/items/0017.png similarity index 100% rename from resource/flash3/images/items/0017.png rename to game/resource/flash3/images/items/0017.png diff --git a/resource/flash3/images/items/0018.png b/game/resource/flash3/images/items/0018.png similarity index 100% rename from resource/flash3/images/items/0018.png rename to game/resource/flash3/images/items/0018.png diff --git a/resource/flash3/images/items/0019.png b/game/resource/flash3/images/items/0019.png similarity index 100% rename from resource/flash3/images/items/0019.png rename to game/resource/flash3/images/items/0019.png diff --git a/resource/flash3/images/items/0020.png b/game/resource/flash3/images/items/0020.png similarity index 100% rename from resource/flash3/images/items/0020.png rename to game/resource/flash3/images/items/0020.png diff --git a/resource/flash3/images/items/0021.png b/game/resource/flash3/images/items/0021.png similarity index 100% rename from resource/flash3/images/items/0021.png rename to game/resource/flash3/images/items/0021.png diff --git a/resource/flash3/images/items/0022.png b/game/resource/flash3/images/items/0022.png similarity index 100% rename from resource/flash3/images/items/0022.png rename to game/resource/flash3/images/items/0022.png diff --git a/resource/flash3/images/items/0023.png b/game/resource/flash3/images/items/0023.png similarity index 100% rename from resource/flash3/images/items/0023.png rename to game/resource/flash3/images/items/0023.png diff --git a/resource/flash3/images/items/0024.png b/game/resource/flash3/images/items/0024.png similarity index 100% rename from resource/flash3/images/items/0024.png rename to game/resource/flash3/images/items/0024.png diff --git a/resource/flash3/images/items/0025.png b/game/resource/flash3/images/items/0025.png similarity index 100% rename from resource/flash3/images/items/0025.png rename to game/resource/flash3/images/items/0025.png diff --git a/resource/flash3/images/items/0026.png b/game/resource/flash3/images/items/0026.png similarity index 100% rename from resource/flash3/images/items/0026.png rename to game/resource/flash3/images/items/0026.png diff --git a/resource/flash3/images/items/0027.png b/game/resource/flash3/images/items/0027.png similarity index 100% rename from resource/flash3/images/items/0027.png rename to game/resource/flash3/images/items/0027.png diff --git a/resource/flash3/images/items/0028.png b/game/resource/flash3/images/items/0028.png similarity index 100% rename from resource/flash3/images/items/0028.png rename to game/resource/flash3/images/items/0028.png diff --git a/resource/flash3/images/items/0029.png b/game/resource/flash3/images/items/0029.png similarity index 100% rename from resource/flash3/images/items/0029.png rename to game/resource/flash3/images/items/0029.png diff --git a/resource/flash3/images/items/0030.png b/game/resource/flash3/images/items/0030.png similarity index 100% rename from resource/flash3/images/items/0030.png rename to game/resource/flash3/images/items/0030.png diff --git a/resource/flash3/images/items/0031.png b/game/resource/flash3/images/items/0031.png similarity index 100% rename from resource/flash3/images/items/0031.png rename to game/resource/flash3/images/items/0031.png diff --git a/resource/flash3/images/items/0032.png b/game/resource/flash3/images/items/0032.png similarity index 100% rename from resource/flash3/images/items/0032.png rename to game/resource/flash3/images/items/0032.png diff --git a/resource/flash3/images/items/0033.png b/game/resource/flash3/images/items/0033.png similarity index 100% rename from resource/flash3/images/items/0033.png rename to game/resource/flash3/images/items/0033.png diff --git a/resource/flash3/images/items/0034.png b/game/resource/flash3/images/items/0034.png similarity index 100% rename from resource/flash3/images/items/0034.png rename to game/resource/flash3/images/items/0034.png diff --git a/resource/flash3/images/items/0035.png b/game/resource/flash3/images/items/0035.png similarity index 100% rename from resource/flash3/images/items/0035.png rename to game/resource/flash3/images/items/0035.png diff --git a/resource/flash3/images/items/0036.png b/game/resource/flash3/images/items/0036.png similarity index 100% rename from resource/flash3/images/items/0036.png rename to game/resource/flash3/images/items/0036.png diff --git a/resource/flash3/images/items/0037.png b/game/resource/flash3/images/items/0037.png similarity index 100% rename from resource/flash3/images/items/0037.png rename to game/resource/flash3/images/items/0037.png diff --git a/resource/flash3/images/items/0038.png b/game/resource/flash3/images/items/0038.png similarity index 100% rename from resource/flash3/images/items/0038.png rename to game/resource/flash3/images/items/0038.png diff --git a/resource/flash3/images/items/0039.png b/game/resource/flash3/images/items/0039.png similarity index 100% rename from resource/flash3/images/items/0039.png rename to game/resource/flash3/images/items/0039.png diff --git a/resource/flash3/images/items/0040.png b/game/resource/flash3/images/items/0040.png similarity index 100% rename from resource/flash3/images/items/0040.png rename to game/resource/flash3/images/items/0040.png diff --git a/resource/flash3/images/items/0041.png b/game/resource/flash3/images/items/0041.png similarity index 100% rename from resource/flash3/images/items/0041.png rename to game/resource/flash3/images/items/0041.png diff --git a/resource/flash3/images/items/0042.png b/game/resource/flash3/images/items/0042.png similarity index 100% rename from resource/flash3/images/items/0042.png rename to game/resource/flash3/images/items/0042.png diff --git a/resource/flash3/images/items/0043.png b/game/resource/flash3/images/items/0043.png similarity index 100% rename from resource/flash3/images/items/0043.png rename to game/resource/flash3/images/items/0043.png diff --git a/resource/flash3/images/items/0044.png b/game/resource/flash3/images/items/0044.png similarity index 100% rename from resource/flash3/images/items/0044.png rename to game/resource/flash3/images/items/0044.png diff --git a/resource/flash3/images/items/0045.png b/game/resource/flash3/images/items/0045.png similarity index 100% rename from resource/flash3/images/items/0045.png rename to game/resource/flash3/images/items/0045.png diff --git a/resource/flash3/images/items/0046.png b/game/resource/flash3/images/items/0046.png similarity index 100% rename from resource/flash3/images/items/0046.png rename to game/resource/flash3/images/items/0046.png diff --git a/resource/flash3/images/items/0047.png b/game/resource/flash3/images/items/0047.png similarity index 100% rename from resource/flash3/images/items/0047.png rename to game/resource/flash3/images/items/0047.png diff --git a/resource/flash3/images/items/0048.png b/game/resource/flash3/images/items/0048.png similarity index 100% rename from resource/flash3/images/items/0048.png rename to game/resource/flash3/images/items/0048.png diff --git a/resource/flash3/images/items/0049.png b/game/resource/flash3/images/items/0049.png similarity index 100% rename from resource/flash3/images/items/0049.png rename to game/resource/flash3/images/items/0049.png diff --git a/resource/flash3/images/items/0050.png b/game/resource/flash3/images/items/0050.png similarity index 100% rename from resource/flash3/images/items/0050.png rename to game/resource/flash3/images/items/0050.png diff --git a/resource/flash3/images/items/0051.png b/game/resource/flash3/images/items/0051.png similarity index 100% rename from resource/flash3/images/items/0051.png rename to game/resource/flash3/images/items/0051.png diff --git a/resource/flash3/images/items/0052.png b/game/resource/flash3/images/items/0052.png similarity index 100% rename from resource/flash3/images/items/0052.png rename to game/resource/flash3/images/items/0052.png diff --git a/resource/flash3/images/items/0053.png b/game/resource/flash3/images/items/0053.png similarity index 100% rename from resource/flash3/images/items/0053.png rename to game/resource/flash3/images/items/0053.png diff --git a/resource/flash3/images/items/0054.png b/game/resource/flash3/images/items/0054.png similarity index 100% rename from resource/flash3/images/items/0054.png rename to game/resource/flash3/images/items/0054.png diff --git a/resource/flash3/images/items/0055.png b/game/resource/flash3/images/items/0055.png similarity index 100% rename from resource/flash3/images/items/0055.png rename to game/resource/flash3/images/items/0055.png diff --git a/resource/flash3/images/items/0056.png b/game/resource/flash3/images/items/0056.png similarity index 100% rename from resource/flash3/images/items/0056.png rename to game/resource/flash3/images/items/0056.png diff --git a/resource/flash3/images/items/0057.png b/game/resource/flash3/images/items/0057.png similarity index 100% rename from resource/flash3/images/items/0057.png rename to game/resource/flash3/images/items/0057.png diff --git a/resource/flash3/images/items/0058.png b/game/resource/flash3/images/items/0058.png similarity index 100% rename from resource/flash3/images/items/0058.png rename to game/resource/flash3/images/items/0058.png diff --git a/resource/flash3/images/items/0059.png b/game/resource/flash3/images/items/0059.png similarity index 100% rename from resource/flash3/images/items/0059.png rename to game/resource/flash3/images/items/0059.png diff --git a/resource/flash3/images/items/0060.png b/game/resource/flash3/images/items/0060.png similarity index 100% rename from resource/flash3/images/items/0060.png rename to game/resource/flash3/images/items/0060.png diff --git a/resource/flash3/images/items/0061.png b/game/resource/flash3/images/items/0061.png similarity index 100% rename from resource/flash3/images/items/0061.png rename to game/resource/flash3/images/items/0061.png diff --git a/resource/flash3/images/items/0062.png b/game/resource/flash3/images/items/0062.png similarity index 100% rename from resource/flash3/images/items/0062.png rename to game/resource/flash3/images/items/0062.png diff --git a/resource/flash3/images/items/0063.png b/game/resource/flash3/images/items/0063.png similarity index 100% rename from resource/flash3/images/items/0063.png rename to game/resource/flash3/images/items/0063.png diff --git a/resource/flash3/images/items/0064.png b/game/resource/flash3/images/items/0064.png similarity index 100% rename from resource/flash3/images/items/0064.png rename to game/resource/flash3/images/items/0064.png diff --git a/resource/flash3/images/items/0065.png b/game/resource/flash3/images/items/0065.png similarity index 100% rename from resource/flash3/images/items/0065.png rename to game/resource/flash3/images/items/0065.png diff --git a/resource/flash3/images/items/0066.png b/game/resource/flash3/images/items/0066.png similarity index 100% rename from resource/flash3/images/items/0066.png rename to game/resource/flash3/images/items/0066.png diff --git a/resource/flash3/images/items/0067.png b/game/resource/flash3/images/items/0067.png similarity index 100% rename from resource/flash3/images/items/0067.png rename to game/resource/flash3/images/items/0067.png diff --git a/resource/flash3/images/items/0068.png b/game/resource/flash3/images/items/0068.png similarity index 100% rename from resource/flash3/images/items/0068.png rename to game/resource/flash3/images/items/0068.png diff --git a/resource/flash3/images/items/0069.png b/game/resource/flash3/images/items/0069.png similarity index 100% rename from resource/flash3/images/items/0069.png rename to game/resource/flash3/images/items/0069.png diff --git a/resource/flash3/images/items/0070.png b/game/resource/flash3/images/items/0070.png similarity index 100% rename from resource/flash3/images/items/0070.png rename to game/resource/flash3/images/items/0070.png diff --git a/resource/flash3/images/items/0071.png b/game/resource/flash3/images/items/0071.png similarity index 100% rename from resource/flash3/images/items/0071.png rename to game/resource/flash3/images/items/0071.png diff --git a/resource/flash3/images/items/0072.png b/game/resource/flash3/images/items/0072.png similarity index 100% rename from resource/flash3/images/items/0072.png rename to game/resource/flash3/images/items/0072.png diff --git a/resource/flash3/images/items/0073.png b/game/resource/flash3/images/items/0073.png similarity index 100% rename from resource/flash3/images/items/0073.png rename to game/resource/flash3/images/items/0073.png diff --git a/resource/flash3/images/items/0074.png b/game/resource/flash3/images/items/0074.png similarity index 100% rename from resource/flash3/images/items/0074.png rename to game/resource/flash3/images/items/0074.png diff --git a/resource/flash3/images/items/0075.png b/game/resource/flash3/images/items/0075.png similarity index 100% rename from resource/flash3/images/items/0075.png rename to game/resource/flash3/images/items/0075.png diff --git a/resource/flash3/images/items/0076.png b/game/resource/flash3/images/items/0076.png similarity index 100% rename from resource/flash3/images/items/0076.png rename to game/resource/flash3/images/items/0076.png diff --git a/resource/flash3/images/items/0077.png b/game/resource/flash3/images/items/0077.png similarity index 100% rename from resource/flash3/images/items/0077.png rename to game/resource/flash3/images/items/0077.png diff --git a/resource/flash3/images/items/0078.png b/game/resource/flash3/images/items/0078.png similarity index 100% rename from resource/flash3/images/items/0078.png rename to game/resource/flash3/images/items/0078.png diff --git a/resource/flash3/images/items/0079.png b/game/resource/flash3/images/items/0079.png similarity index 100% rename from resource/flash3/images/items/0079.png rename to game/resource/flash3/images/items/0079.png diff --git a/resource/flash3/images/items/0080.png b/game/resource/flash3/images/items/0080.png similarity index 100% rename from resource/flash3/images/items/0080.png rename to game/resource/flash3/images/items/0080.png diff --git a/resource/flash3/images/items/0081.png b/game/resource/flash3/images/items/0081.png similarity index 100% rename from resource/flash3/images/items/0081.png rename to game/resource/flash3/images/items/0081.png diff --git a/resource/flash3/images/items/0082.png b/game/resource/flash3/images/items/0082.png similarity index 100% rename from resource/flash3/images/items/0082.png rename to game/resource/flash3/images/items/0082.png diff --git a/resource/flash3/images/items/0083.png b/game/resource/flash3/images/items/0083.png similarity index 100% rename from resource/flash3/images/items/0083.png rename to game/resource/flash3/images/items/0083.png diff --git a/resource/flash3/images/items/0084.png b/game/resource/flash3/images/items/0084.png similarity index 100% rename from resource/flash3/images/items/0084.png rename to game/resource/flash3/images/items/0084.png diff --git a/resource/flash3/images/items/0085.png b/game/resource/flash3/images/items/0085.png similarity index 100% rename from resource/flash3/images/items/0085.png rename to game/resource/flash3/images/items/0085.png diff --git a/resource/flash3/images/items/0086.png b/game/resource/flash3/images/items/0086.png similarity index 100% rename from resource/flash3/images/items/0086.png rename to game/resource/flash3/images/items/0086.png diff --git a/resource/flash3/images/items/0088.png b/game/resource/flash3/images/items/0088.png similarity index 100% rename from resource/flash3/images/items/0088.png rename to game/resource/flash3/images/items/0088.png diff --git a/resource/flash3/images/items/0089.png b/game/resource/flash3/images/items/0089.png similarity index 100% rename from resource/flash3/images/items/0089.png rename to game/resource/flash3/images/items/0089.png diff --git a/resource/flash3/images/items/0090.png b/game/resource/flash3/images/items/0090.png similarity index 100% rename from resource/flash3/images/items/0090.png rename to game/resource/flash3/images/items/0090.png diff --git a/resource/flash3/images/items/0091.png b/game/resource/flash3/images/items/0091.png similarity index 100% rename from resource/flash3/images/items/0091.png rename to game/resource/flash3/images/items/0091.png diff --git a/resource/flash3/images/items/0092.png b/game/resource/flash3/images/items/0092.png similarity index 100% rename from resource/flash3/images/items/0092.png rename to game/resource/flash3/images/items/0092.png diff --git a/resource/flash3/images/items/0093.png b/game/resource/flash3/images/items/0093.png similarity index 100% rename from resource/flash3/images/items/0093.png rename to game/resource/flash3/images/items/0093.png diff --git a/resource/flash3/images/items/0094.png b/game/resource/flash3/images/items/0094.png similarity index 100% rename from resource/flash3/images/items/0094.png rename to game/resource/flash3/images/items/0094.png diff --git a/resource/flash3/images/items/0095.png b/game/resource/flash3/images/items/0095.png similarity index 100% rename from resource/flash3/images/items/0095.png rename to game/resource/flash3/images/items/0095.png diff --git a/resource/flash3/images/items/0096.png b/game/resource/flash3/images/items/0096.png similarity index 100% rename from resource/flash3/images/items/0096.png rename to game/resource/flash3/images/items/0096.png diff --git a/resource/flash3/images/items/0097.png b/game/resource/flash3/images/items/0097.png similarity index 100% rename from resource/flash3/images/items/0097.png rename to game/resource/flash3/images/items/0097.png diff --git a/resource/flash3/images/items/0099.png b/game/resource/flash3/images/items/0099.png similarity index 100% rename from resource/flash3/images/items/0099.png rename to game/resource/flash3/images/items/0099.png diff --git a/resource/flash3/images/items/0103.png b/game/resource/flash3/images/items/0103.png similarity index 100% rename from resource/flash3/images/items/0103.png rename to game/resource/flash3/images/items/0103.png diff --git a/resource/flash3/images/items/0104.png b/game/resource/flash3/images/items/0104.png similarity index 100% rename from resource/flash3/images/items/0104.png rename to game/resource/flash3/images/items/0104.png diff --git a/resource/flash3/images/items/0105.png b/game/resource/flash3/images/items/0105.png similarity index 100% rename from resource/flash3/images/items/0105.png rename to game/resource/flash3/images/items/0105.png diff --git a/resource/flash3/images/items/0106.png b/game/resource/flash3/images/items/0106.png similarity index 100% rename from resource/flash3/images/items/0106.png rename to game/resource/flash3/images/items/0106.png diff --git a/resource/flash3/images/items/0107.png b/game/resource/flash3/images/items/0107.png similarity index 100% rename from resource/flash3/images/items/0107.png rename to game/resource/flash3/images/items/0107.png diff --git a/resource/flash3/images/items/0108.png b/game/resource/flash3/images/items/0108.png similarity index 100% rename from resource/flash3/images/items/0108.png rename to game/resource/flash3/images/items/0108.png diff --git a/resource/flash3/images/items/0109.png b/game/resource/flash3/images/items/0109.png similarity index 100% rename from resource/flash3/images/items/0109.png rename to game/resource/flash3/images/items/0109.png diff --git a/resource/flash3/images/items/0110.png b/game/resource/flash3/images/items/0110.png similarity index 100% rename from resource/flash3/images/items/0110.png rename to game/resource/flash3/images/items/0110.png diff --git a/resource/flash3/images/items/0111.png b/game/resource/flash3/images/items/0111.png similarity index 100% rename from resource/flash3/images/items/0111.png rename to game/resource/flash3/images/items/0111.png diff --git a/resource/flash3/images/items/0113.png b/game/resource/flash3/images/items/0113.png similarity index 100% rename from resource/flash3/images/items/0113.png rename to game/resource/flash3/images/items/0113.png diff --git a/resource/flash3/images/items/0114.png b/game/resource/flash3/images/items/0114.png similarity index 100% rename from resource/flash3/images/items/0114.png rename to game/resource/flash3/images/items/0114.png diff --git a/resource/flash3/images/items/0115.png b/game/resource/flash3/images/items/0115.png similarity index 100% rename from resource/flash3/images/items/0115.png rename to game/resource/flash3/images/items/0115.png diff --git a/resource/flash3/images/items/0125.png b/game/resource/flash3/images/items/0125.png similarity index 100% rename from resource/flash3/images/items/0125.png rename to game/resource/flash3/images/items/0125.png diff --git a/resource/flash3/images/items/0132.png b/game/resource/flash3/images/items/0132.png similarity index 100% rename from resource/flash3/images/items/0132.png rename to game/resource/flash3/images/items/0132.png diff --git a/resource/flash3/images/items/0135.png b/game/resource/flash3/images/items/0135.png similarity index 100% rename from resource/flash3/images/items/0135.png rename to game/resource/flash3/images/items/0135.png diff --git a/resource/flash3/images/items/0145.png b/game/resource/flash3/images/items/0145.png similarity index 100% rename from resource/flash3/images/items/0145.png rename to game/resource/flash3/images/items/0145.png diff --git a/resource/flash3/images/items/0168.png b/game/resource/flash3/images/items/0168.png similarity index 100% rename from resource/flash3/images/items/0168.png rename to game/resource/flash3/images/items/0168.png diff --git a/resource/flash3/images/items/0169.png b/game/resource/flash3/images/items/0169.png similarity index 100% rename from resource/flash3/images/items/0169.png rename to game/resource/flash3/images/items/0169.png diff --git a/resource/flash3/images/items/1001.png b/game/resource/flash3/images/items/1001.png similarity index 100% rename from resource/flash3/images/items/1001.png rename to game/resource/flash3/images/items/1001.png diff --git a/resource/flash3/images/items/1002.png b/game/resource/flash3/images/items/1002.png similarity index 100% rename from resource/flash3/images/items/1002.png rename to game/resource/flash3/images/items/1002.png diff --git a/resource/flash3/images/items/1003.png b/game/resource/flash3/images/items/1003.png similarity index 100% rename from resource/flash3/images/items/1003.png rename to game/resource/flash3/images/items/1003.png diff --git a/resource/flash3/images/items/1004.png b/game/resource/flash3/images/items/1004.png similarity index 100% rename from resource/flash3/images/items/1004.png rename to game/resource/flash3/images/items/1004.png diff --git a/resource/flash3/images/items/1005.png b/game/resource/flash3/images/items/1005.png similarity index 100% rename from resource/flash3/images/items/1005.png rename to game/resource/flash3/images/items/1005.png diff --git a/resource/flash3/images/items/1006.png b/game/resource/flash3/images/items/1006.png similarity index 100% rename from resource/flash3/images/items/1006.png rename to game/resource/flash3/images/items/1006.png diff --git a/resource/flash3/images/items/2001.png b/game/resource/flash3/images/items/2001.png similarity index 100% rename from resource/flash3/images/items/2001.png rename to game/resource/flash3/images/items/2001.png diff --git a/resource/flash3/images/items/2002.png b/game/resource/flash3/images/items/2002.png similarity index 100% rename from resource/flash3/images/items/2002.png rename to game/resource/flash3/images/items/2002.png diff --git a/resource/flash3/images/items/2003.png b/game/resource/flash3/images/items/2003.png similarity index 100% rename from resource/flash3/images/items/2003.png rename to game/resource/flash3/images/items/2003.png diff --git a/resource/flash3/images/items/2004.png b/game/resource/flash3/images/items/2004.png similarity index 100% rename from resource/flash3/images/items/2004.png rename to game/resource/flash3/images/items/2004.png diff --git a/resource/flash3/images/items/2005.png b/game/resource/flash3/images/items/2005.png similarity index 100% rename from resource/flash3/images/items/2005.png rename to game/resource/flash3/images/items/2005.png diff --git a/resource/flash3/images/items/2006.png b/game/resource/flash3/images/items/2006.png similarity index 100% rename from resource/flash3/images/items/2006.png rename to game/resource/flash3/images/items/2006.png diff --git a/resource/flash3/images/items/2007.png b/game/resource/flash3/images/items/2007.png similarity index 100% rename from resource/flash3/images/items/2007.png rename to game/resource/flash3/images/items/2007.png diff --git a/resource/flash3/images/items/2008.png b/game/resource/flash3/images/items/2008.png similarity index 100% rename from resource/flash3/images/items/2008.png rename to game/resource/flash3/images/items/2008.png diff --git a/resource/flash3/images/items/2009.png b/game/resource/flash3/images/items/2009.png similarity index 100% rename from resource/flash3/images/items/2009.png rename to game/resource/flash3/images/items/2009.png diff --git a/resource/flash3/images/items/2010.png b/game/resource/flash3/images/items/2010.png similarity index 100% rename from resource/flash3/images/items/2010.png rename to game/resource/flash3/images/items/2010.png diff --git a/resource/flash3/images/items/2011.png b/game/resource/flash3/images/items/2011.png similarity index 100% rename from resource/flash3/images/items/2011.png rename to game/resource/flash3/images/items/2011.png diff --git a/resource/flash3/images/items/2012.png b/game/resource/flash3/images/items/2012.png similarity index 100% rename from resource/flash3/images/items/2012.png rename to game/resource/flash3/images/items/2012.png diff --git a/resource/flash3/images/items/2013.png b/game/resource/flash3/images/items/2013.png similarity index 100% rename from resource/flash3/images/items/2013.png rename to game/resource/flash3/images/items/2013.png diff --git a/resource/flash3/images/items/2014.png b/game/resource/flash3/images/items/2014.png similarity index 100% rename from resource/flash3/images/items/2014.png rename to game/resource/flash3/images/items/2014.png diff --git a/resource/flash3/images/items/2015.png b/game/resource/flash3/images/items/2015.png similarity index 100% rename from resource/flash3/images/items/2015.png rename to game/resource/flash3/images/items/2015.png diff --git a/resource/flash3/images/items/2016.png b/game/resource/flash3/images/items/2016.png similarity index 100% rename from resource/flash3/images/items/2016.png rename to game/resource/flash3/images/items/2016.png diff --git a/resource/flash3/images/items/2017.png b/game/resource/flash3/images/items/2017.png similarity index 100% rename from resource/flash3/images/items/2017.png rename to game/resource/flash3/images/items/2017.png diff --git a/resource/flash3/images/items/2018.png b/game/resource/flash3/images/items/2018.png similarity index 100% rename from resource/flash3/images/items/2018.png rename to game/resource/flash3/images/items/2018.png diff --git a/resource/flash3/images/items/2019.png b/game/resource/flash3/images/items/2019.png similarity index 100% rename from resource/flash3/images/items/2019.png rename to game/resource/flash3/images/items/2019.png diff --git a/resource/flash3/images/items/2020.png b/game/resource/flash3/images/items/2020.png similarity index 100% rename from resource/flash3/images/items/2020.png rename to game/resource/flash3/images/items/2020.png diff --git a/resource/flash3/images/items/2021.png b/game/resource/flash3/images/items/2021.png similarity index 100% rename from resource/flash3/images/items/2021.png rename to game/resource/flash3/images/items/2021.png diff --git a/resource/flash3/images/items/2022.png b/game/resource/flash3/images/items/2022.png similarity index 100% rename from resource/flash3/images/items/2022.png rename to game/resource/flash3/images/items/2022.png diff --git a/resource/flash3/images/items/3011.png b/game/resource/flash3/images/items/3011.png similarity index 100% rename from resource/flash3/images/items/3011.png rename to game/resource/flash3/images/items/3011.png diff --git a/resource/flash3/images/items/3012.png b/game/resource/flash3/images/items/3012.png similarity index 100% rename from resource/flash3/images/items/3012.png rename to game/resource/flash3/images/items/3012.png diff --git a/resource/flash3/images/items/3013.png b/game/resource/flash3/images/items/3013.png similarity index 100% rename from resource/flash3/images/items/3013.png rename to game/resource/flash3/images/items/3013.png diff --git a/resource/flash3/images/items/3014.png b/game/resource/flash3/images/items/3014.png similarity index 100% rename from resource/flash3/images/items/3014.png rename to game/resource/flash3/images/items/3014.png diff --git a/resource/flash3/images/items/3015.png b/game/resource/flash3/images/items/3015.png similarity index 100% rename from resource/flash3/images/items/3015.png rename to game/resource/flash3/images/items/3015.png diff --git a/resource/flash3/images/items/3016.png b/game/resource/flash3/images/items/3016.png similarity index 100% rename from resource/flash3/images/items/3016.png rename to game/resource/flash3/images/items/3016.png diff --git a/resource/flash3/images/items/3017.png b/game/resource/flash3/images/items/3017.png similarity index 100% rename from resource/flash3/images/items/3017.png rename to game/resource/flash3/images/items/3017.png diff --git a/resource/flash3/images/items/3018.png b/game/resource/flash3/images/items/3018.png similarity index 100% rename from resource/flash3/images/items/3018.png rename to game/resource/flash3/images/items/3018.png diff --git a/resource/flash3/images/items/3019.png b/game/resource/flash3/images/items/3019.png similarity index 100% rename from resource/flash3/images/items/3019.png rename to game/resource/flash3/images/items/3019.png diff --git a/resource/flash3/images/items/3020.png b/game/resource/flash3/images/items/3020.png similarity index 100% rename from resource/flash3/images/items/3020.png rename to game/resource/flash3/images/items/3020.png diff --git a/resource/flash3/images/items/3021.png b/game/resource/flash3/images/items/3021.png similarity index 100% rename from resource/flash3/images/items/3021.png rename to game/resource/flash3/images/items/3021.png diff --git a/resource/flash3/images/items/3022.png b/game/resource/flash3/images/items/3022.png similarity index 100% rename from resource/flash3/images/items/3022.png rename to game/resource/flash3/images/items/3022.png diff --git a/resource/flash3/images/items/3023.png b/game/resource/flash3/images/items/3023.png similarity index 100% rename from resource/flash3/images/items/3023.png rename to game/resource/flash3/images/items/3023.png diff --git a/resource/flash3/images/items/3024.png b/game/resource/flash3/images/items/3024.png similarity index 100% rename from resource/flash3/images/items/3024.png rename to game/resource/flash3/images/items/3024.png diff --git a/resource/flash3/images/items/3025.png b/game/resource/flash3/images/items/3025.png similarity index 100% rename from resource/flash3/images/items/3025.png rename to game/resource/flash3/images/items/3025.png diff --git a/resource/flash3/images/items/3026.png b/game/resource/flash3/images/items/3026.png similarity index 100% rename from resource/flash3/images/items/3026.png rename to game/resource/flash3/images/items/3026.png diff --git a/resource/flash3/images/items/3027.png b/game/resource/flash3/images/items/3027.png similarity index 100% rename from resource/flash3/images/items/3027.png rename to game/resource/flash3/images/items/3027.png diff --git a/resource/flash3/images/items/3028.png b/game/resource/flash3/images/items/3028.png similarity index 100% rename from resource/flash3/images/items/3028.png rename to game/resource/flash3/images/items/3028.png diff --git a/resource/flash3/images/items/3029.png b/game/resource/flash3/images/items/3029.png similarity index 100% rename from resource/flash3/images/items/3029.png rename to game/resource/flash3/images/items/3029.png diff --git a/resource/flash3/images/items/3030.png b/game/resource/flash3/images/items/3030.png similarity index 100% rename from resource/flash3/images/items/3030.png rename to game/resource/flash3/images/items/3030.png diff --git a/resource/flash3/images/items/3031.png b/game/resource/flash3/images/items/3031.png similarity index 100% rename from resource/flash3/images/items/3031.png rename to game/resource/flash3/images/items/3031.png diff --git a/resource/flash3/images/items/3050.png b/game/resource/flash3/images/items/3050.png similarity index 100% rename from resource/flash3/images/items/3050.png rename to game/resource/flash3/images/items/3050.png diff --git a/resource/flash3/images/items/3154.png b/game/resource/flash3/images/items/3154.png similarity index 100% rename from resource/flash3/images/items/3154.png rename to game/resource/flash3/images/items/3154.png diff --git a/resource/flash3/images/items/chest_01.png b/game/resource/flash3/images/items/chest_01.png similarity index 100% rename from resource/flash3/images/items/chest_01.png rename to game/resource/flash3/images/items/chest_01.png diff --git a/resource/flash3/images/items/chest_02.png b/game/resource/flash3/images/items/chest_02.png similarity index 100% rename from resource/flash3/images/items/chest_02.png rename to game/resource/flash3/images/items/chest_02.png diff --git a/resource/flash3/images/items/chest_03.png b/game/resource/flash3/images/items/chest_03.png similarity index 100% rename from resource/flash3/images/items/chest_03.png rename to game/resource/flash3/images/items/chest_03.png diff --git a/resource/flash3/images/items/custom/2019_consumables_bundle.png b/game/resource/flash3/images/items/custom/2019_consumables_bundle.png similarity index 100% rename from resource/flash3/images/items/custom/2019_consumables_bundle.png rename to game/resource/flash3/images/items/custom/2019_consumables_bundle.png diff --git a/resource/flash3/images/items/custom/frosthaven_consumables_bundle.png b/game/resource/flash3/images/items/custom/frosthaven_consumables_bundle.png similarity index 100% rename from resource/flash3/images/items/custom/frosthaven_consumables_bundle.png rename to game/resource/flash3/images/items/custom/frosthaven_consumables_bundle.png diff --git a/resource/flash3/images/items/custom/seasonal_decorate_tree.png b/game/resource/flash3/images/items/custom/seasonal_decorate_tree.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_decorate_tree.png rename to game/resource/flash3/images/items/custom/seasonal_decorate_tree.png diff --git a/resource/flash3/images/items/custom/seasonal_festive_firework.png b/game/resource/flash3/images/items/custom/seasonal_festive_firework.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_festive_firework.png rename to game/resource/flash3/images/items/custom/seasonal_festive_firework.png diff --git a/resource/flash3/images/items/custom/seasonal_firecrackers.png b/game/resource/flash3/images/items/custom/seasonal_firecrackers.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_firecrackers.png rename to game/resource/flash3/images/items/custom/seasonal_firecrackers.png diff --git a/resource/flash3/images/items/custom/seasonal_summon_cny_balloon.png b/game/resource/flash3/images/items/custom/seasonal_summon_cny_balloon.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_summon_cny_balloon.png rename to game/resource/flash3/images/items/custom/seasonal_summon_cny_balloon.png diff --git a/resource/flash3/images/items/custom/seasonal_summon_cny_tree.png b/game/resource/flash3/images/items/custom/seasonal_summon_cny_tree.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_summon_cny_tree.png rename to game/resource/flash3/images/items/custom/seasonal_summon_cny_tree.png diff --git a/resource/flash3/images/items/custom/seasonal_summon_dragon.png b/game/resource/flash3/images/items/custom/seasonal_summon_dragon.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_summon_dragon.png rename to game/resource/flash3/images/items/custom/seasonal_summon_dragon.png diff --git a/resource/flash3/images/items/custom/seasonal_summon_snowman.png b/game/resource/flash3/images/items/custom/seasonal_summon_snowman.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_summon_snowman.png rename to game/resource/flash3/images/items/custom/seasonal_summon_snowman.png diff --git a/resource/flash3/images/items/custom/seasonal_throw_snowball.png b/game/resource/flash3/images/items/custom/seasonal_throw_snowball.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_throw_snowball.png rename to game/resource/flash3/images/items/custom/seasonal_throw_snowball.png diff --git a/resource/flash3/images/items/custom/seasonal_ti10_high_five.png b/game/resource/flash3/images/items/custom/seasonal_ti10_high_five.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_ti10_high_five.png rename to game/resource/flash3/images/items/custom/seasonal_ti10_high_five.png diff --git a/resource/flash3/images/items/custom/seasonal_ti10_soccer_ball.png b/game/resource/flash3/images/items/custom/seasonal_ti10_soccer_ball.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_ti10_soccer_ball.png rename to game/resource/flash3/images/items/custom/seasonal_ti10_soccer_ball.png diff --git a/resource/flash3/images/items/custom/seasonal_ti9_instruments.png b/game/resource/flash3/images/items/custom/seasonal_ti9_instruments.png similarity index 100% rename from resource/flash3/images/items/custom/seasonal_ti9_instruments.png rename to game/resource/flash3/images/items/custom/seasonal_ti9_instruments.png diff --git a/resource/flash3/images/items/ex_rumia.png b/game/resource/flash3/images/items/ex_rumia.png similarity index 100% rename from resource/flash3/images/items/ex_rumia.png rename to game/resource/flash3/images/items/ex_rumia.png diff --git a/resource/flash3/images/items/fairyflower.png b/game/resource/flash3/images/items/fairyflower.png similarity index 100% rename from resource/flash3/images/items/fairyflower.png rename to game/resource/flash3/images/items/fairyflower.png diff --git a/resource/flash3/images/items/key_01.png b/game/resource/flash3/images/items/key_01.png similarity index 100% rename from resource/flash3/images/items/key_01.png rename to game/resource/flash3/images/items/key_01.png diff --git a/resource/flash3/images/items/nian.png b/game/resource/flash3/images/items/nian.png similarity index 100% rename from resource/flash3/images/items/nian.png rename to game/resource/flash3/images/items/nian.png diff --git a/resource/flash3/images/items/poweover.png b/game/resource/flash3/images/items/poweover.png similarity index 100% rename from resource/flash3/images/items/poweover.png rename to game/resource/flash3/images/items/poweover.png diff --git a/resource/flash3/images/items/tianjian.png b/game/resource/flash3/images/items/tianjian.png similarity index 100% rename from resource/flash3/images/items/tianjian.png rename to game/resource/flash3/images/items/tianjian.png diff --git a/resource/flash3/images/items/tianyu.png b/game/resource/flash3/images/items/tianyu.png similarity index 100% rename from resource/flash3/images/items/tianyu.png rename to game/resource/flash3/images/items/tianyu.png diff --git a/resource/flash3/images/items/xuanyuan.png b/game/resource/flash3/images/items/xuanyuan.png similarity index 100% rename from resource/flash3/images/items/xuanyuan.png rename to game/resource/flash3/images/items/xuanyuan.png diff --git a/resource/flash3/images/items/yuhun.png b/game/resource/flash3/images/items/yuhun.png similarity index 100% rename from resource/flash3/images/items/yuhun.png rename to game/resource/flash3/images/items/yuhun.png diff --git a/resource/flash3/images/miniheroes/juggernaut.png b/game/resource/flash3/images/miniheroes/juggernaut.png similarity index 100% rename from resource/flash3/images/miniheroes/juggernaut.png rename to game/resource/flash3/images/miniheroes/juggernaut.png diff --git a/resource/flash3/images/miniheroes/lina.png b/game/resource/flash3/images/miniheroes/lina.png similarity index 100% rename from resource/flash3/images/miniheroes/lina.png rename to game/resource/flash3/images/miniheroes/lina.png diff --git a/resource/flash3/images/spellicons/ability_collection_power.png b/game/resource/flash3/images/spellicons/ability_collection_power.png similarity index 100% rename from resource/flash3/images/spellicons/ability_collection_power.png rename to game/resource/flash3/images/spellicons/ability_collection_power.png diff --git a/resource/flash3/images/spellicons/down.png b/game/resource/flash3/images/spellicons/down.png similarity index 100% rename from resource/flash3/images/spellicons/down.png rename to game/resource/flash3/images/spellicons/down.png diff --git a/resource/flash3/images/spellicons/equal.png b/game/resource/flash3/images/spellicons/equal.png similarity index 100% rename from resource/flash3/images/spellicons/equal.png rename to game/resource/flash3/images/spellicons/equal.png diff --git a/resource/flash3/images/spellicons/gold.png b/game/resource/flash3/images/spellicons/gold.png similarity index 100% rename from resource/flash3/images/spellicons/gold.png rename to game/resource/flash3/images/spellicons/gold.png diff --git a/resource/flash3/images/spellicons/item_2011.png b/game/resource/flash3/images/spellicons/item_2011.png similarity index 100% rename from resource/flash3/images/spellicons/item_2011.png rename to game/resource/flash3/images/spellicons/item_2011.png diff --git a/resource/flash3/images/spellicons/item_3011.png b/game/resource/flash3/images/spellicons/item_3011.png similarity index 100% rename from resource/flash3/images/spellicons/item_3011.png rename to game/resource/flash3/images/spellicons/item_3011.png diff --git a/resource/flash3/images/spellicons/item_3012.png b/game/resource/flash3/images/spellicons/item_3012.png similarity index 100% rename from resource/flash3/images/spellicons/item_3012.png rename to game/resource/flash3/images/spellicons/item_3012.png diff --git a/resource/flash3/images/spellicons/item_3013.png b/game/resource/flash3/images/spellicons/item_3013.png similarity index 100% rename from resource/flash3/images/spellicons/item_3013.png rename to game/resource/flash3/images/spellicons/item_3013.png diff --git a/resource/flash3/images/spellicons/item_3014.png b/game/resource/flash3/images/spellicons/item_3014.png similarity index 100% rename from resource/flash3/images/spellicons/item_3014.png rename to game/resource/flash3/images/spellicons/item_3014.png diff --git a/resource/flash3/images/spellicons/item_3015.png b/game/resource/flash3/images/spellicons/item_3015.png similarity index 100% rename from resource/flash3/images/spellicons/item_3015.png rename to game/resource/flash3/images/spellicons/item_3015.png diff --git a/resource/flash3/images/spellicons/item_3016.png b/game/resource/flash3/images/spellicons/item_3016.png similarity index 100% rename from resource/flash3/images/spellicons/item_3016.png rename to game/resource/flash3/images/spellicons/item_3016.png diff --git a/resource/flash3/images/spellicons/item_3017.png b/game/resource/flash3/images/spellicons/item_3017.png similarity index 100% rename from resource/flash3/images/spellicons/item_3017.png rename to game/resource/flash3/images/spellicons/item_3017.png diff --git a/resource/flash3/images/spellicons/item_3018.png b/game/resource/flash3/images/spellicons/item_3018.png similarity index 100% rename from resource/flash3/images/spellicons/item_3018.png rename to game/resource/flash3/images/spellicons/item_3018.png diff --git a/resource/flash3/images/spellicons/item_3019.png b/game/resource/flash3/images/spellicons/item_3019.png similarity index 100% rename from resource/flash3/images/spellicons/item_3019.png rename to game/resource/flash3/images/spellicons/item_3019.png diff --git a/resource/flash3/images/spellicons/item_3020.png b/game/resource/flash3/images/spellicons/item_3020.png similarity index 100% rename from resource/flash3/images/spellicons/item_3020.png rename to game/resource/flash3/images/spellicons/item_3020.png diff --git a/resource/flash3/images/spellicons/item_3021.png b/game/resource/flash3/images/spellicons/item_3021.png similarity index 100% rename from resource/flash3/images/spellicons/item_3021.png rename to game/resource/flash3/images/spellicons/item_3021.png diff --git a/resource/flash3/images/spellicons/item_3022.png b/game/resource/flash3/images/spellicons/item_3022.png similarity index 100% rename from resource/flash3/images/spellicons/item_3022.png rename to game/resource/flash3/images/spellicons/item_3022.png diff --git a/resource/flash3/images/spellicons/item_3023.png b/game/resource/flash3/images/spellicons/item_3023.png similarity index 100% rename from resource/flash3/images/spellicons/item_3023.png rename to game/resource/flash3/images/spellicons/item_3023.png diff --git a/resource/flash3/images/spellicons/item_3024.png b/game/resource/flash3/images/spellicons/item_3024.png similarity index 100% rename from resource/flash3/images/spellicons/item_3024.png rename to game/resource/flash3/images/spellicons/item_3024.png diff --git a/resource/flash3/images/spellicons/item_3025.png b/game/resource/flash3/images/spellicons/item_3025.png similarity index 100% rename from resource/flash3/images/spellicons/item_3025.png rename to game/resource/flash3/images/spellicons/item_3025.png diff --git a/resource/flash3/images/spellicons/item_3026.png b/game/resource/flash3/images/spellicons/item_3026.png similarity index 100% rename from resource/flash3/images/spellicons/item_3026.png rename to game/resource/flash3/images/spellicons/item_3026.png diff --git a/resource/flash3/images/spellicons/item_3027.png b/game/resource/flash3/images/spellicons/item_3027.png similarity index 100% rename from resource/flash3/images/spellicons/item_3027.png rename to game/resource/flash3/images/spellicons/item_3027.png diff --git a/resource/flash3/images/spellicons/item_3028.png b/game/resource/flash3/images/spellicons/item_3028.png similarity index 100% rename from resource/flash3/images/spellicons/item_3028.png rename to game/resource/flash3/images/spellicons/item_3028.png diff --git a/resource/flash3/images/spellicons/item_3029.png b/game/resource/flash3/images/spellicons/item_3029.png similarity index 100% rename from resource/flash3/images/spellicons/item_3029.png rename to game/resource/flash3/images/spellicons/item_3029.png diff --git a/resource/flash3/images/spellicons/item_3030.png b/game/resource/flash3/images/spellicons/item_3030.png similarity index 100% rename from resource/flash3/images/spellicons/item_3030.png rename to game/resource/flash3/images/spellicons/item_3030.png diff --git a/resource/flash3/images/spellicons/item_3031.png b/game/resource/flash3/images/spellicons/item_3031.png similarity index 100% rename from resource/flash3/images/spellicons/item_3031.png rename to game/resource/flash3/images/spellicons/item_3031.png diff --git a/resource/flash3/images/spellicons/item_3050.png b/game/resource/flash3/images/spellicons/item_3050.png similarity index 100% rename from resource/flash3/images/spellicons/item_3050.png rename to game/resource/flash3/images/spellicons/item_3050.png diff --git a/resource/flash3/images/spellicons/luck.png b/game/resource/flash3/images/spellicons/luck.png similarity index 100% rename from resource/flash3/images/spellicons/luck.png rename to game/resource/flash3/images/spellicons/luck.png diff --git a/resource/flash3/images/spellicons/random_boss_buff_attack_speed.png b/game/resource/flash3/images/spellicons/random_boss_buff_attack_speed.png similarity index 100% rename from resource/flash3/images/spellicons/random_boss_buff_attack_speed.png rename to game/resource/flash3/images/spellicons/random_boss_buff_attack_speed.png diff --git a/resource/flash3/images/spellicons/random_boss_buff_dead_heal.png b/game/resource/flash3/images/spellicons/random_boss_buff_dead_heal.png similarity index 100% rename from resource/flash3/images/spellicons/random_boss_buff_dead_heal.png rename to game/resource/flash3/images/spellicons/random_boss_buff_dead_heal.png diff --git a/resource/flash3/images/spellicons/random_boss_buff_health.png b/game/resource/flash3/images/spellicons/random_boss_buff_health.png similarity index 100% rename from resource/flash3/images/spellicons/random_boss_buff_health.png rename to game/resource/flash3/images/spellicons/random_boss_buff_health.png diff --git a/resource/flash3/images/spellicons/random_boss_buff_move_speed.png b/game/resource/flash3/images/spellicons/random_boss_buff_move_speed.png similarity index 100% rename from resource/flash3/images/spellicons/random_boss_buff_move_speed.png rename to game/resource/flash3/images/spellicons/random_boss_buff_move_speed.png diff --git a/resource/flash3/images/spellicons/skip_wave.png b/game/resource/flash3/images/spellicons/skip_wave.png similarity index 100% rename from resource/flash3/images/spellicons/skip_wave.png rename to game/resource/flash3/images/spellicons/skip_wave.png diff --git a/resource/flash3/images/spellicons/touhoutd/ai_cast_point.png b/game/resource/flash3/images/spellicons/touhoutd/ai_cast_point.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/ai_cast_point.png rename to game/resource/flash3/images/spellicons/touhoutd/ai_cast_point.png diff --git a/resource/flash3/images/spellicons/touhoutd/attack_buff.png b/game/resource/flash3/images/spellicons/touhoutd/attack_buff.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/attack_buff.png rename to game/resource/flash3/images/spellicons/touhoutd/attack_buff.png diff --git a/resource/flash3/images/spellicons/touhoutd/blink.png b/game/resource/flash3/images/spellicons/touhoutd/blink.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/blink.png rename to game/resource/flash3/images/spellicons/touhoutd/blink.png diff --git a/resource/flash3/images/spellicons/touhoutd/buy_egg_level_1.png b/game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_1.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/buy_egg_level_1.png rename to game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_1.png diff --git a/resource/flash3/images/spellicons/touhoutd/buy_egg_level_2.png b/game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_2.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/buy_egg_level_2.png rename to game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_2.png diff --git a/resource/flash3/images/spellicons/touhoutd/buy_egg_level_3.png b/game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_3.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/buy_egg_level_3.png rename to game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_3.png diff --git a/resource/flash3/images/spellicons/touhoutd/buy_egg_level_4.png b/game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_4.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/buy_egg_level_4.png rename to game/resource/flash3/images/spellicons/touhoutd/buy_egg_level_4.png diff --git a/resource/flash3/images/spellicons/touhoutd/buy_normal_card.png b/game/resource/flash3/images/spellicons/touhoutd/buy_normal_card.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/buy_normal_card.png rename to game/resource/flash3/images/spellicons/touhoutd/buy_normal_card.png diff --git a/resource/flash3/images/spellicons/touhoutd/buy_senior_card.png b/game/resource/flash3/images/spellicons/touhoutd/buy_senior_card.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/buy_senior_card.png rename to game/resource/flash3/images/spellicons/touhoutd/buy_senior_card.png diff --git a/resource/flash3/images/spellicons/touhoutd/close_star.png b/game/resource/flash3/images/spellicons/touhoutd/close_star.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/close_star.png rename to game/resource/flash3/images/spellicons/touhoutd/close_star.png diff --git a/resource/flash3/images/spellicons/touhoutd/exp_up.png b/game/resource/flash3/images/spellicons/touhoutd/exp_up.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/exp_up.png rename to game/resource/flash3/images/spellicons/touhoutd/exp_up.png diff --git a/resource/flash3/images/spellicons/touhoutd/power_buff.png b/game/resource/flash3/images/spellicons/touhoutd/power_buff.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/power_buff.png rename to game/resource/flash3/images/spellicons/touhoutd/power_buff.png diff --git a/resource/flash3/images/spellicons/touhoutd/reimu_pet_01.png b/game/resource/flash3/images/spellicons/touhoutd/reimu_pet_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/reimu_pet_01.png rename to game/resource/flash3/images/spellicons/touhoutd/reimu_pet_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/reimu_pet_02.png b/game/resource/flash3/images/spellicons/touhoutd/reimu_pet_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/reimu_pet_02.png rename to game/resource/flash3/images/spellicons/touhoutd/reimu_pet_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/reimu_pet_03.png b/game/resource/flash3/images/spellicons/touhoutd/reimu_pet_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/reimu_pet_03.png rename to game/resource/flash3/images/spellicons/touhoutd/reimu_pet_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/reimu_pet_04.png b/game/resource/flash3/images/spellicons/touhoutd/reimu_pet_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/reimu_pet_04.png rename to game/resource/flash3/images/spellicons/touhoutd/reimu_pet_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/reimu_pet_05.png b/game/resource/flash3/images/spellicons/touhoutd/reimu_pet_05.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/reimu_pet_05.png rename to game/resource/flash3/images/spellicons/touhoutd/reimu_pet_05.png diff --git a/resource/flash3/images/spellicons/touhoutd/reimu_pet_06.png b/game/resource/flash3/images/spellicons/touhoutd/reimu_pet_06.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/reimu_pet_06.png rename to game/resource/flash3/images/spellicons/touhoutd/reimu_pet_06.png diff --git a/resource/flash3/images/spellicons/touhoutd/release_tower.png b/game/resource/flash3/images/spellicons/touhoutd/release_tower.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/release_tower.png rename to game/resource/flash3/images/spellicons/touhoutd/release_tower.png diff --git a/resource/flash3/images/spellicons/touhoutd/shop_roll.png b/game/resource/flash3/images/spellicons/touhoutd/shop_roll.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/shop_roll.png rename to game/resource/flash3/images/spellicons/touhoutd/shop_roll.png diff --git a/resource/flash3/images/spellicons/touhoutd/sort_item.png b/game/resource/flash3/images/spellicons/touhoutd/sort_item.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/sort_item.png rename to game/resource/flash3/images/spellicons/touhoutd/sort_item.png diff --git a/resource/flash3/images/spellicons/touhoutd/star_up.png b/game/resource/flash3/images/spellicons/touhoutd/star_up.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/star_up.png rename to game/resource/flash3/images/spellicons/touhoutd/star_up.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_alice_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_alice_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_alice_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_alice_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_alice_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_alice_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_alice_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_alice_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_alice_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_alice_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_alice_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_alice_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_aya_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_aya_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_aya_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_aya_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_aya_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_aya_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_aya_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_aya_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_aya_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_aya_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_aya_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_aya_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_byakuren_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_byakuren_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_byakuren_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_byakuren_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_byakuren_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_chen_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_chen_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_chen_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_chen_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_cirno_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_cirno_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_cirno_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_cirno_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_cirno_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_cirno_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_cirno_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_cirno_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_cirno_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_clownpiece_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_daiyousei_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_eirin_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_eirin_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_eirin_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_eirin_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_eirin_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_eirin_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_eirin_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_eirin_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_eirin_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_flandre_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_flandre_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_flandre_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_flandre_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_flandre_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_flandre_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_flandre_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_flandre_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_flandre_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_futo_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_futo_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_futo_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_futo_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_futo_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_futo_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_futo_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_futo_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_futo_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_futo_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_futo_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_futo_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hanadayousei_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hanadayousei_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hanadayousei_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hanadayousei_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hatate_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hatate_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hatate_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hatate_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hatate_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hatate_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hatate_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hatate_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hecatia_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hecatia_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hecatia_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hecatia_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hecatia_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hina_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hina_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hina_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hina_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hina_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hina_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hina_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hina_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_hourainingyou_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_hourainingyou_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_hourainingyou_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_hourainingyou_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_iku_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_iku_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_iku_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_iku_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_iku_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_iku_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_iku_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_iku_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_inaba_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_inaba_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_inaba_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_inaba_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_junko_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_junko_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_junko_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_junko_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_junko_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_junko_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_junko_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_junko_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_junko_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_junko_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_junko_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_junko_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_junko_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_junko_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_junko_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_junko_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kaguya_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kaguya_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kaguya_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kaguya_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kanako_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kanako_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kanako_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kanako_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kanako_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kanako_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kanako_03_unit.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_03_unit.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kanako_03_unit.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_03_unit.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kanako_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kanako_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kanako_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_keine_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_keine_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_keine_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_keine_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_keine_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_keine_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_keine_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_keine_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_keine_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_keine_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_keine_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_keine_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_keine_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_keine_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_keine_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_keine_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kisume_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kisume_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kisume_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kisume_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kisume_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kisume_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kisume_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kisume_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_koakuma_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_koakuma_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_koakuma_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_koakuma_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_koakuma_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_koakuma_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_koakuma_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_koakuma_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kogasa_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kogasa_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kogasa_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kogasa_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kogasa_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kogasa_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kogasa_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kogasa_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_koishi_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_koishi_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_koishi_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_koishi_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_koishi_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_koishi_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_koishi_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_koishi_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_koishi_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kokoro_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kokoro_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kokoro_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kokoro_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kokoro_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_komachi_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_komachi_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_komachi_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_komachi_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_komachi_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_komachi_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_komachi_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_komachi_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_komachi_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kyouko_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kyouko_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kyouko_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kyouko_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_kyouko_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_kyouko_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_kyouko_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_kyouko_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_letty_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_letty_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_letty_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_letty_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_letty_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_letty_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_letty_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_letty_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_lily_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_lily_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_lily_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_lily_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_lily_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_lily_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_lily_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_lily_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_luna_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_luna_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_luna_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_luna_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_luna_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_luna_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_luna_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_luna_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_lunasa_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_lunasa_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_lunasa_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_lunasa_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_lunasa_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_lunasa_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_lunasa_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_lunasa_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_lyrica_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_lyrica_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_lyrica_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_lyrica_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_lyrica_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_lyrica_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_lyrica_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_lyrica_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_maidyousei_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_maidyousei_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_maidyousei_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_maidyousei_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_marisa_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_marisa_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_marisa_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_marisa_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_marisa_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_marisa_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_marisa_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_marisa_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_marisa_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_marisa_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_marisa_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_marisa_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_medicine_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_medicine_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_medicine_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_medicine_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_medicine_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_medicine_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_medicine_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_medicine_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_meirin_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_meirin_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_meirin_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_meirin_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_meirin_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_meirin_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_meirin_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_meirin_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_merlin_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_merlin_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_merlin_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_merlin_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_merlin_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_merlin_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_merlin_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_merlin_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_miko_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_miko_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_miko_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_miko_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_miko_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_miko_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_miko_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_miko_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_miko_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_miko_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_miko_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_miko_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_miko_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_miko_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_miko_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_miko_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_minamitsu_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_minoriko_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_minoriko_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_minoriko_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_minoriko_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_minoriko_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_minoriko_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_minoriko_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_minoriko_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_mokou_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_mokou_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_mokou_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_mokou_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_mokou_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_mokou_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_mokou_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_mokou_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_mokou_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_mokou_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_mokou_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_mokou_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_momiji_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_momiji_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_momiji_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_momiji_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_momiji_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_momiji_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_momiji_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_momiji_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_mugiyousei_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_mugiyousei_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_mugiyousei_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_mugiyousei_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_mystia_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_mystia_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_mystia_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_mystia_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_mystia_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_mystia_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_mystia_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_mystia_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_nazrin_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_nazrin_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_nazrin_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_nazrin_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_nue_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_nue_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_nue_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_nue_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_nue_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_nue_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_nue_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_nue_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_nue_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_nue_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_nue_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_nue_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_patchouli_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_patchouli_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_patchouli_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_patchouli_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_patchouli_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_ran_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_ran_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_ran_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_ran_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_ran_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_ran_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_ran_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_ran_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_ran_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_ran_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_ran_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_ran_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_reimu_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_reimu_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_reimu_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_reimu_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_reimu_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_reimu_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_reimu_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_reimu_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_reimu_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_reisen_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_reisen_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_reisen_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_reisen_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_reisen_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_reisen_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_reisen_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_reisen_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_reisen_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_reisen_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_reisen_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_reisen_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_remilia_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_remilia_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_remilia_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_remilia_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_remilia_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_remilia_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_remilia_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_remilia_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_remilia_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_rin_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_rin_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_rin_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_rin_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_rin_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_rin_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_rin_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_rin_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_rumia_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_rumia_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_rumia_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_rumia_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_rumia_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_rumia_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_rumia_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_rumia_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_rumia_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sakuya_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sakuya_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sakuya_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sakuya_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sanae_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sanae_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sanae_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sanae_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sanae_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sanae_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sanae_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sanae_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sanae_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_satori_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_satori_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_satori_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_satori_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_satori_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_satori_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_satori_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_satori_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_seiga_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_seiga_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_seiga_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_seiga_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_seiga_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_seiga_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_seiga_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_seiga_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_seiga_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_seiga_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_seiga_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_seiga_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shanghainingyou_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shanghainingyou_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shanghainingyou_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shanghainingyou_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shikieiki_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shinki_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shinki_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shinki_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shinki_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shinki_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shinki_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_shinki_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_shinki_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_shinki_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sizuha_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sizuha_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sizuha_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sizuha_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sizuha_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sizuha_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sizuha_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sizuha_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_soga_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_soga_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_soga_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_soga_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_soga_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_soga_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_soga_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_soga_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_soga_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_soga_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_soga_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_soga_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_star_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_star_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_star_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_star_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_star_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_star_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_star_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_star_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suika_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suika_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suika_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suika_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suika_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suika_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suika_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suika_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suika_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suika_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suika_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suika_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suika_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suika_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suika_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suika_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sunny_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sunny_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sunny_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sunny_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_sunny_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_sunny_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_sunny_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_sunny_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suwako_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suwako_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suwako_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suwako_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suwako_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suwako_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_suwako_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_suwako_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_suwako_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_tenshi_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_tenshi_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_tenshi_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_tenshi_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_toramaru_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_toramaru_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_toramaru_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_toramaru_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_toramaru_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_utsuho_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_utsuho_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_utsuho_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_utsuho_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yoshika_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yoshika_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yoshika_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yoshika_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yoshika_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yoshika_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yoshika_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yoshika_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_youmu_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_youmu_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_youmu_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_youmu_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_youmu_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_youmu_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_youmu_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_youmu_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_youmu_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_youmu_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_youmu_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_youmu_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yukari_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yukari_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yukari_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yukari_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yukari_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yukari_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yukari_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yukari_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yukari_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuugi_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuugi_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuugi_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuugi_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuuka_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuuka_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuuka_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_03.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_04.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_04.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuuka_04.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuuka_04.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_01.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_01.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_01.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_01.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_02.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_02.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_02.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_02.png diff --git a/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_03.png b/game/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_03.png similarity index 100% rename from resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_03.png rename to game/resource/flash3/images/spellicons/touhoutd/thtd_yuyuko_03.png diff --git a/resource/flash3/images/spellicons/up.png b/game/resource/flash3/images/spellicons/up.png similarity index 100% rename from resource/flash3/images/spellicons/up.png rename to game/resource/flash3/images/spellicons/up.png diff --git a/resource/flash3/videos/portraits/npc_dota_hero_lina.usm b/game/resource/flash3/videos/portraits/npc_dota_hero_lina.usm similarity index 100% rename from resource/flash3/videos/portraits/npc_dota_hero_lina.usm rename to game/resource/flash3/videos/portraits/npc_dota_hero_lina.usm diff --git a/resource/overviews/template_map.txt b/game/resource/overviews/template_map.txt similarity index 100% rename from resource/overviews/template_map.txt rename to game/resource/overviews/template_map.txt diff --git a/resource/overviews/touhoutd.txt b/game/resource/overviews/touhoutd.txt similarity index 100% rename from resource/overviews/touhoutd.txt rename to game/resource/overviews/touhoutd.txt diff --git a/resource/overviews/touhoutd_02.txt b/game/resource/overviews/touhoutd_02.txt similarity index 100% rename from resource/overviews/touhoutd_02.txt rename to game/resource/overviews/touhoutd_02.txt diff --git a/resource/word_filter_cache_1.dat b/game/resource/word_filter_cache_1.dat similarity index 100% rename from resource/word_filter_cache_1.dat rename to game/resource/word_filter_cache_1.dat diff --git a/scripts.7z b/game/scripts.7z similarity index 100% rename from scripts.7z rename to game/scripts.7z diff --git a/scripts/custom_net_tables.txt b/game/scripts/custom_net_tables.txt similarity index 100% rename from scripts/custom_net_tables.txt rename to game/scripts/custom_net_tables.txt diff --git a/scripts/npc/abilities/effect_abilities.kv b/game/scripts/npc/abilities/effect_abilities.kv similarity index 100% rename from scripts/npc/abilities/effect_abilities.kv rename to game/scripts/npc/abilities/effect_abilities.kv diff --git a/scripts/npc/abilities/lua_abilities.kv b/game/scripts/npc/abilities/lua_abilities.kv similarity index 100% rename from scripts/npc/abilities/lua_abilities.kv rename to game/scripts/npc/abilities/lua_abilities.kv diff --git a/scripts/npc/abilities/tower_abilities.kv b/game/scripts/npc/abilities/tower_abilities.kv similarity index 100% rename from scripts/npc/abilities/tower_abilities.kv rename to game/scripts/npc/abilities/tower_abilities.kv diff --git a/scripts/npc/ability_table.txt b/game/scripts/npc/ability_table.txt similarity index 100% rename from scripts/npc/ability_table.txt rename to game/scripts/npc/ability_table.txt diff --git a/scripts/npc/activelist.txt b/game/scripts/npc/activelist.txt similarity index 100% rename from scripts/npc/activelist.txt rename to game/scripts/npc/activelist.txt diff --git a/scripts/npc/attack_factor.txt b/game/scripts/npc/attack_factor.txt similarity index 100% rename from scripts/npc/attack_factor.txt rename to game/scripts/npc/attack_factor.txt diff --git a/scripts/npc/combo_table.txt b/game/scripts/npc/combo_table.txt similarity index 100% rename from scripts/npc/combo_table.txt rename to game/scripts/npc/combo_table.txt diff --git a/scripts/npc/config.txt b/game/scripts/npc/config.txt similarity index 100% rename from scripts/npc/config.txt rename to game/scripts/npc/config.txt diff --git a/scripts/npc/npc_abilities_custom.txt b/game/scripts/npc/npc_abilities_custom.txt similarity index 100% rename from scripts/npc/npc_abilities_custom.txt rename to game/scripts/npc/npc_abilities_custom.txt diff --git a/scripts/npc/npc_abilities_override.txt b/game/scripts/npc/npc_abilities_override.txt similarity index 100% rename from scripts/npc/npc_abilities_override.txt rename to game/scripts/npc/npc_abilities_override.txt diff --git a/scripts/npc/npc_heroes_custom.txt b/game/scripts/npc/npc_heroes_custom.txt similarity index 100% rename from scripts/npc/npc_heroes_custom.txt rename to game/scripts/npc/npc_heroes_custom.txt diff --git a/scripts/npc/npc_items_custom.txt b/game/scripts/npc/npc_items_custom.txt similarity index 100% rename from scripts/npc/npc_items_custom.txt rename to game/scripts/npc/npc_items_custom.txt diff --git a/scripts/npc/npc_units_custom.txt b/game/scripts/npc/npc_units_custom.txt similarity index 100% rename from scripts/npc/npc_units_custom.txt rename to game/scripts/npc/npc_units_custom.txt diff --git a/scripts/npc/portraits.txt b/game/scripts/npc/portraits.txt similarity index 100% rename from scripts/npc/portraits.txt rename to game/scripts/npc/portraits.txt diff --git a/scripts/npc/power_table.txt b/game/scripts/npc/power_table.txt similarity index 100% rename from scripts/npc/power_table.txt rename to game/scripts/npc/power_table.txt diff --git a/scripts/npc/shops.txt b/game/scripts/npc/shops.txt similarity index 100% rename from scripts/npc/shops.txt rename to game/scripts/npc/shops.txt diff --git a/scripts/npc/spawner.txt b/game/scripts/npc/spawner.txt similarity index 100% rename from scripts/npc/spawner.txt rename to game/scripts/npc/spawner.txt diff --git a/scripts/npc/tower.txt b/game/scripts/npc/tower.txt similarity index 100% rename from scripts/npc/tower.txt rename to game/scripts/npc/tower.txt diff --git a/scripts/npc/units/creeps.kv b/game/scripts/npc/units/creeps.kv similarity index 100% rename from scripts/npc/units/creeps.kv rename to game/scripts/npc/units/creeps.kv diff --git a/scripts/npc/units/tower.kv b/game/scripts/npc/units/tower.kv similarity index 100% rename from scripts/npc/units/tower.kv rename to game/scripts/npc/units/tower.kv diff --git a/scripts/shops.txt b/game/scripts/shops.txt similarity index 100% rename from scripts/shops.txt rename to game/scripts/shops.txt diff --git a/scripts/vscripts/abilities/ability_lua/hanadayousei.lua b/game/scripts/vscripts/abilities/ability_lua/hanadayousei.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/hanadayousei.lua rename to game/scripts/vscripts/abilities/ability_lua/hanadayousei.lua diff --git a/scripts/vscripts/abilities/ability_lua/hourainingyou.lua b/game/scripts/vscripts/abilities/ability_lua/hourainingyou.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/hourainingyou.lua rename to game/scripts/vscripts/abilities/ability_lua/hourainingyou.lua diff --git a/scripts/vscripts/abilities/ability_lua/lily.lua b/game/scripts/vscripts/abilities/ability_lua/lily.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/lily.lua rename to game/scripts/vscripts/abilities/ability_lua/lily.lua diff --git a/scripts/vscripts/abilities/ability_lua/modifier_hanadayousei_01.lua b/game/scripts/vscripts/abilities/ability_lua/modifier_hanadayousei_01.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/modifier_hanadayousei_01.lua rename to game/scripts/vscripts/abilities/ability_lua/modifier_hanadayousei_01.lua diff --git a/scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01.lua b/game/scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01.lua rename to game/scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01.lua diff --git a/scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01_stun_lock.lua b/game/scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01_stun_lock.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01_stun_lock.lua rename to game/scripts/vscripts/abilities/ability_lua/modifier_hourainingyou_01_stun_lock.lua diff --git a/scripts/vscripts/abilities/ability_lua/modifier_lily_01_effect_think.lua b/game/scripts/vscripts/abilities/ability_lua/modifier_lily_01_effect_think.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/modifier_lily_01_effect_think.lua rename to game/scripts/vscripts/abilities/ability_lua/modifier_lily_01_effect_think.lua diff --git a/scripts/vscripts/abilities/ability_lua/modifier_lily_02_buff.lua b/game/scripts/vscripts/abilities/ability_lua/modifier_lily_02_buff.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/modifier_lily_02_buff.lua rename to game/scripts/vscripts/abilities/ability_lua/modifier_lily_02_buff.lua diff --git a/scripts/vscripts/abilities/ability_lua/modifier_mugiyousei_01.lua b/game/scripts/vscripts/abilities/ability_lua/modifier_mugiyousei_01.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/modifier_mugiyousei_01.lua rename to game/scripts/vscripts/abilities/ability_lua/modifier_mugiyousei_01.lua diff --git a/scripts/vscripts/abilities/ability_lua/modifier_nazrin_01.lua b/game/scripts/vscripts/abilities/ability_lua/modifier_nazrin_01.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/modifier_nazrin_01.lua rename to game/scripts/vscripts/abilities/ability_lua/modifier_nazrin_01.lua diff --git a/scripts/vscripts/abilities/ability_lua/mugiyousei.lua b/game/scripts/vscripts/abilities/ability_lua/mugiyousei.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/mugiyousei.lua rename to game/scripts/vscripts/abilities/ability_lua/mugiyousei.lua diff --git a/scripts/vscripts/abilities/ability_lua/nazrin.lua b/game/scripts/vscripts/abilities/ability_lua/nazrin.lua similarity index 100% rename from scripts/vscripts/abilities/ability_lua/nazrin.lua rename to game/scripts/vscripts/abilities/ability_lua/nazrin.lua diff --git a/scripts/vscripts/abilities/abilityalice.lua b/game/scripts/vscripts/abilities/abilityalice.lua similarity index 100% rename from scripts/vscripts/abilities/abilityalice.lua rename to game/scripts/vscripts/abilities/abilityalice.lua diff --git a/scripts/vscripts/abilities/abilityaya.lua b/game/scripts/vscripts/abilities/abilityaya.lua similarity index 100% rename from scripts/vscripts/abilities/abilityaya.lua rename to game/scripts/vscripts/abilities/abilityaya.lua diff --git a/scripts/vscripts/abilities/abilitybyakuren.lua b/game/scripts/vscripts/abilities/abilitybyakuren.lua similarity index 100% rename from scripts/vscripts/abilities/abilitybyakuren.lua rename to game/scripts/vscripts/abilities/abilitybyakuren.lua diff --git a/scripts/vscripts/abilities/abilitychen.lua b/game/scripts/vscripts/abilities/abilitychen.lua similarity index 100% rename from scripts/vscripts/abilities/abilitychen.lua rename to game/scripts/vscripts/abilities/abilitychen.lua diff --git a/scripts/vscripts/abilities/abilitycirno.lua b/game/scripts/vscripts/abilities/abilitycirno.lua similarity index 100% rename from scripts/vscripts/abilities/abilitycirno.lua rename to game/scripts/vscripts/abilities/abilitycirno.lua diff --git a/scripts/vscripts/abilities/abilityclownpiece.lua b/game/scripts/vscripts/abilities/abilityclownpiece.lua similarity index 100% rename from scripts/vscripts/abilities/abilityclownpiece.lua rename to game/scripts/vscripts/abilities/abilityclownpiece.lua diff --git a/scripts/vscripts/abilities/abilitycommon.lua b/game/scripts/vscripts/abilities/abilitycommon.lua similarity index 100% rename from scripts/vscripts/abilities/abilitycommon.lua rename to game/scripts/vscripts/abilities/abilitycommon.lua diff --git a/scripts/vscripts/abilities/abilitydaiyousei.lua b/game/scripts/vscripts/abilities/abilitydaiyousei.lua similarity index 100% rename from scripts/vscripts/abilities/abilitydaiyousei.lua rename to game/scripts/vscripts/abilities/abilitydaiyousei.lua diff --git a/scripts/vscripts/abilities/abilityeirin.lua b/game/scripts/vscripts/abilities/abilityeirin.lua similarity index 100% rename from scripts/vscripts/abilities/abilityeirin.lua rename to game/scripts/vscripts/abilities/abilityeirin.lua diff --git a/scripts/vscripts/abilities/abilityflandre.lua b/game/scripts/vscripts/abilities/abilityflandre.lua similarity index 100% rename from scripts/vscripts/abilities/abilityflandre.lua rename to game/scripts/vscripts/abilities/abilityflandre.lua diff --git a/scripts/vscripts/abilities/abilityfuto.lua b/game/scripts/vscripts/abilities/abilityfuto.lua similarity index 100% rename from scripts/vscripts/abilities/abilityfuto.lua rename to game/scripts/vscripts/abilities/abilityfuto.lua diff --git a/scripts/vscripts/abilities/abilityhanadayousei.lua b/game/scripts/vscripts/abilities/abilityhanadayousei.lua similarity index 100% rename from scripts/vscripts/abilities/abilityhanadayousei.lua rename to game/scripts/vscripts/abilities/abilityhanadayousei.lua diff --git a/scripts/vscripts/abilities/abilityhatate.lua b/game/scripts/vscripts/abilities/abilityhatate.lua similarity index 100% rename from scripts/vscripts/abilities/abilityhatate.lua rename to game/scripts/vscripts/abilities/abilityhatate.lua diff --git a/scripts/vscripts/abilities/abilityhecatia.lua b/game/scripts/vscripts/abilities/abilityhecatia.lua similarity index 100% rename from scripts/vscripts/abilities/abilityhecatia.lua rename to game/scripts/vscripts/abilities/abilityhecatia.lua diff --git a/scripts/vscripts/abilities/abilityhina.lua b/game/scripts/vscripts/abilities/abilityhina.lua similarity index 100% rename from scripts/vscripts/abilities/abilityhina.lua rename to game/scripts/vscripts/abilities/abilityhina.lua diff --git a/scripts/vscripts/abilities/abilityhourainingyou.lua b/game/scripts/vscripts/abilities/abilityhourainingyou.lua similarity index 100% rename from scripts/vscripts/abilities/abilityhourainingyou.lua rename to game/scripts/vscripts/abilities/abilityhourainingyou.lua diff --git a/scripts/vscripts/abilities/abilityiku.lua b/game/scripts/vscripts/abilities/abilityiku.lua similarity index 100% rename from scripts/vscripts/abilities/abilityiku.lua rename to game/scripts/vscripts/abilities/abilityiku.lua diff --git a/scripts/vscripts/abilities/abilityinaba.lua b/game/scripts/vscripts/abilities/abilityinaba.lua similarity index 100% rename from scripts/vscripts/abilities/abilityinaba.lua rename to game/scripts/vscripts/abilities/abilityinaba.lua diff --git a/scripts/vscripts/abilities/abilityitem.lua b/game/scripts/vscripts/abilities/abilityitem.lua similarity index 100% rename from scripts/vscripts/abilities/abilityitem.lua rename to game/scripts/vscripts/abilities/abilityitem.lua diff --git a/scripts/vscripts/abilities/abilityjunko.lua b/game/scripts/vscripts/abilities/abilityjunko.lua similarity index 100% rename from scripts/vscripts/abilities/abilityjunko.lua rename to game/scripts/vscripts/abilities/abilityjunko.lua diff --git a/scripts/vscripts/abilities/abilitykagerou.lua b/game/scripts/vscripts/abilities/abilitykagerou.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykagerou.lua rename to game/scripts/vscripts/abilities/abilitykagerou.lua diff --git a/scripts/vscripts/abilities/abilitykaguya.lua b/game/scripts/vscripts/abilities/abilitykaguya.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykaguya.lua rename to game/scripts/vscripts/abilities/abilitykaguya.lua diff --git a/scripts/vscripts/abilities/abilitykanako.lua b/game/scripts/vscripts/abilities/abilitykanako.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykanako.lua rename to game/scripts/vscripts/abilities/abilitykanako.lua diff --git a/scripts/vscripts/abilities/abilitykeine.lua b/game/scripts/vscripts/abilities/abilitykeine.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykeine.lua rename to game/scripts/vscripts/abilities/abilitykeine.lua diff --git a/scripts/vscripts/abilities/abilitykisume.lua b/game/scripts/vscripts/abilities/abilitykisume.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykisume.lua rename to game/scripts/vscripts/abilities/abilitykisume.lua diff --git a/scripts/vscripts/abilities/abilitykoakuma.lua b/game/scripts/vscripts/abilities/abilitykoakuma.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykoakuma.lua rename to game/scripts/vscripts/abilities/abilitykoakuma.lua diff --git a/scripts/vscripts/abilities/abilitykogasa.lua b/game/scripts/vscripts/abilities/abilitykogasa.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykogasa.lua rename to game/scripts/vscripts/abilities/abilitykogasa.lua diff --git a/scripts/vscripts/abilities/abilitykoishi.lua b/game/scripts/vscripts/abilities/abilitykoishi.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykoishi.lua rename to game/scripts/vscripts/abilities/abilitykoishi.lua diff --git a/scripts/vscripts/abilities/abilitykokoro.lua b/game/scripts/vscripts/abilities/abilitykokoro.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykokoro.lua rename to game/scripts/vscripts/abilities/abilitykokoro.lua diff --git a/scripts/vscripts/abilities/abilitykomachi.lua b/game/scripts/vscripts/abilities/abilitykomachi.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykomachi.lua rename to game/scripts/vscripts/abilities/abilitykomachi.lua diff --git a/scripts/vscripts/abilities/abilitykyouko.lua b/game/scripts/vscripts/abilities/abilitykyouko.lua similarity index 100% rename from scripts/vscripts/abilities/abilitykyouko.lua rename to game/scripts/vscripts/abilities/abilitykyouko.lua diff --git a/scripts/vscripts/abilities/abilityletty.lua b/game/scripts/vscripts/abilities/abilityletty.lua similarity index 100% rename from scripts/vscripts/abilities/abilityletty.lua rename to game/scripts/vscripts/abilities/abilityletty.lua diff --git a/scripts/vscripts/abilities/abilitylily.lua b/game/scripts/vscripts/abilities/abilitylily.lua similarity index 100% rename from scripts/vscripts/abilities/abilitylily.lua rename to game/scripts/vscripts/abilities/abilitylily.lua diff --git a/scripts/vscripts/abilities/abilityluna.lua b/game/scripts/vscripts/abilities/abilityluna.lua similarity index 100% rename from scripts/vscripts/abilities/abilityluna.lua rename to game/scripts/vscripts/abilities/abilityluna.lua diff --git a/scripts/vscripts/abilities/abilitylunasa.lua b/game/scripts/vscripts/abilities/abilitylunasa.lua similarity index 100% rename from scripts/vscripts/abilities/abilitylunasa.lua rename to game/scripts/vscripts/abilities/abilitylunasa.lua diff --git a/scripts/vscripts/abilities/abilitylyrica.lua b/game/scripts/vscripts/abilities/abilitylyrica.lua similarity index 100% rename from scripts/vscripts/abilities/abilitylyrica.lua rename to game/scripts/vscripts/abilities/abilitylyrica.lua diff --git a/scripts/vscripts/abilities/abilitymarisa.lua b/game/scripts/vscripts/abilities/abilitymarisa.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymarisa.lua rename to game/scripts/vscripts/abilities/abilitymarisa.lua diff --git a/scripts/vscripts/abilities/abilitymedicine.lua b/game/scripts/vscripts/abilities/abilitymedicine.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymedicine.lua rename to game/scripts/vscripts/abilities/abilitymedicine.lua diff --git a/scripts/vscripts/abilities/abilitymeirin.lua b/game/scripts/vscripts/abilities/abilitymeirin.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymeirin.lua rename to game/scripts/vscripts/abilities/abilitymeirin.lua diff --git a/scripts/vscripts/abilities/abilitymerlin.lua b/game/scripts/vscripts/abilities/abilitymerlin.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymerlin.lua rename to game/scripts/vscripts/abilities/abilitymerlin.lua diff --git a/scripts/vscripts/abilities/abilitymiko.lua b/game/scripts/vscripts/abilities/abilitymiko.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymiko.lua rename to game/scripts/vscripts/abilities/abilitymiko.lua diff --git a/scripts/vscripts/abilities/abilityminamitsu.lua b/game/scripts/vscripts/abilities/abilityminamitsu.lua similarity index 100% rename from scripts/vscripts/abilities/abilityminamitsu.lua rename to game/scripts/vscripts/abilities/abilityminamitsu.lua diff --git a/scripts/vscripts/abilities/abilityminoriko.lua b/game/scripts/vscripts/abilities/abilityminoriko.lua similarity index 100% rename from scripts/vscripts/abilities/abilityminoriko.lua rename to game/scripts/vscripts/abilities/abilityminoriko.lua diff --git a/scripts/vscripts/abilities/abilitymokou.lua b/game/scripts/vscripts/abilities/abilitymokou.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymokou.lua rename to game/scripts/vscripts/abilities/abilitymokou.lua diff --git a/scripts/vscripts/abilities/abilitymomiji.lua b/game/scripts/vscripts/abilities/abilitymomiji.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymomiji.lua rename to game/scripts/vscripts/abilities/abilitymomiji.lua diff --git a/scripts/vscripts/abilities/abilitymugiyousei.lua b/game/scripts/vscripts/abilities/abilitymugiyousei.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymugiyousei.lua rename to game/scripts/vscripts/abilities/abilitymugiyousei.lua diff --git a/scripts/vscripts/abilities/abilitymystia.lua b/game/scripts/vscripts/abilities/abilitymystia.lua similarity index 100% rename from scripts/vscripts/abilities/abilitymystia.lua rename to game/scripts/vscripts/abilities/abilitymystia.lua diff --git a/scripts/vscripts/abilities/abilitynazrin.lua b/game/scripts/vscripts/abilities/abilitynazrin.lua similarity index 100% rename from scripts/vscripts/abilities/abilitynazrin.lua rename to game/scripts/vscripts/abilities/abilitynazrin.lua diff --git a/scripts/vscripts/abilities/abilitynue.lua b/game/scripts/vscripts/abilities/abilitynue.lua similarity index 100% rename from scripts/vscripts/abilities/abilitynue.lua rename to game/scripts/vscripts/abilities/abilitynue.lua diff --git a/scripts/vscripts/abilities/abilitypatchouli.lua b/game/scripts/vscripts/abilities/abilitypatchouli.lua similarity index 100% rename from scripts/vscripts/abilities/abilitypatchouli.lua rename to game/scripts/vscripts/abilities/abilitypatchouli.lua diff --git a/scripts/vscripts/abilities/abilityran.lua b/game/scripts/vscripts/abilities/abilityran.lua similarity index 100% rename from scripts/vscripts/abilities/abilityran.lua rename to game/scripts/vscripts/abilities/abilityran.lua diff --git a/scripts/vscripts/abilities/abilityreimu.lua b/game/scripts/vscripts/abilities/abilityreimu.lua similarity index 100% rename from scripts/vscripts/abilities/abilityreimu.lua rename to game/scripts/vscripts/abilities/abilityreimu.lua diff --git a/scripts/vscripts/abilities/abilityreimu_pet.lua b/game/scripts/vscripts/abilities/abilityreimu_pet.lua similarity index 100% rename from scripts/vscripts/abilities/abilityreimu_pet.lua rename to game/scripts/vscripts/abilities/abilityreimu_pet.lua diff --git a/scripts/vscripts/abilities/abilityreisen.lua b/game/scripts/vscripts/abilities/abilityreisen.lua similarity index 100% rename from scripts/vscripts/abilities/abilityreisen.lua rename to game/scripts/vscripts/abilities/abilityreisen.lua diff --git a/scripts/vscripts/abilities/abilityremilia.lua b/game/scripts/vscripts/abilities/abilityremilia.lua similarity index 100% rename from scripts/vscripts/abilities/abilityremilia.lua rename to game/scripts/vscripts/abilities/abilityremilia.lua diff --git a/scripts/vscripts/abilities/abilityrin.lua b/game/scripts/vscripts/abilities/abilityrin.lua similarity index 100% rename from scripts/vscripts/abilities/abilityrin.lua rename to game/scripts/vscripts/abilities/abilityrin.lua diff --git a/scripts/vscripts/abilities/abilityrumia.lua b/game/scripts/vscripts/abilities/abilityrumia.lua similarity index 100% rename from scripts/vscripts/abilities/abilityrumia.lua rename to game/scripts/vscripts/abilities/abilityrumia.lua diff --git a/scripts/vscripts/abilities/abilitysakuya.lua b/game/scripts/vscripts/abilities/abilitysakuya.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysakuya.lua rename to game/scripts/vscripts/abilities/abilitysakuya.lua diff --git a/scripts/vscripts/abilities/abilitysanae.lua b/game/scripts/vscripts/abilities/abilitysanae.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysanae.lua rename to game/scripts/vscripts/abilities/abilitysanae.lua diff --git a/scripts/vscripts/abilities/abilitysatori.lua b/game/scripts/vscripts/abilities/abilitysatori.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysatori.lua rename to game/scripts/vscripts/abilities/abilitysatori.lua diff --git a/scripts/vscripts/abilities/abilityseiga.lua b/game/scripts/vscripts/abilities/abilityseiga.lua similarity index 100% rename from scripts/vscripts/abilities/abilityseiga.lua rename to game/scripts/vscripts/abilities/abilityseiga.lua diff --git a/scripts/vscripts/abilities/abilityshikieiki.lua b/game/scripts/vscripts/abilities/abilityshikieiki.lua similarity index 100% rename from scripts/vscripts/abilities/abilityshikieiki.lua rename to game/scripts/vscripts/abilities/abilityshikieiki.lua diff --git a/scripts/vscripts/abilities/abilityshinki.lua b/game/scripts/vscripts/abilities/abilityshinki.lua similarity index 100% rename from scripts/vscripts/abilities/abilityshinki.lua rename to game/scripts/vscripts/abilities/abilityshinki.lua diff --git a/scripts/vscripts/abilities/abilitysizuha.lua b/game/scripts/vscripts/abilities/abilitysizuha.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysizuha.lua rename to game/scripts/vscripts/abilities/abilitysizuha.lua diff --git a/scripts/vscripts/abilities/abilitysoga.lua b/game/scripts/vscripts/abilities/abilitysoga.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysoga.lua rename to game/scripts/vscripts/abilities/abilitysoga.lua diff --git a/scripts/vscripts/abilities/abilitystar.lua b/game/scripts/vscripts/abilities/abilitystar.lua similarity index 100% rename from scripts/vscripts/abilities/abilitystar.lua rename to game/scripts/vscripts/abilities/abilitystar.lua diff --git a/scripts/vscripts/abilities/abilitysuika.lua b/game/scripts/vscripts/abilities/abilitysuika.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysuika.lua rename to game/scripts/vscripts/abilities/abilitysuika.lua diff --git a/scripts/vscripts/abilities/abilitysunny.lua b/game/scripts/vscripts/abilities/abilitysunny.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysunny.lua rename to game/scripts/vscripts/abilities/abilitysunny.lua diff --git a/scripts/vscripts/abilities/abilitysuwako.lua b/game/scripts/vscripts/abilities/abilitysuwako.lua similarity index 100% rename from scripts/vscripts/abilities/abilitysuwako.lua rename to game/scripts/vscripts/abilities/abilitysuwako.lua diff --git a/scripts/vscripts/abilities/abilitytenshi.lua b/game/scripts/vscripts/abilities/abilitytenshi.lua similarity index 100% rename from scripts/vscripts/abilities/abilitytenshi.lua rename to game/scripts/vscripts/abilities/abilitytenshi.lua diff --git a/scripts/vscripts/abilities/abilitytoramaru.lua b/game/scripts/vscripts/abilities/abilitytoramaru.lua similarity index 100% rename from scripts/vscripts/abilities/abilitytoramaru.lua rename to game/scripts/vscripts/abilities/abilitytoramaru.lua diff --git a/scripts/vscripts/abilities/abilityutsuho.lua b/game/scripts/vscripts/abilities/abilityutsuho.lua similarity index 100% rename from scripts/vscripts/abilities/abilityutsuho.lua rename to game/scripts/vscripts/abilities/abilityutsuho.lua diff --git a/scripts/vscripts/abilities/abilitywriggle.lua b/game/scripts/vscripts/abilities/abilitywriggle.lua similarity index 100% rename from scripts/vscripts/abilities/abilitywriggle.lua rename to game/scripts/vscripts/abilities/abilitywriggle.lua diff --git a/scripts/vscripts/abilities/abilityyoshika.lua b/game/scripts/vscripts/abilities/abilityyoshika.lua similarity index 100% rename from scripts/vscripts/abilities/abilityyoshika.lua rename to game/scripts/vscripts/abilities/abilityyoshika.lua diff --git a/scripts/vscripts/abilities/abilityyoumu.lua b/game/scripts/vscripts/abilities/abilityyoumu.lua similarity index 100% rename from scripts/vscripts/abilities/abilityyoumu.lua rename to game/scripts/vscripts/abilities/abilityyoumu.lua diff --git a/scripts/vscripts/abilities/abilityyukari.lua b/game/scripts/vscripts/abilities/abilityyukari.lua similarity index 100% rename from scripts/vscripts/abilities/abilityyukari.lua rename to game/scripts/vscripts/abilities/abilityyukari.lua diff --git a/scripts/vscripts/abilities/abilityyuugi.lua b/game/scripts/vscripts/abilities/abilityyuugi.lua similarity index 100% rename from scripts/vscripts/abilities/abilityyuugi.lua rename to game/scripts/vscripts/abilities/abilityyuugi.lua diff --git a/scripts/vscripts/abilities/abilityyuuka.lua b/game/scripts/vscripts/abilities/abilityyuuka.lua similarity index 100% rename from scripts/vscripts/abilities/abilityyuuka.lua rename to game/scripts/vscripts/abilities/abilityyuuka.lua diff --git a/scripts/vscripts/abilities/abilityyuyuko.lua b/game/scripts/vscripts/abilities/abilityyuyuko.lua similarity index 100% rename from scripts/vscripts/abilities/abilityyuyuko.lua rename to game/scripts/vscripts/abilities/abilityyuyuko.lua diff --git a/scripts/vscripts/addon_game_mode.lua b/game/scripts/vscripts/addon_game_mode.lua similarity index 100% rename from scripts/vscripts/addon_game_mode.lua rename to game/scripts/vscripts/addon_game_mode.lua diff --git a/scripts/vscripts/common.lua b/game/scripts/vscripts/common.lua similarity index 100% rename from scripts/vscripts/common.lua rename to game/scripts/vscripts/common.lua diff --git a/scripts/vscripts/component/dkjson.lua b/game/scripts/vscripts/component/dkjson.lua similarity index 100% rename from scripts/vscripts/component/dkjson.lua rename to game/scripts/vscripts/component/dkjson.lua diff --git a/scripts/vscripts/component/sha.lua b/game/scripts/vscripts/component/sha.lua similarity index 100% rename from scripts/vscripts/component/sha.lua rename to game/scripts/vscripts/component/sha.lua diff --git a/scripts/vscripts/component/timers.lua b/game/scripts/vscripts/component/timers.lua similarity index 100% rename from scripts/vscripts/component/timers.lua rename to game/scripts/vscripts/component/timers.lua diff --git a/scripts/vscripts/cosmetic_abilities.lua b/game/scripts/vscripts/cosmetic_abilities.lua similarity index 100% rename from scripts/vscripts/cosmetic_abilities.lua rename to game/scripts/vscripts/cosmetic_abilities.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011_effect.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011_effect.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3011_effect.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3012.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3012.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3012.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3012.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3013.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3013.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3013.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3013.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3014.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3014.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3014.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3014.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015_effect.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015_effect.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3015_effect.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016_effect.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016_effect.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3016_effect.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3017.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3017.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3017.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3017.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3018.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3018.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3018.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3018.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3019.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3019.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3019.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3019.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3020.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3020.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3020.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3020.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3021.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3021.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3021.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3021.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3023.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3023.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3023.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3023.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3024.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3024.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3024.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3024.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3025.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3025.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3025.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3025.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3026.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3026.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3026.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3026.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3027.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3027.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3027.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3027.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3028.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3028.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3028.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3028.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3029.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3029.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3029.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3029.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3030.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3030.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3030.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3030.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3031.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3031.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3031.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_bb_buff_3031.lua diff --git a/scripts/vscripts/modifiers/battle_buff/modifier_fairy_count.lua b/game/scripts/vscripts/modifiers/battle_buff/modifier_fairy_count.lua similarity index 100% rename from scripts/vscripts/modifiers/battle_buff/modifier_fairy_count.lua rename to game/scripts/vscripts/modifiers/battle_buff/modifier_fairy_count.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_alice.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_alice.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_alice.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_alice.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_aya.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_aya.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_aya.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_aya.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_hina.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_hina.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_hina.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_hina.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_hina_aura_effect.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_hina_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_hina_aura_effect.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_hina_aura_effect.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_kaguya.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_kaguya.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_kaguya.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_kaguya.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_keine.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_keine.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_keine.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_keine.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_kisume.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_kisume.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_kisume.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_kisume.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_marisa.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_marisa.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_marisa.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_marisa.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_minoriko.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_minoriko.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_minoriko.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_minoriko.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_mokou.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_mokou.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_mokou.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_mokou.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_mokou_aura_effect.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_mokou_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_mokou_aura_effect.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_mokou_aura_effect.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_aura.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_aura.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_aura.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_effect.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_effect.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_attack_speed_effect.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark_effect.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark_effect.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_aura_dark_effect.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_dead_heal.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_dead_heal.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_dead_heal.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_dead_heal.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_aura.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_aura.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_aura.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_effect.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_effect.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_health_effect.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_aura.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_aura.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_aura.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_effect.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_effect.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_move_effect.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_aura.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_aura.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_aura.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_effect.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_effect.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_random_resist_effect.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_rumia.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_rumia.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_rumia.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_rumia.lua diff --git a/scripts/vscripts/modifiers/bosses/modifier_bosses_yuugi.lua b/game/scripts/vscripts/modifiers/bosses/modifier_bosses_yuugi.lua similarity index 100% rename from scripts/vscripts/modifiers/bosses/modifier_bosses_yuugi.lua rename to game/scripts/vscripts/modifiers/bosses/modifier_bosses_yuugi.lua diff --git a/scripts/vscripts/modifiers/effects/modifier_courier_fx.lua b/game/scripts/vscripts/modifiers/effects/modifier_courier_fx.lua similarity index 100% rename from scripts/vscripts/modifiers/effects/modifier_courier_fx.lua rename to game/scripts/vscripts/modifiers/effects/modifier_courier_fx.lua diff --git a/scripts/vscripts/modifiers/effects/modifier_rainbow_tail.lua b/game/scripts/vscripts/modifiers/effects/modifier_rainbow_tail.lua similarity index 100% rename from scripts/vscripts/modifiers/effects/modifier_rainbow_tail.lua rename to game/scripts/vscripts/modifiers/effects/modifier_rainbow_tail.lua diff --git a/scripts/vscripts/modifiers/modifier_attack_speed.lua b/game/scripts/vscripts/modifiers/modifier_attack_speed.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_attack_speed.lua rename to game/scripts/vscripts/modifiers/modifier_attack_speed.lua diff --git a/scripts/vscripts/modifiers/modifier_attack_time.lua b/game/scripts/vscripts/modifiers/modifier_attack_time.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_attack_time.lua rename to game/scripts/vscripts/modifiers/modifier_attack_time.lua diff --git a/scripts/vscripts/modifiers/modifier_base_attack_bonus_percent.lua b/game/scripts/vscripts/modifiers/modifier_base_attack_bonus_percent.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_base_attack_bonus_percent.lua rename to game/scripts/vscripts/modifiers/modifier_base_attack_bonus_percent.lua diff --git a/scripts/vscripts/modifiers/modifier_cooldown_reduce.lua b/game/scripts/vscripts/modifiers/modifier_cooldown_reduce.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_cooldown_reduce.lua rename to game/scripts/vscripts/modifiers/modifier_cooldown_reduce.lua diff --git a/scripts/vscripts/modifiers/modifier_hidden_bar.lua b/game/scripts/vscripts/modifiers/modifier_hidden_bar.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_hidden_bar.lua rename to game/scripts/vscripts/modifiers/modifier_hidden_bar.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2005_attack_aura.lua b/game/scripts/vscripts/modifiers/modifier_item_2005_attack_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2005_attack_aura.lua rename to game/scripts/vscripts/modifiers/modifier_item_2005_attack_aura.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2005_attack_aura_effect.lua b/game/scripts/vscripts/modifiers/modifier_item_2005_attack_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2005_attack_aura_effect.lua rename to game/scripts/vscripts/modifiers/modifier_item_2005_attack_aura_effect.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura.lua b/game/scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura.lua rename to game/scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura_effect.lua b/game/scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura_effect.lua rename to game/scripts/vscripts/modifiers/modifier_item_2006_mana_regen_aura_effect.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2008_slow_aura.lua b/game/scripts/vscripts/modifiers/modifier_item_2008_slow_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2008_slow_aura.lua rename to game/scripts/vscripts/modifiers/modifier_item_2008_slow_aura.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2008_slow_aura_effect.lua b/game/scripts/vscripts/modifiers/modifier_item_2008_slow_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2008_slow_aura_effect.lua rename to game/scripts/vscripts/modifiers/modifier_item_2008_slow_aura_effect.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2009_damage.lua b/game/scripts/vscripts/modifiers/modifier_item_2009_damage.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2009_damage.lua rename to game/scripts/vscripts/modifiers/modifier_item_2009_damage.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2010_damage.lua b/game/scripts/vscripts/modifiers/modifier_item_2010_damage.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2010_damage.lua rename to game/scripts/vscripts/modifiers/modifier_item_2010_damage.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2011_attack_stun.lua b/game/scripts/vscripts/modifiers/modifier_item_2011_attack_stun.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2011_attack_stun.lua rename to game/scripts/vscripts/modifiers/modifier_item_2011_attack_stun.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura.lua b/game/scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura.lua rename to game/scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura_effect.lua b/game/scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura_effect.lua rename to game/scripts/vscripts/modifiers/modifier_item_2012_magical_damage_aura_effect.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura.lua b/game/scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura.lua rename to game/scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura_effect.lua b/game/scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura_effect.lua rename to game/scripts/vscripts/modifiers/modifier_item_2013_physical_damage_aura_effect.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2014_damage_aura.lua b/game/scripts/vscripts/modifiers/modifier_item_2014_damage_aura.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2014_damage_aura.lua rename to game/scripts/vscripts/modifiers/modifier_item_2014_damage_aura.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2014_damage_aura_effect.lua b/game/scripts/vscripts/modifiers/modifier_item_2014_damage_aura_effect.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2014_damage_aura_effect.lua rename to game/scripts/vscripts/modifiers/modifier_item_2014_damage_aura_effect.lua diff --git a/scripts/vscripts/modifiers/modifier_item_2018_bonus_attack_range.lua b/game/scripts/vscripts/modifiers/modifier_item_2018_bonus_attack_range.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_item_2018_bonus_attack_range.lua rename to game/scripts/vscripts/modifiers/modifier_item_2018_bonus_attack_range.lua diff --git a/scripts/vscripts/modifiers/modifier_magical_armor.lua b/game/scripts/vscripts/modifiers/modifier_magical_armor.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_magical_armor.lua rename to game/scripts/vscripts/modifiers/modifier_magical_armor.lua diff --git a/scripts/vscripts/modifiers/modifier_manacost_reduce_percent.lua b/game/scripts/vscripts/modifiers/modifier_manacost_reduce_percent.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_manacost_reduce_percent.lua rename to game/scripts/vscripts/modifiers/modifier_manacost_reduce_percent.lua diff --git a/scripts/vscripts/modifiers/modifier_move_max_speed.lua b/game/scripts/vscripts/modifiers/modifier_move_max_speed.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_move_max_speed.lua rename to game/scripts/vscripts/modifiers/modifier_move_max_speed.lua diff --git a/scripts/vscripts/modifiers/modifier_move_speed.lua b/game/scripts/vscripts/modifiers/modifier_move_speed.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_move_speed.lua rename to game/scripts/vscripts/modifiers/modifier_move_speed.lua diff --git a/scripts/vscripts/modifiers/modifier_root_hidden_info.lua b/game/scripts/vscripts/modifiers/modifier_root_hidden_info.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_root_hidden_info.lua rename to game/scripts/vscripts/modifiers/modifier_root_hidden_info.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_building.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_building.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_building.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_building.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_crit_chance.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_crit_chance.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_crit_chance.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_crit_chance.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_crit_damage.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_crit_damage.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_crit_damage.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_crit_damage.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_magical.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_magical.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_magical.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_magical.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_physical.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_physical.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_physical.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_physical.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_pure.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_pure.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_pure.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_damage_incoming_pure.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_magical.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_magical.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_magical.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_magical.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_physical.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_physical.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_physical.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_physical.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_pure.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_pure.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_pure.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_damage_outgoing_pure.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_luck.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_luck.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_luck.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_luck.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_pause.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_pause.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_pause.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_pause.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_poison.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_poison.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_poison.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_poison.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_release_hidden.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_release_hidden.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_release_hidden.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_release_hidden.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_root.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_root.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_root.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_root.lua diff --git a/scripts/vscripts/modifiers/modifier_touhoutd_unlimited_resist.lua b/game/scripts/vscripts/modifiers/modifier_touhoutd_unlimited_resist.lua similarity index 100% rename from scripts/vscripts/modifiers/modifier_touhoutd_unlimited_resist.lua rename to game/scripts/vscripts/modifiers/modifier_touhoutd_unlimited_resist.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_byakuren.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_byakuren.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_byakuren.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_byakuren.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_common.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_common.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_common.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_common.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_daiyousei.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_daiyousei.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_daiyousei.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_daiyousei.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_eirin.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_eirin.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_eirin.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_eirin.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_flandre.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_flandre.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_flandre.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_flandre.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_hecatia.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_hecatia.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_hecatia.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_hecatia.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_junko.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_junko.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_junko.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_junko.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_kanako.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_kanako.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_kanako.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_kanako.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_koishi.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_koishi.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_koishi.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_koishi.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_komachi.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_komachi.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_komachi.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_komachi.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_lily.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_lily.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_lily.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_lily.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_miko.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_miko.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_miko.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_miko.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_minoriko.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_minoriko.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_minoriko.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_minoriko.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_nazrin.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_nazrin.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_nazrin.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_nazrin.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_reimu.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_reimu.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_reimu.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_reimu.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_remilia.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_remilia.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_remilia.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_remilia.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_shikieiki.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_shikieiki.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_shikieiki.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_shikieiki.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_shinki.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_shinki.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_shinki.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_shinki.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_sizuha.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_sizuha.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_sizuha.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_sizuha.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_yukari.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_yukari.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_yukari.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_yukari.lua diff --git a/scripts/vscripts/modifiers/power/modifier_ability_power_yuuka.lua b/game/scripts/vscripts/modifiers/power/modifier_ability_power_yuuka.lua similarity index 100% rename from scripts/vscripts/modifiers/power/modifier_ability_power_yuuka.lua rename to game/scripts/vscripts/modifiers/power/modifier_ability_power_yuuka.lua diff --git a/scripts/vscripts/system/ai.lua b/game/scripts/vscripts/system/ai.lua similarity index 100% rename from scripts/vscripts/system/ai.lua rename to game/scripts/vscripts/system/ai.lua diff --git a/scripts/vscripts/system/combo.lua b/game/scripts/vscripts/system/combo.lua similarity index 100% rename from scripts/vscripts/system/combo.lua rename to game/scripts/vscripts/system/combo.lua diff --git a/scripts/vscripts/system/custom_event.lua b/game/scripts/vscripts/system/custom_event.lua similarity index 100% rename from scripts/vscripts/system/custom_event.lua rename to game/scripts/vscripts/system/custom_event.lua diff --git a/scripts/vscripts/system/damage.lua b/game/scripts/vscripts/system/damage.lua similarity index 100% rename from scripts/vscripts/system/damage.lua rename to game/scripts/vscripts/system/damage.lua diff --git a/scripts/vscripts/system/dataservice.lua b/game/scripts/vscripts/system/dataservice.lua similarity index 100% rename from scripts/vscripts/system/dataservice.lua rename to game/scripts/vscripts/system/dataservice.lua diff --git a/scripts/vscripts/system/items.lua b/game/scripts/vscripts/system/items.lua similarity index 100% rename from scripts/vscripts/system/items.lua rename to game/scripts/vscripts/system/items.lua diff --git a/scripts/vscripts/system/service.lua b/game/scripts/vscripts/system/service.lua similarity index 100% rename from scripts/vscripts/system/service.lua rename to game/scripts/vscripts/system/service.lua diff --git a/scripts/vscripts/system/spawner.lua b/game/scripts/vscripts/system/spawner.lua similarity index 100% rename from scripts/vscripts/system/spawner.lua rename to game/scripts/vscripts/system/spawner.lua diff --git a/scripts/vscripts/system/tower.lua b/game/scripts/vscripts/system/tower.lua similarity index 100% rename from scripts/vscripts/system/tower.lua rename to game/scripts/vscripts/system/tower.lua diff --git a/scripts/vscripts/trigger/passcorner.lua b/game/scripts/vscripts/trigger/passcorner.lua similarity index 100% rename from scripts/vscripts/trigger/passcorner.lua rename to game/scripts/vscripts/trigger/passcorner.lua diff --git a/scripts/vscripts/util.lua b/game/scripts/vscripts/util.lua similarity index 100% rename from scripts/vscripts/util.lua rename to game/scripts/vscripts/util.lua diff --git a/sm/2012eye_glow_international_2012.vpcf_c b/game/sm/2012eye_glow_international_2012.vpcf_c similarity index 100% rename from sm/2012eye_glow_international_2012.vpcf_c rename to game/sm/2012eye_glow_international_2012.vpcf_c diff --git a/sm/2012eye_glow_international_2012b.vpcf_c b/game/sm/2012eye_glow_international_2012b.vpcf_c similarity index 100% rename from sm/2012eye_glow_international_2012b.vpcf_c rename to game/sm/2012eye_glow_international_2012b.vpcf_c diff --git a/sm/2014_glow.vpcf_c b/game/sm/2014_glow.vpcf_c similarity index 100% rename from sm/2014_glow.vpcf_c rename to game/sm/2014_glow.vpcf_c diff --git a/sm/2014_halo.vpcf_c b/game/sm/2014_halo.vpcf_c similarity index 100% rename from sm/2014_halo.vpcf_c rename to game/sm/2014_halo.vpcf_c diff --git a/sm/2014_roil.vpcf_c b/game/sm/2014_roil.vpcf_c similarity index 100% rename from sm/2014_roil.vpcf_c rename to game/sm/2014_roil.vpcf_c diff --git a/sm/2014_wisp.vpcf_c b/game/sm/2014_wisp.vpcf_c similarity index 100% rename from sm/2014_wisp.vpcf_c rename to game/sm/2014_wisp.vpcf_c diff --git a/sm/_b.vpcf_c b/game/sm/_b.vpcf_c similarity index 100% rename from sm/_b.vpcf_c rename to game/sm/_b.vpcf_c diff --git a/sm/_c.vpcf_c b/game/sm/_c.vpcf_c similarity index 100% rename from sm/_c.vpcf_c rename to game/sm/_c.vpcf_c diff --git a/sm/_d.vpcf_c b/game/sm/_d.vpcf_c similarity index 100% rename from sm/_d.vpcf_c rename to game/sm/_d.vpcf_c diff --git a/sm/ambient.vpcf_c b/game/sm/ambient.vpcf_c similarity index 100% rename from sm/ambient.vpcf_c rename to game/sm/ambient.vpcf_c diff --git a/sm/baoshiguangze.vpcf_c b/game/sm/baoshiguangze.vpcf_c similarity index 100% rename from sm/baoshiguangze.vpcf_c rename to game/sm/baoshiguangze.vpcf_c diff --git a/sm/baoshiguangze_b.vpcf_c b/game/sm/baoshiguangze_b.vpcf_c similarity index 100% rename from sm/baoshiguangze_b.vpcf_c rename to game/sm/baoshiguangze_b.vpcf_c diff --git a/sm/baoshiguangze_beams.vpcf_c b/game/sm/baoshiguangze_beams.vpcf_c similarity index 100% rename from sm/baoshiguangze_beams.vpcf_c rename to game/sm/baoshiguangze_beams.vpcf_c diff --git a/sm/baoshiguangze_c.vpcf_c b/game/sm/baoshiguangze_c.vpcf_c similarity index 100% rename from sm/baoshiguangze_c.vpcf_c rename to game/sm/baoshiguangze_c.vpcf_c diff --git a/sm/baoshiguangze_dust_mote.vpcf_c b/game/sm/baoshiguangze_dust_mote.vpcf_c similarity index 100% rename from sm/baoshiguangze_dust_mote.vpcf_c rename to game/sm/baoshiguangze_dust_mote.vpcf_c diff --git a/sm/baoshiguangze_ground.vpcf_c b/game/sm/baoshiguangze_ground.vpcf_c similarity index 100% rename from sm/baoshiguangze_ground.vpcf_c rename to game/sm/baoshiguangze_ground.vpcf_c diff --git a/sm/baoshiguangze_ground_b.vpcf_c b/game/sm/baoshiguangze_ground_b.vpcf_c similarity index 100% rename from sm/baoshiguangze_ground_b.vpcf_c rename to game/sm/baoshiguangze_ground_b.vpcf_c diff --git a/sm/baoshiguangze_ground_c.vpcf_c b/game/sm/baoshiguangze_ground_c.vpcf_c similarity index 100% rename from sm/baoshiguangze_ground_c.vpcf_c rename to game/sm/baoshiguangze_ground_c.vpcf_c diff --git a/sm/baoshiguangze_ground_d.vpcf_c b/game/sm/baoshiguangze_ground_d.vpcf_c similarity index 100% rename from sm/baoshiguangze_ground_d.vpcf_c rename to game/sm/baoshiguangze_ground_d.vpcf_c diff --git a/sm/baoshiguangze_light.vpcf_c b/game/sm/baoshiguangze_light.vpcf_c similarity index 100% rename from sm/baoshiguangze_light.vpcf_c rename to game/sm/baoshiguangze_light.vpcf_c diff --git a/sm/baoshiguangze_sparkle.vpcf_c b/game/sm/baoshiguangze_sparkle.vpcf_c similarity index 100% rename from sm/baoshiguangze_sparkle.vpcf_c rename to game/sm/baoshiguangze_sparkle.vpcf_c diff --git a/sm/bingroushan.vpcf_c b/game/sm/bingroushan.vpcf_c similarity index 100% rename from sm/bingroushan.vpcf_c rename to game/sm/bingroushan.vpcf_c diff --git a/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c b/game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c similarity index 100% rename from sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c rename to game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012.vpcf_c diff --git a/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c b/game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c similarity index 100% rename from sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c rename to game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body.vpcf_c diff --git a/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c b/game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c similarity index 100% rename from sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c rename to game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_b.vpcf_c diff --git a/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c b/game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c similarity index 100% rename from sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c rename to game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_body_c.vpcf_c diff --git a/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c b/game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c similarity index 100% rename from sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c rename to game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_drifts.vpcf_c diff --git a/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c b/game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c similarity index 100% rename from sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c rename to game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow.vpcf_c diff --git a/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c b/game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c similarity index 100% rename from sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c rename to game/sm/bingxueecon/courier/courier_trail_winter_2012/courier_trail_winter_2012_snow_b.vpcf_c diff --git a/sm/bingxuerain_fx/snow_drift_b.vpcf_c b/game/sm/bingxuerain_fx/snow_drift_b.vpcf_c similarity index 100% rename from sm/bingxuerain_fx/snow_drift_b.vpcf_c rename to game/sm/bingxuerain_fx/snow_drift_b.vpcf_c diff --git a/sm/bingxuerain_fx/snow_fallback.vpcf_c b/game/sm/bingxuerain_fx/snow_fallback.vpcf_c similarity index 100% rename from sm/bingxuerain_fx/snow_fallback.vpcf_c rename to game/sm/bingxuerain_fx/snow_fallback.vpcf_c diff --git a/sm/bingxuerain_fx/snow_fallback_2.vpcf_c b/game/sm/bingxuerain_fx/snow_fallback_2.vpcf_c similarity index 100% rename from sm/bingxuerain_fx/snow_fallback_2.vpcf_c rename to game/sm/bingxuerain_fx/snow_fallback_2.vpcf_c diff --git a/sm/butterflies.vpcf_c b/game/sm/butterflies.vpcf_c similarity index 100% rename from sm/butterflies.vpcf_c rename to game/sm/butterflies.vpcf_c diff --git a/sm/butterfly_blue.vpcf_c b/game/sm/butterfly_blue.vpcf_c similarity index 100% rename from sm/butterfly_blue.vpcf_c rename to game/sm/butterfly_blue.vpcf_c diff --git a/sm/butterfly_orange.vpcf_c b/game/sm/butterfly_orange.vpcf_c similarity index 100% rename from sm/butterfly_orange.vpcf_c rename to game/sm/butterfly_orange.vpcf_c diff --git a/sm/circle1.vpcf_c b/game/sm/circle1.vpcf_c similarity index 100% rename from sm/circle1.vpcf_c rename to game/sm/circle1.vpcf_c diff --git a/sm/cm_ti7_immortal_base_attack_snowball_2.vpcf_c b/game/sm/cm_ti7_immortal_base_attack_snowball_2.vpcf_c similarity index 100% rename from sm/cm_ti7_immortal_base_attack_snowball_2.vpcf_c rename to game/sm/cm_ti7_immortal_base_attack_snowball_2.vpcf_c diff --git a/sm/econ/items/techies/techies_arcana/techies_suicide_arcana.vpcf_c b/game/sm/econ/items/techies/techies_arcana/techies_suicide_arcana.vpcf_c similarity index 100% rename from sm/econ/items/techies/techies_arcana/techies_suicide_arcana.vpcf_c rename to game/sm/econ/items/techies/techies_arcana/techies_suicide_arcana.vpcf_c diff --git a/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trail.vpcf_c b/game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trail.vpcf_c similarity index 100% rename from sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trail.vpcf_c rename to game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trail.vpcf_c diff --git a/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trailflikr.vpcf_c b/game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trailflikr.vpcf_c similarity index 100% rename from sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trailflikr.vpcf_c rename to game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_a_trailflikr.vpcf_c diff --git a/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_boom_a.vpcf_c b/game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_boom_a.vpcf_c similarity index 100% rename from sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_boom_a.vpcf_c rename to game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_boom_a.vpcf_c diff --git a/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_rockets_b.vpcf_c b/game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_rockets_b.vpcf_c similarity index 100% rename from sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_rockets_b.vpcf_c rename to game/sm/econ/items/techies/techies_arcana/techies_suicide_fireworks_rockets_b.vpcf_c diff --git a/sm/emochibang.vpcf_c b/game/sm/emochibang.vpcf_c similarity index 100% rename from sm/emochibang.vpcf_c rename to game/sm/emochibang.vpcf_c diff --git a/sm/emochibang_edge.vpcf_c b/game/sm/emochibang_edge.vpcf_c similarity index 100% rename from sm/emochibang_edge.vpcf_c rename to game/sm/emochibang_edge.vpcf_c diff --git a/sm/emochibang_edge_b.vpcf_c b/game/sm/emochibang_edge_b.vpcf_c similarity index 100% rename from sm/emochibang_edge_b.vpcf_c rename to game/sm/emochibang_edge_b.vpcf_c diff --git a/sm/emochibang_edge_c.vpcf_c b/game/sm/emochibang_edge_c.vpcf_c similarity index 100% rename from sm/emochibang_edge_c.vpcf_c rename to game/sm/emochibang_edge_c.vpcf_c diff --git a/sm/emochibang_edge_d.vpcf_c b/game/sm/emochibang_edge_d.vpcf_c similarity index 100% rename from sm/emochibang_edge_d.vpcf_c rename to game/sm/emochibang_edge_d.vpcf_c diff --git a/sm/emochibang_feathers.vpcf_c b/game/sm/emochibang_feathers.vpcf_c similarity index 100% rename from sm/emochibang_feathers.vpcf_c rename to game/sm/emochibang_feathers.vpcf_c diff --git a/sm/emochibang_smoke.vpcf_c b/game/sm/emochibang_smoke.vpcf_c similarity index 100% rename from sm/emochibang_smoke.vpcf_c rename to game/sm/emochibang_smoke.vpcf_c diff --git a/sm/emochibang_smoke_shad.vpcf_c b/game/sm/emochibang_smoke_shad.vpcf_c similarity index 100% rename from sm/emochibang_smoke_shad.vpcf_c rename to game/sm/emochibang_smoke_shad.vpcf_c diff --git a/sm/emochibang_smoke_trail.vpcf_c b/game/sm/emochibang_smoke_trail.vpcf_c similarity index 100% rename from sm/emochibang_smoke_trail.vpcf_c rename to game/sm/emochibang_smoke_trail.vpcf_c diff --git a/sm/emochibang_tailspark.vpcf_c b/game/sm/emochibang_tailspark.vpcf_c similarity index 100% rename from sm/emochibang_tailspark.vpcf_c rename to game/sm/emochibang_tailspark.vpcf_c diff --git a/sm/emochibang_trails.vpcf_c b/game/sm/emochibang_trails.vpcf_c similarity index 100% rename from sm/emochibang_trails.vpcf_c rename to game/sm/emochibang_trails.vpcf_c diff --git a/sm/emochibang_trails_high.vpcf_c b/game/sm/emochibang_trails_high.vpcf_c similarity index 100% rename from sm/emochibang_trails_high.vpcf_c rename to game/sm/emochibang_trails_high.vpcf_c diff --git a/sm/emochibang_trails_source.vpcf_c b/game/sm/emochibang_trails_source.vpcf_c similarity index 100% rename from sm/emochibang_trails_source.vpcf_c rename to game/sm/emochibang_trails_source.vpcf_c diff --git a/sm/firefly.vpcf_c b/game/sm/firefly.vpcf_c similarity index 100% rename from sm/firefly.vpcf_c rename to game/sm/firefly.vpcf_c diff --git a/sm/glow.vpcf_c b/game/sm/glow.vpcf_c similarity index 100% rename from sm/glow.vpcf_c rename to game/sm/glow.vpcf_c diff --git a/sm/grass/03.vpcf_c b/game/sm/grass/03.vpcf_c similarity index 100% rename from sm/grass/03.vpcf_c rename to game/sm/grass/03.vpcf_c diff --git a/sm/grass/03_bugs.vpcf_c b/game/sm/grass/03_bugs.vpcf_c similarity index 100% rename from sm/grass/03_bugs.vpcf_c rename to game/sm/grass/03_bugs.vpcf_c diff --git a/sm/grass/03_butterfly.vpcf_c b/game/sm/grass/03_butterfly.vpcf_c similarity index 100% rename from sm/grass/03_butterfly.vpcf_c rename to game/sm/grass/03_butterfly.vpcf_c diff --git a/sm/grass/03_butterfly_b.vpcf_c b/game/sm/grass/03_butterfly_b.vpcf_c similarity index 100% rename from sm/grass/03_butterfly_b.vpcf_c rename to game/sm/grass/03_butterfly_b.vpcf_c diff --git a/sm/grass/03b.vpcf_c b/game/sm/grass/03b.vpcf_c similarity index 100% rename from sm/grass/03b.vpcf_c rename to game/sm/grass/03b.vpcf_c diff --git a/sm/grass/03c.vpcf_c b/game/sm/grass/03c.vpcf_c similarity index 100% rename from sm/grass/03c.vpcf_c rename to game/sm/grass/03c.vpcf_c diff --git a/sm/grass/03d.vpcf_c b/game/sm/grass/03d.vpcf_c similarity index 100% rename from sm/grass/03d.vpcf_c rename to game/sm/grass/03d.vpcf_c diff --git a/sm/grass/grass.vpcf_c b/game/sm/grass/grass.vpcf_c similarity index 100% rename from sm/grass/grass.vpcf_c rename to game/sm/grass/grass.vpcf_c diff --git a/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_glow.vpcf_c b/game/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_glow.vpcf_c similarity index 100% rename from sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_glow.vpcf_c rename to game/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_glow.vpcf_c diff --git a/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_ember.vpcf_c b/game/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_ember.vpcf_c similarity index 100% rename from sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_ember.vpcf_c rename to game/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_ember.vpcf_c diff --git a/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_hit_flare.vpcf_c b/game/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_hit_flare.vpcf_c similarity index 100% rename from sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_hit_flare.vpcf_c rename to game/sm/guang1econ/items/crystal_maiden/crystal_maiden_maiden_of_icewrack/cm_arcana_pup_lvlup_godray_hit_flare.vpcf_c diff --git a/sm/guang1vr/player_light_godray.vpcf_c b/game/sm/guang1vr/player_light_godray.vpcf_c similarity index 100% rename from sm/guang1vr/player_light_godray.vpcf_c rename to game/sm/guang1vr/player_light_godray.vpcf_c diff --git a/sm/guanghuisuiyue.vpcf_c b/game/sm/guanghuisuiyue.vpcf_c similarity index 100% rename from sm/guanghuisuiyue.vpcf_c rename to game/sm/guanghuisuiyue.vpcf_c diff --git a/sm/guanghuisuiyue_a.vpcf_c b/game/sm/guanghuisuiyue_a.vpcf_c similarity index 100% rename from sm/guanghuisuiyue_a.vpcf_c rename to game/sm/guanghuisuiyue_a.vpcf_c diff --git a/sm/guanghuisuiyue_b.vpcf_c b/game/sm/guanghuisuiyue_b.vpcf_c similarity index 100% rename from sm/guanghuisuiyue_b.vpcf_c rename to game/sm/guanghuisuiyue_b.vpcf_c diff --git a/sm/hapi.vpcf_c b/game/sm/hapi.vpcf_c similarity index 100% rename from sm/hapi.vpcf_c rename to game/sm/hapi.vpcf_c diff --git a/sm/hongxin/ambient.vpcf_c b/game/sm/hongxin/ambient.vpcf_c similarity index 100% rename from sm/hongxin/ambient.vpcf_c rename to game/sm/hongxin/ambient.vpcf_c diff --git a/sm/hongxin/ambient_back.vpcf_c b/game/sm/hongxin/ambient_back.vpcf_c similarity index 100% rename from sm/hongxin/ambient_back.vpcf_c rename to game/sm/hongxin/ambient_back.vpcf_c diff --git a/sm/hongxin/ambient_back_trail.vpcf_c b/game/sm/hongxin/ambient_back_trail.vpcf_c similarity index 100% rename from sm/hongxin/ambient_back_trail.vpcf_c rename to game/sm/hongxin/ambient_back_trail.vpcf_c diff --git a/sm/hongxin/ambient_backblue.vpcf_c b/game/sm/hongxin/ambient_backblue.vpcf_c similarity index 100% rename from sm/hongxin/ambient_backblue.vpcf_c rename to game/sm/hongxin/ambient_backblue.vpcf_c diff --git a/sm/hongxin/ambient_cuff.vpcf_c b/game/sm/hongxin/ambient_cuff.vpcf_c similarity index 100% rename from sm/hongxin/ambient_cuff.vpcf_c rename to game/sm/hongxin/ambient_cuff.vpcf_c diff --git a/sm/hongxin/ambient_front.vpcf_c b/game/sm/hongxin/ambient_front.vpcf_c similarity index 100% rename from sm/hongxin/ambient_front.vpcf_c rename to game/sm/hongxin/ambient_front.vpcf_c diff --git a/sm/hongxin/ambient_pedals.vpcf_c b/game/sm/hongxin/ambient_pedals.vpcf_c similarity index 100% rename from sm/hongxin/ambient_pedals.vpcf_c rename to game/sm/hongxin/ambient_pedals.vpcf_c diff --git a/sm/hongxin/cuffsmoke.vpcf_c b/game/sm/hongxin/cuffsmoke.vpcf_c similarity index 100% rename from sm/hongxin/cuffsmoke.vpcf_c rename to game/sm/hongxin/cuffsmoke.vpcf_c diff --git a/sm/hongxin/cuffsmoke_b.vpcf_c b/game/sm/hongxin/cuffsmoke_b.vpcf_c similarity index 100% rename from sm/hongxin/cuffsmoke_b.vpcf_c rename to game/sm/hongxin/cuffsmoke_b.vpcf_c diff --git a/sm/hongxin/flares.vpcf_c b/game/sm/hongxin/flares.vpcf_c similarity index 100% rename from sm/hongxin/flares.vpcf_c rename to game/sm/hongxin/flares.vpcf_c diff --git a/sm/hongxin/hearts.vpcf_c b/game/sm/hongxin/hearts.vpcf_c similarity index 100% rename from sm/hongxin/hearts.vpcf_c rename to game/sm/hongxin/hearts.vpcf_c diff --git a/sm/jinbi_soft_smoke.vpcf_c b/game/sm/jinbi_soft_smoke.vpcf_c similarity index 100% rename from sm/jinbi_soft_smoke.vpcf_c rename to game/sm/jinbi_soft_smoke.vpcf_c diff --git a/sm/lizizhiqiambient.vpcf_c b/game/sm/lizizhiqiambient.vpcf_c similarity index 100% rename from sm/lizizhiqiambient.vpcf_c rename to game/sm/lizizhiqiambient.vpcf_c diff --git a/sm/lizizhiqiambient_b.vpcf_c b/game/sm/lizizhiqiambient_b.vpcf_c similarity index 100% rename from sm/lizizhiqiambient_b.vpcf_c rename to game/sm/lizizhiqiambient_b.vpcf_c diff --git a/sm/lizizhiqiambient_c.vpcf_c b/game/sm/lizizhiqiambient_c.vpcf_c similarity index 100% rename from sm/lizizhiqiambient_c.vpcf_c rename to game/sm/lizizhiqiambient_c.vpcf_c diff --git a/sm/lizizhiqiambient_d.vpcf_c b/game/sm/lizizhiqiambient_d.vpcf_c similarity index 100% rename from sm/lizizhiqiambient_d.vpcf_c rename to game/sm/lizizhiqiambient_d.vpcf_c diff --git a/sm/lizizhiqiambient_e.vpcf_c b/game/sm/lizizhiqiambient_e.vpcf_c similarity index 100% rename from sm/lizizhiqiambient_e.vpcf_c rename to game/sm/lizizhiqiambient_e.vpcf_c diff --git a/sm/lizizhiqiambient_f.vpcf_c b/game/sm/lizizhiqiambient_f.vpcf_c similarity index 100% rename from sm/lizizhiqiambient_f.vpcf_c rename to game/sm/lizizhiqiambient_f.vpcf_c diff --git a/sm/lizizhiqieye.vpcf_c b/game/sm/lizizhiqieye.vpcf_c similarity index 100% rename from sm/lizizhiqieye.vpcf_c rename to game/sm/lizizhiqieye.vpcf_c diff --git a/sm/lizizhiqieyes.vpcf_c b/game/sm/lizizhiqieyes.vpcf_c similarity index 100% rename from sm/lizizhiqieyes.vpcf_c rename to game/sm/lizizhiqieyes.vpcf_c diff --git a/sm/lizizhiqieyes_b.vpcf_c b/game/sm/lizizhiqieyes_b.vpcf_c similarity index 100% rename from sm/lizizhiqieyes_b.vpcf_c rename to game/sm/lizizhiqieyes_b.vpcf_c diff --git a/sm/lizizhiqieyes_c.vpcf_c b/game/sm/lizizhiqieyes_c.vpcf_c similarity index 100% rename from sm/lizizhiqieyes_c.vpcf_c rename to game/sm/lizizhiqieyes_c.vpcf_c diff --git a/sm/lizizhiqieyes_d.vpcf_c b/game/sm/lizizhiqieyes_d.vpcf_c similarity index 100% rename from sm/lizizhiqieyes_d.vpcf_c rename to game/sm/lizizhiqieyes_d.vpcf_c diff --git a/sm/loveblack.vpcf_c b/game/sm/loveblack.vpcf_c similarity index 100% rename from sm/loveblack.vpcf_c rename to game/sm/loveblack.vpcf_c diff --git a/sm/loveblack_trail.vpcf_c b/game/sm/loveblack_trail.vpcf_c similarity index 100% rename from sm/loveblack_trail.vpcf_c rename to game/sm/loveblack_trail.vpcf_c diff --git a/sm/loveblack_trail_detail.vpcf_c b/game/sm/loveblack_trail_detail.vpcf_c similarity index 100% rename from sm/loveblack_trail_detail.vpcf_c rename to game/sm/loveblack_trail_detail.vpcf_c diff --git a/sm/loveblack_trail_embers.vpcf_c b/game/sm/loveblack_trail_embers.vpcf_c similarity index 100% rename from sm/loveblack_trail_embers.vpcf_c rename to game/sm/loveblack_trail_embers.vpcf_c diff --git a/sm/mogu.vpcf_c b/game/sm/mogu.vpcf_c similarity index 100% rename from sm/mogu.vpcf_c rename to game/sm/mogu.vpcf_c diff --git a/sm/mogu_b.vpcf_c b/game/sm/mogu_b.vpcf_c similarity index 100% rename from sm/mogu_b.vpcf_c rename to game/sm/mogu_b.vpcf_c diff --git a/sm/mogu_c.vpcf_c b/game/sm/mogu_c.vpcf_c similarity index 100% rename from sm/mogu_c.vpcf_c rename to game/sm/mogu_c.vpcf_c diff --git a/sm/mogu_d.vpcf_c b/game/sm/mogu_d.vpcf_c similarity index 100% rename from sm/mogu_d.vpcf_c rename to game/sm/mogu_d.vpcf_c diff --git a/sm/mogu_e.vpcf_c b/game/sm/mogu_e.vpcf_c similarity index 100% rename from sm/mogu_e.vpcf_c rename to game/sm/mogu_e.vpcf_c diff --git a/sm/mogu_f.vpcf_c b/game/sm/mogu_f.vpcf_c similarity index 100% rename from sm/mogu_f.vpcf_c rename to game/sm/mogu_f.vpcf_c diff --git a/sm/mogu_g.vpcf_c b/game/sm/mogu_g.vpcf_c similarity index 100% rename from sm/mogu_g.vpcf_c rename to game/sm/mogu_g.vpcf_c diff --git a/sm/nihonghudieglow_blue.vpcf_c b/game/sm/nihonghudieglow_blue.vpcf_c similarity index 100% rename from sm/nihonghudieglow_blue.vpcf_c rename to game/sm/nihonghudieglow_blue.vpcf_c diff --git a/sm/nihonghudiemagic_blue.vpcf_c b/game/sm/nihonghudiemagic_blue.vpcf_c similarity index 100% rename from sm/nihonghudiemagic_blue.vpcf_c rename to game/sm/nihonghudiemagic_blue.vpcf_c diff --git a/sm/ring_black.vpcf_c b/game/sm/ring_black.vpcf_c similarity index 100% rename from sm/ring_black.vpcf_c rename to game/sm/ring_black.vpcf_c diff --git a/sm/ring_white.vpcf_c b/game/sm/ring_white.vpcf_c similarity index 100% rename from sm/ring_white.vpcf_c rename to game/sm/ring_white.vpcf_c diff --git a/sm/rongyanroushan.vpcf_c b/game/sm/rongyanroushan.vpcf_c similarity index 100% rename from sm/rongyanroushan.vpcf_c rename to game/sm/rongyanroushan.vpcf_c diff --git a/sm/rongyanroushan_ember.vpcf_c b/game/sm/rongyanroushan_ember.vpcf_c similarity index 100% rename from sm/rongyanroushan_ember.vpcf_c rename to game/sm/rongyanroushan_ember.vpcf_c diff --git a/sm/rongyanroushan_eyes.vpcf_c b/game/sm/rongyanroushan_eyes.vpcf_c similarity index 100% rename from sm/rongyanroushan_eyes.vpcf_c rename to game/sm/rongyanroushan_eyes.vpcf_c diff --git a/sm/rongyanroushan_eyes_b.vpcf_c b/game/sm/rongyanroushan_eyes_b.vpcf_c similarity index 100% rename from sm/rongyanroushan_eyes_b.vpcf_c rename to game/sm/rongyanroushan_eyes_b.vpcf_c diff --git a/sm/rongyanroushan_eyes_c.vpcf_c b/game/sm/rongyanroushan_eyes_c.vpcf_c similarity index 100% rename from sm/rongyanroushan_eyes_c.vpcf_c rename to game/sm/rongyanroushan_eyes_c.vpcf_c diff --git a/sm/rongyanroushan_eyes_d.vpcf_c b/game/sm/rongyanroushan_eyes_d.vpcf_c similarity index 100% rename from sm/rongyanroushan_eyes_d.vpcf_c rename to game/sm/rongyanroushan_eyes_d.vpcf_c diff --git a/sm/rongyanroushan_fire.vpcf_c b/game/sm/rongyanroushan_fire.vpcf_c similarity index 100% rename from sm/rongyanroushan_fire.vpcf_c rename to game/sm/rongyanroushan_fire.vpcf_c diff --git a/sm/rongyanroushan_ground.vpcf_c b/game/sm/rongyanroushan_ground.vpcf_c similarity index 100% rename from sm/rongyanroushan_ground.vpcf_c rename to game/sm/rongyanroushan_ground.vpcf_c diff --git a/sm/rongyanroushan_halo.vpcf_c b/game/sm/rongyanroushan_halo.vpcf_c similarity index 100% rename from sm/rongyanroushan_halo.vpcf_c rename to game/sm/rongyanroushan_halo.vpcf_c diff --git a/sm/rongyanroushan_steam.vpcf_c b/game/sm/rongyanroushan_steam.vpcf_c similarity index 100% rename from sm/rongyanroushan_steam.vpcf_c rename to game/sm/rongyanroushan_steam.vpcf_c diff --git a/sm/ruby.vpcf_c b/game/sm/ruby.vpcf_c similarity index 100% rename from sm/ruby.vpcf_c rename to game/sm/ruby.vpcf_c diff --git a/sm/ruby_c.vpcf_c b/game/sm/ruby_c.vpcf_c similarity index 100% rename from sm/ruby_c.vpcf_c rename to game/sm/ruby_c.vpcf_c diff --git a/sm/ruby_d.vpcf_c b/game/sm/ruby_d.vpcf_c similarity index 100% rename from sm/ruby_d.vpcf_c rename to game/sm/ruby_d.vpcf_c diff --git a/sm/ruby_e.vpcf_c b/game/sm/ruby_e.vpcf_c similarity index 100% rename from sm/ruby_e.vpcf_c rename to game/sm/ruby_e.vpcf_c diff --git a/sm/uicide_fire_geo.vpcf_c b/game/sm/uicide_fire_geo.vpcf_c similarity index 100% rename from sm/uicide_fire_geo.vpcf_c rename to game/sm/uicide_fire_geo.vpcf_c diff --git a/sm/uicide_flash_e.vpcf_c b/game/sm/uicide_flash_e.vpcf_c similarity index 100% rename from sm/uicide_flash_e.vpcf_c rename to game/sm/uicide_flash_e.vpcf_c diff --git a/sm/uicide_fluidlarge.vpcf_c b/game/sm/uicide_fluidlarge.vpcf_c similarity index 100% rename from sm/uicide_fluidlarge.vpcf_c rename to game/sm/uicide_fluidlarge.vpcf_c diff --git a/sm/uicide_model.vpcf_c b/game/sm/uicide_model.vpcf_c similarity index 100% rename from sm/uicide_model.vpcf_c rename to game/sm/uicide_model.vpcf_c diff --git a/sm/uicide_shockwave.vpcf_c b/game/sm/uicide_shockwave.vpcf_c similarity index 100% rename from sm/uicide_shockwave.vpcf_c rename to game/sm/uicide_shockwave.vpcf_c diff --git a/sm/uicide_smokelarge.vpcf_c b/game/sm/uicide_smokelarge.vpcf_c similarity index 100% rename from sm/uicide_smokelarge.vpcf_c rename to game/sm/uicide_smokelarge.vpcf_c diff --git a/sm/uicide_sparks.vpcf_c b/game/sm/uicide_sparks.vpcf_c similarity index 100% rename from sm/uicide_sparks.vpcf_c rename to game/sm/uicide_sparks.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_smoketrail.vpcf_c b/game/sm/units/heroes/hero_techies/techies_smoketrail.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_smoketrail.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_smoketrail.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_ss_death_streak.vpcf_c b/game/sm/units/heroes/hero_techies/techies_ss_death_streak.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_ss_death_streak.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_ss_death_streak.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_ss_death_streak_hard.vpcf_c b/game/sm/units/heroes/hero_techies/techies_ss_death_streak_hard.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_ss_death_streak_hard.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_ss_death_streak_hard.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_ss_explosion_fingers.vpcf_c b/game/sm/units/heroes/hero_techies/techies_ss_explosion_fingers.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_ss_explosion_fingers.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_ss_explosion_fingers.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_base.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_base.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_base.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_base.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_fire.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_fire.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_fire.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_fire.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_fire_geo.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_fire_geo.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_fire_geo.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_fire_geo.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_flash_e.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_flash_e.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_flash_e.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_flash_e.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_fluidlarge.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_fluidlarge.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_fluidlarge.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_fluidlarge.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_model.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_model.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_model.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_model.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_shockwave.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_shockwave.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_shockwave.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_shockwave.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_smokelarge.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_smokelarge.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_smokelarge.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_smokelarge.vpcf_c diff --git a/sm/units/heroes/hero_techies/techies_suicide_sparks.vpcf_c b/game/sm/units/heroes/hero_techies/techies_suicide_sparks.vpcf_c similarity index 100% rename from sm/units/heroes/hero_techies/techies_suicide_sparks.vpcf_c rename to game/sm/units/heroes/hero_techies/techies_suicide_sparks.vpcf_c diff --git a/sm/wuwuwuwuwu.vpcf_c b/game/sm/wuwuwuwuwu.vpcf_c similarity index 100% rename from sm/wuwuwuwuwu.vpcf_c rename to game/sm/wuwuwuwuwu.vpcf_c diff --git a/sm/xianqichanrao_glow.vpcf_c b/game/sm/xianqichanrao_glow.vpcf_c similarity index 100% rename from sm/xianqichanrao_glow.vpcf_c rename to game/sm/xianqichanrao_glow.vpcf_c diff --git a/sm/xianqichanrao_glow_rev.vpcf_c b/game/sm/xianqichanrao_glow_rev.vpcf_c similarity index 100% rename from sm/xianqichanrao_glow_rev.vpcf_c rename to game/sm/xianqichanrao_glow_rev.vpcf_c diff --git a/sm/xiehuodefault.vpcf_c b/game/sm/xiehuodefault.vpcf_c similarity index 100% rename from sm/xiehuodefault.vpcf_c rename to game/sm/xiehuodefault.vpcf_c diff --git a/sm/xiehuoember_base.vpcf_c b/game/sm/xiehuoember_base.vpcf_c similarity index 100% rename from sm/xiehuoember_base.vpcf_c rename to game/sm/xiehuoember_base.vpcf_c diff --git a/sm/xiehuoglow.vpcf_c b/game/sm/xiehuoglow.vpcf_c similarity index 100% rename from sm/xiehuoglow.vpcf_c rename to game/sm/xiehuoglow.vpcf_c diff --git a/sm/xiehuoswirl.vpcf_c b/game/sm/xiehuoswirl.vpcf_c similarity index 100% rename from sm/xiehuoswirl.vpcf_c rename to game/sm/xiehuoswirl.vpcf_c diff --git a/sm/xingxingc.vpcf_c b/game/sm/xingxingc.vpcf_c similarity index 100% rename from sm/xingxingc.vpcf_c rename to game/sm/xingxingc.vpcf_c diff --git a/sm/xingxingold.vpcf_c b/game/sm/xingxingold.vpcf_c similarity index 100% rename from sm/xingxingold.vpcf_c rename to game/sm/xingxingold.vpcf_c diff --git a/sm/xuehua.vpcf_c b/game/sm/xuehua.vpcf_c similarity index 100% rename from sm/xuehua.vpcf_c rename to game/sm/xuehua.vpcf_c diff --git a/sm/zisexingyunglow.vpcf_c b/game/sm/zisexingyunglow.vpcf_c similarity index 100% rename from sm/zisexingyunglow.vpcf_c rename to game/sm/zisexingyunglow.vpcf_c diff --git a/sm/zisexingyunrays.vpcf_c b/game/sm/zisexingyunrays.vpcf_c similarity index 100% rename from sm/zisexingyunrays.vpcf_c rename to game/sm/zisexingyunrays.vpcf_c diff --git a/sm/zisexingyunsecondary_flare.vpcf_c b/game/sm/zisexingyunsecondary_flare.vpcf_c similarity index 100% rename from sm/zisexingyunsecondary_flare.vpcf_c rename to game/sm/zisexingyunsecondary_flare.vpcf_c diff --git a/sm/zisexingyuntrail_secondary.vpcf_c b/game/sm/zisexingyuntrail_secondary.vpcf_c similarity index 100% rename from sm/zisexingyuntrail_secondary.vpcf_c rename to game/sm/zisexingyuntrail_secondary.vpcf_c diff --git a/sm/ziyuangeneric/courier_greevil_body_generic.vpcf_c b/game/sm/ziyuangeneric/courier_greevil_body_generic.vpcf_c similarity index 100% rename from sm/ziyuangeneric/courier_greevil_body_generic.vpcf_c rename to game/sm/ziyuangeneric/courier_greevil_body_generic.vpcf_c diff --git a/sm/ziyuangeneric/courier_greevil_body_generic_b.vpcf_c b/game/sm/ziyuangeneric/courier_greevil_body_generic_b.vpcf_c similarity index 100% rename from sm/ziyuangeneric/courier_greevil_body_generic_b.vpcf_c rename to game/sm/ziyuangeneric/courier_greevil_body_generic_b.vpcf_c diff --git a/sm/ziyuangeneric/courier_greevil_eye_generic.vpcf_c b/game/sm/ziyuangeneric/courier_greevil_eye_generic.vpcf_c similarity index 100% rename from sm/ziyuangeneric/courier_greevil_eye_generic.vpcf_c rename to game/sm/ziyuangeneric/courier_greevil_eye_generic.vpcf_c diff --git a/sm/ziyuangeneric/courier_greevil_eye_generic_a.vpcf_c b/game/sm/ziyuangeneric/courier_greevil_eye_generic_a.vpcf_c similarity index 100% rename from sm/ziyuangeneric/courier_greevil_eye_generic_a.vpcf_c rename to game/sm/ziyuangeneric/courier_greevil_eye_generic_a.vpcf_c diff --git a/sm/ziyuangeneric/courier_greevil_eye_generic_b.vpcf_c b/game/sm/ziyuangeneric/courier_greevil_eye_generic_b.vpcf_c similarity index 100% rename from sm/ziyuangeneric/courier_greevil_eye_generic_b.vpcf_c rename to game/sm/ziyuangeneric/courier_greevil_eye_generic_b.vpcf_c diff --git a/sm/ziyuangeneric/courier_greevil_eye_generic_c.vpcf_c b/game/sm/ziyuangeneric/courier_greevil_eye_generic_c.vpcf_c similarity index 100% rename from sm/ziyuangeneric/courier_greevil_eye_generic_c.vpcf_c rename to game/sm/ziyuangeneric/courier_greevil_eye_generic_c.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_a.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_a.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_a.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_a.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_a_pop.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_a_pop.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_a_pop.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_a_pop.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_b.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_b.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_b.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_b.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_c.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_c.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_c.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_c.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_e.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_e.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_e.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_e.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_f.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_f.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_f.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_f.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_g.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_g.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_g.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_g.vpcf_c diff --git a/sm/ziyuanpurple/courier_greevil_purple_ambient_3_h.vpcf_c b/game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_h.vpcf_c similarity index 100% rename from sm/ziyuanpurple/courier_greevil_purple_ambient_3_h.vpcf_c rename to game/sm/ziyuanpurple/courier_greevil_purple_ambient_3_h.vpcf_c diff --git a/soundevents/custom_game/store.vsndevts_c b/game/soundevents/custom_game/store.vsndevts_c similarity index 100% rename from soundevents/custom_game/store.vsndevts_c rename to game/soundevents/custom_game/store.vsndevts_c diff --git a/soundevents/custom_game/ui.vsndevts_c b/game/soundevents/custom_game/ui.vsndevts_c similarity index 100% rename from soundevents/custom_game/ui.vsndevts_c rename to game/soundevents/custom_game/ui.vsndevts_c diff --git a/soundevents/game_sounds/thdots_tower_attack_sounds.vsndevts_c b/game/soundevents/game_sounds/thdots_tower_attack_sounds.vsndevts_c similarity index 100% rename from soundevents/game_sounds/thdots_tower_attack_sounds.vsndevts_c rename to game/soundevents/game_sounds/thdots_tower_attack_sounds.vsndevts_c diff --git a/soundevents/game_sounds/thdots_tower_sound_voice.vsndevts_c b/game/soundevents/game_sounds/thdots_tower_sound_voice.vsndevts_c similarity index 100% rename from soundevents/game_sounds/thdots_tower_sound_voice.vsndevts_c rename to game/soundevents/game_sounds/thdots_tower_sound_voice.vsndevts_c diff --git a/soundevents/game_sounds/thdots_tower_sounds.vsndevts_c b/game/soundevents/game_sounds/thdots_tower_sounds.vsndevts_c similarity index 100% rename from soundevents/game_sounds/thdots_tower_sounds.vsndevts_c rename to game/soundevents/game_sounds/thdots_tower_sounds.vsndevts_c diff --git a/soundevents/game_sounds_custom.vsndevts_c b/game/soundevents/game_sounds_custom.vsndevts_c similarity index 100% rename from soundevents/game_sounds_custom.vsndevts_c rename to game/soundevents/game_sounds_custom.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_alice_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_alice_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_alice_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_alice_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_aya_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_aya_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_aya_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_aya_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_cirno_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_cirno_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_cirno_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_cirno_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_flandre_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_flandre_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_flandre_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_flandre_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_iku_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_iku_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_iku_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_iku_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_kaguya_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_kaguya_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_kaguya_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_kaguya_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_kanako_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_kanako_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_kanako_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_kanako_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_koishi_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_koishi_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_koishi_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_koishi_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_marisa_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_marisa_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_marisa_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_marisa_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_minamitsu_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_minamitsu_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_minamitsu_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_minamitsu_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_minoriko_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_minoriko_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_minoriko_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_minoriko_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_momiji_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_momiji_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_momiji_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_momiji_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_nue_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_nue_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_nue_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_nue_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_ran_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_ran_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_ran_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_ran_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_reimu_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_reimu_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_reimu_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_reimu_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_reisen_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_reisen_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_reisen_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_reisen_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_remilia_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_remilia_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_remilia_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_remilia_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_sakuya_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_sakuya_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_sakuya_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_sakuya_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_sanae_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_sanae_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_sanae_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_sanae_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_shikieiki_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_shikieiki_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_shikieiki_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_shikieiki_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_tenshi_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_tenshi_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_tenshi_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_tenshi_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_utsuho_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_utsuho_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_utsuho_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_utsuho_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_youmu_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_youmu_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_youmu_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_youmu_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_yukari_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_yukari_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_yukari_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_yukari_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_yumemi_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_yumemi_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_yumemi_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_yumemi_sounds.vsndevts_c diff --git a/soundevents/thdots_hero_sounds/thdots_yuyuko_sounds.vsndevts_c b/game/soundevents/thdots_hero_sounds/thdots_yuyuko_sounds.vsndevts_c similarity index 100% rename from soundevents/thdots_hero_sounds/thdots_yuyuko_sounds.vsndevts_c rename to game/soundevents/thdots_hero_sounds/thdots_yuyuko_sounds.vsndevts_c diff --git a/sounds/ability/0001_lily_ability1.vsnd_c b/game/sounds/ability/0001_lily_ability1.vsnd_c similarity index 100% rename from sounds/ability/0001_lily_ability1.vsnd_c rename to game/sounds/ability/0001_lily_ability1.vsnd_c diff --git a/sounds/ability/0014_marlin_ability1_01.vsnd_c b/game/sounds/ability/0014_marlin_ability1_01.vsnd_c similarity index 100% rename from sounds/ability/0014_marlin_ability1_01.vsnd_c rename to game/sounds/ability/0014_marlin_ability1_01.vsnd_c diff --git a/sounds/ability/0014_marlin_ability1_02.vsnd_c b/game/sounds/ability/0014_marlin_ability1_02.vsnd_c similarity index 100% rename from sounds/ability/0014_marlin_ability1_02.vsnd_c rename to game/sounds/ability/0014_marlin_ability1_02.vsnd_c diff --git a/sounds/ability/0019_marisa_ability1_5s.vsnd_c b/game/sounds/ability/0019_marisa_ability1_5s.vsnd_c similarity index 100% rename from sounds/ability/0019_marisa_ability1_5s.vsnd_c rename to game/sounds/ability/0019_marisa_ability1_5s.vsnd_c diff --git a/sounds/ability/0019_marisa_ability1_7s.vsnd_c b/game/sounds/ability/0019_marisa_ability1_7s.vsnd_c similarity index 100% rename from sounds/ability/0019_marisa_ability1_7s.vsnd_c rename to game/sounds/ability/0019_marisa_ability1_7s.vsnd_c diff --git a/sounds/ability/0019_marisa_ability3_5s.vsnd_c b/game/sounds/ability/0019_marisa_ability3_5s.vsnd_c similarity index 100% rename from sounds/ability/0019_marisa_ability3_5s.vsnd_c rename to game/sounds/ability/0019_marisa_ability3_5s.vsnd_c diff --git a/sounds/ability/0019_marisa_ability3_7s.vsnd_c b/game/sounds/ability/0019_marisa_ability3_7s.vsnd_c similarity index 100% rename from sounds/ability/0019_marisa_ability3_7s.vsnd_c rename to game/sounds/ability/0019_marisa_ability3_7s.vsnd_c diff --git a/sounds/ability/0021_pachouli_ability1_3.vsnd_c b/game/sounds/ability/0021_pachouli_ability1_3.vsnd_c similarity index 100% rename from sounds/ability/0021_pachouli_ability1_3.vsnd_c rename to game/sounds/ability/0021_pachouli_ability1_3.vsnd_c diff --git a/sounds/ability/0023_reisen_ability2.vsnd_c b/game/sounds/ability/0023_reisen_ability2.vsnd_c similarity index 100% rename from sounds/ability/0023_reisen_ability2.vsnd_c rename to game/sounds/ability/0023_reisen_ability2.vsnd_c diff --git a/sounds/ability/0023_reisen_ability3.vsnd_c b/game/sounds/ability/0023_reisen_ability3.vsnd_c similarity index 100% rename from sounds/ability/0023_reisen_ability3.vsnd_c rename to game/sounds/ability/0023_reisen_ability3.vsnd_c diff --git a/sounds/ability/0024_yuyuko_ability1.vsnd_c b/game/sounds/ability/0024_yuyuko_ability1.vsnd_c similarity index 100% rename from sounds/ability/0024_yuyuko_ability1.vsnd_c rename to game/sounds/ability/0024_yuyuko_ability1.vsnd_c diff --git a/sounds/ability/0025_youmu_ability3.vsnd_c b/game/sounds/ability/0025_youmu_ability3.vsnd_c similarity index 100% rename from sounds/ability/0025_youmu_ability3.vsnd_c rename to game/sounds/ability/0025_youmu_ability3.vsnd_c diff --git a/sounds/ability/0026_rin_ability1.vsnd_c b/game/sounds/ability/0026_rin_ability1.vsnd_c similarity index 100% rename from sounds/ability/0026_rin_ability1.vsnd_c rename to game/sounds/ability/0026_rin_ability1.vsnd_c diff --git a/sounds/ability/0028_reimu_ability1.vsnd_c b/game/sounds/ability/0028_reimu_ability1.vsnd_c similarity index 100% rename from sounds/ability/0028_reimu_ability1.vsnd_c rename to game/sounds/ability/0028_reimu_ability1.vsnd_c diff --git a/sounds/ability/0028_reimu_ability2.vsnd_c b/game/sounds/ability/0028_reimu_ability2.vsnd_c similarity index 100% rename from sounds/ability/0028_reimu_ability2.vsnd_c rename to game/sounds/ability/0028_reimu_ability2.vsnd_c diff --git a/sounds/ability/0028_reimu_ability3_1.vsnd_c b/game/sounds/ability/0028_reimu_ability3_1.vsnd_c similarity index 100% rename from sounds/ability/0028_reimu_ability3_1.vsnd_c rename to game/sounds/ability/0028_reimu_ability3_1.vsnd_c diff --git a/sounds/ability/0028_reimu_ability3_2.vsnd_c b/game/sounds/ability/0028_reimu_ability3_2.vsnd_c similarity index 100% rename from sounds/ability/0028_reimu_ability3_2.vsnd_c rename to game/sounds/ability/0028_reimu_ability3_2.vsnd_c diff --git a/sounds/ability/0028_reimu_ability4_1.vsnd_c b/game/sounds/ability/0028_reimu_ability4_1.vsnd_c similarity index 100% rename from sounds/ability/0028_reimu_ability4_1.vsnd_c rename to game/sounds/ability/0028_reimu_ability4_1.vsnd_c diff --git a/sounds/ability/0028_reimu_ability4_2_1.vsnd_c b/game/sounds/ability/0028_reimu_ability4_2_1.vsnd_c similarity index 100% rename from sounds/ability/0028_reimu_ability4_2_1.vsnd_c rename to game/sounds/ability/0028_reimu_ability4_2_1.vsnd_c diff --git a/sounds/ability/0028_reimu_ability4_2_2.vsnd_c b/game/sounds/ability/0028_reimu_ability4_2_2.vsnd_c similarity index 100% rename from sounds/ability/0028_reimu_ability4_2_2.vsnd_c rename to game/sounds/ability/0028_reimu_ability4_2_2.vsnd_c diff --git a/sounds/ability/0029_daiyousei_ability1.vsnd_c b/game/sounds/ability/0029_daiyousei_ability1.vsnd_c similarity index 100% rename from sounds/ability/0029_daiyousei_ability1.vsnd_c rename to game/sounds/ability/0029_daiyousei_ability1.vsnd_c diff --git a/sounds/ability/0030_remilia_ability3.vsnd_c b/game/sounds/ability/0030_remilia_ability3.vsnd_c similarity index 100% rename from sounds/ability/0030_remilia_ability3.vsnd_c rename to game/sounds/ability/0030_remilia_ability3.vsnd_c diff --git a/sounds/ability/0030_remilia_ability4.vsnd_c b/game/sounds/ability/0030_remilia_ability4.vsnd_c similarity index 100% rename from sounds/ability/0030_remilia_ability4.vsnd_c rename to game/sounds/ability/0030_remilia_ability4.vsnd_c diff --git a/sounds/ability/0035_yuuka_ability1_2_1.vsnd_c b/game/sounds/ability/0035_yuuka_ability1_2_1.vsnd_c similarity index 100% rename from sounds/ability/0035_yuuka_ability1_2_1.vsnd_c rename to game/sounds/ability/0035_yuuka_ability1_2_1.vsnd_c diff --git a/sounds/ability/0035_yuuka_ability1_2_2.vsnd_c b/game/sounds/ability/0035_yuuka_ability1_2_2.vsnd_c similarity index 100% rename from sounds/ability/0035_yuuka_ability1_2_2.vsnd_c rename to game/sounds/ability/0035_yuuka_ability1_2_2.vsnd_c diff --git a/sounds/ability/0035_yuuka_ability2_1.vsnd_c b/game/sounds/ability/0035_yuuka_ability2_1.vsnd_c similarity index 100% rename from sounds/ability/0035_yuuka_ability2_1.vsnd_c rename to game/sounds/ability/0035_yuuka_ability2_1.vsnd_c diff --git a/sounds/ability/0035_yuuka_ability2_2.vsnd_c b/game/sounds/ability/0035_yuuka_ability2_2.vsnd_c similarity index 100% rename from sounds/ability/0035_yuuka_ability2_2.vsnd_c rename to game/sounds/ability/0035_yuuka_ability2_2.vsnd_c diff --git a/sounds/ability/0035_yuuka_ability2_3.vsnd_c b/game/sounds/ability/0035_yuuka_ability2_3.vsnd_c similarity index 100% rename from sounds/ability/0035_yuuka_ability2_3.vsnd_c rename to game/sounds/ability/0035_yuuka_ability2_3.vsnd_c diff --git a/sounds/ability/0035_yuuka_ability4.vsnd_c b/game/sounds/ability/0035_yuuka_ability4.vsnd_c similarity index 100% rename from sounds/ability/0035_yuuka_ability4.vsnd_c rename to game/sounds/ability/0035_yuuka_ability4.vsnd_c diff --git a/sounds/ability/0036_yukari_ability4_1.vsnd_c b/game/sounds/ability/0036_yukari_ability4_1.vsnd_c similarity index 100% rename from sounds/ability/0036_yukari_ability4_1.vsnd_c rename to game/sounds/ability/0036_yukari_ability4_1.vsnd_c diff --git a/sounds/ability/0036_yukari_ability4_2.vsnd_c b/game/sounds/ability/0036_yukari_ability4_2.vsnd_c similarity index 100% rename from sounds/ability/0036_yukari_ability4_2.vsnd_c rename to game/sounds/ability/0036_yukari_ability4_2.vsnd_c diff --git a/sounds/ability/0037_ran_ability2.vsnd_c b/game/sounds/ability/0037_ran_ability2.vsnd_c similarity index 100% rename from sounds/ability/0037_ran_ability2.vsnd_c rename to game/sounds/ability/0037_ran_ability2.vsnd_c diff --git a/sounds/ability/0039_eirin_ability4.vsnd_c b/game/sounds/ability/0039_eirin_ability4.vsnd_c similarity index 100% rename from sounds/ability/0039_eirin_ability4.vsnd_c rename to game/sounds/ability/0039_eirin_ability4.vsnd_c diff --git a/sounds/ability/0043_hatate_ability01.vsnd_c b/game/sounds/ability/0043_hatate_ability01.vsnd_c similarity index 100% rename from sounds/ability/0043_hatate_ability01.vsnd_c rename to game/sounds/ability/0043_hatate_ability01.vsnd_c diff --git a/sounds/ability/0046_sanae_ability03.vsnd_c b/game/sounds/ability/0046_sanae_ability03.vsnd_c similarity index 100% rename from sounds/ability/0046_sanae_ability03.vsnd_c rename to game/sounds/ability/0046_sanae_ability03.vsnd_c diff --git a/sounds/ability/0048_suwako_ability4.vsnd_c b/game/sounds/ability/0048_suwako_ability4.vsnd_c similarity index 100% rename from sounds/ability/0048_suwako_ability4.vsnd_c rename to game/sounds/ability/0048_suwako_ability4.vsnd_c diff --git a/sounds/ability/0049_minamitsu_ability01.vsnd_c b/game/sounds/ability/0049_minamitsu_ability01.vsnd_c similarity index 100% rename from sounds/ability/0049_minamitsu_ability01.vsnd_c rename to game/sounds/ability/0049_minamitsu_ability01.vsnd_c diff --git a/sounds/ability/0049_minamitsu_ability04.vsnd_c b/game/sounds/ability/0049_minamitsu_ability04.vsnd_c similarity index 100% rename from sounds/ability/0049_minamitsu_ability04.vsnd_c rename to game/sounds/ability/0049_minamitsu_ability04.vsnd_c diff --git a/sounds/ability/0052_miko_ability01.vsnd_c b/game/sounds/ability/0052_miko_ability01.vsnd_c similarity index 100% rename from sounds/ability/0052_miko_ability01.vsnd_c rename to game/sounds/ability/0052_miko_ability01.vsnd_c diff --git a/sounds/ability/0052_miko_ability04_1.vsnd_c b/game/sounds/ability/0052_miko_ability04_1.vsnd_c similarity index 100% rename from sounds/ability/0052_miko_ability04_1.vsnd_c rename to game/sounds/ability/0052_miko_ability04_1.vsnd_c diff --git a/sounds/ability/0052_miko_ability04_2.vsnd_c b/game/sounds/ability/0052_miko_ability04_2.vsnd_c similarity index 100% rename from sounds/ability/0052_miko_ability04_2.vsnd_c rename to game/sounds/ability/0052_miko_ability04_2.vsnd_c diff --git a/sounds/ability/0058_luna_ability01.vsnd_c b/game/sounds/ability/0058_luna_ability01.vsnd_c similarity index 100% rename from sounds/ability/0058_luna_ability01.vsnd_c rename to game/sounds/ability/0058_luna_ability01.vsnd_c diff --git a/sounds/ability/0061_keine_ability01.vsnd_c b/game/sounds/ability/0061_keine_ability01.vsnd_c similarity index 100% rename from sounds/ability/0061_keine_ability01.vsnd_c rename to game/sounds/ability/0061_keine_ability01.vsnd_c diff --git a/sounds/ability/0080_shinki_ability01.vsnd_c b/game/sounds/ability/0080_shinki_ability01.vsnd_c similarity index 100% rename from sounds/ability/0080_shinki_ability01.vsnd_c rename to game/sounds/ability/0080_shinki_ability01.vsnd_c diff --git a/sounds/ability/0088_sizuha_ability01.vsnd_c b/game/sounds/ability/0088_sizuha_ability01.vsnd_c similarity index 100% rename from sounds/ability/0088_sizuha_ability01.vsnd_c rename to game/sounds/ability/0088_sizuha_ability01.vsnd_c diff --git a/sounds/ability/0092_medicine_ability02.vsnd_c b/game/sounds/ability/0092_medicine_ability02.vsnd_c similarity index 100% rename from sounds/ability/0092_medicine_ability02.vsnd_c rename to game/sounds/ability/0092_medicine_ability02.vsnd_c diff --git a/sounds/ability/0095_futo_ability03.vsnd_c b/game/sounds/ability/0095_futo_ability03.vsnd_c similarity index 100% rename from sounds/ability/0095_futo_ability03.vsnd_c rename to game/sounds/ability/0095_futo_ability03.vsnd_c diff --git a/sounds/abilityvoice/0019_marisa_ability4_voice.vsnd_c b/game/sounds/abilityvoice/0019_marisa_ability4_voice.vsnd_c similarity index 100% rename from sounds/abilityvoice/0019_marisa_ability4_voice.vsnd_c rename to game/sounds/abilityvoice/0019_marisa_ability4_voice.vsnd_c diff --git a/sounds/abilityvoice/0021_pachouli_ability4_voice.vsnd_c b/game/sounds/abilityvoice/0021_pachouli_ability4_voice.vsnd_c similarity index 100% rename from sounds/abilityvoice/0021_pachouli_ability4_voice.vsnd_c rename to game/sounds/abilityvoice/0021_pachouli_ability4_voice.vsnd_c diff --git a/sounds/abilityvoice/0022_sakuya_ability3_voice.vsnd_c b/game/sounds/abilityvoice/0022_sakuya_ability3_voice.vsnd_c similarity index 100% rename from sounds/abilityvoice/0022_sakuya_ability3_voice.vsnd_c rename to game/sounds/abilityvoice/0022_sakuya_ability3_voice.vsnd_c diff --git a/sounds/abilityvoice/0035_yuuka_ability3_voice.vsnd_c b/game/sounds/abilityvoice/0035_yuuka_ability3_voice.vsnd_c similarity index 100% rename from sounds/abilityvoice/0035_yuuka_ability3_voice.vsnd_c rename to game/sounds/abilityvoice/0035_yuuka_ability3_voice.vsnd_c diff --git a/sounds/abilityvoice/abilityalice011.vsnd_c b/game/sounds/abilityvoice/abilityalice011.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityalice011.vsnd_c rename to game/sounds/abilityvoice/abilityalice011.vsnd_c diff --git a/sounds/abilityvoice/abilityalice012.vsnd_c b/game/sounds/abilityvoice/abilityalice012.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityalice012.vsnd_c rename to game/sounds/abilityvoice/abilityalice012.vsnd_c diff --git a/sounds/abilityvoice/abilityalice022.vsnd_c b/game/sounds/abilityvoice/abilityalice022.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityalice022.vsnd_c rename to game/sounds/abilityvoice/abilityalice022.vsnd_c diff --git a/sounds/abilityvoice/abilityalice03.vsnd_c b/game/sounds/abilityvoice/abilityalice03.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityalice03.vsnd_c rename to game/sounds/abilityvoice/abilityalice03.vsnd_c diff --git a/sounds/abilityvoice/abilityalice031.vsnd_c b/game/sounds/abilityvoice/abilityalice031.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityalice031.vsnd_c rename to game/sounds/abilityvoice/abilityalice031.vsnd_c diff --git a/sounds/abilityvoice/abilityaliceex.vsnd_c b/game/sounds/abilityvoice/abilityaliceex.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityaliceex.vsnd_c rename to game/sounds/abilityvoice/abilityaliceex.vsnd_c diff --git a/sounds/abilityvoice/abilityaya04.vsnd_c b/game/sounds/abilityvoice/abilityaya04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityaya04.vsnd_c rename to game/sounds/abilityvoice/abilityaya04.vsnd_c diff --git a/sounds/abilityvoice/abilitycirno04.vsnd_c b/game/sounds/abilityvoice/abilitycirno04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitycirno04.vsnd_c rename to game/sounds/abilityvoice/abilitycirno04.vsnd_c diff --git a/sounds/abilityvoice/abilitycirno041.vsnd_c b/game/sounds/abilityvoice/abilitycirno041.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitycirno041.vsnd_c rename to game/sounds/abilityvoice/abilitycirno041.vsnd_c diff --git a/sounds/abilityvoice/abilityflandre04.vsnd_c b/game/sounds/abilityvoice/abilityflandre04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityflandre04.vsnd_c rename to game/sounds/abilityvoice/abilityflandre04.vsnd_c diff --git a/sounds/abilityvoice/abilityiku04.vsnd_c b/game/sounds/abilityvoice/abilityiku04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityiku04.vsnd_c rename to game/sounds/abilityvoice/abilityiku04.vsnd_c diff --git a/sounds/abilityvoice/abilitykaguya03.vsnd_c b/game/sounds/abilityvoice/abilitykaguya03.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykaguya03.vsnd_c rename to game/sounds/abilityvoice/abilitykaguya03.vsnd_c diff --git a/sounds/abilityvoice/abilitykaguya04.vsnd_c b/game/sounds/abilityvoice/abilitykaguya04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykaguya04.vsnd_c rename to game/sounds/abilityvoice/abilitykaguya04.vsnd_c diff --git a/sounds/abilityvoice/abilitykanako01.vsnd_c b/game/sounds/abilityvoice/abilitykanako01.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykanako01.vsnd_c rename to game/sounds/abilityvoice/abilitykanako01.vsnd_c diff --git a/sounds/abilityvoice/abilitykanako03.vsnd_c b/game/sounds/abilityvoice/abilitykanako03.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykanako03.vsnd_c rename to game/sounds/abilityvoice/abilitykanako03.vsnd_c diff --git a/sounds/abilityvoice/abilitykanako04.vsnd_c b/game/sounds/abilityvoice/abilitykanako04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykanako04.vsnd_c rename to game/sounds/abilityvoice/abilitykanako04.vsnd_c diff --git a/sounds/abilityvoice/abilitykanako041.vsnd_c b/game/sounds/abilityvoice/abilitykanako041.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykanako041.vsnd_c rename to game/sounds/abilityvoice/abilitykanako041.vsnd_c diff --git a/sounds/abilityvoice/abilitykanako043.vsnd_c b/game/sounds/abilityvoice/abilitykanako043.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykanako043.vsnd_c rename to game/sounds/abilityvoice/abilitykanako043.vsnd_c diff --git a/sounds/abilityvoice/abilitykoishi041.vsnd_c b/game/sounds/abilityvoice/abilitykoishi041.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykoishi041.vsnd_c rename to game/sounds/abilityvoice/abilitykoishi041.vsnd_c diff --git a/sounds/abilityvoice/abilitykoishi042.vsnd_c b/game/sounds/abilityvoice/abilitykoishi042.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitykoishi042.vsnd_c rename to game/sounds/abilityvoice/abilitykoishi042.vsnd_c diff --git a/sounds/abilityvoice/abilitymarisa04.vsnd_c b/game/sounds/abilityvoice/abilitymarisa04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitymarisa04.vsnd_c rename to game/sounds/abilityvoice/abilitymarisa04.vsnd_c diff --git a/sounds/abilityvoice/abilityminamitsu021.vsnd_c b/game/sounds/abilityvoice/abilityminamitsu021.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityminamitsu021.vsnd_c rename to game/sounds/abilityvoice/abilityminamitsu021.vsnd_c diff --git a/sounds/abilityvoice/abilityminamitsu022.vsnd_c b/game/sounds/abilityvoice/abilityminamitsu022.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityminamitsu022.vsnd_c rename to game/sounds/abilityvoice/abilityminamitsu022.vsnd_c diff --git a/sounds/abilityvoice/abilityminamitsu03.vsnd_c b/game/sounds/abilityvoice/abilityminamitsu03.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityminamitsu03.vsnd_c rename to game/sounds/abilityvoice/abilityminamitsu03.vsnd_c diff --git a/sounds/abilityvoice/abilityminamitsu041.vsnd_c b/game/sounds/abilityvoice/abilityminamitsu041.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityminamitsu041.vsnd_c rename to game/sounds/abilityvoice/abilityminamitsu041.vsnd_c diff --git a/sounds/abilityvoice/abilityminamitsu042.vsnd_c b/game/sounds/abilityvoice/abilityminamitsu042.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityminamitsu042.vsnd_c rename to game/sounds/abilityvoice/abilityminamitsu042.vsnd_c diff --git a/sounds/abilityvoice/abilitymomiji02.vsnd_c b/game/sounds/abilityvoice/abilitymomiji02.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitymomiji02.vsnd_c rename to game/sounds/abilityvoice/abilitymomiji02.vsnd_c diff --git a/sounds/abilityvoice/abilityran01.vsnd_c b/game/sounds/abilityvoice/abilityran01.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityran01.vsnd_c rename to game/sounds/abilityvoice/abilityran01.vsnd_c diff --git a/sounds/abilityvoice/abilityranex.vsnd_c b/game/sounds/abilityvoice/abilityranex.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityranex.vsnd_c rename to game/sounds/abilityvoice/abilityranex.vsnd_c diff --git a/sounds/abilityvoice/abilityreimu04.vsnd_c b/game/sounds/abilityvoice/abilityreimu04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityreimu04.vsnd_c rename to game/sounds/abilityvoice/abilityreimu04.vsnd_c diff --git a/sounds/abilityvoice/abilityreisen01.vsnd_c b/game/sounds/abilityvoice/abilityreisen01.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityreisen01.vsnd_c rename to game/sounds/abilityvoice/abilityreisen01.vsnd_c diff --git a/sounds/abilityvoice/abilityreisen02.vsnd_c b/game/sounds/abilityvoice/abilityreisen02.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityreisen02.vsnd_c rename to game/sounds/abilityvoice/abilityreisen02.vsnd_c diff --git a/sounds/abilityvoice/abilityreisen03.vsnd_c b/game/sounds/abilityvoice/abilityreisen03.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityreisen03.vsnd_c rename to game/sounds/abilityvoice/abilityreisen03.vsnd_c diff --git a/sounds/abilityvoice/abilityreisen041.vsnd_c b/game/sounds/abilityvoice/abilityreisen041.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityreisen041.vsnd_c rename to game/sounds/abilityvoice/abilityreisen041.vsnd_c diff --git a/sounds/abilityvoice/abilityreisen042.vsnd_c b/game/sounds/abilityvoice/abilityreisen042.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityreisen042.vsnd_c rename to game/sounds/abilityvoice/abilityreisen042.vsnd_c diff --git a/sounds/abilityvoice/abilityremilia01.vsnd_c b/game/sounds/abilityvoice/abilityremilia01.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityremilia01.vsnd_c rename to game/sounds/abilityvoice/abilityremilia01.vsnd_c diff --git a/sounds/abilityvoice/abilityremilia021.vsnd_c b/game/sounds/abilityvoice/abilityremilia021.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityremilia021.vsnd_c rename to game/sounds/abilityvoice/abilityremilia021.vsnd_c diff --git a/sounds/abilityvoice/abilityremilia022.vsnd_c b/game/sounds/abilityvoice/abilityremilia022.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityremilia022.vsnd_c rename to game/sounds/abilityvoice/abilityremilia022.vsnd_c diff --git a/sounds/abilityvoice/abilityremilia03.vsnd_c b/game/sounds/abilityvoice/abilityremilia03.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityremilia03.vsnd_c rename to game/sounds/abilityvoice/abilityremilia03.vsnd_c diff --git a/sounds/abilityvoice/abilityremilia04.vsnd_c b/game/sounds/abilityvoice/abilityremilia04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityremilia04.vsnd_c rename to game/sounds/abilityvoice/abilityremilia04.vsnd_c diff --git a/sounds/abilityvoice/abilitysakuya04.vsnd_c b/game/sounds/abilityvoice/abilitysakuya04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitysakuya04.vsnd_c rename to game/sounds/abilityvoice/abilitysakuya04.vsnd_c diff --git a/sounds/abilityvoice/abilitysanae04.vsnd_c b/game/sounds/abilityvoice/abilitysanae04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitysanae04.vsnd_c rename to game/sounds/abilityvoice/abilitysanae04.vsnd_c diff --git a/sounds/abilityvoice/abilityshikieiki04.vsnd_c b/game/sounds/abilityvoice/abilityshikieiki04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityshikieiki04.vsnd_c rename to game/sounds/abilityvoice/abilityshikieiki04.vsnd_c diff --git a/sounds/abilityvoice/abilitytenshi04.vsnd_c b/game/sounds/abilityvoice/abilitytenshi04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitytenshi04.vsnd_c rename to game/sounds/abilityvoice/abilitytenshi04.vsnd_c diff --git a/sounds/abilityvoice/abilityutsuho04.vsnd_c b/game/sounds/abilityvoice/abilityutsuho04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityutsuho04.vsnd_c rename to game/sounds/abilityvoice/abilityutsuho04.vsnd_c diff --git a/sounds/abilityvoice/abilitywriggle02.vsnd_c b/game/sounds/abilityvoice/abilitywriggle02.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitywriggle02.vsnd_c rename to game/sounds/abilityvoice/abilitywriggle02.vsnd_c diff --git a/sounds/abilityvoice/abilitywriggle04.vsnd_c b/game/sounds/abilityvoice/abilitywriggle04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilitywriggle04.vsnd_c rename to game/sounds/abilityvoice/abilitywriggle04.vsnd_c diff --git a/sounds/abilityvoice/abilityyoumu04.vsnd_c b/game/sounds/abilityvoice/abilityyoumu04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityyoumu04.vsnd_c rename to game/sounds/abilityvoice/abilityyoumu04.vsnd_c diff --git a/sounds/abilityvoice/abilityyukari03.vsnd_c b/game/sounds/abilityvoice/abilityyukari03.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityyukari03.vsnd_c rename to game/sounds/abilityvoice/abilityyukari03.vsnd_c diff --git a/sounds/abilityvoice/abilityyumemi04.vsnd_c b/game/sounds/abilityvoice/abilityyumemi04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityyumemi04.vsnd_c rename to game/sounds/abilityvoice/abilityyumemi04.vsnd_c diff --git a/sounds/abilityvoice/abilityyuyuko04.vsnd_c b/game/sounds/abilityvoice/abilityyuyuko04.vsnd_c similarity index 100% rename from sounds/abilityvoice/abilityyuyuko04.vsnd_c rename to game/sounds/abilityvoice/abilityyuyuko04.vsnd_c diff --git a/sounds/attack/0002_nazrin_attack01.vsnd_c b/game/sounds/attack/0002_nazrin_attack01.vsnd_c similarity index 100% rename from sounds/attack/0002_nazrin_attack01.vsnd_c rename to game/sounds/attack/0002_nazrin_attack01.vsnd_c diff --git a/sounds/attack/0002_nazrin_attack02.vsnd_c b/game/sounds/attack/0002_nazrin_attack02.vsnd_c similarity index 100% rename from sounds/attack/0002_nazrin_attack02.vsnd_c rename to game/sounds/attack/0002_nazrin_attack02.vsnd_c diff --git a/sounds/attack/0010_kogasa_attack01.vsnd_c b/game/sounds/attack/0010_kogasa_attack01.vsnd_c similarity index 100% rename from sounds/attack/0010_kogasa_attack01.vsnd_c rename to game/sounds/attack/0010_kogasa_attack01.vsnd_c diff --git a/sounds/attack/0010_kogasa_attack02.vsnd_c b/game/sounds/attack/0010_kogasa_attack02.vsnd_c similarity index 100% rename from sounds/attack/0010_kogasa_attack02.vsnd_c rename to game/sounds/attack/0010_kogasa_attack02.vsnd_c diff --git a/sounds/attack/0012_lyrica_attack01.vsnd_c b/game/sounds/attack/0012_lyrica_attack01.vsnd_c similarity index 100% rename from sounds/attack/0012_lyrica_attack01.vsnd_c rename to game/sounds/attack/0012_lyrica_attack01.vsnd_c diff --git a/sounds/attack/0012_lyrica_attack02.vsnd_c b/game/sounds/attack/0012_lyrica_attack02.vsnd_c similarity index 100% rename from sounds/attack/0012_lyrica_attack02.vsnd_c rename to game/sounds/attack/0012_lyrica_attack02.vsnd_c diff --git a/sounds/attack/0013_lunasa_attack01.vsnd_c b/game/sounds/attack/0013_lunasa_attack01.vsnd_c similarity index 100% rename from sounds/attack/0013_lunasa_attack01.vsnd_c rename to game/sounds/attack/0013_lunasa_attack01.vsnd_c diff --git a/sounds/attack/0013_lunasa_attack02.vsnd_c b/game/sounds/attack/0013_lunasa_attack02.vsnd_c similarity index 100% rename from sounds/attack/0013_lunasa_attack02.vsnd_c rename to game/sounds/attack/0013_lunasa_attack02.vsnd_c diff --git a/sounds/attack/0013_lunasa_attack03.vsnd_c b/game/sounds/attack/0013_lunasa_attack03.vsnd_c similarity index 100% rename from sounds/attack/0013_lunasa_attack03.vsnd_c rename to game/sounds/attack/0013_lunasa_attack03.vsnd_c diff --git a/sounds/attack/0014_marlin_attack01.vsnd_c b/game/sounds/attack/0014_marlin_attack01.vsnd_c similarity index 100% rename from sounds/attack/0014_marlin_attack01.vsnd_c rename to game/sounds/attack/0014_marlin_attack01.vsnd_c diff --git a/sounds/attack/0019_marisa_attack01.vsnd_c b/game/sounds/attack/0019_marisa_attack01.vsnd_c similarity index 100% rename from sounds/attack/0019_marisa_attack01.vsnd_c rename to game/sounds/attack/0019_marisa_attack01.vsnd_c diff --git a/sounds/attack/0019_marisa_attack02.vsnd_c b/game/sounds/attack/0019_marisa_attack02.vsnd_c similarity index 100% rename from sounds/attack/0019_marisa_attack02.vsnd_c rename to game/sounds/attack/0019_marisa_attack02.vsnd_c diff --git a/sounds/attack/0027_utsuho_attack.vsnd_c b/game/sounds/attack/0027_utsuho_attack.vsnd_c similarity index 100% rename from sounds/attack/0027_utsuho_attack.vsnd_c rename to game/sounds/attack/0027_utsuho_attack.vsnd_c diff --git a/sounds/attack/0028_reimu_attack01.vsnd_c b/game/sounds/attack/0028_reimu_attack01.vsnd_c similarity index 100% rename from sounds/attack/0028_reimu_attack01.vsnd_c rename to game/sounds/attack/0028_reimu_attack01.vsnd_c diff --git a/sounds/attack/0028_reimu_attack02.vsnd_c b/game/sounds/attack/0028_reimu_attack02.vsnd_c similarity index 100% rename from sounds/attack/0028_reimu_attack02.vsnd_c rename to game/sounds/attack/0028_reimu_attack02.vsnd_c diff --git a/sounds/attack/0043_hatate_attack01.vsnd_c b/game/sounds/attack/0043_hatate_attack01.vsnd_c similarity index 100% rename from sounds/attack/0043_hatate_attack01.vsnd_c rename to game/sounds/attack/0043_hatate_attack01.vsnd_c diff --git a/sounds/attack/0043_hatate_attack02.vsnd_c b/game/sounds/attack/0043_hatate_attack02.vsnd_c similarity index 100% rename from sounds/attack/0043_hatate_attack02.vsnd_c rename to game/sounds/attack/0043_hatate_attack02.vsnd_c diff --git a/sounds/attack/0048_suwako_attack01.vsnd_c b/game/sounds/attack/0048_suwako_attack01.vsnd_c similarity index 100% rename from sounds/attack/0048_suwako_attack01.vsnd_c rename to game/sounds/attack/0048_suwako_attack01.vsnd_c diff --git a/sounds/attack/0048_suwako_attack02.vsnd_c b/game/sounds/attack/0048_suwako_attack02.vsnd_c similarity index 100% rename from sounds/attack/0048_suwako_attack02.vsnd_c rename to game/sounds/attack/0048_suwako_attack02.vsnd_c diff --git a/sounds/attack/0048_suwako_attack03.vsnd_c b/game/sounds/attack/0048_suwako_attack03.vsnd_c similarity index 100% rename from sounds/attack/0048_suwako_attack03.vsnd_c rename to game/sounds/attack/0048_suwako_attack03.vsnd_c diff --git a/sounds/blink.vsnd_c b/game/sounds/blink.vsnd_c similarity index 100% rename from sounds/blink.vsnd_c rename to game/sounds/blink.vsnd_c diff --git a/sounds/buy_normal_card.vsnd_c b/game/sounds/buy_normal_card.vsnd_c similarity index 100% rename from sounds/buy_normal_card.vsnd_c rename to game/sounds/buy_normal_card.vsnd_c diff --git a/sounds/buy_senior_card.vsnd_c b/game/sounds/buy_senior_card.vsnd_c similarity index 100% rename from sounds/buy_senior_card.vsnd_c rename to game/sounds/buy_senior_card.vsnd_c diff --git a/sounds/create_voice/0002_nazrin.vsnd_c b/game/sounds/create_voice/0002_nazrin.vsnd_c similarity index 100% rename from sounds/create_voice/0002_nazrin.vsnd_c rename to game/sounds/create_voice/0002_nazrin.vsnd_c diff --git a/sounds/create_voice/0003_minoriko.vsnd_c b/game/sounds/create_voice/0003_minoriko.vsnd_c similarity index 100% rename from sounds/create_voice/0003_minoriko.vsnd_c rename to game/sounds/create_voice/0003_minoriko.vsnd_c diff --git a/sounds/create_voice/0010_kogasa_1.vsnd_c b/game/sounds/create_voice/0010_kogasa_1.vsnd_c similarity index 100% rename from sounds/create_voice/0010_kogasa_1.vsnd_c rename to game/sounds/create_voice/0010_kogasa_1.vsnd_c diff --git a/sounds/create_voice/0010_kogasa_2.vsnd_c b/game/sounds/create_voice/0010_kogasa_2.vsnd_c similarity index 100% rename from sounds/create_voice/0010_kogasa_2.vsnd_c rename to game/sounds/create_voice/0010_kogasa_2.vsnd_c diff --git a/sounds/create_voice/0011_letty.vsnd_c b/game/sounds/create_voice/0011_letty.vsnd_c similarity index 100% rename from sounds/create_voice/0011_letty.vsnd_c rename to game/sounds/create_voice/0011_letty.vsnd_c diff --git a/sounds/create_voice/0012_lyrica.vsnd_c b/game/sounds/create_voice/0012_lyrica.vsnd_c similarity index 100% rename from sounds/create_voice/0012_lyrica.vsnd_c rename to game/sounds/create_voice/0012_lyrica.vsnd_c diff --git a/sounds/create_voice/0012_lyrica_to_14merlin_13lunasa.vsnd_c b/game/sounds/create_voice/0012_lyrica_to_14merlin_13lunasa.vsnd_c similarity index 100% rename from sounds/create_voice/0012_lyrica_to_14merlin_13lunasa.vsnd_c rename to game/sounds/create_voice/0012_lyrica_to_14merlin_13lunasa.vsnd_c diff --git a/sounds/create_voice/0013_lunasa.vsnd_c b/game/sounds/create_voice/0013_lunasa.vsnd_c similarity index 100% rename from sounds/create_voice/0013_lunasa.vsnd_c rename to game/sounds/create_voice/0013_lunasa.vsnd_c diff --git a/sounds/create_voice/0013_lunasa_to_12lyrica_14merlin.vsnd_c b/game/sounds/create_voice/0013_lunasa_to_12lyrica_14merlin.vsnd_c similarity index 100% rename from sounds/create_voice/0013_lunasa_to_12lyrica_14merlin.vsnd_c rename to game/sounds/create_voice/0013_lunasa_to_12lyrica_14merlin.vsnd_c diff --git a/sounds/create_voice/0014_merlin.vsnd_c b/game/sounds/create_voice/0014_merlin.vsnd_c similarity index 100% rename from sounds/create_voice/0014_merlin.vsnd_c rename to game/sounds/create_voice/0014_merlin.vsnd_c diff --git a/sounds/create_voice/0014_merlin_to_0013_lunasa_12lyrica.vsnd_c b/game/sounds/create_voice/0014_merlin_to_0013_lunasa_12lyrica.vsnd_c similarity index 100% rename from sounds/create_voice/0014_merlin_to_0013_lunasa_12lyrica.vsnd_c rename to game/sounds/create_voice/0014_merlin_to_0013_lunasa_12lyrica.vsnd_c diff --git a/sounds/create_voice/0015_rumia.vsnd_c b/game/sounds/create_voice/0015_rumia.vsnd_c similarity index 100% rename from sounds/create_voice/0015_rumia.vsnd_c rename to game/sounds/create_voice/0015_rumia.vsnd_c diff --git a/sounds/create_voice/0016_satori.vsnd_c b/game/sounds/create_voice/0016_satori.vsnd_c similarity index 100% rename from sounds/create_voice/0016_satori.vsnd_c rename to game/sounds/create_voice/0016_satori.vsnd_c diff --git a/sounds/create_voice/0016_satori_cp_26rin.vsnd_c b/game/sounds/create_voice/0016_satori_cp_26rin.vsnd_c similarity index 100% rename from sounds/create_voice/0016_satori_cp_26rin.vsnd_c rename to game/sounds/create_voice/0016_satori_cp_26rin.vsnd_c diff --git a/sounds/create_voice/0018_mystia.vsnd_c b/game/sounds/create_voice/0018_mystia.vsnd_c similarity index 100% rename from sounds/create_voice/0018_mystia.vsnd_c rename to game/sounds/create_voice/0018_mystia.vsnd_c diff --git a/sounds/create_voice/0019_marisa.vsnd_c b/game/sounds/create_voice/0019_marisa.vsnd_c similarity index 100% rename from sounds/create_voice/0019_marisa.vsnd_c rename to game/sounds/create_voice/0019_marisa.vsnd_c diff --git a/sounds/create_voice/0019_marisa_cp_09cirno.vsnd_c b/game/sounds/create_voice/0019_marisa_cp_09cirno.vsnd_c similarity index 100% rename from sounds/create_voice/0019_marisa_cp_09cirno.vsnd_c rename to game/sounds/create_voice/0019_marisa_cp_09cirno.vsnd_c diff --git a/sounds/create_voice/0019_marisa_cp_21pachouli.vsnd_c b/game/sounds/create_voice/0019_marisa_cp_21pachouli.vsnd_c similarity index 100% rename from sounds/create_voice/0019_marisa_cp_21pachouli.vsnd_c rename to game/sounds/create_voice/0019_marisa_cp_21pachouli.vsnd_c diff --git a/sounds/create_voice/0019_marisa_cp_28reimu.vsnd_c b/game/sounds/create_voice/0019_marisa_cp_28reimu.vsnd_c similarity index 100% rename from sounds/create_voice/0019_marisa_cp_28reimu.vsnd_c rename to game/sounds/create_voice/0019_marisa_cp_28reimu.vsnd_c diff --git a/sounds/create_voice/0019_marisa_cp_35yuuka.vsnd_c b/game/sounds/create_voice/0019_marisa_cp_35yuuka.vsnd_c similarity index 100% rename from sounds/create_voice/0019_marisa_cp_35yuuka.vsnd_c rename to game/sounds/create_voice/0019_marisa_cp_35yuuka.vsnd_c diff --git a/sounds/create_voice/0019_marisa_cp_58mima.vsnd_c b/game/sounds/create_voice/0019_marisa_cp_58mima.vsnd_c similarity index 100% rename from sounds/create_voice/0019_marisa_cp_58mima.vsnd_c rename to game/sounds/create_voice/0019_marisa_cp_58mima.vsnd_c diff --git a/sounds/create_voice/0019_marisa_cp_67alice.vsnd_c b/game/sounds/create_voice/0019_marisa_cp_67alice.vsnd_c similarity index 100% rename from sounds/create_voice/0019_marisa_cp_67alice.vsnd_c rename to game/sounds/create_voice/0019_marisa_cp_67alice.vsnd_c diff --git a/sounds/create_voice/0021_pachouli.vsnd_c b/game/sounds/create_voice/0021_pachouli.vsnd_c similarity index 100% rename from sounds/create_voice/0021_pachouli.vsnd_c rename to game/sounds/create_voice/0021_pachouli.vsnd_c diff --git a/sounds/create_voice/0021_pachouli_cp_19marisa.vsnd_c b/game/sounds/create_voice/0021_pachouli_cp_19marisa.vsnd_c similarity index 100% rename from sounds/create_voice/0021_pachouli_cp_19marisa.vsnd_c rename to game/sounds/create_voice/0021_pachouli_cp_19marisa.vsnd_c diff --git a/sounds/create_voice/0021_pachouli_cp_33koakuma.vsnd_c b/game/sounds/create_voice/0021_pachouli_cp_33koakuma.vsnd_c similarity index 100% rename from sounds/create_voice/0021_pachouli_cp_33koakuma.vsnd_c rename to game/sounds/create_voice/0021_pachouli_cp_33koakuma.vsnd_c diff --git a/sounds/create_voice/0022_sakuya.vsnd_c b/game/sounds/create_voice/0022_sakuya.vsnd_c similarity index 100% rename from sounds/create_voice/0022_sakuya.vsnd_c rename to game/sounds/create_voice/0022_sakuya.vsnd_c diff --git a/sounds/create_voice/0022_sakuya_cp_18_mystia.vsnd_c b/game/sounds/create_voice/0022_sakuya_cp_18_mystia.vsnd_c similarity index 100% rename from sounds/create_voice/0022_sakuya_cp_18_mystia.vsnd_c rename to game/sounds/create_voice/0022_sakuya_cp_18_mystia.vsnd_c diff --git a/sounds/create_voice/0022_sakuya_cp_19marisa.vsnd_c b/game/sounds/create_voice/0022_sakuya_cp_19marisa.vsnd_c similarity index 100% rename from sounds/create_voice/0022_sakuya_cp_19marisa.vsnd_c rename to game/sounds/create_voice/0022_sakuya_cp_19marisa.vsnd_c diff --git a/sounds/create_voice/0022_sakuya_cp_30_remilia.vsnd_c b/game/sounds/create_voice/0022_sakuya_cp_30_remilia.vsnd_c similarity index 100% rename from sounds/create_voice/0022_sakuya_cp_30_remilia.vsnd_c rename to game/sounds/create_voice/0022_sakuya_cp_30_remilia.vsnd_c diff --git a/sounds/create_voice/0023_reisen_1.vsnd_c b/game/sounds/create_voice/0023_reisen_1.vsnd_c similarity index 100% rename from sounds/create_voice/0023_reisen_1.vsnd_c rename to game/sounds/create_voice/0023_reisen_1.vsnd_c diff --git a/sounds/create_voice/0023_reisen_2.vsnd_c b/game/sounds/create_voice/0023_reisen_2.vsnd_c similarity index 100% rename from sounds/create_voice/0023_reisen_2.vsnd_c rename to game/sounds/create_voice/0023_reisen_2.vsnd_c diff --git a/sounds/create_voice/0023_reisen_cp_39eirin.vsnd_c b/game/sounds/create_voice/0023_reisen_cp_39eirin.vsnd_c similarity index 100% rename from sounds/create_voice/0023_reisen_cp_39eirin.vsnd_c rename to game/sounds/create_voice/0023_reisen_cp_39eirin.vsnd_c diff --git a/sounds/create_voice/0023_reisen_cp_41kaguya.vsnd_c b/game/sounds/create_voice/0023_reisen_cp_41kaguya.vsnd_c similarity index 100% rename from sounds/create_voice/0023_reisen_cp_41kaguya.vsnd_c rename to game/sounds/create_voice/0023_reisen_cp_41kaguya.vsnd_c diff --git a/sounds/create_voice/0023_reisen_cp_70tewi.vsnd_c b/game/sounds/create_voice/0023_reisen_cp_70tewi.vsnd_c similarity index 100% rename from sounds/create_voice/0023_reisen_cp_70tewi.vsnd_c rename to game/sounds/create_voice/0023_reisen_cp_70tewi.vsnd_c diff --git a/sounds/create_voice/0024_yuyuko_1.vsnd_c b/game/sounds/create_voice/0024_yuyuko_1.vsnd_c similarity index 100% rename from sounds/create_voice/0024_yuyuko_1.vsnd_c rename to game/sounds/create_voice/0024_yuyuko_1.vsnd_c diff --git a/sounds/create_voice/0024_yuyuko_2.vsnd_c b/game/sounds/create_voice/0024_yuyuko_2.vsnd_c similarity index 100% rename from sounds/create_voice/0024_yuyuko_2.vsnd_c rename to game/sounds/create_voice/0024_yuyuko_2.vsnd_c diff --git a/sounds/create_voice/0024_yuyuko_cp_25youmu.vsnd_c b/game/sounds/create_voice/0024_yuyuko_cp_25youmu.vsnd_c similarity index 100% rename from sounds/create_voice/0024_yuyuko_cp_25youmu.vsnd_c rename to game/sounds/create_voice/0024_yuyuko_cp_25youmu.vsnd_c diff --git a/sounds/create_voice/0024_yuyuko_cp_36yukari.vsnd_c b/game/sounds/create_voice/0024_yuyuko_cp_36yukari.vsnd_c similarity index 100% rename from sounds/create_voice/0024_yuyuko_cp_36yukari.vsnd_c rename to game/sounds/create_voice/0024_yuyuko_cp_36yukari.vsnd_c diff --git a/sounds/create_voice/0025_youmu.vsnd_c b/game/sounds/create_voice/0025_youmu.vsnd_c similarity index 100% rename from sounds/create_voice/0025_youmu.vsnd_c rename to game/sounds/create_voice/0025_youmu.vsnd_c diff --git a/sounds/create_voice/0025_youmu_cp_24yuyuko.vsnd_c b/game/sounds/create_voice/0025_youmu_cp_24yuyuko.vsnd_c similarity index 100% rename from sounds/create_voice/0025_youmu_cp_24yuyuko.vsnd_c rename to game/sounds/create_voice/0025_youmu_cp_24yuyuko.vsnd_c diff --git a/sounds/create_voice/0026_rin.vsnd_c b/game/sounds/create_voice/0026_rin.vsnd_c similarity index 100% rename from sounds/create_voice/0026_rin.vsnd_c rename to game/sounds/create_voice/0026_rin.vsnd_c diff --git a/sounds/create_voice/0028_reimu.vsnd_c b/game/sounds/create_voice/0028_reimu.vsnd_c similarity index 100% rename from sounds/create_voice/0028_reimu.vsnd_c rename to game/sounds/create_voice/0028_reimu.vsnd_c diff --git a/sounds/create_voice/0029_daiyousei.vsnd_c b/game/sounds/create_voice/0029_daiyousei.vsnd_c similarity index 100% rename from sounds/create_voice/0029_daiyousei.vsnd_c rename to game/sounds/create_voice/0029_daiyousei.vsnd_c diff --git a/sounds/create_voice/0029_daiyousei_cp_09cirno.vsnd_c b/game/sounds/create_voice/0029_daiyousei_cp_09cirno.vsnd_c similarity index 100% rename from sounds/create_voice/0029_daiyousei_cp_09cirno.vsnd_c rename to game/sounds/create_voice/0029_daiyousei_cp_09cirno.vsnd_c diff --git a/sounds/create_voice/0029_daiyousei_cp_15rumia.vsnd_c b/game/sounds/create_voice/0029_daiyousei_cp_15rumia.vsnd_c similarity index 100% rename from sounds/create_voice/0029_daiyousei_cp_15rumia.vsnd_c rename to game/sounds/create_voice/0029_daiyousei_cp_15rumia.vsnd_c diff --git a/sounds/create_voice/0031_koishi_1.vsnd_c b/game/sounds/create_voice/0031_koishi_1.vsnd_c similarity index 100% rename from sounds/create_voice/0031_koishi_1.vsnd_c rename to game/sounds/create_voice/0031_koishi_1.vsnd_c diff --git a/sounds/create_voice/0031_koishi_2.vsnd_c b/game/sounds/create_voice/0031_koishi_2.vsnd_c similarity index 100% rename from sounds/create_voice/0031_koishi_2.vsnd_c rename to game/sounds/create_voice/0031_koishi_2.vsnd_c diff --git a/sounds/create_voice/0031_koishi_cp_16satori.vsnd_c b/game/sounds/create_voice/0031_koishi_cp_16satori.vsnd_c similarity index 100% rename from sounds/create_voice/0031_koishi_cp_16satori.vsnd_c rename to game/sounds/create_voice/0031_koishi_cp_16satori.vsnd_c diff --git a/sounds/create_voice/0032_flandre_1.vsnd_c b/game/sounds/create_voice/0032_flandre_1.vsnd_c similarity index 100% rename from sounds/create_voice/0032_flandre_1.vsnd_c rename to game/sounds/create_voice/0032_flandre_1.vsnd_c diff --git a/sounds/create_voice/0032_flandre_2.vsnd_c b/game/sounds/create_voice/0032_flandre_2.vsnd_c similarity index 100% rename from sounds/create_voice/0032_flandre_2.vsnd_c rename to game/sounds/create_voice/0032_flandre_2.vsnd_c diff --git a/sounds/create_voice/0033_koakuma.vsnd_c b/game/sounds/create_voice/0033_koakuma.vsnd_c similarity index 100% rename from sounds/create_voice/0033_koakuma.vsnd_c rename to game/sounds/create_voice/0033_koakuma.vsnd_c diff --git a/sounds/create_voice/0033_koakuma_cp_21pachouli.vsnd_c b/game/sounds/create_voice/0033_koakuma_cp_21pachouli.vsnd_c similarity index 100% rename from sounds/create_voice/0033_koakuma_cp_21pachouli.vsnd_c rename to game/sounds/create_voice/0033_koakuma_cp_21pachouli.vsnd_c diff --git a/sounds/create_voice/0035_yuuka_1.vsnd_c b/game/sounds/create_voice/0035_yuuka_1.vsnd_c similarity index 100% rename from sounds/create_voice/0035_yuuka_1.vsnd_c rename to game/sounds/create_voice/0035_yuuka_1.vsnd_c diff --git a/sounds/create_voice/0035_yuuka_2.vsnd_c b/game/sounds/create_voice/0035_yuuka_2.vsnd_c similarity index 100% rename from sounds/create_voice/0035_yuuka_2.vsnd_c rename to game/sounds/create_voice/0035_yuuka_2.vsnd_c diff --git a/sounds/create_voice/0037_ran.vsnd_c b/game/sounds/create_voice/0037_ran.vsnd_c similarity index 100% rename from sounds/create_voice/0037_ran.vsnd_c rename to game/sounds/create_voice/0037_ran.vsnd_c diff --git a/sounds/create_voice/0039_eirin.vsnd_c b/game/sounds/create_voice/0039_eirin.vsnd_c similarity index 100% rename from sounds/create_voice/0039_eirin.vsnd_c rename to game/sounds/create_voice/0039_eirin.vsnd_c diff --git a/sounds/create_voice/0039_eirin_41kaguya.vsnd_c b/game/sounds/create_voice/0039_eirin_41kaguya.vsnd_c similarity index 100% rename from sounds/create_voice/0039_eirin_41kaguya.vsnd_c rename to game/sounds/create_voice/0039_eirin_41kaguya.vsnd_c diff --git a/sounds/create_voice/0041_kaguya_1.vsnd_c b/game/sounds/create_voice/0041_kaguya_1.vsnd_c similarity index 100% rename from sounds/create_voice/0041_kaguya_1.vsnd_c rename to game/sounds/create_voice/0041_kaguya_1.vsnd_c diff --git a/sounds/create_voice/0041_kaguya_2.vsnd_c b/game/sounds/create_voice/0041_kaguya_2.vsnd_c similarity index 100% rename from sounds/create_voice/0041_kaguya_2.vsnd_c rename to game/sounds/create_voice/0041_kaguya_2.vsnd_c diff --git a/sounds/create_voice/0041_kaguya_cp_23reisen.vsnd_c b/game/sounds/create_voice/0041_kaguya_cp_23reisen.vsnd_c similarity index 100% rename from sounds/create_voice/0041_kaguya_cp_23reisen.vsnd_c rename to game/sounds/create_voice/0041_kaguya_cp_23reisen.vsnd_c diff --git a/sounds/create_voice/0041_kaguya_cp_39_eirin.vsnd_c b/game/sounds/create_voice/0041_kaguya_cp_39_eirin.vsnd_c similarity index 100% rename from sounds/create_voice/0041_kaguya_cp_39_eirin.vsnd_c rename to game/sounds/create_voice/0041_kaguya_cp_39_eirin.vsnd_c diff --git a/sounds/create_voice/0041_kaguya_cp_70tewi.vsnd_c b/game/sounds/create_voice/0041_kaguya_cp_70tewi.vsnd_c similarity index 100% rename from sounds/create_voice/0041_kaguya_cp_70tewi.vsnd_c rename to game/sounds/create_voice/0041_kaguya_cp_70tewi.vsnd_c diff --git a/sounds/create_voice/0043_hatate.vsnd_c b/game/sounds/create_voice/0043_hatate.vsnd_c similarity index 100% rename from sounds/create_voice/0043_hatate.vsnd_c rename to game/sounds/create_voice/0043_hatate.vsnd_c diff --git a/sounds/create_voice/0044_momizi_1.vsnd_c b/game/sounds/create_voice/0044_momizi_1.vsnd_c similarity index 100% rename from sounds/create_voice/0044_momizi_1.vsnd_c rename to game/sounds/create_voice/0044_momizi_1.vsnd_c diff --git a/sounds/create_voice/0044_momizi_2.vsnd_c b/game/sounds/create_voice/0044_momizi_2.vsnd_c similarity index 100% rename from sounds/create_voice/0044_momizi_2.vsnd_c rename to game/sounds/create_voice/0044_momizi_2.vsnd_c diff --git a/sounds/create_voice/0045_nitori_1.vsnd_c b/game/sounds/create_voice/0045_nitori_1.vsnd_c similarity index 100% rename from sounds/create_voice/0045_nitori_1.vsnd_c rename to game/sounds/create_voice/0045_nitori_1.vsnd_c diff --git a/sounds/create_voice/0045_nitori_2.vsnd_c b/game/sounds/create_voice/0045_nitori_2.vsnd_c similarity index 100% rename from sounds/create_voice/0045_nitori_2.vsnd_c rename to game/sounds/create_voice/0045_nitori_2.vsnd_c diff --git a/sounds/create_voice/0047_kanako.vsnd_c b/game/sounds/create_voice/0047_kanako.vsnd_c similarity index 100% rename from sounds/create_voice/0047_kanako.vsnd_c rename to game/sounds/create_voice/0047_kanako.vsnd_c diff --git a/sounds/create_voice/0049_minamitsu.vsnd_c b/game/sounds/create_voice/0049_minamitsu.vsnd_c similarity index 100% rename from sounds/create_voice/0049_minamitsu.vsnd_c rename to game/sounds/create_voice/0049_minamitsu.vsnd_c diff --git a/sounds/create_voice/0052_miko_1.vsnd_c b/game/sounds/create_voice/0052_miko_1.vsnd_c similarity index 100% rename from sounds/create_voice/0052_miko_1.vsnd_c rename to game/sounds/create_voice/0052_miko_1.vsnd_c diff --git a/sounds/create_voice/0052_miko_2.vsnd_c b/game/sounds/create_voice/0052_miko_2.vsnd_c similarity index 100% rename from sounds/create_voice/0052_miko_2.vsnd_c rename to game/sounds/create_voice/0052_miko_2.vsnd_c diff --git a/sounds/create_voice/0056_star.vsnd_c b/game/sounds/create_voice/0056_star.vsnd_c similarity index 100% rename from sounds/create_voice/0056_star.vsnd_c rename to game/sounds/create_voice/0056_star.vsnd_c diff --git a/sounds/create_voice/0057_sunny.vsnd_c b/game/sounds/create_voice/0057_sunny.vsnd_c similarity index 100% rename from sounds/create_voice/0057_sunny.vsnd_c rename to game/sounds/create_voice/0057_sunny.vsnd_c diff --git a/sounds/create_voice/0058_luna.vsnd_c b/game/sounds/create_voice/0058_luna.vsnd_c similarity index 100% rename from sounds/create_voice/0058_luna.vsnd_c rename to game/sounds/create_voice/0058_luna.vsnd_c diff --git a/sounds/create_voice/0059_alice.vsnd_c b/game/sounds/create_voice/0059_alice.vsnd_c similarity index 100% rename from sounds/create_voice/0059_alice.vsnd_c rename to game/sounds/create_voice/0059_alice.vsnd_c diff --git a/sounds/create_voice/0059_alicee_cp_marisa.vsnd_c b/game/sounds/create_voice/0059_alicee_cp_marisa.vsnd_c similarity index 100% rename from sounds/create_voice/0059_alicee_cp_marisa.vsnd_c rename to game/sounds/create_voice/0059_alicee_cp_marisa.vsnd_c diff --git a/sounds/create_voice/0059_alicee_cp_reimu.vsnd_c b/game/sounds/create_voice/0059_alicee_cp_reimu.vsnd_c similarity index 100% rename from sounds/create_voice/0059_alicee_cp_reimu.vsnd_c rename to game/sounds/create_voice/0059_alicee_cp_reimu.vsnd_c diff --git a/sounds/create_voice/0060_wriggle.vsnd_c b/game/sounds/create_voice/0060_wriggle.vsnd_c similarity index 100% rename from sounds/create_voice/0060_wriggle.vsnd_c rename to game/sounds/create_voice/0060_wriggle.vsnd_c diff --git a/sounds/create_voice/0061_keine.vsnd_c b/game/sounds/create_voice/0061_keine.vsnd_c similarity index 100% rename from sounds/create_voice/0061_keine.vsnd_c rename to game/sounds/create_voice/0061_keine.vsnd_c diff --git a/sounds/create_voice/0088_sizuha.vsnd_c b/game/sounds/create_voice/0088_sizuha.vsnd_c similarity index 100% rename from sounds/create_voice/0088_sizuha.vsnd_c rename to game/sounds/create_voice/0088_sizuha.vsnd_c diff --git a/sounds/create_voice/0092_medicine.vsnd_c b/game/sounds/create_voice/0092_medicine.vsnd_c similarity index 100% rename from sounds/create_voice/0092_medicine.vsnd_c rename to game/sounds/create_voice/0092_medicine.vsnd_c diff --git a/sounds/create_voice/0094_soga.vsnd_c b/game/sounds/create_voice/0094_soga.vsnd_c similarity index 100% rename from sounds/create_voice/0094_soga.vsnd_c rename to game/sounds/create_voice/0094_soga.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_01_layer_01.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_01_layer_01.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_01_layer_01.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_01_layer_01.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_01_layer_02.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_01_layer_02.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_01_layer_02.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_01_layer_02.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_01_layer_03.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_01_layer_03.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_01_layer_03.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_01_layer_03.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_02_layer_01.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_02_layer_01.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_02_layer_01.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_02_layer_01.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_02_layer_02.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_02_layer_02.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_02_layer_02.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_02_layer_02.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_03_layer_01.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_03_layer_01.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_03_layer_01.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_03_layer_01.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_03_layer_02.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_03_layer_02.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_03_layer_02.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_03_layer_02.vsnd_c diff --git a/sounds/music/valve_dota_001/music/laning_03_layer_03.vsnd_c b/game/sounds/music/valve_dota_001/music/laning_03_layer_03.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/laning_03_layer_03.vsnd_c rename to game/sounds/music/valve_dota_001/music/laning_03_layer_03.vsnd_c diff --git a/sounds/music/valve_dota_001/music/ui_hero_select.vsnd_c b/game/sounds/music/valve_dota_001/music/ui_hero_select.vsnd_c similarity index 100% rename from sounds/music/valve_dota_001/music/ui_hero_select.vsnd_c rename to game/sounds/music/valve_dota_001/music/ui_hero_select.vsnd_c diff --git a/sounds/null_2s.vsnd_c b/game/sounds/null_2s.vsnd_c similarity index 100% rename from sounds/null_2s.vsnd_c rename to game/sounds/null_2s.vsnd_c diff --git a/sounds/pick_1.vsnd_c b/game/sounds/pick_1.vsnd_c similarity index 100% rename from sounds/pick_1.vsnd_c rename to game/sounds/pick_1.vsnd_c diff --git a/sounds/pick_2.vsnd_c b/game/sounds/pick_2.vsnd_c similarity index 100% rename from sounds/pick_2.vsnd_c rename to game/sounds/pick_2.vsnd_c diff --git a/sounds/star_up.vsnd_c b/game/sounds/star_up.vsnd_c similarity index 100% rename from sounds/star_up.vsnd_c rename to game/sounds/star_up.vsnd_c diff --git a/sounds/thtd_sounds/ability_buy_normal_card.vsnd_c b/game/sounds/thtd_sounds/ability_buy_normal_card.vsnd_c similarity index 100% rename from sounds/thtd_sounds/ability_buy_normal_card.vsnd_c rename to game/sounds/thtd_sounds/ability_buy_normal_card.vsnd_c diff --git a/sounds/thtd_sounds/ability_buy_senior_card.vsnd_c b/game/sounds/thtd_sounds/ability_buy_senior_card.vsnd_c similarity index 100% rename from sounds/thtd_sounds/ability_buy_senior_card.vsnd_c rename to game/sounds/thtd_sounds/ability_buy_senior_card.vsnd_c diff --git a/sounds/thtd_sounds/ability_exp_up.vsnd_c b/game/sounds/thtd_sounds/ability_exp_up.vsnd_c similarity index 100% rename from sounds/thtd_sounds/ability_exp_up.vsnd_c rename to game/sounds/thtd_sounds/ability_exp_up.vsnd_c diff --git a/sounds/thtd_sounds/ability_release_tower.vsnd_c b/game/sounds/thtd_sounds/ability_release_tower.vsnd_c similarity index 100% rename from sounds/thtd_sounds/ability_release_tower.vsnd_c rename to game/sounds/thtd_sounds/ability_release_tower.vsnd_c diff --git a/sounds/thtd_sounds/ability_star_up.vsnd_c b/game/sounds/thtd_sounds/ability_star_up.vsnd_c similarity index 100% rename from sounds/thtd_sounds/ability_star_up.vsnd_c rename to game/sounds/thtd_sounds/ability_star_up.vsnd_c diff --git a/sounds/thtd_sounds/thtd_draw_r.vsnd_c b/game/sounds/thtd_sounds/thtd_draw_r.vsnd_c similarity index 100% rename from sounds/thtd_sounds/thtd_draw_r.vsnd_c rename to game/sounds/thtd_sounds/thtd_draw_r.vsnd_c diff --git a/sounds/thtd_sounds/thtd_draw_sr.vsnd_c b/game/sounds/thtd_sounds/thtd_draw_sr.vsnd_c similarity index 100% rename from sounds/thtd_sounds/thtd_draw_sr.vsnd_c rename to game/sounds/thtd_sounds/thtd_draw_sr.vsnd_c diff --git a/sounds/thtd_sounds/thtd_draw_ssr.vsnd_c b/game/sounds/thtd_sounds/thtd_draw_ssr.vsnd_c similarity index 100% rename from sounds/thtd_sounds/thtd_draw_ssr.vsnd_c rename to game/sounds/thtd_sounds/thtd_draw_ssr.vsnd_c diff --git a/sounds/ui/button01.vsnd_c b/game/sounds/ui/button01.vsnd_c similarity index 100% rename from sounds/ui/button01.vsnd_c rename to game/sounds/ui/button01.vsnd_c diff --git a/sounds/ui/button02.vsnd_c b/game/sounds/ui/button02.vsnd_c similarity index 100% rename from sounds/ui/button02.vsnd_c rename to game/sounds/ui/button02.vsnd_c diff --git a/sounds/ui/button03.vsnd_c b/game/sounds/ui/button03.vsnd_c similarity index 100% rename from sounds/ui/button03.vsnd_c rename to game/sounds/ui/button03.vsnd_c diff --git a/sounds/ui/button04.vsnd_c b/game/sounds/ui/button04.vsnd_c similarity index 100% rename from sounds/ui/button04.vsnd_c rename to game/sounds/ui/button04.vsnd_c diff --git a/sounds/ui/card01.vsnd_c b/game/sounds/ui/card01.vsnd_c similarity index 100% rename from sounds/ui/card01.vsnd_c rename to game/sounds/ui/card01.vsnd_c diff --git a/sounds/ui/card02.vsnd_c b/game/sounds/ui/card02.vsnd_c similarity index 100% rename from sounds/ui/card02.vsnd_c rename to game/sounds/ui/card02.vsnd_c diff --git a/sounds/ui/quest_completed.vsnd_c b/game/sounds/ui/quest_completed.vsnd_c similarity index 100% rename from sounds/ui/quest_completed.vsnd_c rename to game/sounds/ui/quest_completed.vsnd_c diff --git a/sounds/vo/announcer/announcer_battle_begin_01.vsnd_c b/game/sounds/vo/announcer/announcer_battle_begin_01.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_battle_begin_01.vsnd_c rename to game/sounds/vo/announcer/announcer_battle_begin_01.vsnd_c diff --git a/sounds/vo/announcer/announcer_battle_prepare_01.vsnd_c b/game/sounds/vo/announcer/announcer_battle_prepare_01.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_battle_prepare_01.vsnd_c rename to game/sounds/vo/announcer/announcer_battle_prepare_01.vsnd_c diff --git a/sounds/vo/announcer/announcer_choose_hero.vsnd_c b/game/sounds/vo/announcer/announcer_choose_hero.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_choose_hero.vsnd_c rename to game/sounds/vo/announcer/announcer_choose_hero.vsnd_c diff --git a/sounds/vo/announcer/announcer_count_battle_10.vsnd_c b/game/sounds/vo/announcer/announcer_count_battle_10.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_count_battle_10.vsnd_c rename to game/sounds/vo/announcer/announcer_count_battle_10.vsnd_c diff --git a/sounds/vo/announcer/announcer_count_battle_30.vsnd_c b/game/sounds/vo/announcer/announcer_count_battle_30.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_count_battle_30.vsnd_c rename to game/sounds/vo/announcer/announcer_count_battle_30.vsnd_c diff --git a/sounds/vo/announcer/announcer_count_pick_10.vsnd_c b/game/sounds/vo/announcer/announcer_count_pick_10.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_count_pick_10.vsnd_c rename to game/sounds/vo/announcer/announcer_count_pick_10.vsnd_c diff --git a/sounds/vo/announcer/announcer_count_pick_5.vsnd_c b/game/sounds/vo/announcer/announcer_count_pick_5.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_count_pick_5.vsnd_c rename to game/sounds/vo/announcer/announcer_count_pick_5.vsnd_c diff --git a/sounds/vo/announcer/announcer_now_select.vsnd_c b/game/sounds/vo/announcer/announcer_now_select.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_now_select.vsnd_c rename to game/sounds/vo/announcer/announcer_now_select.vsnd_c diff --git a/sounds/vo/announcer/announcer_victory_dire.vsnd_c b/game/sounds/vo/announcer/announcer_victory_dire.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_victory_dire.vsnd_c rename to game/sounds/vo/announcer/announcer_victory_dire.vsnd_c diff --git a/sounds/vo/announcer/announcer_victory_rad.vsnd_c b/game/sounds/vo/announcer/announcer_victory_rad.vsnd_c similarity index 100% rename from sounds/vo/announcer/announcer_victory_rad.vsnd_c rename to game/sounds/vo/announcer/announcer_victory_rad.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_02.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_03.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_05.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_06.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_07.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_08.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_09.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_bladefury_10.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_bladefury_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_bladefury_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_bladefury_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_immunity_01.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_immunity_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_immunity_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_immunity_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_immunity_02.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_immunity_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_immunity_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_immunity_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_immunity_03.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_immunity_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_immunity_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_immunity_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_01.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_02.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_03.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_04.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_05.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_06.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_07.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_08.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_09.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_10.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_11.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_11.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_11.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_12.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_12.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_12.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_13.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_13.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_13.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_13.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_14.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_14.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_14.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_14.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_15.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_15.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_15.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_15.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_16.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_16.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_16.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_16.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_17.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_17.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_17.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_17.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_18.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_18.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_18.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_18.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_19.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_19.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_19.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_19.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_20.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_20.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_20.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_20.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_21.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_21.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_21.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_21.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_22.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_22.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_22.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_22.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_23.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_23.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_23.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_23.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_24.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_24.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_24.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_24.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_25.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_25.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_25.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_25.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_26.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_26.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_26.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_26.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_27.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_27.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_27.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_27.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_28.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_28.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_28.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_28.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_29.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_29.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_29.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_29.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_30.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_30.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_30.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_30.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_31.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_31.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_31.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_31.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_32.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_32.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_32.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_32.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_33.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_33.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_33.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_33.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_omnislash_34.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_omnislash_34.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_omnislash_34.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_omnislash_34.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_stunteleport_01.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_stunteleport_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_stunteleport_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_stunteleport_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_stunteleport_02.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_stunteleport_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_stunteleport_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_stunteleport_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_stunteleport_03.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_stunteleport_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_stunteleport_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_stunteleport_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_waste_01.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_waste_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_waste_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_waste_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_ability_waste_02.vsnd_c b/game/sounds/vo/juggernaut/jug_ability_waste_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_ability_waste_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_ability_waste_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_acknow_01.vsnd_c b/game/sounds/vo/juggernaut/jug_acknow_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_acknow_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_acknow_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_acknow_02.vsnd_c b/game/sounds/vo/juggernaut/jug_acknow_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_acknow_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_acknow_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_acknow_03.vsnd_c b/game/sounds/vo/juggernaut/jug_acknow_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_acknow_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_acknow_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_acknow_04.vsnd_c b/game/sounds/vo/juggernaut/jug_acknow_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_acknow_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_acknow_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_acknow_05.vsnd_c b/game/sounds/vo/juggernaut/jug_acknow_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_acknow_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_acknow_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_anger_01.vsnd_c b/game/sounds/vo/juggernaut/jug_anger_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_anger_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_anger_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_anger_02.vsnd_c b/game/sounds/vo/juggernaut/jug_anger_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_anger_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_anger_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_anger_03.vsnd_c b/game/sounds/vo/juggernaut/jug_anger_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_anger_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_anger_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_anger_04.vsnd_c b/game/sounds/vo/juggernaut/jug_anger_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_anger_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_anger_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_anger_05.vsnd_c b/game/sounds/vo/juggernaut/jug_anger_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_anger_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_anger_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_anger_06.vsnd_c b/game/sounds/vo/juggernaut/jug_anger_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_anger_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_anger_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_anger_07.vsnd_c b/game/sounds/vo/juggernaut/jug_anger_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_anger_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_anger_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_01.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_02.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_03.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_04.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_05.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_06.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_07.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_08.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_09.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_10.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_11.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_11.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_11.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_12.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_12.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_12.vsnd_c diff --git a/sounds/vo/juggernaut/jug_attack_13.vsnd_c b/game/sounds/vo/juggernaut/jug_attack_13.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_attack_13.vsnd_c rename to game/sounds/vo/juggernaut/jug_attack_13.vsnd_c diff --git a/sounds/vo/juggernaut/jug_bottle_01.vsnd_c b/game/sounds/vo/juggernaut/jug_bottle_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_bottle_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_bottle_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_bottle_02.vsnd_c b/game/sounds/vo/juggernaut/jug_bottle_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_bottle_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_bottle_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_bottle_03.vsnd_c b/game/sounds/vo/juggernaut/jug_bottle_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_bottle_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_bottle_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_bottle_04.vsnd_c b/game/sounds/vo/juggernaut/jug_bottle_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_bottle_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_bottle_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_cast_01.vsnd_c b/game/sounds/vo/juggernaut/jug_cast_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_cast_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_cast_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_cast_02.vsnd_c b/game/sounds/vo/juggernaut/jug_cast_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_cast_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_cast_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_cast_03.vsnd_c b/game/sounds/vo/juggernaut/jug_cast_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_cast_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_cast_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_crumwiz_01.vsnd_c b/game/sounds/vo/juggernaut/jug_crumwiz_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_crumwiz_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_crumwiz_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_01.vsnd_c b/game/sounds/vo/juggernaut/jug_death_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_02.vsnd_c b/game/sounds/vo/juggernaut/jug_death_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_03.vsnd_c b/game/sounds/vo/juggernaut/jug_death_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_04.vsnd_c b/game/sounds/vo/juggernaut/jug_death_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_05.vsnd_c b/game/sounds/vo/juggernaut/jug_death_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_06.vsnd_c b/game/sounds/vo/juggernaut/jug_death_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_07.vsnd_c b/game/sounds/vo/juggernaut/jug_death_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_08.vsnd_c b/game/sounds/vo/juggernaut/jug_death_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_09.vsnd_c b/game/sounds/vo/juggernaut/jug_death_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_10.vsnd_c b/game/sounds/vo/juggernaut/jug_death_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_11.vsnd_c b/game/sounds/vo/juggernaut/jug_death_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_11.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_11.vsnd_c diff --git a/sounds/vo/juggernaut/jug_death_12.vsnd_c b/game/sounds/vo/juggernaut/jug_death_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_death_12.vsnd_c rename to game/sounds/vo/juggernaut/jug_death_12.vsnd_c diff --git a/sounds/vo/juggernaut/jug_deny_01.vsnd_c b/game/sounds/vo/juggernaut/jug_deny_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_deny_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_deny_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_deny_02.vsnd_c b/game/sounds/vo/juggernaut/jug_deny_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_deny_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_deny_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_deny_03.vsnd_c b/game/sounds/vo/juggernaut/jug_deny_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_deny_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_deny_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_deny_04.vsnd_c b/game/sounds/vo/juggernaut/jug_deny_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_deny_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_deny_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_deny_05.vsnd_c b/game/sounds/vo/juggernaut/jug_deny_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_deny_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_deny_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_deny_06.vsnd_c b/game/sounds/vo/juggernaut/jug_deny_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_deny_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_deny_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_deny_07.vsnd_c b/game/sounds/vo/juggernaut/jug_deny_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_deny_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_deny_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_doubdam_01.vsnd_c b/game/sounds/vo/juggernaut/jug_doubdam_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_doubdam_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_doubdam_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_doubdam_02.vsnd_c b/game/sounds/vo/juggernaut/jug_doubdam_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_doubdam_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_doubdam_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_happy_01.vsnd_c b/game/sounds/vo/juggernaut/jug_happy_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_happy_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_happy_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_happy_02.vsnd_c b/game/sounds/vo/juggernaut/jug_happy_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_happy_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_happy_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_happy_03.vsnd_c b/game/sounds/vo/juggernaut/jug_happy_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_happy_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_happy_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_haste_01.vsnd_c b/game/sounds/vo/juggernaut/jug_haste_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_haste_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_haste_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_haste_02.vsnd_c b/game/sounds/vo/juggernaut/jug_haste_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_haste_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_haste_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_haste_03.vsnd_c b/game/sounds/vo/juggernaut/jug_haste_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_haste_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_haste_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_illus_01.vsnd_c b/game/sounds/vo/juggernaut/jug_illus_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_illus_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_illus_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_illus_02.vsnd_c b/game/sounds/vo/juggernaut/jug_illus_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_illus_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_illus_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_illus_03.vsnd_c b/game/sounds/vo/juggernaut/jug_illus_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_illus_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_illus_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_immort_01.vsnd_c b/game/sounds/vo/juggernaut/jug_immort_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_immort_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_immort_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_immort_02.vsnd_c b/game/sounds/vo/juggernaut/jug_immort_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_immort_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_immort_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_immort_03.vsnd_c b/game/sounds/vo/juggernaut/jug_immort_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_immort_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_immort_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_inthebag_01.vsnd_c b/game/sounds/vo/juggernaut/jug_inthebag_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_inthebag_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_inthebag_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_inthebag_02.vsnd_c b/game/sounds/vo/juggernaut/jug_inthebag_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_inthebag_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_inthebag_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_inthebag_03.vsnd_c b/game/sounds/vo/juggernaut/jug_inthebag_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_inthebag_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_inthebag_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_invis_01.vsnd_c b/game/sounds/vo/juggernaut/jug_invis_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_invis_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_invis_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_invis_02.vsnd_c b/game/sounds/vo/juggernaut/jug_invis_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_invis_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_invis_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_01.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_02.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_03.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_04.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_05.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_06.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_07.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_08.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_09.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_10.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_11.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_11.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_11.vsnd_c diff --git a/sounds/vo/juggernaut/jug_kill_12.vsnd_c b/game/sounds/vo/juggernaut/jug_kill_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_kill_12.vsnd_c rename to game/sounds/vo/juggernaut/jug_kill_12.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_01.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_02.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_03.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_04.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_05.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_06.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_07.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_08.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_09.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_10.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_11.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_11.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_11.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lasthit_12.vsnd_c b/game/sounds/vo/juggernaut/jug_lasthit_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lasthit_12.vsnd_c rename to game/sounds/vo/juggernaut/jug_lasthit_12.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_01.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_02.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_03.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_04.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_05.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_06.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_07.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_laugh_08.vsnd_c b/game/sounds/vo/juggernaut/jug_laugh_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_laugh_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_laugh_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_level_02.vsnd_c b/game/sounds/vo/juggernaut/jug_level_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_level_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_level_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_level_03.vsnd_c b/game/sounds/vo/juggernaut/jug_level_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_level_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_level_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_level_04.vsnd_c b/game/sounds/vo/juggernaut/jug_level_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_level_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_level_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_level_05.vsnd_c b/game/sounds/vo/juggernaut/jug_level_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_level_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_level_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_level_06.vsnd_c b/game/sounds/vo/juggernaut/jug_level_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_level_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_level_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lose_01.vsnd_c b/game/sounds/vo/juggernaut/jug_lose_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lose_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_lose_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lose_02.vsnd_c b/game/sounds/vo/juggernaut/jug_lose_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lose_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_lose_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lose_03.vsnd_c b/game/sounds/vo/juggernaut/jug_lose_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lose_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_lose_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_lose_04.vsnd_c b/game/sounds/vo/juggernaut/jug_lose_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_lose_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_lose_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_01.vsnd_c b/game/sounds/vo/juggernaut/jug_move_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_02.vsnd_c b/game/sounds/vo/juggernaut/jug_move_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_03.vsnd_c b/game/sounds/vo/juggernaut/jug_move_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_04.vsnd_c b/game/sounds/vo/juggernaut/jug_move_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_05.vsnd_c b/game/sounds/vo/juggernaut/jug_move_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_06.vsnd_c b/game/sounds/vo/juggernaut/jug_move_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_07.vsnd_c b/game/sounds/vo/juggernaut/jug_move_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_08.vsnd_c b/game/sounds/vo/juggernaut/jug_move_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_09.vsnd_c b/game/sounds/vo/juggernaut/jug_move_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_10.vsnd_c b/game/sounds/vo/juggernaut/jug_move_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_11.vsnd_c b/game/sounds/vo/juggernaut/jug_move_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_11.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_11.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_12.vsnd_c b/game/sounds/vo/juggernaut/jug_move_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_12.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_12.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_13.vsnd_c b/game/sounds/vo/juggernaut/jug_move_13.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_13.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_13.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_14.vsnd_c b/game/sounds/vo/juggernaut/jug_move_14.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_14.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_14.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_15.vsnd_c b/game/sounds/vo/juggernaut/jug_move_15.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_15.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_15.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_16.vsnd_c b/game/sounds/vo/juggernaut/jug_move_16.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_16.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_16.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_17.vsnd_c b/game/sounds/vo/juggernaut/jug_move_17.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_17.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_17.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_18.vsnd_c b/game/sounds/vo/juggernaut/jug_move_18.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_18.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_18.vsnd_c diff --git a/sounds/vo/juggernaut/jug_move_19.vsnd_c b/game/sounds/vo/juggernaut/jug_move_19.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_move_19.vsnd_c rename to game/sounds/vo/juggernaut/jug_move_19.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_01.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_02.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_03.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_04.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_05.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_06.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_07.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_08.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_nomana_09.vsnd_c b/game/sounds/vo/juggernaut/jug_nomana_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_nomana_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_nomana_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_01.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_02.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_03.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_04.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_05.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_06.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_07.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_08.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_notyet_09.vsnd_c b/game/sounds/vo/juggernaut/jug_notyet_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_notyet_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_notyet_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_01.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_02.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_03.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_04.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_05.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_06.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_07.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_08.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_09.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_pain_10.vsnd_c b/game/sounds/vo/juggernaut/jug_pain_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_pain_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_pain_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_purch_01.vsnd_c b/game/sounds/vo/juggernaut/jug_purch_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_purch_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_purch_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_purch_02.vsnd_c b/game/sounds/vo/juggernaut/jug_purch_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_purch_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_purch_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_purch_03.vsnd_c b/game/sounds/vo/juggernaut/jug_purch_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_purch_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_purch_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_01.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_02.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_03.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_04.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_05.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_06.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_07.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_08.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_09.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_09.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_09.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_10.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_10.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_10.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_11.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_11.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_11.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_12.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_12.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_12.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_13.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_13.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_13.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_13.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_14.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_14.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_14.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_14.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_15.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_15.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_15.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_15.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_16.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_16.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_16.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_16.vsnd_c diff --git a/sounds/vo/juggernaut/jug_rare_17.vsnd_c b/game/sounds/vo/juggernaut/jug_rare_17.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_rare_17.vsnd_c rename to game/sounds/vo/juggernaut/jug_rare_17.vsnd_c diff --git a/sounds/vo/juggernaut/jug_regen_01.vsnd_c b/game/sounds/vo/juggernaut/jug_regen_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_regen_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_regen_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_regen_02.vsnd_c b/game/sounds/vo/juggernaut/jug_regen_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_regen_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_regen_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_respawn_01.vsnd_c b/game/sounds/vo/juggernaut/jug_respawn_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_respawn_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_respawn_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_respawn_02.vsnd_c b/game/sounds/vo/juggernaut/jug_respawn_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_respawn_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_respawn_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_respawn_03.vsnd_c b/game/sounds/vo/juggernaut/jug_respawn_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_respawn_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_respawn_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_respawn_04.vsnd_c b/game/sounds/vo/juggernaut/jug_respawn_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_respawn_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_respawn_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_respawn_05.vsnd_c b/game/sounds/vo/juggernaut/jug_respawn_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_respawn_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_respawn_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_respawn_06.vsnd_c b/game/sounds/vo/juggernaut/jug_respawn_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_respawn_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_respawn_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_respawn_07.vsnd_c b/game/sounds/vo/juggernaut/jug_respawn_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_respawn_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_respawn_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_shitwiz_01.vsnd_c b/game/sounds/vo/juggernaut/jug_shitwiz_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_shitwiz_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_shitwiz_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_01.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_02.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_03.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_04.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_04.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_05.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_05.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_05.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_06.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_06.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_06.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_07.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_07.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_07.vsnd_c diff --git a/sounds/vo/juggernaut/jug_spawn_08.vsnd_c b/game/sounds/vo/juggernaut/jug_spawn_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_spawn_08.vsnd_c rename to game/sounds/vo/juggernaut/jug_spawn_08.vsnd_c diff --git a/sounds/vo/juggernaut/jug_win_01.vsnd_c b/game/sounds/vo/juggernaut/jug_win_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_win_01.vsnd_c rename to game/sounds/vo/juggernaut/jug_win_01.vsnd_c diff --git a/sounds/vo/juggernaut/jug_win_02.vsnd_c b/game/sounds/vo/juggernaut/jug_win_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_win_02.vsnd_c rename to game/sounds/vo/juggernaut/jug_win_02.vsnd_c diff --git a/sounds/vo/juggernaut/jug_win_03.vsnd_c b/game/sounds/vo/juggernaut/jug_win_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_win_03.vsnd_c rename to game/sounds/vo/juggernaut/jug_win_03.vsnd_c diff --git a/sounds/vo/juggernaut/jug_win_04.vsnd_c b/game/sounds/vo/juggernaut/jug_win_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jug_win_04.vsnd_c rename to game/sounds/vo/juggernaut/jug_win_04.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_10.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_10.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_10.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_11.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_11.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_11.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_12.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_12.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_12.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_13.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_13.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_13.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_13.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_14.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_14.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_14.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_14.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_15.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_15.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_15.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_15.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_16.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_16.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_16.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_16.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_17.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_17.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_17.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_17.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_ability_bladefury_18.vsnd_c b/game/sounds/vo/juggernaut/jugg_ability_bladefury_18.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_ability_bladefury_18.vsnd_c rename to game/sounds/vo/juggernaut/jugg_ability_bladefury_18.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_battlebegins_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_battlebegins_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_battlebegins_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_battlebegins_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_blink_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_blink_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_blink_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_blink_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_blink_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_blink_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_blink_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_blink_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_drop_common.vsnd_c b/game/sounds/vo/juggernaut/jugg_drop_common.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_drop_common.vsnd_c rename to game/sounds/vo/juggernaut/jugg_drop_common.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_drop_medium.vsnd_c b/game/sounds/vo/juggernaut/jugg_drop_medium.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_drop_medium.vsnd_c rename to game/sounds/vo/juggernaut/jugg_drop_medium.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_drop_rare.vsnd_c b/game/sounds/vo/juggernaut/jugg_drop_rare.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_drop_rare.vsnd_c rename to game/sounds/vo/juggernaut/jugg_drop_rare.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_equipping_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_equipping_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_equipping_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_equipping_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_equipping_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_equipping_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_equipping_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_equipping_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_equipping_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_equipping_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_equipping_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_equipping_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_equipping_04.vsnd_c b/game/sounds/vo/juggernaut/jugg_equipping_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_equipping_04.vsnd_c rename to game/sounds/vo/juggernaut/jugg_equipping_04.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_equipping_05.vsnd_c b/game/sounds/vo/juggernaut/jugg_equipping_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_equipping_05.vsnd_c rename to game/sounds/vo/juggernaut/jugg_equipping_05.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_equipping_06.vsnd_c b/game/sounds/vo/juggernaut/jugg_equipping_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_equipping_06.vsnd_c rename to game/sounds/vo/juggernaut/jugg_equipping_06.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_fastres_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_fastres_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_fastres_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_fastres_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_firstblood_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_firstblood_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_firstblood_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_firstblood_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_item_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_item_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_item_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_item_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_item_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_item_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_item_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_item_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_item_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_item_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_item_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_item_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_item_04.vsnd_c b/game/sounds/vo/juggernaut/jugg_item_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_item_04.vsnd_c rename to game/sounds/vo/juggernaut/jugg_item_04.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_missing_lane_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_missing_lane_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_missing_lane_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_missing_lane_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_missing_lane_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_missing_lane_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_missing_lane_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_missing_lane_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_missing_lane_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_missing_lane_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_missing_lane_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_missing_lane_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_04.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_04.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_04.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_05.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_05.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_05.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_06.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_06.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_06.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_07.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_07.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_07.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_08.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_08.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_08.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_09.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_09.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_09.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_09.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_10.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_10.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_10.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_10.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_11.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_11.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_11.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_11.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_12.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_12.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_12.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_12.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_13.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_13.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_13.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_13.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_14.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_14.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_14.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_14.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_rival_15.vsnd_c b/game/sounds/vo/juggernaut/jugg_rival_15.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_rival_15.vsnd_c rename to game/sounds/vo/juggernaut/jugg_rival_15.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_scepter_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_scepter_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_scepter_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_scepter_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_scepter_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_scepter_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_scepter_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_scepter_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_scepter_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_scepter_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_scepter_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_scepter_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_set_complete_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_set_complete_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_set_complete_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_set_complete_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_set_complete_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_set_complete_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_set_complete_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_set_complete_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_set_complete_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_set_complete_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_set_complete_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_set_complete_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_set_complete_04.vsnd_c b/game/sounds/vo/juggernaut/jugg_set_complete_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_set_complete_04.vsnd_c rename to game/sounds/vo/juggernaut/jugg_set_complete_04.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_set_complete_05.vsnd_c b/game/sounds/vo/juggernaut/jugg_set_complete_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_set_complete_05.vsnd_c rename to game/sounds/vo/juggernaut/jugg_set_complete_05.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_set_complete_06.vsnd_c b/game/sounds/vo/juggernaut/jugg_set_complete_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_set_complete_06.vsnd_c rename to game/sounds/vo/juggernaut/jugg_set_complete_06.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_04.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_04.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_04.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_04.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_05.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_05.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_05.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_05.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_06.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_06.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_06.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_06.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_07.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_07.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_07.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_07.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_taunt_08.vsnd_c b/game/sounds/vo/juggernaut/jugg_taunt_08.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_taunt_08.vsnd_c rename to game/sounds/vo/juggernaut/jugg_taunt_08.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_thanks_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_thanks_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_thanks_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_thanks_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_thanks_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_thanks_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_thanks_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_thanks_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_underattack_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_underattack_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_underattack_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_underattack_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_view_defeat_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_view_defeat_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_view_defeat_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_view_defeat_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_view_defeat_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_view_defeat_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_view_defeat_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_view_defeat_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_view_defeat_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_view_defeat_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_view_defeat_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_view_defeat_03.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_view_victory_01.vsnd_c b/game/sounds/vo/juggernaut/jugg_view_victory_01.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_view_victory_01.vsnd_c rename to game/sounds/vo/juggernaut/jugg_view_victory_01.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_view_victory_02.vsnd_c b/game/sounds/vo/juggernaut/jugg_view_victory_02.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_view_victory_02.vsnd_c rename to game/sounds/vo/juggernaut/jugg_view_victory_02.vsnd_c diff --git a/sounds/vo/juggernaut/jugg_view_victory_03.vsnd_c b/game/sounds/vo/juggernaut/jugg_view_victory_03.vsnd_c similarity index 100% rename from sounds/vo/juggernaut/jugg_view_victory_03.vsnd_c rename to game/sounds/vo/juggernaut/jugg_view_victory_03.vsnd_c diff --git a/sounds/vo/lina/lina_ability_lightstrike_01.vsnd_c b/game/sounds/vo/lina/lina_ability_lightstrike_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ability_lightstrike_01.vsnd_c rename to game/sounds/vo/lina/lina_ability_lightstrike_01.vsnd_c diff --git a/sounds/vo/lina/lina_ability_lightstrike_02.vsnd_c b/game/sounds/vo/lina/lina_ability_lightstrike_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ability_lightstrike_02.vsnd_c rename to game/sounds/vo/lina/lina_ability_lightstrike_02.vsnd_c diff --git a/sounds/vo/lina/lina_ability_lightstrike_03.vsnd_c b/game/sounds/vo/lina/lina_ability_lightstrike_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ability_lightstrike_03.vsnd_c rename to game/sounds/vo/lina/lina_ability_lightstrike_03.vsnd_c diff --git a/sounds/vo/lina/lina_ability_lightstrike_04.vsnd_c b/game/sounds/vo/lina/lina_ability_lightstrike_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ability_lightstrike_04.vsnd_c rename to game/sounds/vo/lina/lina_ability_lightstrike_04.vsnd_c diff --git a/sounds/vo/lina/lina_ability_lightstrike_05.vsnd_c b/game/sounds/vo/lina/lina_ability_lightstrike_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ability_lightstrike_05.vsnd_c rename to game/sounds/vo/lina/lina_ability_lightstrike_05.vsnd_c diff --git a/sounds/vo/lina/lina_ability_lightstrike_06.vsnd_c b/game/sounds/vo/lina/lina_ability_lightstrike_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ability_lightstrike_06.vsnd_c rename to game/sounds/vo/lina/lina_ability_lightstrike_06.vsnd_c diff --git a/sounds/vo/lina/lina_ally_01.vsnd_c b/game/sounds/vo/lina/lina_ally_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_01.vsnd_c rename to game/sounds/vo/lina/lina_ally_01.vsnd_c diff --git a/sounds/vo/lina/lina_ally_02.vsnd_c b/game/sounds/vo/lina/lina_ally_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_02.vsnd_c rename to game/sounds/vo/lina/lina_ally_02.vsnd_c diff --git a/sounds/vo/lina/lina_ally_03.vsnd_c b/game/sounds/vo/lina/lina_ally_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_03.vsnd_c rename to game/sounds/vo/lina/lina_ally_03.vsnd_c diff --git a/sounds/vo/lina/lina_ally_04.vsnd_c b/game/sounds/vo/lina/lina_ally_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_04.vsnd_c rename to game/sounds/vo/lina/lina_ally_04.vsnd_c diff --git a/sounds/vo/lina/lina_ally_05.vsnd_c b/game/sounds/vo/lina/lina_ally_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_05.vsnd_c rename to game/sounds/vo/lina/lina_ally_05.vsnd_c diff --git a/sounds/vo/lina/lina_ally_06.vsnd_c b/game/sounds/vo/lina/lina_ally_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_06.vsnd_c rename to game/sounds/vo/lina/lina_ally_06.vsnd_c diff --git a/sounds/vo/lina/lina_ally_07.vsnd_c b/game/sounds/vo/lina/lina_ally_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_07.vsnd_c rename to game/sounds/vo/lina/lina_ally_07.vsnd_c diff --git a/sounds/vo/lina/lina_ally_08.vsnd_c b/game/sounds/vo/lina/lina_ally_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_ally_08.vsnd_c rename to game/sounds/vo/lina/lina_ally_08.vsnd_c diff --git a/sounds/vo/lina/lina_anger_01.vsnd_c b/game/sounds/vo/lina/lina_anger_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_anger_01.vsnd_c rename to game/sounds/vo/lina/lina_anger_01.vsnd_c diff --git a/sounds/vo/lina/lina_anger_02.vsnd_c b/game/sounds/vo/lina/lina_anger_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_anger_02.vsnd_c rename to game/sounds/vo/lina/lina_anger_02.vsnd_c diff --git a/sounds/vo/lina/lina_anger_03.vsnd_c b/game/sounds/vo/lina/lina_anger_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_anger_03.vsnd_c rename to game/sounds/vo/lina/lina_anger_03.vsnd_c diff --git a/sounds/vo/lina/lina_anger_04.vsnd_c b/game/sounds/vo/lina/lina_anger_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_anger_04.vsnd_c rename to game/sounds/vo/lina/lina_anger_04.vsnd_c diff --git a/sounds/vo/lina/lina_anger_05.vsnd_c b/game/sounds/vo/lina/lina_anger_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_anger_05.vsnd_c rename to game/sounds/vo/lina/lina_anger_05.vsnd_c diff --git a/sounds/vo/lina/lina_anger_06.vsnd_c b/game/sounds/vo/lina/lina_anger_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_anger_06.vsnd_c rename to game/sounds/vo/lina/lina_anger_06.vsnd_c diff --git a/sounds/vo/lina/lina_attack_01.vsnd_c b/game/sounds/vo/lina/lina_attack_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_01.vsnd_c rename to game/sounds/vo/lina/lina_attack_01.vsnd_c diff --git a/sounds/vo/lina/lina_attack_02.vsnd_c b/game/sounds/vo/lina/lina_attack_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_02.vsnd_c rename to game/sounds/vo/lina/lina_attack_02.vsnd_c diff --git a/sounds/vo/lina/lina_attack_03.vsnd_c b/game/sounds/vo/lina/lina_attack_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_03.vsnd_c rename to game/sounds/vo/lina/lina_attack_03.vsnd_c diff --git a/sounds/vo/lina/lina_attack_04.vsnd_c b/game/sounds/vo/lina/lina_attack_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_04.vsnd_c rename to game/sounds/vo/lina/lina_attack_04.vsnd_c diff --git a/sounds/vo/lina/lina_attack_05.vsnd_c b/game/sounds/vo/lina/lina_attack_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_05.vsnd_c rename to game/sounds/vo/lina/lina_attack_05.vsnd_c diff --git a/sounds/vo/lina/lina_attack_06.vsnd_c b/game/sounds/vo/lina/lina_attack_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_06.vsnd_c rename to game/sounds/vo/lina/lina_attack_06.vsnd_c diff --git a/sounds/vo/lina/lina_attack_07.vsnd_c b/game/sounds/vo/lina/lina_attack_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_07.vsnd_c rename to game/sounds/vo/lina/lina_attack_07.vsnd_c diff --git a/sounds/vo/lina/lina_attack_08.vsnd_c b/game/sounds/vo/lina/lina_attack_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_08.vsnd_c rename to game/sounds/vo/lina/lina_attack_08.vsnd_c diff --git a/sounds/vo/lina/lina_attack_09.vsnd_c b/game/sounds/vo/lina/lina_attack_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_09.vsnd_c rename to game/sounds/vo/lina/lina_attack_09.vsnd_c diff --git a/sounds/vo/lina/lina_attack_10.vsnd_c b/game/sounds/vo/lina/lina_attack_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_attack_10.vsnd_c rename to game/sounds/vo/lina/lina_attack_10.vsnd_c diff --git a/sounds/vo/lina/lina_background.vsnd_c b/game/sounds/vo/lina/lina_background.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_background.vsnd_c rename to game/sounds/vo/lina/lina_background.vsnd_c diff --git a/sounds/vo/lina/lina_battlebegins_01.vsnd_c b/game/sounds/vo/lina/lina_battlebegins_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_battlebegins_01.vsnd_c rename to game/sounds/vo/lina/lina_battlebegins_01.vsnd_c diff --git a/sounds/vo/lina/lina_blink_01.vsnd_c b/game/sounds/vo/lina/lina_blink_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_blink_01.vsnd_c rename to game/sounds/vo/lina/lina_blink_01.vsnd_c diff --git a/sounds/vo/lina/lina_blink_02.vsnd_c b/game/sounds/vo/lina/lina_blink_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_blink_02.vsnd_c rename to game/sounds/vo/lina/lina_blink_02.vsnd_c diff --git a/sounds/vo/lina/lina_bottle_01.vsnd_c b/game/sounds/vo/lina/lina_bottle_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_bottle_01.vsnd_c rename to game/sounds/vo/lina/lina_bottle_01.vsnd_c diff --git a/sounds/vo/lina/lina_bottle_02.vsnd_c b/game/sounds/vo/lina/lina_bottle_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_bottle_02.vsnd_c rename to game/sounds/vo/lina/lina_bottle_02.vsnd_c diff --git a/sounds/vo/lina/lina_bottle_03.vsnd_c b/game/sounds/vo/lina/lina_bottle_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_bottle_03.vsnd_c rename to game/sounds/vo/lina/lina_bottle_03.vsnd_c diff --git a/sounds/vo/lina/lina_cast_01.vsnd_c b/game/sounds/vo/lina/lina_cast_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cast_01.vsnd_c rename to game/sounds/vo/lina/lina_cast_01.vsnd_c diff --git a/sounds/vo/lina/lina_cast_02.vsnd_c b/game/sounds/vo/lina/lina_cast_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cast_02.vsnd_c rename to game/sounds/vo/lina/lina_cast_02.vsnd_c diff --git a/sounds/vo/lina/lina_cast_03.vsnd_c b/game/sounds/vo/lina/lina_cast_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cast_03.vsnd_c rename to game/sounds/vo/lina/lina_cast_03.vsnd_c diff --git a/sounds/vo/lina/lina_cm_01.vsnd_c b/game/sounds/vo/lina/lina_cm_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_01.vsnd_c rename to game/sounds/vo/lina/lina_cm_01.vsnd_c diff --git a/sounds/vo/lina/lina_cm_02.vsnd_c b/game/sounds/vo/lina/lina_cm_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_02.vsnd_c rename to game/sounds/vo/lina/lina_cm_02.vsnd_c diff --git a/sounds/vo/lina/lina_cm_03.vsnd_c b/game/sounds/vo/lina/lina_cm_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_03.vsnd_c rename to game/sounds/vo/lina/lina_cm_03.vsnd_c diff --git a/sounds/vo/lina/lina_cm_04.vsnd_c b/game/sounds/vo/lina/lina_cm_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_04.vsnd_c rename to game/sounds/vo/lina/lina_cm_04.vsnd_c diff --git a/sounds/vo/lina/lina_cm_05.vsnd_c b/game/sounds/vo/lina/lina_cm_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_05.vsnd_c rename to game/sounds/vo/lina/lina_cm_05.vsnd_c diff --git a/sounds/vo/lina/lina_cm_06.vsnd_c b/game/sounds/vo/lina/lina_cm_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_06.vsnd_c rename to game/sounds/vo/lina/lina_cm_06.vsnd_c diff --git a/sounds/vo/lina/lina_cm_07.vsnd_c b/game/sounds/vo/lina/lina_cm_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_07.vsnd_c rename to game/sounds/vo/lina/lina_cm_07.vsnd_c diff --git a/sounds/vo/lina/lina_cm_08.vsnd_c b/game/sounds/vo/lina/lina_cm_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_08.vsnd_c rename to game/sounds/vo/lina/lina_cm_08.vsnd_c diff --git a/sounds/vo/lina/lina_cm_09.vsnd_c b/game/sounds/vo/lina/lina_cm_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_09.vsnd_c rename to game/sounds/vo/lina/lina_cm_09.vsnd_c diff --git a/sounds/vo/lina/lina_cm_10.vsnd_c b/game/sounds/vo/lina/lina_cm_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_10.vsnd_c rename to game/sounds/vo/lina/lina_cm_10.vsnd_c diff --git a/sounds/vo/lina/lina_cm_11.vsnd_c b/game/sounds/vo/lina/lina_cm_11.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_11.vsnd_c rename to game/sounds/vo/lina/lina_cm_11.vsnd_c diff --git a/sounds/vo/lina/lina_cm_12.vsnd_c b/game/sounds/vo/lina/lina_cm_12.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_12.vsnd_c rename to game/sounds/vo/lina/lina_cm_12.vsnd_c diff --git a/sounds/vo/lina/lina_cm_13.vsnd_c b/game/sounds/vo/lina/lina_cm_13.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_13.vsnd_c rename to game/sounds/vo/lina/lina_cm_13.vsnd_c diff --git a/sounds/vo/lina/lina_cm_14.vsnd_c b/game/sounds/vo/lina/lina_cm_14.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_14.vsnd_c rename to game/sounds/vo/lina/lina_cm_14.vsnd_c diff --git a/sounds/vo/lina/lina_cm_15.vsnd_c b/game/sounds/vo/lina/lina_cm_15.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_cm_15.vsnd_c rename to game/sounds/vo/lina/lina_cm_15.vsnd_c diff --git a/sounds/vo/lina/lina_crumwiz_01.vsnd_c b/game/sounds/vo/lina/lina_crumwiz_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_crumwiz_01.vsnd_c rename to game/sounds/vo/lina/lina_crumwiz_01.vsnd_c diff --git a/sounds/vo/lina/lina_death_01.vsnd_c b/game/sounds/vo/lina/lina_death_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_01.vsnd_c rename to game/sounds/vo/lina/lina_death_01.vsnd_c diff --git a/sounds/vo/lina/lina_death_02.vsnd_c b/game/sounds/vo/lina/lina_death_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_02.vsnd_c rename to game/sounds/vo/lina/lina_death_02.vsnd_c diff --git a/sounds/vo/lina/lina_death_03.vsnd_c b/game/sounds/vo/lina/lina_death_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_03.vsnd_c rename to game/sounds/vo/lina/lina_death_03.vsnd_c diff --git a/sounds/vo/lina/lina_death_04.vsnd_c b/game/sounds/vo/lina/lina_death_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_04.vsnd_c rename to game/sounds/vo/lina/lina_death_04.vsnd_c diff --git a/sounds/vo/lina/lina_death_05.vsnd_c b/game/sounds/vo/lina/lina_death_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_05.vsnd_c rename to game/sounds/vo/lina/lina_death_05.vsnd_c diff --git a/sounds/vo/lina/lina_death_06.vsnd_c b/game/sounds/vo/lina/lina_death_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_06.vsnd_c rename to game/sounds/vo/lina/lina_death_06.vsnd_c diff --git a/sounds/vo/lina/lina_death_07.vsnd_c b/game/sounds/vo/lina/lina_death_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_07.vsnd_c rename to game/sounds/vo/lina/lina_death_07.vsnd_c diff --git a/sounds/vo/lina/lina_death_08.vsnd_c b/game/sounds/vo/lina/lina_death_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_08.vsnd_c rename to game/sounds/vo/lina/lina_death_08.vsnd_c diff --git a/sounds/vo/lina/lina_death_09.vsnd_c b/game/sounds/vo/lina/lina_death_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_09.vsnd_c rename to game/sounds/vo/lina/lina_death_09.vsnd_c diff --git a/sounds/vo/lina/lina_death_10.vsnd_c b/game/sounds/vo/lina/lina_death_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_10.vsnd_c rename to game/sounds/vo/lina/lina_death_10.vsnd_c diff --git a/sounds/vo/lina/lina_death_11.vsnd_c b/game/sounds/vo/lina/lina_death_11.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_11.vsnd_c rename to game/sounds/vo/lina/lina_death_11.vsnd_c diff --git a/sounds/vo/lina/lina_death_12.vsnd_c b/game/sounds/vo/lina/lina_death_12.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_death_12.vsnd_c rename to game/sounds/vo/lina/lina_death_12.vsnd_c diff --git a/sounds/vo/lina/lina_deny_01.vsnd_c b/game/sounds/vo/lina/lina_deny_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_01.vsnd_c rename to game/sounds/vo/lina/lina_deny_01.vsnd_c diff --git a/sounds/vo/lina/lina_deny_02.vsnd_c b/game/sounds/vo/lina/lina_deny_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_02.vsnd_c rename to game/sounds/vo/lina/lina_deny_02.vsnd_c diff --git a/sounds/vo/lina/lina_deny_03.vsnd_c b/game/sounds/vo/lina/lina_deny_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_03.vsnd_c rename to game/sounds/vo/lina/lina_deny_03.vsnd_c diff --git a/sounds/vo/lina/lina_deny_04.vsnd_c b/game/sounds/vo/lina/lina_deny_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_04.vsnd_c rename to game/sounds/vo/lina/lina_deny_04.vsnd_c diff --git a/sounds/vo/lina/lina_deny_05.vsnd_c b/game/sounds/vo/lina/lina_deny_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_05.vsnd_c rename to game/sounds/vo/lina/lina_deny_05.vsnd_c diff --git a/sounds/vo/lina/lina_deny_06.vsnd_c b/game/sounds/vo/lina/lina_deny_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_06.vsnd_c rename to game/sounds/vo/lina/lina_deny_06.vsnd_c diff --git a/sounds/vo/lina/lina_deny_07.vsnd_c b/game/sounds/vo/lina/lina_deny_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_07.vsnd_c rename to game/sounds/vo/lina/lina_deny_07.vsnd_c diff --git a/sounds/vo/lina/lina_deny_08.vsnd_c b/game/sounds/vo/lina/lina_deny_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_08.vsnd_c rename to game/sounds/vo/lina/lina_deny_08.vsnd_c diff --git a/sounds/vo/lina/lina_deny_09.vsnd_c b/game/sounds/vo/lina/lina_deny_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_09.vsnd_c rename to game/sounds/vo/lina/lina_deny_09.vsnd_c diff --git a/sounds/vo/lina/lina_deny_10.vsnd_c b/game/sounds/vo/lina/lina_deny_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_10.vsnd_c rename to game/sounds/vo/lina/lina_deny_10.vsnd_c diff --git a/sounds/vo/lina/lina_deny_11.vsnd_c b/game/sounds/vo/lina/lina_deny_11.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_11.vsnd_c rename to game/sounds/vo/lina/lina_deny_11.vsnd_c diff --git a/sounds/vo/lina/lina_deny_12.vsnd_c b/game/sounds/vo/lina/lina_deny_12.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_12.vsnd_c rename to game/sounds/vo/lina/lina_deny_12.vsnd_c diff --git a/sounds/vo/lina/lina_deny_13.vsnd_c b/game/sounds/vo/lina/lina_deny_13.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_13.vsnd_c rename to game/sounds/vo/lina/lina_deny_13.vsnd_c diff --git a/sounds/vo/lina/lina_deny_14.vsnd_c b/game/sounds/vo/lina/lina_deny_14.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_14.vsnd_c rename to game/sounds/vo/lina/lina_deny_14.vsnd_c diff --git a/sounds/vo/lina/lina_deny_15.vsnd_c b/game/sounds/vo/lina/lina_deny_15.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_15.vsnd_c rename to game/sounds/vo/lina/lina_deny_15.vsnd_c diff --git a/sounds/vo/lina/lina_deny_16.vsnd_c b/game/sounds/vo/lina/lina_deny_16.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_16.vsnd_c rename to game/sounds/vo/lina/lina_deny_16.vsnd_c diff --git a/sounds/vo/lina/lina_deny_17.vsnd_c b/game/sounds/vo/lina/lina_deny_17.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_deny_17.vsnd_c rename to game/sounds/vo/lina/lina_deny_17.vsnd_c diff --git a/sounds/vo/lina/lina_doubdam_01.vsnd_c b/game/sounds/vo/lina/lina_doubdam_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_doubdam_01.vsnd_c rename to game/sounds/vo/lina/lina_doubdam_01.vsnd_c diff --git a/sounds/vo/lina/lina_doubdam_02.vsnd_c b/game/sounds/vo/lina/lina_doubdam_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_doubdam_02.vsnd_c rename to game/sounds/vo/lina/lina_doubdam_02.vsnd_c diff --git a/sounds/vo/lina/lina_drop_common_01.vsnd_c b/game/sounds/vo/lina/lina_drop_common_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_drop_common_01.vsnd_c rename to game/sounds/vo/lina/lina_drop_common_01.vsnd_c diff --git a/sounds/vo/lina/lina_drop_medium_01.vsnd_c b/game/sounds/vo/lina/lina_drop_medium_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_drop_medium_01.vsnd_c rename to game/sounds/vo/lina/lina_drop_medium_01.vsnd_c diff --git a/sounds/vo/lina/lina_drop_rare_01.vsnd_c b/game/sounds/vo/lina/lina_drop_rare_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_drop_rare_01.vsnd_c rename to game/sounds/vo/lina/lina_drop_rare_01.vsnd_c diff --git a/sounds/vo/lina/lina_fastres_01.vsnd_c b/game/sounds/vo/lina/lina_fastres_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_fastres_01.vsnd_c rename to game/sounds/vo/lina/lina_fastres_01.vsnd_c diff --git a/sounds/vo/lina/lina_firstblood_01.vsnd_c b/game/sounds/vo/lina/lina_firstblood_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_firstblood_01.vsnd_c rename to game/sounds/vo/lina/lina_firstblood_01.vsnd_c diff --git a/sounds/vo/lina/lina_happy_01.vsnd_c b/game/sounds/vo/lina/lina_happy_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_happy_01.vsnd_c rename to game/sounds/vo/lina/lina_happy_01.vsnd_c diff --git a/sounds/vo/lina/lina_happy_02.vsnd_c b/game/sounds/vo/lina/lina_happy_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_happy_02.vsnd_c rename to game/sounds/vo/lina/lina_happy_02.vsnd_c diff --git a/sounds/vo/lina/lina_happy_03.vsnd_c b/game/sounds/vo/lina/lina_happy_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_happy_03.vsnd_c rename to game/sounds/vo/lina/lina_happy_03.vsnd_c diff --git a/sounds/vo/lina/lina_haste_01.vsnd_c b/game/sounds/vo/lina/lina_haste_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_haste_01.vsnd_c rename to game/sounds/vo/lina/lina_haste_01.vsnd_c diff --git a/sounds/vo/lina/lina_haste_02.vsnd_c b/game/sounds/vo/lina/lina_haste_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_haste_02.vsnd_c rename to game/sounds/vo/lina/lina_haste_02.vsnd_c diff --git a/sounds/vo/lina/lina_illus_01.vsnd_c b/game/sounds/vo/lina/lina_illus_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_illus_01.vsnd_c rename to game/sounds/vo/lina/lina_illus_01.vsnd_c diff --git a/sounds/vo/lina/lina_illus_02.vsnd_c b/game/sounds/vo/lina/lina_illus_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_illus_02.vsnd_c rename to game/sounds/vo/lina/lina_illus_02.vsnd_c diff --git a/sounds/vo/lina/lina_illus_03.vsnd_c b/game/sounds/vo/lina/lina_illus_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_illus_03.vsnd_c rename to game/sounds/vo/lina/lina_illus_03.vsnd_c diff --git a/sounds/vo/lina/lina_immort_01.vsnd_c b/game/sounds/vo/lina/lina_immort_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_immort_01.vsnd_c rename to game/sounds/vo/lina/lina_immort_01.vsnd_c diff --git a/sounds/vo/lina/lina_immort_02.vsnd_c b/game/sounds/vo/lina/lina_immort_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_immort_02.vsnd_c rename to game/sounds/vo/lina/lina_immort_02.vsnd_c diff --git a/sounds/vo/lina/lina_inthebag_01.vsnd_c b/game/sounds/vo/lina/lina_inthebag_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_inthebag_01.vsnd_c rename to game/sounds/vo/lina/lina_inthebag_01.vsnd_c diff --git a/sounds/vo/lina/lina_invis_01.vsnd_c b/game/sounds/vo/lina/lina_invis_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_invis_01.vsnd_c rename to game/sounds/vo/lina/lina_invis_01.vsnd_c diff --git a/sounds/vo/lina/lina_invis_02.vsnd_c b/game/sounds/vo/lina/lina_invis_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_invis_02.vsnd_c rename to game/sounds/vo/lina/lina_invis_02.vsnd_c diff --git a/sounds/vo/lina/lina_item_01.vsnd_c b/game/sounds/vo/lina/lina_item_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_item_01.vsnd_c rename to game/sounds/vo/lina/lina_item_01.vsnd_c diff --git a/sounds/vo/lina/lina_item_02.vsnd_c b/game/sounds/vo/lina/lina_item_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_item_02.vsnd_c rename to game/sounds/vo/lina/lina_item_02.vsnd_c diff --git a/sounds/vo/lina/lina_item_03.vsnd_c b/game/sounds/vo/lina/lina_item_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_item_03.vsnd_c rename to game/sounds/vo/lina/lina_item_03.vsnd_c diff --git a/sounds/vo/lina/lina_item_04.vsnd_c b/game/sounds/vo/lina/lina_item_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_item_04.vsnd_c rename to game/sounds/vo/lina/lina_item_04.vsnd_c diff --git a/sounds/vo/lina/lina_item_05.vsnd_c b/game/sounds/vo/lina/lina_item_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_item_05.vsnd_c rename to game/sounds/vo/lina/lina_item_05.vsnd_c diff --git a/sounds/vo/lina/lina_item_06.vsnd_c b/game/sounds/vo/lina/lina_item_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_item_06.vsnd_c rename to game/sounds/vo/lina/lina_item_06.vsnd_c diff --git a/sounds/vo/lina/lina_item_07.vsnd_c b/game/sounds/vo/lina/lina_item_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_item_07.vsnd_c rename to game/sounds/vo/lina/lina_item_07.vsnd_c diff --git a/sounds/vo/lina/lina_kill_01.vsnd_c b/game/sounds/vo/lina/lina_kill_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_01.vsnd_c rename to game/sounds/vo/lina/lina_kill_01.vsnd_c diff --git a/sounds/vo/lina/lina_kill_02.vsnd_c b/game/sounds/vo/lina/lina_kill_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_02.vsnd_c rename to game/sounds/vo/lina/lina_kill_02.vsnd_c diff --git a/sounds/vo/lina/lina_kill_03.vsnd_c b/game/sounds/vo/lina/lina_kill_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_03.vsnd_c rename to game/sounds/vo/lina/lina_kill_03.vsnd_c diff --git a/sounds/vo/lina/lina_kill_04.vsnd_c b/game/sounds/vo/lina/lina_kill_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_04.vsnd_c rename to game/sounds/vo/lina/lina_kill_04.vsnd_c diff --git a/sounds/vo/lina/lina_kill_05.vsnd_c b/game/sounds/vo/lina/lina_kill_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_05.vsnd_c rename to game/sounds/vo/lina/lina_kill_05.vsnd_c diff --git a/sounds/vo/lina/lina_kill_06.vsnd_c b/game/sounds/vo/lina/lina_kill_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_06.vsnd_c rename to game/sounds/vo/lina/lina_kill_06.vsnd_c diff --git a/sounds/vo/lina/lina_kill_07.vsnd_c b/game/sounds/vo/lina/lina_kill_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_07.vsnd_c rename to game/sounds/vo/lina/lina_kill_07.vsnd_c diff --git a/sounds/vo/lina/lina_kill_08.vsnd_c b/game/sounds/vo/lina/lina_kill_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_08.vsnd_c rename to game/sounds/vo/lina/lina_kill_08.vsnd_c diff --git a/sounds/vo/lina/lina_kill_09.vsnd_c b/game/sounds/vo/lina/lina_kill_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_09.vsnd_c rename to game/sounds/vo/lina/lina_kill_09.vsnd_c diff --git a/sounds/vo/lina/lina_kill_10.vsnd_c b/game/sounds/vo/lina/lina_kill_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_10.vsnd_c rename to game/sounds/vo/lina/lina_kill_10.vsnd_c diff --git a/sounds/vo/lina/lina_kill_11.vsnd_c b/game/sounds/vo/lina/lina_kill_11.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_11.vsnd_c rename to game/sounds/vo/lina/lina_kill_11.vsnd_c diff --git a/sounds/vo/lina/lina_kill_12.vsnd_c b/game/sounds/vo/lina/lina_kill_12.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_12.vsnd_c rename to game/sounds/vo/lina/lina_kill_12.vsnd_c diff --git a/sounds/vo/lina/lina_kill_13.vsnd_c b/game/sounds/vo/lina/lina_kill_13.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_kill_13.vsnd_c rename to game/sounds/vo/lina/lina_kill_13.vsnd_c diff --git a/sounds/vo/lina/lina_killspecial_01.vsnd_c b/game/sounds/vo/lina/lina_killspecial_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_killspecial_01.vsnd_c rename to game/sounds/vo/lina/lina_killspecial_01.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_01.vsnd_c b/game/sounds/vo/lina/lina_lasthit_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_01.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_01.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_02.vsnd_c b/game/sounds/vo/lina/lina_lasthit_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_02.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_02.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_03.vsnd_c b/game/sounds/vo/lina/lina_lasthit_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_03.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_03.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_04.vsnd_c b/game/sounds/vo/lina/lina_lasthit_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_04.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_04.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_05.vsnd_c b/game/sounds/vo/lina/lina_lasthit_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_05.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_05.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_06.vsnd_c b/game/sounds/vo/lina/lina_lasthit_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_06.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_06.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_07.vsnd_c b/game/sounds/vo/lina/lina_lasthit_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_07.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_07.vsnd_c diff --git a/sounds/vo/lina/lina_lasthit_08.vsnd_c b/game/sounds/vo/lina/lina_lasthit_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lasthit_08.vsnd_c rename to game/sounds/vo/lina/lina_lasthit_08.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_01.vsnd_c b/game/sounds/vo/lina/lina_laugh_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_01.vsnd_c rename to game/sounds/vo/lina/lina_laugh_01.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_02.vsnd_c b/game/sounds/vo/lina/lina_laugh_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_02.vsnd_c rename to game/sounds/vo/lina/lina_laugh_02.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_03.vsnd_c b/game/sounds/vo/lina/lina_laugh_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_03.vsnd_c rename to game/sounds/vo/lina/lina_laugh_03.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_04.vsnd_c b/game/sounds/vo/lina/lina_laugh_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_04.vsnd_c rename to game/sounds/vo/lina/lina_laugh_04.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_05.vsnd_c b/game/sounds/vo/lina/lina_laugh_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_05.vsnd_c rename to game/sounds/vo/lina/lina_laugh_05.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_06.vsnd_c b/game/sounds/vo/lina/lina_laugh_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_06.vsnd_c rename to game/sounds/vo/lina/lina_laugh_06.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_07.vsnd_c b/game/sounds/vo/lina/lina_laugh_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_07.vsnd_c rename to game/sounds/vo/lina/lina_laugh_07.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_08.vsnd_c b/game/sounds/vo/lina/lina_laugh_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_08.vsnd_c rename to game/sounds/vo/lina/lina_laugh_08.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_09.vsnd_c b/game/sounds/vo/lina/lina_laugh_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_09.vsnd_c rename to game/sounds/vo/lina/lina_laugh_09.vsnd_c diff --git a/sounds/vo/lina/lina_laugh_10.vsnd_c b/game/sounds/vo/lina/lina_laugh_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_laugh_10.vsnd_c rename to game/sounds/vo/lina/lina_laugh_10.vsnd_c diff --git a/sounds/vo/lina/lina_level_01.vsnd_c b/game/sounds/vo/lina/lina_level_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_level_01.vsnd_c rename to game/sounds/vo/lina/lina_level_01.vsnd_c diff --git a/sounds/vo/lina/lina_level_02.vsnd_c b/game/sounds/vo/lina/lina_level_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_level_02.vsnd_c rename to game/sounds/vo/lina/lina_level_02.vsnd_c diff --git a/sounds/vo/lina/lina_level_03.vsnd_c b/game/sounds/vo/lina/lina_level_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_level_03.vsnd_c rename to game/sounds/vo/lina/lina_level_03.vsnd_c diff --git a/sounds/vo/lina/lina_level_04.vsnd_c b/game/sounds/vo/lina/lina_level_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_level_04.vsnd_c rename to game/sounds/vo/lina/lina_level_04.vsnd_c diff --git a/sounds/vo/lina/lina_level_05.vsnd_c b/game/sounds/vo/lina/lina_level_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_level_05.vsnd_c rename to game/sounds/vo/lina/lina_level_05.vsnd_c diff --git a/sounds/vo/lina/lina_level_06.vsnd_c b/game/sounds/vo/lina/lina_level_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_level_06.vsnd_c rename to game/sounds/vo/lina/lina_level_06.vsnd_c diff --git a/sounds/vo/lina/lina_level_07.vsnd_c b/game/sounds/vo/lina/lina_level_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_level_07.vsnd_c rename to game/sounds/vo/lina/lina_level_07.vsnd_c diff --git a/sounds/vo/lina/lina_lose_01.vsnd_c b/game/sounds/vo/lina/lina_lose_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lose_01.vsnd_c rename to game/sounds/vo/lina/lina_lose_01.vsnd_c diff --git a/sounds/vo/lina/lina_lose_02.vsnd_c b/game/sounds/vo/lina/lina_lose_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lose_02.vsnd_c rename to game/sounds/vo/lina/lina_lose_02.vsnd_c diff --git a/sounds/vo/lina/lina_lose_03.vsnd_c b/game/sounds/vo/lina/lina_lose_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lose_03.vsnd_c rename to game/sounds/vo/lina/lina_lose_03.vsnd_c diff --git a/sounds/vo/lina/lina_lose_04.vsnd_c b/game/sounds/vo/lina/lina_lose_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_lose_04.vsnd_c rename to game/sounds/vo/lina/lina_lose_04.vsnd_c diff --git a/sounds/vo/lina/lina_missing_lane_01.vsnd_c b/game/sounds/vo/lina/lina_missing_lane_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_missing_lane_01.vsnd_c rename to game/sounds/vo/lina/lina_missing_lane_01.vsnd_c diff --git a/sounds/vo/lina/lina_missing_lane_02.vsnd_c b/game/sounds/vo/lina/lina_missing_lane_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_missing_lane_02.vsnd_c rename to game/sounds/vo/lina/lina_missing_lane_02.vsnd_c diff --git a/sounds/vo/lina/lina_missing_lane_03.vsnd_c b/game/sounds/vo/lina/lina_missing_lane_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_missing_lane_03.vsnd_c rename to game/sounds/vo/lina/lina_missing_lane_03.vsnd_c diff --git a/sounds/vo/lina/lina_move_01.vsnd_c b/game/sounds/vo/lina/lina_move_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_01.vsnd_c rename to game/sounds/vo/lina/lina_move_01.vsnd_c diff --git a/sounds/vo/lina/lina_move_02.vsnd_c b/game/sounds/vo/lina/lina_move_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_02.vsnd_c rename to game/sounds/vo/lina/lina_move_02.vsnd_c diff --git a/sounds/vo/lina/lina_move_03.vsnd_c b/game/sounds/vo/lina/lina_move_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_03.vsnd_c rename to game/sounds/vo/lina/lina_move_03.vsnd_c diff --git a/sounds/vo/lina/lina_move_04.vsnd_c b/game/sounds/vo/lina/lina_move_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_04.vsnd_c rename to game/sounds/vo/lina/lina_move_04.vsnd_c diff --git a/sounds/vo/lina/lina_move_05.vsnd_c b/game/sounds/vo/lina/lina_move_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_05.vsnd_c rename to game/sounds/vo/lina/lina_move_05.vsnd_c diff --git a/sounds/vo/lina/lina_move_06.vsnd_c b/game/sounds/vo/lina/lina_move_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_06.vsnd_c rename to game/sounds/vo/lina/lina_move_06.vsnd_c diff --git a/sounds/vo/lina/lina_move_07.vsnd_c b/game/sounds/vo/lina/lina_move_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_07.vsnd_c rename to game/sounds/vo/lina/lina_move_07.vsnd_c diff --git a/sounds/vo/lina/lina_move_08.vsnd_c b/game/sounds/vo/lina/lina_move_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_08.vsnd_c rename to game/sounds/vo/lina/lina_move_08.vsnd_c diff --git a/sounds/vo/lina/lina_move_09.vsnd_c b/game/sounds/vo/lina/lina_move_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_09.vsnd_c rename to game/sounds/vo/lina/lina_move_09.vsnd_c diff --git a/sounds/vo/lina/lina_move_10.vsnd_c b/game/sounds/vo/lina/lina_move_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_10.vsnd_c rename to game/sounds/vo/lina/lina_move_10.vsnd_c diff --git a/sounds/vo/lina/lina_move_11.vsnd_c b/game/sounds/vo/lina/lina_move_11.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_11.vsnd_c rename to game/sounds/vo/lina/lina_move_11.vsnd_c diff --git a/sounds/vo/lina/lina_move_12.vsnd_c b/game/sounds/vo/lina/lina_move_12.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_move_12.vsnd_c rename to game/sounds/vo/lina/lina_move_12.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_01.vsnd_c b/game/sounds/vo/lina/lina_nomana_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_01.vsnd_c rename to game/sounds/vo/lina/lina_nomana_01.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_02.vsnd_c b/game/sounds/vo/lina/lina_nomana_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_02.vsnd_c rename to game/sounds/vo/lina/lina_nomana_02.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_03.vsnd_c b/game/sounds/vo/lina/lina_nomana_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_03.vsnd_c rename to game/sounds/vo/lina/lina_nomana_03.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_04.vsnd_c b/game/sounds/vo/lina/lina_nomana_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_04.vsnd_c rename to game/sounds/vo/lina/lina_nomana_04.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_05.vsnd_c b/game/sounds/vo/lina/lina_nomana_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_05.vsnd_c rename to game/sounds/vo/lina/lina_nomana_05.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_06.vsnd_c b/game/sounds/vo/lina/lina_nomana_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_06.vsnd_c rename to game/sounds/vo/lina/lina_nomana_06.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_07.vsnd_c b/game/sounds/vo/lina/lina_nomana_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_07.vsnd_c rename to game/sounds/vo/lina/lina_nomana_07.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_08.vsnd_c b/game/sounds/vo/lina/lina_nomana_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_08.vsnd_c rename to game/sounds/vo/lina/lina_nomana_08.vsnd_c diff --git a/sounds/vo/lina/lina_nomana_09.vsnd_c b/game/sounds/vo/lina/lina_nomana_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_nomana_09.vsnd_c rename to game/sounds/vo/lina/lina_nomana_09.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_01.vsnd_c b/game/sounds/vo/lina/lina_notyet_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_01.vsnd_c rename to game/sounds/vo/lina/lina_notyet_01.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_02.vsnd_c b/game/sounds/vo/lina/lina_notyet_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_02.vsnd_c rename to game/sounds/vo/lina/lina_notyet_02.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_03.vsnd_c b/game/sounds/vo/lina/lina_notyet_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_03.vsnd_c rename to game/sounds/vo/lina/lina_notyet_03.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_04.vsnd_c b/game/sounds/vo/lina/lina_notyet_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_04.vsnd_c rename to game/sounds/vo/lina/lina_notyet_04.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_05.vsnd_c b/game/sounds/vo/lina/lina_notyet_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_05.vsnd_c rename to game/sounds/vo/lina/lina_notyet_05.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_06.vsnd_c b/game/sounds/vo/lina/lina_notyet_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_06.vsnd_c rename to game/sounds/vo/lina/lina_notyet_06.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_07.vsnd_c b/game/sounds/vo/lina/lina_notyet_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_07.vsnd_c rename to game/sounds/vo/lina/lina_notyet_07.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_08.vsnd_c b/game/sounds/vo/lina/lina_notyet_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_08.vsnd_c rename to game/sounds/vo/lina/lina_notyet_08.vsnd_c diff --git a/sounds/vo/lina/lina_notyet_09.vsnd_c b/game/sounds/vo/lina/lina_notyet_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_notyet_09.vsnd_c rename to game/sounds/vo/lina/lina_notyet_09.vsnd_c diff --git a/sounds/vo/lina/lina_pain_01.vsnd_c b/game/sounds/vo/lina/lina_pain_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_01.vsnd_c rename to game/sounds/vo/lina/lina_pain_01.vsnd_c diff --git a/sounds/vo/lina/lina_pain_02.vsnd_c b/game/sounds/vo/lina/lina_pain_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_02.vsnd_c rename to game/sounds/vo/lina/lina_pain_02.vsnd_c diff --git a/sounds/vo/lina/lina_pain_03.vsnd_c b/game/sounds/vo/lina/lina_pain_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_03.vsnd_c rename to game/sounds/vo/lina/lina_pain_03.vsnd_c diff --git a/sounds/vo/lina/lina_pain_04.vsnd_c b/game/sounds/vo/lina/lina_pain_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_04.vsnd_c rename to game/sounds/vo/lina/lina_pain_04.vsnd_c diff --git a/sounds/vo/lina/lina_pain_05.vsnd_c b/game/sounds/vo/lina/lina_pain_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_05.vsnd_c rename to game/sounds/vo/lina/lina_pain_05.vsnd_c diff --git a/sounds/vo/lina/lina_pain_06.vsnd_c b/game/sounds/vo/lina/lina_pain_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_06.vsnd_c rename to game/sounds/vo/lina/lina_pain_06.vsnd_c diff --git a/sounds/vo/lina/lina_pain_07.vsnd_c b/game/sounds/vo/lina/lina_pain_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_07.vsnd_c rename to game/sounds/vo/lina/lina_pain_07.vsnd_c diff --git a/sounds/vo/lina/lina_pain_08.vsnd_c b/game/sounds/vo/lina/lina_pain_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_pain_08.vsnd_c rename to game/sounds/vo/lina/lina_pain_08.vsnd_c diff --git a/sounds/vo/lina/lina_purch_01.vsnd_c b/game/sounds/vo/lina/lina_purch_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_purch_01.vsnd_c rename to game/sounds/vo/lina/lina_purch_01.vsnd_c diff --git a/sounds/vo/lina/lina_purch_02.vsnd_c b/game/sounds/vo/lina/lina_purch_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_purch_02.vsnd_c rename to game/sounds/vo/lina/lina_purch_02.vsnd_c diff --git a/sounds/vo/lina/lina_purch_03.vsnd_c b/game/sounds/vo/lina/lina_purch_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_purch_03.vsnd_c rename to game/sounds/vo/lina/lina_purch_03.vsnd_c diff --git a/sounds/vo/lina/lina_purch_04.vsnd_c b/game/sounds/vo/lina/lina_purch_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_purch_04.vsnd_c rename to game/sounds/vo/lina/lina_purch_04.vsnd_c diff --git a/sounds/vo/lina/lina_purch_05.vsnd_c b/game/sounds/vo/lina/lina_purch_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_purch_05.vsnd_c rename to game/sounds/vo/lina/lina_purch_05.vsnd_c diff --git a/sounds/vo/lina/lina_rare_01.vsnd_c b/game/sounds/vo/lina/lina_rare_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rare_01.vsnd_c rename to game/sounds/vo/lina/lina_rare_01.vsnd_c diff --git a/sounds/vo/lina/lina_rare_02.vsnd_c b/game/sounds/vo/lina/lina_rare_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rare_02.vsnd_c rename to game/sounds/vo/lina/lina_rare_02.vsnd_c diff --git a/sounds/vo/lina/lina_rare_03.vsnd_c b/game/sounds/vo/lina/lina_rare_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rare_03.vsnd_c rename to game/sounds/vo/lina/lina_rare_03.vsnd_c diff --git a/sounds/vo/lina/lina_rare_04.vsnd_c b/game/sounds/vo/lina/lina_rare_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rare_04.vsnd_c rename to game/sounds/vo/lina/lina_rare_04.vsnd_c diff --git a/sounds/vo/lina/lina_regen_01.vsnd_c b/game/sounds/vo/lina/lina_regen_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_regen_01.vsnd_c rename to game/sounds/vo/lina/lina_regen_01.vsnd_c diff --git a/sounds/vo/lina/lina_regen_02.vsnd_c b/game/sounds/vo/lina/lina_regen_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_regen_02.vsnd_c rename to game/sounds/vo/lina/lina_regen_02.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_01.vsnd_c b/game/sounds/vo/lina/lina_respawn_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_01.vsnd_c rename to game/sounds/vo/lina/lina_respawn_01.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_02.vsnd_c b/game/sounds/vo/lina/lina_respawn_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_02.vsnd_c rename to game/sounds/vo/lina/lina_respawn_02.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_03.vsnd_c b/game/sounds/vo/lina/lina_respawn_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_03.vsnd_c rename to game/sounds/vo/lina/lina_respawn_03.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_04.vsnd_c b/game/sounds/vo/lina/lina_respawn_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_04.vsnd_c rename to game/sounds/vo/lina/lina_respawn_04.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_05.vsnd_c b/game/sounds/vo/lina/lina_respawn_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_05.vsnd_c rename to game/sounds/vo/lina/lina_respawn_05.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_06.vsnd_c b/game/sounds/vo/lina/lina_respawn_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_06.vsnd_c rename to game/sounds/vo/lina/lina_respawn_06.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_07.vsnd_c b/game/sounds/vo/lina/lina_respawn_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_07.vsnd_c rename to game/sounds/vo/lina/lina_respawn_07.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_08.vsnd_c b/game/sounds/vo/lina/lina_respawn_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_08.vsnd_c rename to game/sounds/vo/lina/lina_respawn_08.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_09.vsnd_c b/game/sounds/vo/lina/lina_respawn_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_09.vsnd_c rename to game/sounds/vo/lina/lina_respawn_09.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_10.vsnd_c b/game/sounds/vo/lina/lina_respawn_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_10.vsnd_c rename to game/sounds/vo/lina/lina_respawn_10.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_11.vsnd_c b/game/sounds/vo/lina/lina_respawn_11.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_11.vsnd_c rename to game/sounds/vo/lina/lina_respawn_11.vsnd_c diff --git a/sounds/vo/lina/lina_respawn_12.vsnd_c b/game/sounds/vo/lina/lina_respawn_12.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_respawn_12.vsnd_c rename to game/sounds/vo/lina/lina_respawn_12.vsnd_c diff --git a/sounds/vo/lina/lina_rival_01.vsnd_c b/game/sounds/vo/lina/lina_rival_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_01.vsnd_c rename to game/sounds/vo/lina/lina_rival_01.vsnd_c diff --git a/sounds/vo/lina/lina_rival_02.vsnd_c b/game/sounds/vo/lina/lina_rival_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_02.vsnd_c rename to game/sounds/vo/lina/lina_rival_02.vsnd_c diff --git a/sounds/vo/lina/lina_rival_03.vsnd_c b/game/sounds/vo/lina/lina_rival_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_03.vsnd_c rename to game/sounds/vo/lina/lina_rival_03.vsnd_c diff --git a/sounds/vo/lina/lina_rival_04.vsnd_c b/game/sounds/vo/lina/lina_rival_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_04.vsnd_c rename to game/sounds/vo/lina/lina_rival_04.vsnd_c diff --git a/sounds/vo/lina/lina_rival_05.vsnd_c b/game/sounds/vo/lina/lina_rival_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_05.vsnd_c rename to game/sounds/vo/lina/lina_rival_05.vsnd_c diff --git a/sounds/vo/lina/lina_rival_06.vsnd_c b/game/sounds/vo/lina/lina_rival_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_06.vsnd_c rename to game/sounds/vo/lina/lina_rival_06.vsnd_c diff --git a/sounds/vo/lina/lina_rival_07.vsnd_c b/game/sounds/vo/lina/lina_rival_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_07.vsnd_c rename to game/sounds/vo/lina/lina_rival_07.vsnd_c diff --git a/sounds/vo/lina/lina_rival_08.vsnd_c b/game/sounds/vo/lina/lina_rival_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_08.vsnd_c rename to game/sounds/vo/lina/lina_rival_08.vsnd_c diff --git a/sounds/vo/lina/lina_rival_09.vsnd_c b/game/sounds/vo/lina/lina_rival_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_09.vsnd_c rename to game/sounds/vo/lina/lina_rival_09.vsnd_c diff --git a/sounds/vo/lina/lina_rival_10.vsnd_c b/game/sounds/vo/lina/lina_rival_10.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_10.vsnd_c rename to game/sounds/vo/lina/lina_rival_10.vsnd_c diff --git a/sounds/vo/lina/lina_rival_11.vsnd_c b/game/sounds/vo/lina/lina_rival_11.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_11.vsnd_c rename to game/sounds/vo/lina/lina_rival_11.vsnd_c diff --git a/sounds/vo/lina/lina_rival_12.vsnd_c b/game/sounds/vo/lina/lina_rival_12.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_12.vsnd_c rename to game/sounds/vo/lina/lina_rival_12.vsnd_c diff --git a/sounds/vo/lina/lina_rival_13.vsnd_c b/game/sounds/vo/lina/lina_rival_13.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_13.vsnd_c rename to game/sounds/vo/lina/lina_rival_13.vsnd_c diff --git a/sounds/vo/lina/lina_rival_14.vsnd_c b/game/sounds/vo/lina/lina_rival_14.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_14.vsnd_c rename to game/sounds/vo/lina/lina_rival_14.vsnd_c diff --git a/sounds/vo/lina/lina_rival_15.vsnd_c b/game/sounds/vo/lina/lina_rival_15.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_15.vsnd_c rename to game/sounds/vo/lina/lina_rival_15.vsnd_c diff --git a/sounds/vo/lina/lina_rival_16.vsnd_c b/game/sounds/vo/lina/lina_rival_16.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_16.vsnd_c rename to game/sounds/vo/lina/lina_rival_16.vsnd_c diff --git a/sounds/vo/lina/lina_rival_17.vsnd_c b/game/sounds/vo/lina/lina_rival_17.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_17.vsnd_c rename to game/sounds/vo/lina/lina_rival_17.vsnd_c diff --git a/sounds/vo/lina/lina_rival_18.vsnd_c b/game/sounds/vo/lina/lina_rival_18.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_18.vsnd_c rename to game/sounds/vo/lina/lina_rival_18.vsnd_c diff --git a/sounds/vo/lina/lina_rival_19.vsnd_c b/game/sounds/vo/lina/lina_rival_19.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_19.vsnd_c rename to game/sounds/vo/lina/lina_rival_19.vsnd_c diff --git a/sounds/vo/lina/lina_rival_20.vsnd_c b/game/sounds/vo/lina/lina_rival_20.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_rival_20.vsnd_c rename to game/sounds/vo/lina/lina_rival_20.vsnd_c diff --git a/sounds/vo/lina/lina_scepter_01.vsnd_c b/game/sounds/vo/lina/lina_scepter_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_scepter_01.vsnd_c rename to game/sounds/vo/lina/lina_scepter_01.vsnd_c diff --git a/sounds/vo/lina/lina_scepter_02.vsnd_c b/game/sounds/vo/lina/lina_scepter_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_scepter_02.vsnd_c rename to game/sounds/vo/lina/lina_scepter_02.vsnd_c diff --git a/sounds/vo/lina/lina_shitwiz_01.vsnd_c b/game/sounds/vo/lina/lina_shitwiz_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_shitwiz_01.vsnd_c rename to game/sounds/vo/lina/lina_shitwiz_01.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_01.vsnd_c b/game/sounds/vo/lina/lina_spawn_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_01.vsnd_c rename to game/sounds/vo/lina/lina_spawn_01.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_02.vsnd_c b/game/sounds/vo/lina/lina_spawn_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_02.vsnd_c rename to game/sounds/vo/lina/lina_spawn_02.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_03.vsnd_c b/game/sounds/vo/lina/lina_spawn_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_03.vsnd_c rename to game/sounds/vo/lina/lina_spawn_03.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_04.vsnd_c b/game/sounds/vo/lina/lina_spawn_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_04.vsnd_c rename to game/sounds/vo/lina/lina_spawn_04.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_05.vsnd_c b/game/sounds/vo/lina/lina_spawn_05.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_05.vsnd_c rename to game/sounds/vo/lina/lina_spawn_05.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_06.vsnd_c b/game/sounds/vo/lina/lina_spawn_06.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_06.vsnd_c rename to game/sounds/vo/lina/lina_spawn_06.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_07.vsnd_c b/game/sounds/vo/lina/lina_spawn_07.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_07.vsnd_c rename to game/sounds/vo/lina/lina_spawn_07.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_08.vsnd_c b/game/sounds/vo/lina/lina_spawn_08.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_08.vsnd_c rename to game/sounds/vo/lina/lina_spawn_08.vsnd_c diff --git a/sounds/vo/lina/lina_spawn_09.vsnd_c b/game/sounds/vo/lina/lina_spawn_09.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_spawn_09.vsnd_c rename to game/sounds/vo/lina/lina_spawn_09.vsnd_c diff --git a/sounds/vo/lina/lina_thanks_01.vsnd_c b/game/sounds/vo/lina/lina_thanks_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_thanks_01.vsnd_c rename to game/sounds/vo/lina/lina_thanks_01.vsnd_c diff --git a/sounds/vo/lina/lina_thanks_02.vsnd_c b/game/sounds/vo/lina/lina_thanks_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_thanks_02.vsnd_c rename to game/sounds/vo/lina/lina_thanks_02.vsnd_c diff --git a/sounds/vo/lina/lina_thanks_03.vsnd_c b/game/sounds/vo/lina/lina_thanks_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_thanks_03.vsnd_c rename to game/sounds/vo/lina/lina_thanks_03.vsnd_c diff --git a/sounds/vo/lina/lina_underattack_01.vsnd_c b/game/sounds/vo/lina/lina_underattack_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_underattack_01.vsnd_c rename to game/sounds/vo/lina/lina_underattack_01.vsnd_c diff --git a/sounds/vo/lina/lina_win_01.vsnd_c b/game/sounds/vo/lina/lina_win_01.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_win_01.vsnd_c rename to game/sounds/vo/lina/lina_win_01.vsnd_c diff --git a/sounds/vo/lina/lina_win_02.vsnd_c b/game/sounds/vo/lina/lina_win_02.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_win_02.vsnd_c rename to game/sounds/vo/lina/lina_win_02.vsnd_c diff --git a/sounds/vo/lina/lina_win_03.vsnd_c b/game/sounds/vo/lina/lina_win_03.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_win_03.vsnd_c rename to game/sounds/vo/lina/lina_win_03.vsnd_c diff --git a/sounds/vo/lina/lina_win_04.vsnd_c b/game/sounds/vo/lina/lina_win_04.vsnd_c similarity index 100% rename from sounds/vo/lina/lina_win_04.vsnd_c rename to game/sounds/vo/lina/lina_win_04.vsnd_c diff --git a/sounds/weapons/hero/antimage/antimage_attack3.vsnd_c b/game/sounds/weapons/hero/antimage/antimage_attack3.vsnd_c similarity index 100% rename from sounds/weapons/hero/antimage/antimage_attack3.vsnd_c rename to game/sounds/weapons/hero/antimage/antimage_attack3.vsnd_c diff --git a/sounds/weapons/hero/antimage/antimage_attack4.vsnd_c b/game/sounds/weapons/hero/antimage/antimage_attack4.vsnd_c similarity index 100% rename from sounds/weapons/hero/antimage/antimage_attack4.vsnd_c rename to game/sounds/weapons/hero/antimage/antimage_attack4.vsnd_c diff --git a/sounds/weapons/hero/antimage/antimage_attack5.vsnd_c b/game/sounds/weapons/hero/antimage/antimage_attack5.vsnd_c similarity index 100% rename from sounds/weapons/hero/antimage/antimage_attack5.vsnd_c rename to game/sounds/weapons/hero/antimage/antimage_attack5.vsnd_c diff --git a/sounds/weapons/hero/axe/attack01.vsnd_c b/game/sounds/weapons/hero/axe/attack01.vsnd_c similarity index 100% rename from sounds/weapons/hero/axe/attack01.vsnd_c rename to game/sounds/weapons/hero/axe/attack01.vsnd_c diff --git a/sounds/weapons/hero/axe/attack02.vsnd_c b/game/sounds/weapons/hero/axe/attack02.vsnd_c similarity index 100% rename from sounds/weapons/hero/axe/attack02.vsnd_c rename to game/sounds/weapons/hero/axe/attack02.vsnd_c diff --git a/sounds/weapons/hero/axe/attack03.vsnd_c b/game/sounds/weapons/hero/axe/attack03.vsnd_c similarity index 100% rename from sounds/weapons/hero/axe/attack03.vsnd_c rename to game/sounds/weapons/hero/axe/attack03.vsnd_c diff --git a/sounds/weapons/hero/axe/preattack01.vsnd_c b/game/sounds/weapons/hero/axe/preattack01.vsnd_c similarity index 100% rename from sounds/weapons/hero/axe/preattack01.vsnd_c rename to game/sounds/weapons/hero/axe/preattack01.vsnd_c diff --git a/sounds/weapons/hero/axe/preattack02.vsnd_c b/game/sounds/weapons/hero/axe/preattack02.vsnd_c similarity index 100% rename from sounds/weapons/hero/axe/preattack02.vsnd_c rename to game/sounds/weapons/hero/axe/preattack02.vsnd_c diff --git a/sounds/weapons/hero/axe/preattack03.vsnd_c b/game/sounds/weapons/hero/axe/preattack03.vsnd_c similarity index 100% rename from sounds/weapons/hero/axe/preattack03.vsnd_c rename to game/sounds/weapons/hero/axe/preattack03.vsnd_c diff --git a/sounds/weapons/hero/bloodseeker/attack1.vsnd_c b/game/sounds/weapons/hero/bloodseeker/attack1.vsnd_c similarity index 100% rename from sounds/weapons/hero/bloodseeker/attack1.vsnd_c rename to game/sounds/weapons/hero/bloodseeker/attack1.vsnd_c diff --git a/sounds/weapons/hero/bloodseeker/attack2.vsnd_c b/game/sounds/weapons/hero/bloodseeker/attack2.vsnd_c similarity index 100% rename from sounds/weapons/hero/bloodseeker/attack2.vsnd_c rename to game/sounds/weapons/hero/bloodseeker/attack2.vsnd_c diff --git a/sounds/weapons/hero/bloodseeker/attack3.vsnd_c b/game/sounds/weapons/hero/bloodseeker/attack3.vsnd_c similarity index 100% rename from sounds/weapons/hero/bloodseeker/attack3.vsnd_c rename to game/sounds/weapons/hero/bloodseeker/attack3.vsnd_c diff --git a/sounds/weapons/hero/bloodseeker/preattack1.vsnd_c b/game/sounds/weapons/hero/bloodseeker/preattack1.vsnd_c similarity index 100% rename from sounds/weapons/hero/bloodseeker/preattack1.vsnd_c rename to game/sounds/weapons/hero/bloodseeker/preattack1.vsnd_c diff --git a/sounds/weapons/hero/bloodseeker/preattack2.vsnd_c b/game/sounds/weapons/hero/bloodseeker/preattack2.vsnd_c similarity index 100% rename from sounds/weapons/hero/bloodseeker/preattack2.vsnd_c rename to game/sounds/weapons/hero/bloodseeker/preattack2.vsnd_c diff --git a/sounds/weapons/hero/earthshaker/enchant_attack.vsnd_c b/game/sounds/weapons/hero/earthshaker/enchant_attack.vsnd_c similarity index 100% rename from sounds/weapons/hero/earthshaker/enchant_attack.vsnd_c rename to game/sounds/weapons/hero/earthshaker/enchant_attack.vsnd_c diff --git a/sounds/weapons/hero/earthshaker/fissure_whoosh.vsnd_c b/game/sounds/weapons/hero/earthshaker/fissure_whoosh.vsnd_c similarity index 100% rename from sounds/weapons/hero/earthshaker/fissure_whoosh.vsnd_c rename to game/sounds/weapons/hero/earthshaker/fissure_whoosh.vsnd_c diff --git a/sounds/weapons/hero/earthshaker/fist_swing_impact1.vsnd_c b/game/sounds/weapons/hero/earthshaker/fist_swing_impact1.vsnd_c similarity index 100% rename from sounds/weapons/hero/earthshaker/fist_swing_impact1.vsnd_c rename to game/sounds/weapons/hero/earthshaker/fist_swing_impact1.vsnd_c diff --git a/sounds/weapons/hero/earthshaker/fist_swing_impact2.vsnd_c b/game/sounds/weapons/hero/earthshaker/fist_swing_impact2.vsnd_c similarity index 100% rename from sounds/weapons/hero/earthshaker/fist_swing_impact2.vsnd_c rename to game/sounds/weapons/hero/earthshaker/fist_swing_impact2.vsnd_c diff --git a/sounds/weapons/hero/earthshaker/fist_swing_impact3.vsnd_c b/game/sounds/weapons/hero/earthshaker/fist_swing_impact3.vsnd_c similarity index 100% rename from sounds/weapons/hero/earthshaker/fist_swing_impact3.vsnd_c rename to game/sounds/weapons/hero/earthshaker/fist_swing_impact3.vsnd_c diff --git a/sounds/weapons/hero/keeper/chakra_target.vsnd_c b/game/sounds/weapons/hero/keeper/chakra_target.vsnd_c similarity index 100% rename from sounds/weapons/hero/keeper/chakra_target.vsnd_c rename to game/sounds/weapons/hero/keeper/chakra_target.vsnd_c diff --git a/sounds/weapons/hero/puck/illusory_orb.vsnd_c b/game/sounds/weapons/hero/puck/illusory_orb.vsnd_c similarity index 100% rename from sounds/weapons/hero/puck/illusory_orb.vsnd_c rename to game/sounds/weapons/hero/puck/illusory_orb.vsnd_c diff --git a/sounds/weapons/hero/shared/large_blacde/ring01.vsnd_c b/game/sounds/weapons/hero/shared/large_blacde/ring01.vsnd_c similarity index 100% rename from sounds/weapons/hero/shared/large_blacde/ring01.vsnd_c rename to game/sounds/weapons/hero/shared/large_blacde/ring01.vsnd_c diff --git a/sounds/weapons/hero/shared/large_blacde/ring04.vsnd_c b/game/sounds/weapons/hero/shared/large_blacde/ring04.vsnd_c similarity index 100% rename from sounds/weapons/hero/shared/large_blacde/ring04.vsnd_c rename to game/sounds/weapons/hero/shared/large_blacde/ring04.vsnd_c diff --git a/sounds/weapons/hero/shared/small_blade/ring01.vsnd_c b/game/sounds/weapons/hero/shared/small_blade/ring01.vsnd_c similarity index 100% rename from sounds/weapons/hero/shared/small_blade/ring01.vsnd_c rename to game/sounds/weapons/hero/shared/small_blade/ring01.vsnd_c diff --git a/sounds/weapons/hero/shared/small_blade/ring02.vsnd_c b/game/sounds/weapons/hero/shared/small_blade/ring02.vsnd_c similarity index 100% rename from sounds/weapons/hero/shared/small_blade/ring02.vsnd_c rename to game/sounds/weapons/hero/shared/small_blade/ring02.vsnd_c diff --git a/sounds/weapons/hero/shared/small_blade/ring03.vsnd_c b/game/sounds/weapons/hero/shared/small_blade/ring03.vsnd_c similarity index 100% rename from sounds/weapons/hero/shared/small_blade/ring03.vsnd_c rename to game/sounds/weapons/hero/shared/small_blade/ring03.vsnd_c diff --git a/sounds/weapons/hero/tidehunter/attack1.vsnd_c b/game/sounds/weapons/hero/tidehunter/attack1.vsnd_c similarity index 100% rename from sounds/weapons/hero/tidehunter/attack1.vsnd_c rename to game/sounds/weapons/hero/tidehunter/attack1.vsnd_c diff --git a/sounds/weapons/hero/tidehunter/attack2.vsnd_c b/game/sounds/weapons/hero/tidehunter/attack2.vsnd_c similarity index 100% rename from sounds/weapons/hero/tidehunter/attack2.vsnd_c rename to game/sounds/weapons/hero/tidehunter/attack2.vsnd_c diff --git a/sounds/weapons/hero/tidehunter/attack3.vsnd_c b/game/sounds/weapons/hero/tidehunter/attack3.vsnd_c similarity index 100% rename from sounds/weapons/hero/tidehunter/attack3.vsnd_c rename to game/sounds/weapons/hero/tidehunter/attack3.vsnd_c diff --git a/sounds/weapons/hero/warlock/attack1.vsnd_c b/game/sounds/weapons/hero/warlock/attack1.vsnd_c similarity index 100% rename from sounds/weapons/hero/warlock/attack1.vsnd_c rename to game/sounds/weapons/hero/warlock/attack1.vsnd_c diff --git a/sounds/weapons/hero/warlock/attack2.vsnd_c b/game/sounds/weapons/hero/warlock/attack2.vsnd_c similarity index 100% rename from sounds/weapons/hero/warlock/attack2.vsnd_c rename to game/sounds/weapons/hero/warlock/attack2.vsnd_c diff --git a/sounds/weapons/hero/warlock/attack3.vsnd_c b/game/sounds/weapons/hero/warlock/attack3.vsnd_c similarity index 100% rename from sounds/weapons/hero/warlock/attack3.vsnd_c rename to game/sounds/weapons/hero/warlock/attack3.vsnd_c diff --git a/sounds/weapons/hero/witch_doctor/preattack.vsnd_c b/game/sounds/weapons/hero/witch_doctor/preattack.vsnd_c similarity index 100% rename from sounds/weapons/hero/witch_doctor/preattack.vsnd_c rename to game/sounds/weapons/hero/witch_doctor/preattack.vsnd_c diff --git a/resource/addon_english.txt b/resource/addon_english.txt deleted file mode 100755 index 327d809..0000000 --- a/resource/addon_english.txt +++ /dev/null @@ -1,1171 +0,0 @@ -"lang" -{ - "Language" "english" - "Tokens" - { - "game_mode_15" "Touhou Dream Sign Festival" - "addon_game_name" "Touhou Dream Sign Festival" - "DOTA_Hero_Selection_Team_Good" "Hakurei Shrine" - "DOTA_Hero_Selection_Team_Bad" "Incident" - "dota_match_history_Winner_GoodGuys" "Winner: Hakurei Shrine" - "dota_match_history_Winner_BadGuys" "Winner: Incident" - "npc_dota_goodguys_fort" "Hakurei Shrine" - "npc_dota_hero_lina" "Hakurei Reimu" - "DOTA_GoodGuys" "Hakurei Shrine" - "DOTA_BadGuys" "Incident" - "DOTA_Winner_GoodGuys" "The Hakurei Shrine has won." - "DOTA_Winner_BadGuys" "Your whole body is covered in wounds..." - "DOTA_Starting_Team_Radiant" "Hakurei Shrine" - "DOTA_Starting_Team_Dire" "Incident" - "DOTA_GoodGuysCaps" "Hakurei Shrine" - "DOTA_BadGuysCaps" "Incident" - "DOTA_Chat_CourierRespawnedGood" "" - "DOTA_Chat_CourierRespawnedBad" "" - "npc_dota_fort" "Shrine" - "pause_game" "The game has been paused. Press F9 to restore the game!" - "item_is_locked" "The item has been locked. Please click on the right-click items to open and unlock. Locked items can not be used as materials for training, rising stars, not for sale, and can not be picked up by teammates." - "item_locked_tip" "Locked items can not be used as materials for cultivation, star promotion, sale, and can not be picked up by teammates. Please make good use of this function to prevent misoperation or stolen items." - "reach_to_wave" "The specified wave number is successful and the next wave will jump directly to the {d:count} wave." - "power_game_end_info" "The maximum number of wave s that have been successfully passed this time: {d: wave}, the total damage of the wave: {d: damage} * 10,000, 30 seconds after the end of the game and settlement of rewards." - "fast_game_on" "In the fast mode, the first 50 wave times reduced by 30% per wave, and all kinds of revenue increased by 30% simultaneously." - "challenge_game_on" "In Challenge mode, the endless preparation time is extended and three gifts from Nazlin Liebert, the autumn dumpling, are given directly from Wave 68." - "user_steam_id" "{s:name}" - "item_pick_chen_bug_fix" "Please note that orange equipment has been put back in storage (to solve the problem that orange items may fall into the brush channel when they are recycled, which may lead to the impossibility of picking up)" - "not_enough_item_slot" "Not enough inventory space!" - "not_enough_food" "Not enough unit space!" - "minoriko_up_to_5_star" "Please note that Minoriko has reached 5 stars!" - "sizuha_up_to_5_star" "Please note that Sizuha has reached 5 stars!" - "bonus_tower_limit" "You can only have a maximum of three income shikigami(Lily, Nazrin, Minoriko, Daiyousei, Shou, Shizuha, Shinki)!" - "player_disconnect" "A player has been disconnected! Enter -kickafk + player number to kick the player. Player number:" - "player_in_vote" "In the voting, one minute after the end of the mandatory, then vote can be launched again.\nCurrently kicked player number: {d:count}" - "player_vote_pass" "The vote has been successful and has been kicked out of the {d:count} player." - "player_vote_no_pass" "The vote was unsuccessful. The {d:count} player objected, and this polls ended." - "spawn_unlimited" "Endless level is imminent, you must stick to the defensive {d:count} bouts. In the endless level, each player will count the number of missing monsters individually. Simultaneously, all income category shikigami near expiry. Please use the last time to configure your shikigami lineup." - "DOTA_Tooltip_ability_item_0001_Description" "Although there is no attack, but can quickly enhance the experience of Shikigamis.\n[★][★]Spring Sign「Proclaim Of spring」\n[★★★★]Spring Sign「Surprise Spring」" - "DOTA_Tooltip_ability_item_0001" "[R]Lily White" - "DOTA_Tooltip_ability_item_1001" "Normal Summon Sign" - "DOTA_Tooltip_ability_item_1001_Description" "Summon a normal Shikigami.\n[N]80%%\n[R]20%%" - "DOTA_Tooltip_ability_item_1002" "Advanced Summon Sign" - "DOTA_Tooltip_ability_item_1002_Description" "Summon a rare Shikigami.\n[R]75%%\n[SR]20%%\n[SSR]5%%" - "DOTA_Tooltip_ability_item_1003" "The Drug Of Evolution Lv1" - "DOTA_Tooltip_ability_item_1003_Description" "It can replace any material with a star level of 1." - "DOTA_Tooltip_ability_item_1004" "The Drug Of Evolution Lv2" - "DOTA_Tooltip_ability_item_1005" "The Drug Of Evolution Lv3" - "DOTA_Tooltip_ability_item_1006" "The Drug Of Evolution Lv4" - "DOTA_Tooltip_ability_item_1004_Description" "It can replace any material with a star level of 2." - "DOTA_Tooltip_ability_item_1005_Description" "It can replace any material with a star level of 3." - "DOTA_Tooltip_ability_item_1006_Description" "It can replace any material with a star level of 4." - "DOTA_Tooltip_ability_item_0001_Lore" "Lily White is a fairy that heralds the coming of spring. Where she passes, there will be warm air in spring." - "DOTA_Tooltip_ability_item_0002" "[R]Nazrin" - "DOTA_Tooltip_ability_item_0002_Description" "Have a certain ability to attack and could steal money by attack.\n[★]Search Sign「Gold Detector」" - "DOTA_Tooltip_ability_item_0003" "[R]Aki Minoriko" - "DOTA_Tooltip_ability_item_0003_Description" "Although there is no attack ability and can not grow through the general way, she can grow up stars with the time, and exchange star with other Shikigami.\n[★]Fruit Sign「Warm Color Harvest」\n[★★★]Bumper Crop「Promise of the Wheat Godg」" - "DOTA_Tooltip_ability_item_0002_Lore" "The Little Dowser General" - "DOTA_Tooltip_ability_item_0003_Lore" "Aki Minoriko and her old sister-Aki Shizuha manipulate the Autumn together." - "DOTA_Tooltip_ability_item_0004" "[N]Graveyard Fairy" - "DOTA_Tooltip_ability_item_0004_Description" "A fairy that can be found everywhere in the GY.\n[★]POISONED DAGGER" - "DOTA_Tooltip_ability_item_0005" "[N]Shanghai Doll" - "DOTA_Tooltip_ability_item_0005_Description" "A doll that was made by Alice.\n[★]CRITICAL STRIKE" - "DOTA_Tooltip_ability_item_0006" "[N]Hourai Doll" - "DOTA_Tooltip_ability_item_0006_Description" "A doll that was made by Alice.\n[★]THUMP" - "DOTA_Tooltip_ability_item_0007" "[N]Flower Field Fairy" - "DOTA_Tooltip_ability_item_0007_Description" "A fairy that can be found everywhere on a flower field.\n[★]MULTI-SHOT" - "DOTA_Tooltip_ability_item_0008" "[N]Maid Fairy" - "DOTA_Tooltip_ability_item_0008_Description" "A fairy that can be found everywhere in Koumakan.\n[★]MOONBLADE" - "DOTA_Tooltip_ability_item_0009" "[R]Cirno" - "DOTA_Tooltip_ability_item_0009_Description" "Cirno is leader of fairies that live near the Misty Lake,hence she has stronger power than other fairies. She is aggressive and has the ability of manipulating cold air,can freeze things flashily. She is more dangerous than normal fairies.\n[★]Frost Sign Card「Frost Columns」\n[★★★★]Freeze Sign「Perfect Freeze」" - "DOTA_Tooltip_ability_item_0009_Lore" "I am the strongest!" - "DOTA_Tooltip_ability_item_0010" "[R]Tatara Kogasa" - "DOTA_Tooltip_ability_item_0010_Description" "Karakasa Obake,is a Tsukumogami which transformed by the umbrella that is not used for a long time.\ndoes not attack people or eat people, only like shock people. \n[★]Halo「Karakasa Surprising Flash」\n[★★★]Rain Sign「A Rainy Night's Ghost Story」" - "DOTA_Tooltip_ability_item_0010_Lore" "Just often cannot shock anyone...." - "DOTA_Tooltip_ability_item_0011" "[R]Letty Whiterock" - "DOTA_Tooltip_ability_item_0011_Description" "This youkai only can be seen in Winter, Like cold place, is a kind of scary fairy that can freeze people cause they cannot fight any more. \n[★]Winter Sign「Flower Wither Away」\n[★★★]Cold Sign「Lingering Cold」" - "DOTA_Tooltip_ability_item_0012" "[R]Lyrica Prismriver" - "DOTA_Tooltip_ability_item_0012_Description" "Prismriver Band is formed by Poltergeist Sisters, Lyrica is the youngest sister of Poltergeist Sisters.\nNormally using keyboard or percussion.\n[★]Nether Keys「Fazioli Nether Performance」\n[★★★]Key Spirit「B?sendorfer Divine Performance」" - "DOTA_Tooltip_ability_item_0013" "[R]Lunasa Prismriver" - "DOTA_Tooltip_ability_item_0012_Lore" "Be different from her sisters, her music is the 'Fantasy Music' which is nonexistent." - "DOTA_Tooltip_ability_item_0013_Description" "Prismriver Band is formed by Poltergeist Sisters,Lunasa is the oldest sister of Poltergeist Sisters, is good at playing violin. And he is also the captain of Prismriver Band\n[★]String Performance「Guarneri del Gesù」\n[★★★]Fake Strings「Pseudo Stradivarius」" - "DOTA_Tooltip_ability_item_0014" "[R]Merlin Prismriver" - "DOTA_Tooltip_ability_item_0014_Description" "The middle sister of Poltergeist Sisters.\n Has pleasant personality, she is the tallest in three sisters, hence she often stands in the mid of the three when they are in concerts.\n[★]Trumpet Spirit「Hino Phantasm」\n[★★★]Trumpet Spirit「Ghost Clifford」" - "DOTA_Tooltip_ability_item_0014_Lore" "When you heard her music, you will suddenly start dancing or impossible to have fluent conversations." - "DOTA_Tooltip_ability_item_0013_Lore" "Do not make children heard that. Only adults can listen ghost music." - "DOTA_Tooltip_ability_item_0015" "[R]Rumia" - "DOTA_Tooltip_ability_item_0015_Description" "a kind of low level youkai, the ability is manipulate darkness-create some ranges of the dark area circle around her. Although she looks young, she also eats people. \n[★]「SOU~NA~NO~KA!」\n[★★★]Darkness Sign「Demarcation」" - "DOTA_Tooltip_ability_item_0015_Lore" "Actually the ribbon which twines around the hair is the Sign, even if she wants to take off the ribbon, Rumia-herself still cannot touch it" - "DOTA_Tooltip_ability_item_0016" "[R]Komeiji Satori" - "DOTA_Tooltip_ability_item_0016_Description" "Satori Komeiji is the Mistress of the Palace of the Earth Spirits after the underground city was separated from Hell. Her ability to read minds causes various youkai and spirits to fear her, but makes her loved by the animals that normally can't be understood. With these animals as pets, she manages the ruins of the Hell of Blazing Fires where her home stands.\n[★]Recollection「Terrible Souvenir」\n[★★★★]Recollection「Terrifying hypnotism」" - "DOTA_Tooltip_ability_item_0016_Lore" "Because she can read others'minds, there is no secret behind her.\nNo matter any fairies, even ghost feels scary." - "DOTA_Tooltip_ability_item_0017" "[R]Nagae Iku" - "DOTA_Tooltip_ability_item_0017_Description" "The envoy of Dragon Palace who lives in the cloud, Most of time she lives in the cloud, guarding the dragon.\n[★]Thunder Sign「Lightning Fish」\n[★★★★]Fish Sign「Dragonfish Drill」" - "DOTA_Tooltip_ability_item_0017_Lore" "Can understand dragon's language, convey important things to humans and youkaies." - "DOTA_Tooltip_ability_item_0018" "[R]Mystia Lorelei" - "DOTA_Tooltip_ability_item_0018_Description" "Mystia Lorelei is a night sparrow with an outgoing egocentric personality, at least she sounds arrogant, that enjoys infusing confusion and terror into the hearts of humans using her ability: a song that creates confusion in those who hear her. Her song seems to attract nearby monsters as well. She roams the Youkai Trail near the Human Village that Keine Kamishirasawa tries to protect, in search of humans to frighten. She is indeed feared by the locals as people around her become blinded by darkness. \nlike bustle environments, she often sings popular songs\n[★]Vocal Sign「Hooting in the Night」\n[★★★] Vocal Sign「Howl of the Horned Owl」" - "DOTA_Tooltip_ability_item_0018_Lore" "Looking a stall with red lanterns in the Roads at night, feeling strange and walking there, you will find out it's Night-Birds' stall." - "DOTA_Tooltip_ability_item_0019" "[SR]Kirisame Marisa" - "DOTA_Tooltip_ability_item_0019_Description" "Marisa Kirisame is an ordinary human magician who specializes in light and heat magic and currently resides in the Forest of Magic.\nRunning a 'Kirisame Magic Shop',that place is not only her work place but also her home.\nHer appearance looks like a typical western witch, and she often rides a broom to fly.\n[★]Love Sign「Master Spark」\n[★]Magic Sign「Stardust Reverie」\n[★★★★]Magiccannon「Final Spark」" - "DOTA_Tooltip_ability_item_0019_Lore" "I am a passing magician! Da☆Ze" - "DOTA_Tooltip_ability_item_0020" "[SR]Hinanawi Tenshi" - "DOTA_Tooltip_ability_item_0020_Description" "The celestial who lives in the heaven,the 'Eldest Daughter' of the Hinanawi clan.\nShe can suppress and trigger the earthquake, and can manipulate the keystones and use Sword Of Hisou.\n[★]Heaven Sign「Sword of Divine Justice」\n[★]Non-Perception「Sword of Neither Perception nor Non-Perception」\n[★★★★]Earth Sign「Sword of Unletting Soil」" - "DOTA_Tooltip_ability_item_0020_Lore" "Celestials is just a kind of nonentity that occationally comes to the earth to give advice. Tell the truth, They are all some fantastic advice as for me." - "DOTA_Tooltip_ability_item_0021" "[SR]Patchouli Knowledge" - "DOTA_Tooltip_ability_item_0021_Description" "Patchouli is the witch and resident of the Scarlet Devil Mansion\nShe's friends with the mistress,Remilia,is an about 100-year-old witch.\nShe likes reading, and can manipulate fire,water,wood,metal,earth,sun,and moon. \nShe often stays in the library,has hard asthma,anemia,cause the body is weak, she is weak in hand-to-hand combat.\n[★]Fire Water Wood Metal Earth Sign「Philosopher's Stone」\n[★]「Philosopher's Stone」\n[★★★] Moon Sign「Silent Selene」" - "DOTA_Tooltip_ability_item_0021_Lore" "Everytime she carries books, and think books are apart of herself." - "DOTA_Tooltip_ability_item_0022" "[SR]Sakuya Izayoi" - "DOTA_Tooltip_ability_item_0023" "[SR]Reisen Udongein Inaba" - "DOTA_Tooltip_ability_item_0023_Description" "Reisen Udongein Inaba is a rabbit youkai that has a much different temperament from other fairies.\nit is said keep looking her red eyes will make people mad, and her voice,can't be heard even you want to, conversely sometimes in the far place you can hear it is talking beside your ears.\nDue to this makes people mad,hardly ever can talk to her.\n[★]Weak Heart 「Demotivation」\n[★]Illusion Rabbit 「Parallel Cross」\n[★★★★]「Lunatic Red Eyes」" - "DOTA_Tooltip_ability_item_0023_Lore" "Reisen" - "DOTA_Tooltip_ability_item_0024" "[SR]Saigyouji Yuyuko" - "DOTA_Tooltip_ability_item_0024_Description" "Mistress of Saigyouji family,1000 years ago this ghost girl had been living in Hakugyokurou in the Netherworld.\nShe has ability to command ghosts, so she was appointed to the manager of ghosts in the Netherworld by Enma,and can live in the Netherworld forever.\n[★]Deadly Butterfly「Eternal Sleep in Dreamland」\n[★]Deadly Dance「Law of Mortality」\n[★★★★]Death Sign「Life of Drunk, Dream of Death」" - "DOTA_Tooltip_ability_item_0024_Lore" "Sparrows have too much tiny bone, I really don't like them." - "DOTA_Tooltip_ability_item_0025_Lore" "Guangzhou people shoot fairies is none of my business." - "DOTA_Tooltip_ability_item_0025" "[SR]Konpaku Youmu" - "DOTA_Tooltip_ability_item_0025_Description" "Youmu is the second generation of the desire of the Saiyouji family. The former generation of the desire, Youmu's grandfather - Konpaku Youki, after he had been 300 years desire, one day he suddenly understand something, so he give this job to Youmu, when she was just a young girl, then he lived with himself alone.\nYoumu is different from her pure-ghost master,Saigyouji Yuyuko, she is the 'half-human half-phantom '. The huge ghost beside her is active by her thought, that is a part of her body.\n[★]Sword Skill「Cherry Blossom Flashing」\n[★]Konpaku「Dharma of Gumonji Wisdom of the Living and Dead」\n[★★★★]Six Realms Sword「A Single Thought and the Infinite Kalpas」" - "DOTA_Tooltip_ability_item_0026" "[SR]Kaenbyou Rin" - "DOTA_Tooltip_ability_item_0026_Description" "living in the Old Hell, one of the fairies which are hated, is called 'Cart'. appearing in funerals and carrying-away corpses,this ominous behaviour will enrage people who are in sadness.So people hate this youkaies.\nis Satori Komeiji's pet, due to it's silver tongue and have the ability to have conversations with corpses and souls,it manages the Hell of Blazing Fires's ghosts.\n[★]Youkai「Blazing Wheel」\n[★★★]「Rekindling of Dead Ashes」" - "DOTA_Tooltip_ability_item_0026_Lore" "That human is surprisingly strong, reputedly it is called the professor of defeating fairies\nIf that human exactly has some power, perhaps he can give that pretentious Okuu a hard blow.\nNot sure, she thought." - "DOTA_Tooltip_ability_item_0027" "[SR]Reiuji Utsuho" - "DOTA_Tooltip_ability_item_0027_Description" "This crow has special posture\nThe left leg is\'the leg of decomposition'\,the right leg is'\the leg of fusion\',otherwise she also has the right arm's \'third leg\'' for controling rod and fuel, she use these three legs to manipulate ultimate energy. rod\nOkuu's mission is guarding the Hell of Blazing Fires' remain to ensure it would not be out of control.\nThe deity-Yatagarasu lives in her body. Yatagarasu has ultimate power,that is the power of creating the nuclear-nuclear fusion.\n[★]Explosion Sign「Petit Flare」\n[★]Explosion Sign「Peta Flare」\n[★★★★]「Hell's Artificial Sun」" - "DOTA_Tooltip_ability_item_0027_Lore" "The envoy from the ground.\nWho is it on earth, and what's it target.\nThose questions are asked immediately in Okuu's little head." - "DOTA_Tooltip_ability_item_0028" "[SSR]Hakurei Reimu" - "DOTA_Tooltip_ability_item_0028_Description" "Shrine Maiden of the Hakurei Shrine,nominally the manager of Gensokyo\nShe has talented miraculous luck and sensitivity, and many abilities, but lack of practices.\nDon't believe 'efforts will pay off,' hate practicing, lack of sense of danger.\nEveryday she just cleans up the shrine and leisurely enjoys the tea.\nBut everytime something strange happens, she will hurry to investigate.\nShe will be serious when she is defeating the fairies, but she also treats youkais and humans in the same attitude when she doesn't need to work.\n[★]Spirit Sign「Fantasy Seal -Spread」\n[★]Bewitched Weapon「Merciless Purification Rod」\n[★★★]Holy Relic「Yin-Yang Demon God Orb」\n[★★★★★]「Fantasy Nature」" - "DOTA_Tooltip_ability_item_0029" "[SSR]Daiyousei" - "DOTA_Tooltip_ability_item_0029_Description" "Daiyousei is a greater fairy who lives around the Misty Lake near the Scarlet Devil Mansion. Like other fairies, she's cheerful and mischievous, simple and emotional.\n[★]「Kind Heart of Yousei」\n[★]「Yousei Garden」\n[★★★]「Revelution」\n[★★★★★]「Beyond The World」" - "DOTA_Tooltip_ability_item_0030" "[SSR]Remilia Scarlet" - "DOTA_Tooltip_ability_item_0031" "[SSR]Komeiji Koishi" - "DOTA_Tooltip_ability_ability_touhoutd_release_tower" "Recycle the Shikigami" - "DOTA_Tooltip_ability_ability_touhoutd_release_tower_Description" "Recycle a shikigami to transform it back to card" - "DOTA_Tooltip_ability_ability_touhoutd_blink" "Blink" - "DOTA_Tooltip_ability_ability_touhoutd_blink_Description" "Blink to the target point" - "DOTA_Tooltip_ability_ability_touhoutd_kill" "「Fantasy Seal」" - "DOTA_Tooltip_ability_ability_touhoutd_kill_Description" "Kill an enemy immediately" - "DOTA_Tooltip_ability_ability_touhoutd_buy_normal_card" "Use normal card" - "DOTA_Tooltip_ability_ability_touhoutd_buy_normal_card_Description" "Use normal card by SHORTCUT" - "DOTA_Tooltip_ability_ability_touhoutd_buy_senior_card_Description" "Use senior card by SHORTCUT。" - "DOTA_Tooltip_ability_ability_touhoutd_buy_senior_card" "Use senior card by SHORTCUT" - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_normal_card" "Buy normal card" - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_normal_card_Description" "Buy items and drop them to Reimu's slots." - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_senior_card" "Buy senior card" - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_senior_card_Description" "Buy items and drop them to Reimu's slots." - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_1" "Buy senior nostrum Lv1" - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_1_Description" "Buy items and drop them to Reimu's slots." - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_2" "Buy senior nostrum Lv2" - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_2_Description" "Buy items and drop them to Reimu's slots." - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_3" "Buy senior nostrum Lv3" - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_3_Description" "Buy items and drop them to Reimu's slots." - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_4" "Buy senior nostrum Lv4" - "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_4_Description" "Buy items and drop them to Reimu's slots." - "DOTA_Tooltip_ability_ability_touhoutd_close_star" "Close/Open Star Display" - "DOTA_Tooltip_ability_ability_touhoutd_close_star_Description" "Close/Open Star Display.(After reconnected, you can click twice to look up)" - "DOTA_Tooltip_ability_ability_touhoutd_star_up" "Star-Up the card" - "DOTA_Tooltip_ability_ability_touhoutd_star_up_Description" "You can promote shikigami cards' star number which has reach max level by feeding shikigamies and cards'meterial heroes are carrying.\nPromote to ★★ needs 1 ★ max level material\nPromote to ★★★ needs 2 ★★ max level material.\nPromote to ★★★★ needs 3 ★★★ max level material.\nPromote to ★★★★★ needs 4 ★★★★ max level material." - "DOTA_Tooltip_ability_ability_touhoutd_exp_up" "Card feeding" - "DOTA_Tooltip_ability_ability_touhoutd_exp_up_Description" "Can promote cards' exp by feeding first cell's material of shikigami's equipment slot.\nThe same type cards feeding can promote special skills' level." - "DOTA_Tooltip_ability_thtd_lily_01" "Spring Sign「Spring Declaration」" - "DOTA_Tooltip_ability_thtd_lily_02" "Spring Sign「Surprise Spring」" - "DOTA_Tooltip_ability_thtd_lily_01_Description" "Lily White put Spring power into friendly units'bodies in the area,promote their exp\n\nPromotion Value:Star Parameters*POWER POINTs*6.5\n\nStar Parameters:1,1.8,2.4,3.2,4" - "DOTA_Tooltip_ability_thtd_lily_02_Description" "Lily White opens the barrier, units in the range of barrier's cause 125% damages to enemies." - "DOTA_Tooltip_ability_thtd_lily_02_duration" "DURATION:" - "DOTA_Tooltip_modifier_lily_outgoing_damage" "Spring Sign「Surprise Spring」" - "DOTA_Tooltip_modifier_lily_outgoing_damage_Description" "Being influenced by Spring Power, Promote 50% damages to enemies." - "DOTA_Tooltip_ability_thtd_nazrin_01" "Search Sign「Gold Detector」" - "DOTA_Tooltip_ability_thtd_nazrin_01_Description" "Every attack, Nazrin has posible to steal targets some money.\n\nSteal Chance:50%%\n\nAmount of Stealing:Star Parameter+POWER POINTs*0.02\n\nStar Parameter:2.4,8.8,21.6,43.2,170.4" - "DOTA_Tooltip_ability_thtd_minoriko_01" "Plenty Sign「Warm Color Harvest」" - "DOTA_Tooltip_ability_thtd_minoriko_01_Description" "Although Minoriko can't promote star levels by normal ways, she can promote by time.\n\nEvery(270/540/900/1260)seconds will promote a star level." - "DOTA_Tooltip_ability_thtd_minoriko_02" "Bumper Crop「Promise of the Wheat God」" - "DOTA_Tooltip_ability_thtd_minoriko_02_Description" "exchange star levels of the target with Minoriko's star levels.(The maximum exchange of 3 times)" - "DOTA_Tooltip_ability_thtd_mugiyousei_01" "POISONED WEAPON" - "DOTA_Tooltip_ability_thtd_mugiyousei_01_Description" "Graveyard Fairies' attacks apply poison that deals damage over time." - "DOTA_Tooltip_ability_thtd_shanghainingyou_01" "CRITICAL STRIKE" - "DOTA_Tooltip_ability_thtd_shanghainingyou_01_Description" "Shanghai Dolls' attacks have a certain chance to critically strike." - "DOTA_Tooltip_ability_thtd_shanghainingyou_01_crit_chance" "CHANCE" - "DOTA_Tooltip_ability_thtd_shanghainingyou_01_crit_mult" "MULTIPLE" - "DOTA_Tooltip_ability_thtd_hourainingyou_01" "THUMP" - "DOTA_Tooltip_ability_thtd_hourainingyou_01_Description" "Hourai Dolls' attacks have a certain chance to deal additional damage and stun the target." - "DOTA_Tooltip_ability_thtd_hanadayousei_01" "MULTI-SHOT" - "DOTA_Tooltip_ability_thtd_hanadayousei_01_Description" "Flower Field Fairies can attack up to 3 units at the same time." - "DOTA_Tooltip_ability_thtd_cirno_01" "Frost Sign「Frost Columns」" - "DOTA_Tooltip_ability_thtd_cirno_01_Description" "Reduce enemies around Cirno 30% movement speed.\n\n[Combination promotion - Letty]\nMovement Speed reduction promote from 30% to 50%." - "DOTA_Tooltip_ability_thtd_cirno_01_move_slow" "MOVEMENT SPEED REDUCTION:" - "DOTA_Tooltip_modifier_cirno_01_slow_buff" "Frost Sign「Frost Columns」" - "DOTA_Tooltip_modifier_cirno_01_slow_buff_Description" "be influenced by Cirno, this units' Movement Speed reduces." - "DOTA_Tooltip_ability_thtd_cirno_02" "Freeze Sign「Perfect Freeze」" - "DOTA_Tooltip_ability_thtd_cirno_02_Description" "To the target and units around it cause 8 times damages, and has chance to freeze them.\n\n[Damage Multiplier ]DAMAGE:POWER POINTs * Star levels * 2 per time" - "DOTA_Tooltip_ability_thtd_cirno_02_stun_time" "Freeze Time:" - "DOTA_Tooltip_modifier_cirno_frozen_unit" "Freeze Sign「Perfect Freeze」" - "DOTA_Tooltip_modifier_cirno_frozen_unit_Description" "be influenced by Cirno,this unit is being freezed." - "DOTA_Tooltip_ability_thtd_cirno_03" "Blowing Ice「Ice Tornado」" - "DOTA_Tooltip_ability_thtd_cirno_03_Description" "Cirno's every attack will cause damage to the target and units around it.\n\n[Damage Multiplier]Damage:POWER POINTs * Star levels" - "DOTA_Tooltip_ability_thtd_cirno_04" "Ice Sign「Ultimate Blizzard」" - "DOTA_Tooltip_ability_thtd_cirno_04_Description" "Cirno every 5 times attack will cause Damage Over Time to target area.\n\n[Damage Multiplier]Damage:POWER POINTs * Star levels * 4 per second" - "DOTA_Tooltip_ability_thtd_letty_01" "Winter Sign「Flower Wither Away」" - "DOTA_Tooltip_ability_thtd_letty_01_Description" "Letty summon 2 blizzards, cause damage to units in the target area.\n\n[Damage Multiplier]Damage:POWER POINT*1/per blizzard\n\n[Combination Promotion - Cirno]\nThe number of blizzards promote at least 3" - "DOTA_Tooltip_ability_thtd_letty_02" "Cold Sign「Lingering Cold」" - "DOTA_Tooltip_ability_thtd_letty_02_Description" "Reduce units around Letty's Magic Resistance." - "DOTA_Tooltip_ability_thtd_letty_02_magic_armor" "Resistance Reduction:" - "DOTA_Tooltip_modifier_letty_02_magic_armor_buff" "Cold Sign「Lingering Cold」" - "DOTA_Tooltip_modifier_letty_02_magic_armor_buff_Description" "Be influenced by Letty, this unit's Magic Resistance reduces" - "DOTA_Tooltip_ability_thtd_kogasa_01" "Halo「Karakasa Surprising Flash」" - "DOTA_Tooltip_ability_thtd_kogasa_01_Description" "Kogasa shocks the target and units around it, cause damage to them and reduce the movement speed.\n\n[Damage Multiplier]Initial Damage:60/120/240/480/960\n\n[Damage Multiplier]Damage Over Time:15/30/60/120/240 per second" - "DOTA_Tooltip_ability_thtd_kogasa_01_debuff_time" "Debuff DURATION:" - "DOTA_Tooltip_ability_thtd_kogasa_01_move_slow" "Movement Speed Reduction:" - "DOTA_Tooltip_modifier_kogasa_debuff" "Halo「Karakasa Surprising Flash」" - "DOTA_Tooltip_modifier_kogasa_debuff_Description" "Be shocked by Karakasa,the unit reduces the Movement Speed and causes Damage Over Time." - "DOTA_Tooltip_ability_thtd_kogasa_02" "Rain Sign「A Rainy Night's Ghost Story」" - "DOTA_Tooltip_ability_thtd_kogasa_02_Description" "Reduce units around Kogasa's Armor." - "DOTA_Tooltip_ability_thtd_kogasa_02_armor" "ARMOR REDUCTION:" - "DOTA_Tooltip_modifier_kogasa_02_armor_buff" "Rain Sign「A Rainy Night's Ghost Story」" - "DOTA_Tooltip_modifier_kogasa_02_armor_buff_Description" "Be influenced by Karakasa, This unit's armors reduce." - "DOTA_Tooltip_ability_thtd_lyrica_01" "Nether Keys「Fazioli Nether Performance」" - "DOTA_Tooltip_ability_thtd_lyrica_01_Description" "Lyrica causes damage to the target and units around it\n\n[Damage Multiplier]Damage:POWER POINTs*Star levels\n\n[Combination Promotion - lunasa - Merlin]\nPromote 50% damages." - "DOTA_Tooltip_ability_thtd_lyrica_02" "Key Spirit「B?sendorfer Divine Performance」" - "DOTA_Tooltip_ability_thtd_lyrica_02_Description" "When Lyrica's skill causes damages, Each note in the target will cause each extra damages. \n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*0.5\n\n[Combination Promotion - Lunasa - Merlin]\nPromote 50% damages." - "DOTA_Tooltip_ability_thtd_lunasa_01" "String Performance「Guarneri del Gesù」" - "DOTA_Tooltip_ability_thtd_lunasa_01_Description" "Lunasa causes Damage Over Time and reduces Movement Speed to the target and units around it,and attaching a [ensemble]note\n\n[Damage Multiplier]Damage:40/100/200/400/800 per second" - "DOTA_Tooltip_modifier_lunasa_01_debuff" "Note - [Sadness]" - "DOTA_Tooltip_modifier_lunasa_01_debuff_Description" "The music of violin makes people sad." - "DOTA_Tooltip_ability_thtd_lunasa_02" "Fake Strings「Pseudo Stradivarius」" - "DOTA_Tooltip_ability_thtd_lunasa_02_Description" "Lunatha's normal attack will cause damage to the target, and attaching a [ensemble]note.\n\n[Damage Multiplier]Damage:200/400/800 per second" - "DOTA_Tooltip_ability_thtd_merlin_01" "Trumpet Spirit「Hino Phantasm」" - "DOTA_Tooltip_ability_thtd_merlin_01_Description" "Merlin plays trumpet to cause damage and reduce the Movement Speed to units in the range, and attaching a [maniac]note\n\n[Damage Multiplier]Damage: 40/100/200/400/800 Per second" - "DOTA_Tooltip_ability_thtd_merlin_01_move_slow" "Movement Speed Reduction:" - "DOTA_Tooltip_modifier_merlin_01_debuff" "Trumpet Spirit「Hino Phantasm」" - "DOTA_Tooltip_modifier_merlin_01_debuff_Description" "Passionate Trumpet music makes people mad." - "DOTA_Tooltip_ability_thtd_merlin_02" "Trumpet Spirit「Ghost Clifford」" - "DOTA_Tooltip_ability_thtd_merlin_02_Description" "Merlin's normal attack will cause damages to the target, and attaching a [maniac] note\n\n[Damage Multiplier]Damage:200/400/800 Per second" - "DOTA_Tooltip_ability_thtd_rumia_01" "「Is~It~Like~That!」" - "DOTA_Tooltip_ability_thtd_rumia_01_Description" "Rumia's attack attach extra damage, every unit Rumia kills will promote herself's POWER POINTs.\n\n[Damage Multiplier]Max POWER POINT Promotion:50/100/200/400/600" - "DOTA_Tooltip_ability_thtd_rumia_01_max_bonus" "Max POWER POINTs:" - "DOTA_Tooltip_ability_thtd_rumia_02" "Darkness Sign「Demarcation」" - "DOTA_Tooltip_ability_thtd_rumia_02_Description" "Rumia's every 10 normal attacks will shoot arc Danmakus, units which touch Danmakus will be hurt.\n\n[Damage Multiplier]Damage: POWER POINTs*1/every barrage" - "DOTA_Tooltip_ability_thtd_satori_01" "Recollection「Terrible Souvenir」" - "DOTA_Tooltip_ability_thtd_satori_01_Description" "Reducing units around Satori's Movement Speed, during 3s.\n\n[Damage Multiplier]Movement Speed Reduction:35/40/45/50/55%%" - "DOTA_Tooltip_ability_thtd_satori_01_move_slow" "Movement Speed Reduction:" - "DOTA_Tooltip_modifier_satori_01_debuff" "Recollection「Terrible Souvenir」" - "DOTA_Tooltip_modifier_satori_01_debuff_Description" "Be influenced by Satori, this unit's Movement Speed reduces." - "DOTA_Tooltip_ability_thtd_satori_02_Description" "Units enter terrible souvenir' HP will be recorded, they will get damage which base on the damage in these 3s again after 3s. \n\n[Damage Multiplier]Damage:40%%/100%%\n\n[Combination Promotion - Komeiji Koishi]\nUnits in terrible Hypnotism area will get 120% physical damages" - "DOTA_Tooltip_ability_thtd_satori_02" "Recollection「Terrifying Hypnotism」" - "DOTA_Tooltip_ability_thtd_iku_01" "Thunder Sign「Lightning Fish」" - "DOTA_Tooltip_ability_thtd_iku_01_Description" "Iku's every 8 attacks will cause extra damages and Paralysis 0.5s to the target and units in that area around the target.\n\n[Damage Multiplier]Damage:50 * 2^star-levels\n\n[Combination Promotion - Tenshi Hinanawi]\nParalysis time will promote 1s." - "DOTA_Tooltip_modifier_iku_01_debuff" "Thunder Sign「Lightning Fish」" - "DOTA_Tooltip_modifier_iku_01_debuff_Description" "be attacked by Iku Nagae, this unit paralysises." - "DOTA_Tooltip_ability_thtd_iku_02" "Fish Sign「Dragonfish Drill」" - "DOTA_Tooltip_ability_thtd_iku_02_Description" "Iku uses Drill to cause Damage Over Time to front area.\n\n[Damage Multiplier]Damage: Star-levels * POWER POINTs * 3 per second" - "DOTA_Tooltip_ability_thtd_mystia_01" "Vocal Sign「Hooting in the Night」" - "DOTA_Tooltip_ability_thtd_mystia_01_Description" "Promote surrounding friendly units' physical strike ability.\n\n[Damage Multiplier]Strike Values:10/20/30/40/60" - "DOTA_Tooltip_ability_thtd_mystia_01_penetration" "Strike Value" - "DOTA_Tooltip_modifier_mystia_01_buff" "Vocal Sign「Hooting in the Night」" - "DOTA_Tooltip_modifier_mystia_01_buff_Description" "Be influenced by night sparrow's voice, this units' physical strike promotes." - "DOTA_Tooltip_ability_thtd_mystia_02" "Vocal Sign「Howl of the Horned Owl」" - "DOTA_Tooltip_ability_thtd_mystia_02_Description" "Promote surrounding units' normal attack damages.\n\n[Damage Multiplier]Normal attack damage promotion:50/100/200" - "DOTA_Tooltip_ability_thtd_mystia_02_critdamage" "Normal attack damage Promotion:" - "DOTA_Tooltip_modifier_mystia_02_buff" "Vocal Sign「Howl of the Horned Owl」" - "DOTA_Tooltip_modifier_mystia_02_buff_Description" "Be influenced by night sparrow's voice, this units' attack damage promotes." - "DOTA_Tooltip_ability_thtd_marisa_01" "Love Sign「Master Spark」" - "DOTA_Tooltip_ability_thtd_marisa_01_Description" "Marisa shoots Magicannon to front, cause large Damage Over Time to enemies on straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star levels*3.5 per second\n\n[Combination Promotion - Hakurei Reimu]\nDuration of Magic Connon promotes to 7s." - "DOTA_Tooltip_ability_thtd_marisa_01_damage_width" "WIDTH OF MAGICANNON:" - "DOTA_Tooltip_ability_thtd_marisa_01_damage_lenth" "LENGTH OF MAGICANNON:" - "DOTA_Tooltip_ability_thtd_marisa_01_channel_time" "DURATION:" - "DOTA_Tooltip_modifier_thdots_marisa01_think_interval" "Magicannon「Final Spark」" - "DOTA_Tooltip_modifier_thdots_marisa01_think_interval_Description" "Marisa is shooting Magicannon." - "DOTA_Tooltip_ability_thtd_marisa_03_Description" "Marisa shoots magicannon to front, cause large Damage Over Time to enemies on straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star level*7.0 per second\n\n[Combination Promotion - Hakurei Reimu]\nDuration of Magic Connon promotes to 7s." - "DOTA_Tooltip_ability_thtd_marisa_03" "Magicannon「Final Spark」" - "DOTA_Tooltip_ability_thtd_marisa_03_damage_width" "WIDTH OF MAGICANNON:" - "DOTA_Tooltip_ability_thtd_marisa_03_damage_lenth" "LENGTH OF MAGICANNON:" - "DOTA_Tooltip_ability_thtd_marisa_03_channel_time" "DURATION:" - "DOTA_Tooltip_ability_thtd_marisa_02" "Magic Sign「Stardust Reverie」" - "DOTA_Tooltip_ability_thtd_marisa_02_Description" "When Marisa attacks or use skills,Starlike Danmakus will be shooted, enemies are killed by Danmakus will make Marisa's MP recover." - "DOTA_Tooltip_ability_thtd_tenshi_01" "Heaven Sign「Sword of Divine Justice」" - "DOTA_Tooltip_ability_thtd_tenshi_01_Description" "causing damage to a small range to the units in target area. \n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*1.5" - "DOTA_Tooltip_ability_thtd_tenshi_02" "Non-Perception「Sword of Neither Perception nor Non-Perception」" - "DOTA_Tooltip_ability_thtd_tenshi_02_Description" "Effect 1:\nTenshi's attack has chance to attach Quadruple Critical Strike.\nEffect 2:\nTenshi's attack will attach a small range cleave effect." - "DOTA_Tooltip_ability_thtd_tenshi_02_crit_mult" "CRITICAL DAMAGE:" - "DOTA_Tooltip_ability_thtd_tenshi_02_crit_chance" "CRITICAL CHANCE:" - "DOTA_Tooltip_modifier_thtd_tenshi_02_cleave" "Sword of Scarlet Perception[CLEAVE]" - "DOTA_Tooltip_modifier_thtd_tenshi_02_crit_chance" "Sword of Scarlet Perception[CRITICAL]" - "DOTA_Tooltip_ability_thtd_tenshi_03" "Earth Sign「Sword of Unletting Soil」" - "DOTA_Tooltip_ability_thtd_tenshi_03_Description" "Effect 1:Tenshi's EVERY 15 TIMES attack will shoot a STRAIGHT-LINE WAVE to the target,it will cause huge damages.\n\nEffect 2:Promote surrounding units 20% ATTACK SPEED.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*2.5\n\n[Combination Promotion - Iku Nagae]\nAttack times for triggering the wave REDUCE TO 8 TIMES." - "DOTA_Tooltip_ability_thtd_tenshi_03_attack_speed" "ATTACK SPEED Promotion" - "DOTA_Tooltip_modifier_tenshi_03_attack_speed_buff" "Earth Sign「Sword of Unletting Soil」" - "DOTA_Tooltip_modifier_tenshi_03_attack_speed_buff_Description" "Be influenced by Tenshi, this unit's ATTACK SPEED promotes" - "DOTA_Tooltip_ability_thtd_patchouli_01" "Fire Water Wood Metal Earth Sign「Philosopher's Stone」" - "DOTA_Tooltip_ability_thtd_patchouli_01_Description" "Patchouli can switch elements, use different kinds of magic:\n\nFire Sign「Agni Shine」\n\nCause large amount of damage to the target area.\n[Damage Multiplier]Damage:POWER POINTs*2^Star levels\n\nWater Sign「Bury In Lake」\n\nCause Damage Over Time to the target area, and if enemies' HP is less than 30% of the total HP, they will directly die.\n[Damage Multiplier]Damage:POWER POINTs*Star-levels per second\n\nMetal& Water Sign「Mercury poison」\n\nAttaching Posion to units in the target area, cause Damage Over Time and reduce Armors and resistance.\n[Damage Multiplier]Damage:POWER POINTs*Star-levels Per Second\n[Damage Multiplier]Resistance Reduction:10/20/30/40/60" - "DOTA_Tooltip_ability_thtd_patchouli_01_armor" "" - "DOTA_Tooltip_modifier_patchouli_01_mercury_poison_debuff" "Metal & Water Sign「Mercury poison」" - "DOTA_Tooltip_modifier_patchouli_01_mercury_poison_debuff_Description" "Be effected by Mercury poison, this unit is getting Damage Over Time and reducing the resistance." - "DOTA_Tooltip_ability_thtd_patchouli_02" "「Philosopher's Stone」" - "DOTA_Tooltip_ability_thtd_patchouli_02_Description" "Switch Philosopher's Stone's effects" - "DOTA_Tooltip_ability_thtd_patchouli_03" "Moon Sign「Silent Selene」" - "DOTA_Tooltip_ability_thtd_patchouli_03_Description" "Promote friendly units around Patchouli 30% Magic Damages." - "DOTA_Tooltip_modifier_patchouli_03_buff" "Moon Sign「Silent Selene」" - "DOTA_Tooltip_modifier_patchouli_03_buff_Description" "Be influenced by Patchouli, this unit's Magic Damage promotes." - "DOTA_Tooltip_ability_thtd_reisen_01" "Weak Heart「Demotivation」" - "DOTA_Tooltip_ability_thtd_reisen_01_Description" "Reisen's attack will knockback the target, this skill only can trigger one time to one target." - "DOTA_Tooltip_ability_thtd_reisen_02" "Illusion Rabbit「Parallel Cross」" - "DOTA_Tooltip_ability_thtd_reisen_02_Description" "Reisen's attack has chance to create an illusion, at most have 3 illusions.\n\n[Combination Promotion - Youmu Konpaku]\nThe max illusions promotes to 5 illusions." - "DOTA_Tooltip_ability_thtd_reisen_03" "「Lunatic Red Eyes」" - "DOTA_Tooltip_ability_thtd_reisen_03_Description" "Reisen causes damage and knockback units in the target area.\n\n[Damage Multiplier]Damage: POWER POINTs*5" - "DOTA_Tooltip_ability_thtd_yuyuko_01" "Deadly Butterfly「Eternal Sleep in Dreamland」" - "DOTA_Tooltip_ability_thtd_yuyuko_01_Description" "Yuyuko use light butterfly to track surrouding units and cause damages\n\n[Damage Multiplier]Damage:POWER POINTs*0.6" - "DOTA_Tooltip_ability_thtd_yuyuko_02" "Deadly Dance「Law of Mortality」" - "DOTA_Tooltip_ability_thtd_yuyuko_02_Description" "The Damage from Yuyuko has 5% chance to directly kill units (max damage: power * star * 100).\n\n[Combination Promotion - Youmu Konpaku]\nChance of directly killing promotes to 10%%." - "DOTA_Tooltip_ability_thtd_yuyuko_03" "Death Sign「Life of Drunk, Dream of Death」" - "DOTA_Tooltip_ability_thtd_yuyuko_03_Description" "Yuyuko opens barrier, if units in target area's HP less than 30%%, they will be DIRECTLY KILLED." - "DOTA_Tooltip_modifier_thdots_yuyuko04_think_interval" "Death Sign「Life of Drunk, Dream of Death」" - "DOTA_Tooltip_modifier_thdots_yuyuko04_think_interval_Description" "Yuyuko is opening the barrier." - "DOTA_Tooltip_ability_thtd_youmu_01" "Sword Skill「Cherry Blossom Flashing」" - "DOTA_Tooltip_ability_thtd_youmu_01_Description" "Youmu's every 8 times attack will shoot a Swordkee, cause damage to units on the straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*2\n\n[Combination Promotion - Yuyuko Saigyouji]\nATTACK SPEED promotes 50%%." - "DOTA_Tooltip_ability_thtd_youmu_02" "Konpaku「Dharma of Gumonji Wisdom of the Living and Dead」" - "DOTA_Tooltip_ability_thtd_youmu_02_Description" "When Youmu use Sword Skill「Cherry Blossom Flashing」or Six Realms Sword「A Single Thought and the Infinite Kalpas」,have 30% chance to summon half spirit to do an extra kill hit.\n\n[Combination Promotion - Reisen]\nChance to trigger promote to 70%%." - "DOTA_Tooltip_ability_thtd_youmu_03" "Six Realms Sword「A Single Thought and the Infinite Kalpas」" - "DOTA_Tooltip_ability_thtd_youmu_03_Description" "Effect 1:Youmu Konpaku's every attack will recover 1 MP.\n\nEffect 2:Youmu Konpaku waves her double swords to hit units in the target area continously.\n\n[Damage Multiplier]Damage:POWER POINTs*Sta-levels*5, total 10 hits" - "DOTA_Tooltip_ability_thtd_rin_01" "Youkai「Blazing Wheel」" - "DOTA_Tooltip_ability_thtd_rin_01_Description" "Rin creates a wheel to cause damage to the target and units behind it, and attaching a [inferno] effect.\n\n[Damage Multiplier]Damage:POWER POINTs\n\n[Combination Promotion - Reiuji Utsuho]\nPromote surrounding units 20%% physical damage." - "DOTA_Tooltip_modifier_utsuho_rin_buff" "「Blazing ground」" - "DOTA_Tooltip_modifier_utsuho_rin_buff_Description" "Be influenced by ground youseis, this unit's physical damage promotes." - "DOTA_Tooltip_modifier_rin_01_debuff" "Youkai「Blazing Wheel」" - "DOTA_Tooltip_modifier_rin_01_debuff_Description" "Bumped by the wheel, this unit is under the inferno effect." - "DOTA_Tooltip_ability_thtd_rin_02" "「Rekindling of Dead Ashes」" - "DOTA_Tooltip_ability_thtd_rin_02_Description" "If units attached [inferno] effect are killed, the surrounding units of the target will get HP-percent damage. \n\n[Damage Multiplier]Damage:4%%/6%%/15%%" - "DOTA_Tooltip_ability_thtd_utsuho_01_Description" "Utsuho's every attack will cause damage to the target and units around it.\n\n[Damage Multiplier]Damage: POWER POINTs*1\n\n[Combination Promotion - Rin Kaenbyou]\nPromote surrounding units 20% physical damage." - "DOTA_Tooltip_ability_thtd_utsuho_01" "Explosion Sign「Petit Flare」" - "DOTA_Tooltip_ability_thtd_utsuho_02" "Explosion Sign「Giga Flare」" - "DOTA_Tooltip_ability_thtd_utsuho_02_Description" "Utsuho's every 6 times attack will cause huge damage to the target and units around it.\n\n[Damage Multiplier]Damage:POWER POINTs * Star-levels" - "DOTA_Tooltip_ability_thtd_utsuho_03" "「Hell's Artificial Sun」" - "DOTA_Tooltip_ability_thtd_utsuho_03_Description" "Utsuho makes artificial sun to the target area, cause tractive effort to surrouding units, and cause damage to units in the area when the skill finishes.\n\n[Damage Multiplier]Damage:POWER POINTs * Star-levels * 24" - "DOTA_Tooltip_ability_thtd_reimu_01" "Spirit Sign「Fantasy Seal-Spread-」" - "DOTA_Tooltip_ability_thtd_reimu_01_Description" "Reimu's every 6 attacks will throw many spirit signs to the target.\n\n[Damage Multiplier]Damage:POWER POINTs*Star*2.0 Every Spirit Sign\n\n[Combination Promotion - Rumia]\nAttack times for triggering the wave REDUCE TO 3 TIMES." - "DOTA_Tooltip_ability_thtd_reimu_02" "Bewitched Weapon「Merciless Purification Rod」" - "DOTA_Tooltip_ability_thtd_reimu_02_Description" "Reimu's skill has 20% chance to cause double damage.\n\n[Combination Promotion - Marisa Kirisame]\nThe chance will promote to 50%." - "DOTA_Tooltip_ability_thtd_reimu_03" "Holy Relic「Yin-Yang Demon God Orb」" - "DOTA_Tooltip_ability_thtd_reimu_03_Description" "Reimu throw a huge Yin-Yang Orb.\n\nYin-Yang orb will cleave to smaller Yin-Yang orbs and reduce the damage when dropping the floor.\n\nUnits that are punched by Yin-Ynag orb will get damage and stun. \n\n[Damage Multiplier]Damage:POWER POINTs*Star*3 every time." - "DOTA_Tooltip_ability_thtd_reimu_04" "「Fantasy Nature」" - "DOTA_Tooltip_ability_thtd_reimu_04_Description" "Everytime Reimu trigger Bewitched Weapon「Merciless Purification Rod」's effect, a Yin-Yang orb will be counted.\n\nWhen 7 Yin-Yang orbs are triggered, Yin-Yang orbs will automatically track and attack around enemies, cause damage to units in the target area.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*5 every attack \n\n[Combination Promotion - Yukari]\n\The damage will promote to 150%." - "DOTA_Tooltip_ability_thtd_daiyousei_01" "「Kind Heart of Yousei」" - "DOTA_Tooltip_ability_thtd_daiyousei_01_Description" "Daiyousei manipulate yousei's power, promote target's level\n\n[Damage Multiplier]level Promotion:Star-levels*1" - "DOTA_Tooltip_ability_thtd_daiyousei_02" "「Yousei Garden」" - "DOTA_Tooltip_ability_thtd_daiyousei_02_Description" "Daiyousei manipulate yousei's power,Recovering surrounding units 10 MP." - "DOTA_Tooltip_ability_thtd_daiyousei_03" "「Revelution」" - "DOTA_Tooltip_ability_thtd_daiyousei_03_Description" "Daiyousei links with the target unit, transform its skill damage to magic damage, and promote its skill damage.\n\n[Damage Multiplier]Damage Promotion:30%%/40%%/60%%\n\n[Combination Promotion - Cirno]\nWhen linking with Cirno,The damage promotes to 45%%/60%%/90%%." - "DOTA_Tooltip_modifier_daiyousei_03" "「Revelution」" - "DOTA_Tooltip_modifier_daiyousei_03_Description" "Linking with Daiyousei, this unit's skill damage is transformed to magic damage, and promotes skill damage." - "DOTA_Tooltip_ability_thtd_daiyousei_04" "「Beyond The World」" - "DOTA_Tooltip_ability_thtd_daiyousei_04_Description" "Daiyousei can release Cirno's hiding power.(This Cirno must be ★★★★★, this skill only can use one time.)" - "DOTA_Tooltip_ability_ability_common_attack_speed_buff" "Special Skill - ATTACK SPEED Promotion" - "DOTA_Tooltip_ability_ability_common_attack_speed_buff_Description" "Promote this unit's ATTACK SPEED.\n\nThis skill can upgrade by CARD FEEDING." - "DOTA_Tooltip_ability_ability_common_attack_speed_buff_attack_speed" "ATTACK SPEED Promotion:" - "DOTA_Tooltip_ability_ability_common_power_buff_Description" "Promote this unit's POWER POINTs.\n\nThis skill can upgrade by CARD FEEDING.\n\n[Power Promotion]:20%%/40%%/60%%/80%%" - "DOTA_Tooltip_ability_ability_common_power_buff" "Special Skill - Power Promotion" - "DOTA_Tooltip_ability_ability_common_power_buff_power_tooltips" "POWER PROMOTION:" - "DOTA_Tooltip_ability_ability_common_mana_regen_buff" "Special Skill - MP Recovery Promotion" - "DOTA_Tooltip_ability_ability_common_mana_regen_buff_Description" "Promote this unit's MP RECOVERY SPEED.\n\nThis skill can upgrade by CARD FEEDING." - "DOTA_Tooltip_ability_ability_common_mana_regen_buff_mana_regen" "MP RECOVERY SPEED:" - "DOTA_Tooltip_common_thdots_base_power_buff" "POWER POINT" - "DOTA_Tooltip_common_thdots_base_power_buff_Description" "This unit's POWER POINTs, they can influence SKILL DAMAGES." - "DOTA_Tooltip_common_thdots_base_attack_buff" "ATTACK" - "DOTA_Tooltip_common_thdots_base_attack_buff_Description" "This unit's EXTRA ATTACK" - "DOTA_Tooltip_ability_ability_common_attack_buff" "CLOSE/OPEN AI" - "DOTA_Tooltip_ability_ability_common_attack_buff_Description" "Close/Open this unit's AI(When it is active,close this unit's AI)" - "minoriko_shop" "MinoriKonbini" - "lily" "Lily White" - "nazrin" "Nazrin" - "minoriko" "Aki Minoriko" - "mugiyousei" "Mugiyousei" - "shanghainingyou" "Shanghainingyou" - "hourainingyou" "Hourainingyou" - "hanadayousei" "Hanadayousei" - "maidyousei" "Maidyousei" - "cirno" "Cirno" - "letty" "Letty Whiterock" - "kogasa" "Tatara Kogasa" - "lyrica" "Lyrica Prismriver" - "lunasa" "Lunasa Prismriver" - "merlin" "Merlin Prismriver" - "rumia" "Rumia" - "satori" "Komeiji Satori" - "iku" "Nagae Iku" - "mystia" "Mystia Lorelei" - "marisa" "Kirisame Marisa" - "tenshi" "Hinanawi Tenshi" - "patchouli" "Patchouli Knowledge" - "reisen" "Reisen Udongein Inaba" - "yuyuko" "Saigyouji Yuyuko" - "youmu" "Konpaku Youmu" - "rin" "Kaenbyou Rin" - "utsuho" "Reiuji Utsuho" - "reimu" "Hakurei Reimu" - "daiyousei" "Daiyousei" - "DOTA_Tooltip_ability_item_0032" "[SSR]Flandre Scarlet" - "DOTA_Tooltip_ability_item_0032_Description" "Flandre has lived for at least 495 years.\n She is young sister of the host of Scarlet Devil Mansion.Like her sister-Remilia Scarlet, she also has a lolita body shape.\nShe seems to has abnormal mentality and thought, and she has uncontrollable collapsing force, so she is shutted in Scarlet Devil Mansion by her sister, not allowed to going out, even hardly ever join parties.\nHuman being is her dessert which she usually have, although she doesn't know at all.\nMany Spell cards of hers have [Taboo] meanings' words.\nThe crystal wings in her back are her biggest feature.\n\n[★][Taboo]Four of a Kind\n[★]Taboo「L?vatein」\n[★★★]Taboo「Kagome, Kagome」\n[★★★★★]Secret Barrage「And Then Will There Be None?」" - "DOTA_Tooltip_ability_item_0032_Lore" "Sometimes diving Scarlet Devil Mansion aboveboard, would meet young sister. it can pass save without stimulating her. It is rarely for me to dive in, wish not to meet her.(Kirisame Marisa)" - "DOTA_Tooltip_ability_item_0031_Description" "The young sister of Master of Palace of the Earth Spirits. The same as Satori, she also has mind-reading ability.\nBut she knows people hate this ability, so she closes her third-eye which can read minds, makes herself cannot read other people's minds.\nRelatively she gains the ability to manipulate the level of subconciousness, but actually her mind-reading ability isn't disappear.\nShe also often acts under subconciousness, makes people cannot find her out.\nShe normally rambles in the earth or Palace of the Earth Spirits.\nSometimes she will pop up on the earth, but due to her own abilities, even looking at her,while you have a distraction, you will forget her soon.\nActually there are also many youkaies in underworld feel self-condemned about Koishi's current situation.\n\n[★]「Rose Hell」\n[★]「Philosophy of a Hated Person」\n[★★★] Instinct「Release of the Id」\n[★★★★★]「Subterranean Rose」" - "DOTA_Tooltip_ability_item_0030_Description" "Remilia's a 500-year-old vampire lord, king of night.\nShe is the host of Scarlet Devil Mansion, the old sister of Flandre.\nShe has a lolita body shape,wearing a pink dress.\nAs the host of Scarlet Devil Mansion, she really pays attention to majesty and dignity like ordinary nobilities. \nBut her character is like her appearance, very wilful and childish.\nShe has「Ability of manipulating the fate」, seems to be able to make people which are affected have high chance to meet something precious.\n\n[★]「Red Magic」\n[★]Night Lord「Dracula Cradle」\n[★★★] Divine Spear「Spear the Gungnir」\n[★★★★★]Scarlet Sign「Red the Nightless Castle」" - "remilia" "Remilia Scarlet" - "flandre" "Flandre Scarlet" - "sakuya" "Izayoi Sakuya" - "koishi" "Komeiji Koishi" - "koakuma" "Koakuma" - "meirin" "Hong Meiling" - "yuuka" "Kazami Yuuka" - "DOTA_Tooltip_ability_item_0033" "[R]Little Devil" - "DOTA_Tooltip_ability_item_0033_Description" "The devil is a powerful race in Gensoukyou, like Magicians and vampires.\nBut relative to others, little devils are still weak.\n Similar with fairies, her life is light-hearted, her character is so naughty and usually looks really free\n\n[★]「Pyro Match」\n[★★★]「Taboo Grimoire Index」" - "DOTA_Tooltip_ability_item_0034" "[R]Hong Meiling" - "DOTA_Tooltip_ability_item_0034_Description" "Chinese youkai,the guard of Scarlet Devil Mansion.\n She is also a Kungfu master, as first line of defense to against intruders.\nThe appearance is just like human.\nHer ability is very comprehensive, without obvious weaknesses,causes when she compares with youkais that reinforced some skills specificly, she will be not outstanding enough.\nBut only of intruding rudely,she is so kind to human and hardly ever attack human.\nDuring she is doing the guard, she also managing the garden of Scarlet Devil Mansion, being the gardener of Scarlet Devil Mansion.\n\n[★]Flowery Sign「Colorful Light Lotus Flower Palm」\n[★★★]Three Blasts「Colorful Ultimate Mountain Breaker」" - "DOTA_Tooltip_ability_item_0034_Lore" "「A...abasolutely don't laze any more.」" - "DOTA_Tooltip_ability_item_0033_Lore" "Living in Scarlet Devil Mansion at ordinary time, also not be allocated some work, are a group of free characters." - "DOTA_Tooltip_ability_item_0035" "[SSR]Kazami Yuuka" - "DOTA_Tooltip_ability_item_0035_Description" "The youkai lives in Gensokyo. Has ability to control flowers.\nReally like flowers open seasonally, Spring flowers on Spring,\nSummer flowers on Summer,Autumn flowers on Autumn,\n and there are still a few Winter flowers on Winter\nas having flowers open in all year to the goal to work hard.\nLiving around flowers in all year, if human or youkai intrude to bother her, she will use her powerful power to kill them without any explaining.\nAs a flower youkai, she is more like the incarnation of nature. Differ from fairies, She is much more dangerous than all youkaies that had been introduced until now.\nAt ordinary time she lives in the place surrounding by flowers, looks like a kind man but in fact she is no mercy to others.\n\n[★]Flower Sign「Blossoming of Gensokyo」\n[★]「Fantastic Spring Flowers」\n[★★★]Fantasy「The Beauties of Nature」\n[★★★★★]Extremity「Double Spark」" - "DOTA_Tooltip_ability_thtd_remilia_01" "「Red Magic」" - "DOTA_Tooltip_ability_thtd_remilia_01_Description" "Remilia causes one time of damage to units in target areas.\n\n[Damage Multiplier]DAMAGE:POWER POINT*STAR-LEVEL*1" - "DOTA_Tooltip_ability_thtd_remilia_02" "Night Lord「Dracula Cradle」" - "DOTA_Tooltip_ability_thtd_remilia_02_Description" "When Remilia's skills cause damage, she will absorb targets'power,promote herself 1%% magic damage.(max to promote 50%%)\n\n[COOPERATION PROMOTION -Flandre]\n\nPROMOTE DAMAGES BECOME TO 2%%." - "DOTA_Tooltip_ability_thtd_remilia_03" "Divine Spear「Spear the Gungnir」" - "DOTA_Tooltip_ability_thtd_remilia_03_Description" "Remilia flings out the divine spear, causes damage to enemies in the straight line.\n\n[Damage Multiplier]DAMAGE:POWER POINTS*STAR LEVEL*3" - "DOTA_Tooltip_ability_thtd_remilia_04_Description" "While the divine spear pierces targets, there is 5%% CHANCE to cause targets attaching a [Fate]Sign.\n\nMake targets' HP REDUCE 5%%, and REDUCING 1000 PHYSICAL RESISTANCES AND MAGIC RESISTANCES.\n\nAfter targets dead,it will perform[Nightless Castle] in dead place,causes damage over time to units around the target. \n\n[Relative to Star Level]Nightless Castle DAMAGE:POWER POINTS*STAR LEVEL*7 PER SECOND\n\n[COOPERATION PROMOTION - Sakuya Izayoi]\n\nACTIVATION CHANCE BECOME TO 10%%." - "DOTA_Tooltip_ability_thtd_remilia_04" "Scarlet Sign「Red the Nightless Castle」" - "DOTA_Tooltip_ability_thtd_flandre_01" "Taboo「Four of a Kind」" - "DOTA_Tooltip_ability_thtd_flandre_01_Description" "Flandre creates 3 replications, WHEN FLANDRE CAUSES SKILL DAMAGES, REPLICATIONS WILL ALSO CAUSE DAMAGES." - "DOTA_Tooltip_ability_thtd_flandre_02" "Taboo「L?vatein」" - "DOTA_Tooltip_ability_thtd_flandre_02_Description" "WHEN FLANDRE IS DOING NORMAL ATTACKS, THEY WILL CAUSE EXTRA DAMAGES TP TARGETS, AND ABSORB POWER TO PROMOTE HERSELF 1%% PHYSICAL DAMAGES.(MAX TO PROMOTE 50%%)\n\nIF FLANDRE'S SKILL DAMAGES KILL THE TARGET, THE OVERFLOW DAMAGES WILL TRANSFER TO SURROUNDDING UNITS.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL/4\n\n[COOPERATION PROMOTION - Remilia Scarlet]\n\nPROMOTE DAMAGE BECOME TO 2%%." - "DOTA_Tooltip_ability_thtd_flandre_03" "Taboo「Kagome, Kagome」" - "DOTA_Tooltip_ability_thtd_flandre_03_Description" "When Flandre causes damage to targets, TARGETS' LOWER HP WILL CAUSE HIGHER DAMAGES. h\n\n TARGETS REDUCE EACH 1%% HP, THE DAMAGE WILL PROMOTE 1%%." - "DOTA_Tooltip_ability_thtd_flandre_04" "Secret Barrage「And Then Will There Be None?」" - "DOTA_Tooltip_ability_thtd_flandre_04_Description" "Flandre catches targets' weakness, CAUSES HUGE SINGLE DAMAGE TO THE TARGET.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*24/4" - "DOTA_Tooltip_modifier_flandre_02_buff" "Taboo「L?vatein」" - "DOTA_Tooltip_modifier_flandre_02_buff_Description" "Flandre holds Sword of Fire[L?vatein]." - "DOTA_Tooltip_ability_item_0022_Description" "The only human in Scarlet Devil Mansion,the maid manager there. \nHaving the highest level of ability relative to human: ability of manipulating time.\nAt ordinary time she serves Remilia and manages daily routines in Scarlet Devil Mansion.\nBut due to work is so heavy, she often needs to use ability to help her complete work.\nHaving absolute loyalty to Madam, but sometimes her thinking ways seem to a little be natural dullness.\nbeing able to play magic show, using throwing knives to be danmuku, and her knife-throwing skill is excellent.\nThe actual spokesperson in Scarlet Devil Mansion.\n\n[★]Buriallusion「Phantom Killer in Night Mist」\n[★★★]Time Sign「Sakuya's Special Stopwatch」\n[★★★★]Time Sign「Private Square」" - "DOTA_Tooltip_ability_item_0022_Lore" "「Thd World!」" - "DOTA_Tooltip_ability_ability_dummy_unit" "" - "DOTA_Tooltip_ability_thtd_sakuya_01_Description" "Sakuya throws a row of throwing knives, causes damage to enemies in the sector areas.\n\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1 /EACH KNIFE" - "DOTA_Tooltip_ability_thtd_sakuya_01" "Buriallusion「Phantom Killer in Night Mist」" - "DOTA_Tooltip_ability_thtd_sakuya_02" "Time Sign「Sakuya's Special Stopwatch」" - "DOTA_Tooltip_ability_thtd_sakuya_02_Description" "REFRESH A UNIT'S TIME, REGEN ITS SKILL'S FREEZING TIME, AND REGEN ITS MP IS USED(NOT USEFUL TO SOME SKILLS).\n\nA UNIT ONLY CAN HAVE ONE REFRESH IN 15S.\n\n[COOPERATION PROMOTION - Remilia Scarlet]\n\nWHEN REFRESHING REMILIA'S TIME, THIS SKILL'S FREEZING TIME REDUCE TO A HALF, AND REFRESHING TIME ALSO REDUCE TO A HALF." - "DOTA_Tooltip_modifier_sakuya_02_buff" "Time Sign「Sakuya's Special Stopwatch」" - "DOTA_Tooltip_modifier_sakuya_02_buff_Description" "THIS UNIT HAS GOT REFRESH EFFECT." - "DOTA_Tooltip_ability_thtd_sakuya_03" "Time Sign「Private Square」" - "DOTA_Tooltip_ability_thtd_sakuya_03_Description" "Sakuya enter private time, open a forbidden barrier, ALL ENEMIES STOP THEIR TIME IN THIS BARRIER, DURING 2 SECONDS.\n\nDURING THIS TIME SAKUYA'S Buriallusion「Phantom Killer in Night Mist」WILL NOT EXPEND MP, BUT DAMAGE REDUCE 75%%.\n\n[COOPERATION PROMOTION - Hong Meiling]\nDAMAGE REDUCTION REDUCES TO 50%%." - "DOTA_Tooltip_modifier_sakuya_03_time_pause_debuff" "Time Sign「Private Square」" - "DOTA_Tooltip_modifier_sakuya_03_time_pause_debuff_Description" "THIS UNIT'S TIME IS STOPPED BY SAKUYA." - "DOTA_Tooltip_ability_thtd_koishi_01_Description" "Koishi Komeiji'S ATTACK WILL ATTACK ALL UNITS IN ATTACK RANGES IN SAME TIME.\n\nAND HAS 30% CHANCE TO ATTACH EXTRA DAMAGES.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*1" - "DOTA_Tooltip_ability_thtd_koishi_01" "「Rose Hell」" - "DOTA_Tooltip_ability_thtd_koishi_02" "「Philosophy of a Hated Person」" - "DOTA_Tooltip_ability_thtd_koishi_02_Description" "Koishi Komeiji's EACH ATTACK WILL PROMOTE 5% ATTACK SPEED, MAX TO STACK 10 BUFFS." - "DOTA_Tooltip_modifier_koishi_02_attack_speed" "「Philosophy of a Hated Person」" - "DOTA_Tooltip_modifier_koishi_02_attack_speed_Description" "Koishi Komeiji's attack speed promotes." - "DOTA_Tooltip_ability_thtd_koishi_03" "Instinct「Release of the Id」" - "DOTA_Tooltip_ability_thtd_koishi_03_Description" "Koishi Komeiji PROMOTES TARGET UNITS' POWER POINTS. DURING 10 SECONDS.\n\n[RELATIVE TO STAR LEVEL]POWER PROMOTION:200/400/1000\n\n[COOPERATION PROMOTION - Koishi Komeiji]\n\nDURATION PROMOTES TO 20 SECONDS." - "DOTA_Tooltip_ability_thtd_koishi_04" "「Subterranean Rose」" - "DOTA_Tooltip_ability_thtd_koishi_04_Description" "Koishi Komeiji enter mental closing status, PROMOTE HER OWN POWER POINTS HUGELY, AND MAKES ATTACK STYLE TO BE MELEE-ATTACK. \n\nIN THE DURATION,「Philosophy of a Hated Person」BUFF CAN STACK MAX TO 20." - "DOTA_Tooltip_ability_thtd_koakuma_01" "「Pyro Match」" - "DOTA_Tooltip_ability_thtd_koakuma_01_Description" "Little devil throws a fire ball to the target, THE FIRE BALL WILL BOUNCE IN THE TARGET AND ITS AROUND UNITS, MAX TO BOUNCE 25 TIMES.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Patchouli Knowledge]\n\nFIRE BALLS GET EXTRA 35%% RANGE DAMAGES." - "DOTA_Tooltip_ability_thtd_koakuma_02" "「Taboo Grimoire Index」" - "DOTA_Tooltip_ability_thtd_koakuma_02_Description" "Little devil promotes her surrounding units' MAGEC PENETRATION.\n\n[RELATIVE TO STAR LEVEL]PENETRATION PROMOTION:10/20/40" - "DOTA_Tooltip_modifier_koakuma_02_buff" "「Taboo Grimoire Index」" - "DOTA_Tooltip_modifier_koakuma_02_buff_Description" "Influencing by little devil, this unit's magic penetration has been promoted." - "DOTA_Tooltip_ability_thtd_meirin_01" "Flowery Sign「Colorful Light Lotus Flower Palm」" - "DOTA_Tooltip_ability_thtd_meirin_01_Description" "Hong Meiling doesn't have normal attack way, but if there are units go through her, she will do continous attack to her front side.\n\nFirst Trick:Rainbow Sign「Intense Rainbow Fist」\nCausing (power points *1) DAMAGES TO THE TARGETS IN FRONT STRAIGHT-LINE AREAS.\nSecond Trick:Chi Sign「Earth Dragon Sky Dragon Kick」\nCausing (POWER POINTS*1) DAMAGES TO UNITS IN FRONT SECTOR AREAS.\nThird Trick:Flower Sign「Gorgeous Sweet Flower」\nCausing (POWER POINTS*STAR LEVEL*1) DAMAGES TO UNITS IN FRONT CIRCLE AREAS, AND REDUCING MOVEMENT SPEED." - "DOTA_Tooltip_modifier_meirin_01_pause" "Flowery Sign「Colorful Light Lotus Flower Palm」" - "DOTA_Tooltip_modifier_meirin_01_slow_buff" "Flowery Sign「Colorful Light Lotus Flower Palm」" - "DOTA_Tooltip_modifier_meirin_01_pause_Description" "Meiling is releasing Colorful Light Lotus Flower Palm." - "DOTA_Tooltip_modifier_meirin_01_slow_buff_Description" "Affecting by Colorful Light Lotus Flower Palm, this unit's movement speed is reduced." - "DOTA_Tooltip_ability_thtd_meirin_02" "Three Blasts「Colorful Ultimate Mountain Breaker」" - "DOTA_Tooltip_ability_thtd_meirin_02_Description" "After Hong Meiling release 「Colorful Light Lotus Flower Palm」, HAVE 50% CHANCE TO RELEASE ADVANCED 4 KUNGFU TRICKS.\n\nFourth Trick[★★★Unlock]:Chi Sign「Fierce Tiger Energy Release」\nCause (POWER POINTS*2) DAMAGE TO UNITS IN FRONT SECTOR AREAS.\nFifth Trick[★★★Unlock]:Flowery Sign「Mountain Breaker」\nCause (POWER POINTS*STAR LEVEL*2) DAMAGE TO UNITS IN FRONT CIRCLE AREAS, AND STUN ENEMIES 0.5 SECOND.\nSixth Trick[★★★★★Unlock]:Colorful Flower「Rainbow Taijiquan」\nCause (POWER POINTS*4) DAMAGES TO UNITS IN FRONT STRAIGHT LINE AREAS.\nSeventh Trick[★★★★★Unlock]:Three Blasts「Colorful Ultimate Mountain Breaker」\nCausing (POWER POINTS*STAR LEVEL*4) DAMAGE TO UNITS IN FRONT CIRCLE AREAS, AND STUN ENEMIES 1.0 SECOND.\n\n[COOPERATION PROMOTION- Izayoi Sakuya]\nACTIVATION CHANCE PROMOTES TO 75%%." - "yukari" "Yakumo Yukari" - "ran" "Yakumo Ran" - "chen" "Chen" - "eirin" "Yagokoro Eirin" - "mokou" "Fujiwara no mokou" - "DOTA_Tooltip_ability_thtd_yuuka_01" "Flower Sign「Blossoming of Gensokyo」" - "DOTA_Tooltip_ability_thtd_yuuka_03" "Fantasy「The Beauties of Nature」" - "DOTA_Tooltip_ability_thtd_yuuka_02" "「Fantastic Spring Flowers」" - "DOTA_Tooltip_ability_thtd_yuuka_03_Description" "Creating a illusion of Yuuka in the target point, at the same time FLOWER FIELD WILL APPEAR BETWEEN YUUKA AND ILLUSION.\n\nUNITS GO CROSS THE FLOWER FIELD WILL GET DAMAGE OVER TIME, IF UNITS DIE IN FLOWER FIELD, IT WILL PROMOTE YUUKA 0.5%% SKILL DAMAGES AND 0.5%% FLOWER ATTACK DAMAGES.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1 /PER SEC\n[Relative to Star level]MAX DAMAGE PROMOTION:50%%/100%%/200%%" - "DOTA_Tooltip_ability_thtd_yuuka_02_Description" "Creating a flower field in front of Yuuka.\n\nThe flower field will constantly sow.\n\n[Relative to Star level]FLOWER ATTACK DAMAGE:Yuuka ATTACK DAMAGE*1" - "DOTA_Tooltip_ability_thtd_yuuka_01_Description" "Causing a damage to enemies near Yuuka.\n\nIf there are seeds in the area, the seeds will bloom and attack nearby enemies. \n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1" - "DOTA_Tooltip_modifier_yuuka_03_kill" "Fantasy「The Beauties of Nature」" - "DOTA_Tooltip_modifier_thtd_yuuka_03_death" "Fantasy「The Beauties of Nature」" - "DOTA_Tooltip_modifier_thtd_yuuka_03_death_Description" "This unit intrude the flower field, will become fertilizers soon." - "DOTA_Tooltip_modifier_yuuka_03_kill_Description" "Due to the fertilizers,Yuuka's power promotes." - "DOTA_Tooltip_ability_thtd_yuuka_04" "Extremity「Double Spark」" - "DOTA_Tooltip_ability_thtd_yuuka_04_Description" "Yuuka control the power of nature, release devastating magic cannon with her replication.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*7 /PER SECOND" - "DOTA_Tooltip_modifier_thdots_yuuka04_think_interval" "Extremity「Double Spark」" - "DOTA_Tooltip_modifier_thdots_yuuka04_think_interval_Description" "This unit is releasing magic cannon." - "DOTA_Tooltip_ability_thtd_yukari_01" "Evil Spirits「Yukari Yakumo's Spiriting Away」" - "DOTA_Tooltip_ability_thtd_yukari_01_Description" "Yukari manipulates space crack to hide the target.\n\n[COOPERATION PROMOTION - Hakurei Reimu]\n\nSTORAGE NUMBER PROMOTES TO 5." - "DOTA_Tooltip_modifier_yukari_01_hidden_Description" "This unit is in the space crack." - "DOTA_Tooltip_modifier_yukari_01_hidden" "Evil Spirits「Yukari Yakumo's Spiriting Away」" - "DOTA_Tooltip_ability_thtd_yukari_02" "Barrier「Balance of Motion and Stillness」" - "DOTA_Tooltip_ability_thtd_yukari_02_Description" "Yukari throw units in space crack into target point. CAUSING DAMAGE AND STUN TO TARGET POINTS.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1" - "DOTA_Tooltip_ability_thtd_yukari_03" "「Profound Danmaku Barrier -Phantasm, Foam and Shadow-」" - "DOTA_Tooltip_ability_thtd_yukari_03_Description" "Yukari CHANNEL 1 SECOND, TELEPORT TO TARGET POINT.\n\nAFTER 3 SECONDS TELEPORT BACK BY 1 SECOND CHANNEL.\n\n[COOPERATION PROMOTION - Ran Yakumo,Chen]\n\nRan and Chen will be teleported together" - "DOTA_Tooltip_ability_thtd_yukari_04" "Abandoned Line「Aimless Journey to the Abandoned Station」" - "DOTA_Tooltip_modifier_yukari_04_speed" "Abandoned Line「Aimless Journey to the Abandoned Station」" - "DOTA_Tooltip_modifier_yukari_04_speed_Description" "This unit is galloping." - "DOTA_Tooltip_ability_thtd_yukari_04_Description" "Yukari summons abandoned trolley bus, galloping from enemies'starting point in the path.\n\nCAUSING DAMAGE TO UNITS ARE CRASHED BY TROLLEY BUS AND STUN.TROLLEY BUS'S DURATION IS 30 SECONDS.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*10 /PER SEC\n\n[COOPERATION PROMOTION - Ran Yakumo, Chen]\n\nADD 5 MORE CARRIAGES FOR TROLLEY BUS." - "DOTA_Tooltip_ability_thtd_ran_01" "Shikigami's Radiance「Fox-Tanuki Youkai Laser」" - "DOTA_Tooltip_ability_thtd_ran_01_Description" "Ran shoots laser to a target, and bounces in the target and random targets around the first target.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*2 /EACH TIME" - "DOTA_Tooltip_ability_thtd_ran_02" "Shikigami's Shot「Ultimate Buddhist」" - "DOTA_Tooltip_ability_thtd_ran_02_Description" "Ran rotates large Sign, CAUSING MOVEMENT SPEED REDUCTION TO ENEMIES TOUCHED THE SIGN. DURING 3.4 SECONDS.\n\n[Relative to Star level]MOVEMENT SPEED REDUCTION:20%%/35%%/50%%/65%%/80%%" - "DOTA_Tooltip_modifier_thdots_ran02_debuff_Description" "Due to Ran's influence, this unit's movement speed is reduced." - "DOTA_Tooltip_modifier_thdots_ran02_debuff" "Shikigami's Shot「Ultimate Buddhist」" - "DOTA_Tooltip_aura_thdots_ran02_debuff" "Shikigami's Shot「Ultimate Buddhist」" - "DOTA_Tooltip_ability_thtd_ran_03" "Illusion God「Descent of Izuna Gongen」" - "DOTA_Tooltip_ability_thtd_ran_03_Description" "Every time when there are units release skills and expand MP around Ran, Ran will shoot a Shikigami's Radiance「Fox-Tanuki Youkai Laser」to surrounding random units.\n\n[COOPERATION PROMOTION - Yukari Yakumo,Chen]\n\nWhen activate this skill, it will regen the target this skill's 25% MP expense." - "DOTA_Tooltip_modifier_ran_03_spell_buff" "Illusion God「Descent of Izuna Gongen」" - "DOTA_Tooltip_modifier_ran_03_spell_buff_Description" "Getting Ran's supports." - "DOTA_Tooltip_ability_thtd_chen_01" "Yin Yang「Large Pentagram Crest」" - "DOTA_Tooltip_ability_thtd_chen_01_Description" "PASSIVE: EACH TIME CHEN MOVES, CAUSING A SHOCKING ATTACK, SHOCKING ATTACK WILL PROMOTES RANGES AND DAMAGES BY MOVEMENT DISTANCES PROMOTION.\n\nACTIVE:Chen roll to target point.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.7 / PER 100 DISTANCE (MAX TO PROMOTE TO *5)\n\n[COOPERATION PROMOTION - Ran Yakumo,Yukari Yakumo]\n\nPER 100 DISTANCE CHANGE TO PER 75 DISTANCE(MAX TO PROMOTE TO *20)" - "DOTA_Tooltip_ability_thtd_eirin_01_Description" "WHEN EIRIN IS ATTACKING, WILL ATTACH A DANMUKU ATTACK AROUND UNITS RANDOMLY, AND REDUCE 10 MP.\n\nWHEN RELEASING DANMUKU, HAVE CHANCE TO REGEN SELF 40% MP.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5\n[Relative to star level]CHANCE TO REGEN:10%%/20%%/30%%/40%%/50%%" - "DOTA_Tooltip_ability_thtd_eirin_01" "Revival「Seimei Yūgi -Life Game-」" - "DOTA_Tooltip_ability_thtd_eirin_02" "「Heaven Spider's Butterfly-Capturing Web」" - "DOTA_Tooltip_ability_thtd_eirin_02_Description" "Every time there is unit attack near Eirin, she will release a Revival「Seimei Yūgi -Life Game-」to around random targets." - "DOTA_Tooltip_modifier_eirin_02_spell_buff" "「Heaven Spider's Butterfly-Capturing Web」" - "DOTA_Tooltip_modifier_eirin_02_spell_buff_Description" "This unit get Eirin's support." - "DOTA_Tooltip_ability_thtd_eirin_03" "Medicine Sign「Large Galaxy in a Pot」" - "DOTA_Tooltip_ability_thtd_eirin_03_Description" "Creating an unescapable barrier in target point." - "DOTA_Tooltip_ability_thtd_eirin_04" "God Sign「Genealogy of the Celestials」" - "DOTA_Tooltip_ability_thtd_eirin_04_Description" "Eirin shoots danmuku to around in target point, DANMUKU WILL REBOUNCE WHEN CRACK THE BARRIER, EACH REBOUNCE WILL PROMOTE 20% DAMAGE, MAX TO PROMOTE 5 TIMES.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.1 /EACH DANMUKU" - "DOTA_Tooltip_ability_thtd_mokou_01" "Hourai「South Wind, Clear Sky -Fujiyama Volcano-」" - "DOTA_Tooltip_ability_thtd_mokou_01_Description" "Fujiwara no Mokou's attack HAS 10%% CHANCE TO CRIT.\n\nAND EACH ATTACK WILL PROMOTE 5%% CRIT CHANCE\n\n[Relative to Star level]MAX CRIT CHANCE:30%%/40%%/50%%/60%%/70%%" - "DOTA_Tooltip_passive_mokou_01_crit" "Hourai「South Wind, Clear Sky -Fujiyama Volcano-」" - "DOTA_Tooltip_passive_mokou_01_crit_Description" "This unit's crit chance promotes." - "DOTA_Tooltip_ability_thtd_mokou_02" "Forgiveness「Honest Man's Death」" - "DOTA_Tooltip_ability_thtd_mokou_02_Description" "Fujiwara no Mokou's EACH CRIT WILL PROMOTE HERSELF DOUBLE CRIT DAMAGE.\n\nIF THIS ATTACK DOESN'T CRIT, THE MULTIPLE WILL BE CLEARED.\n\n[Relative to star level]MAX CRIT DAMAGE:2/4/8/16/32 TIMNES." - "DOTA_Tooltip_ability_item_0035_Lore" "Don't have some special target, just enjoy life: sleeping, waking up,apprecationg flowers,and sleeping repeatedly." - "DOTA_Tooltip_ability_item_0036" "[SSR]Yukari Yakumo" - "DOTA_Tooltip_ability_item_0037" "[SR]Ran Yakumo" - "DOTA_Tooltip_ability_item_0038" "[R]cHEN" - "DOTA_Tooltip_ability_item_0039" "[SSR]Eirin Yagokoro" - "DOTA_Tooltip_ability_item_0040" "[SR]Fujiwara no Mokou" - "DOTA_Tooltip_ability_item_0036_Lore" "I am purple mother so what?\nPoped up behind me, Caught my head and pressed to the keyboard if you could anghhkjl;l'klhjhgfsdfhjkl;' lkhjfcxsdffhjkhl;lkjhgfsdhjkl;" - "DOTA_Tooltip_ability_item_0036_Description" "Experience and power are both powerful, has high intelligence, always looks like understand everything.\nShe is called Youkai Oracle, t Before thousands of years one of the Gensokyo's founders.\nAs one of a few youkaies know the essence of Gensokyo, she also extremely cherishes Gensokyo.\nGap Youkai, this race only constitutes by herself, at ordinary time she stays in her gap.\nTwice Lunar War's originator.\n\n[★]Evil Spirits「Yukari Yakumo's Spiriting Away」\n[★]Barrier「Balance of Motion and Stillness」\n[★★★]「Profound Danmaku Barrier -Phantasm, Foam and Shadow-」\n[★★★★★]Abandoned Line「Aimless Journey to the Abandoned Station」" - "DOTA_Tooltip_ability_item_0037_Description" "Ran Yakumo is a Kyuubi, herself has been powerful,and being shikigami of Yukari Yakumo for a long time makes her abilities more powerful than normal youkaies.\nDue to most of time Yukari Yakumo sleeps, the barrier's daily maintenance work is also belongs to her.\nBeing able to work independently and has her own Shikigami(Chen), so she is The Most Powerful Monster.\n\n[★]Shikigami's Radiance「Fox-Tanuki Youkai Laser」\n[★]Shikigami's Shot「Ultimate Buddhist」\n[★★★★]\"Illusion God「Descent of Izuna Gongen」" - "DOTA_Tooltip_ability_item_0037_Lore" "When I am working busily, my own lord is keeping sleeping." - "DOTA_Tooltip_ability_item_0038_Description" "A youkai cat lives in Mayohiga, and also she is Ran Yakumo's shikigami.\nHaving quick action, youkai power will promote in shikigami state, but still scared to water.\nLooks so smart, but actually her IQ is only like nearby human children.\n\n[★]Yin Yang「Large Pentagram Crest」" - "DOTA_Tooltip_ability_item_0039_Description" "The oracle of Lunar Capital. Her appearance looks young, and knowledgeable. But her speaking style, facial expressions, acts and so on all have unapproachable atmosphere seems like immortal exclusively have.\nShe called herself Forever Person, treats Remilia(500 years old) like treating a child.\nHer age has beyonded billions.\nPharmacology and archery are both excellent,\can use magic medicine and archery to knit the barrier.\nBut the really powerful of her is magic and wisdom.\n\n[★]Revival「Seimei Yūgi -Life Game-」\n[★]「Heaven Spider's Butterfly-Capturing Web」\n[★★★]Medicine Sign「Large Galaxy in a Pot」\n[★★★★★]God Sign「Genealogy of the Celestials」" - "kaguya" "Houraisan Kaguya" - "aya" "Shameimaru Aya" - "DOTA_Tooltip_ability_thtd_mokou_03" "Inextinguishable「Phoenix's Tail」" - "DOTA_Tooltip_ability_thtd_mokou_03_Description" "Fujiwara no Mokou releases phoenix's power,promotes self's ATTACK DAMAGE, and RELEASE Undying「Fire Bird -Flying Phoenix-」IN CRIT.\n\n[Relative to star level]ATTACK DAMAGE PROMOTION:500/2000" - "DOTA_Tooltip_ability_thtd_kaguya_01" "Impossible Request「Bullet Branch of Hourai -Rainbow Danmaku-」" - "DOTA_Tooltip_ability_thtd_kaguya_01_Description" "Kaguya RELEASE 3 TIMES DANMUKU TO THE TARGET POINT, DANMUKU WILL NARROW GRADUALLY.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*0.5" - "DOTA_Tooltip_ability_thtd_kaguya_02_Description" "The ability of kaguya: manipulates forever and moment, makes surrounding units' speed change constantly. \n\nEACH 2 SECONDS SWITCH 1 TIME, MAKES AROUND UNITS SPEED UP OR SPEED DOWN, WHEN SPEED UP, UNITS GET MORE DAMAGES, WHEN SPEED DOWN, UNITS GET LESS DAMAGES.\n\n[Relative to Star level]SPEED UP/DOWN EFFECT:50%%\n[Relative to Star level]More/LESS DAMAGE EFFECT:15%%/20%%/25%%/30%%/50%%(LESS-DAMAGE EFFECT IS ONLY HALF OF THE MORE-DAMAGE EFFECT)" - "DOTA_Tooltip_ability_thtd_kaguya_02" "「End of Imperishable Night」" - "DOTA_Tooltip_modifier_thdots_kaguya02_debuff" "「End of Imperishable Night」" - "DOTA_Tooltip_modifier_thdots_kaguya02_debuff_Description" "Affected by Forever And Moment Ability, this unit's speed decreases, but the damages it get also decrease." - "DOTA_Tooltip_modifier_thdots_kaguya02_buff_Description" "Affected by Forever And Moment ability, this units' speed promotes, but damages it gets also increase." - "DOTA_Tooltip_modifier_thdots_kaguya02_buff" "「End of Imperishable Night」" - "DOTA_Tooltip_ability_thtd_aya_01" "Wind Sign「Wind God's Fan」" - "DOTA_Tooltip_ability_thtd_aya_01_Description" "Aya Shameimaru's attack has 12%% CHANCE TO RELEASE A HURRICANE, CAUSE DAMAGE AND SPEED REDUCTION TO TARGETS AND UNITS AROUND IT.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5" - "DOTA_Tooltip_ability_thtd_aya_01_move_slow" "MOVEMENT SPEED REDUCTION EFFECT:" - "DOTA_Tooltip_modifier_aya01_slow" "Wind Sign「Wind God's Fan」" - "DOTA_Tooltip_modifier_aya01_slow_Description" "Due to Aya's affection, this units' movement speed is reduced." - "DOTA_Tooltip_ability_ability_common_decrease_armor_buff" "Special skill - Armor Reduction" - "DOTA_Tooltip_ability_ability_common_decrease_armor_buff_Description" "Promote this unit's ARMOR REDUCTION.\n\nThis skill can upgrade by SPELL CARDS FEEDING." - "DOTA_Tooltip_ability_ability_common_decrease_armor_buff_armor" "ARMOR REDUCTION:" - "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff_Description" "Promote this unit's MAGIC RESISTANCE REDUCTION.\n\nThis skill can upgrade by SPELL CARDS FEEDING." - "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff" "SPECIAL SKILL - MAGIC RESISTANCE REDUCTION" - "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff_magic_armor" "MAGIC RESISTANCE REDUCTION:" - "DOTA_Tooltip_ability_item_2001_Description" "CLEAR ALL ENEMIES(ESCAPE FROM YOUR HAND) IN THE MAP(CONSUMABLES)" - "DOTA_Tooltip_ability_item_2001" "Four Dimensional Bomb" - "DOTA_Tooltip_ability_item_2002" "Hakurei Gohei" - "DOTA_Tooltip_ability_item_2002_Description" "Choose a SSR card from your deck and draw it out(consumables)" - "DOTA_Tooltip_ability_item_2003_Description" "Choose a SR card from your deck and draw it out(consumable)" - "DOTA_Tooltip_ability_item_2003" "Wind Priest Gohei" - "DOTA_Tooltip_ability_item_2004_Description" "Choose a R card from your deck and draw it out(consumable)" - "DOTA_Tooltip_ability_item_2004" "Gohei" - "DOTA_Tooltip_ability_item_2005_Description" "[Single Item Effect]PROMOTE 10%% ATTACK DAMAGE\n\n[Double Item Effect]PROMOTE 30% ATTACK DAMAGE\n\n[Quadruple Item Effect]PROMOTE UNITS 50%% ATTACK DAMAGE IN 1000 DISTANCES." - "DOTA_Tooltip_ability_item_2005" "Bloody Parasol" - "DOTA_Tooltip_ability_item_2006_Description" "[Single Item Effect]PROMOTE 4%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% MP REGEN\n\n[Quadruple Item Effect]PROMOTE UNITS 20%% MP REGEN IN 1000 DISTANCES" - "DOTA_Tooltip_ability_item_2006" "Moonlight Secret Mineral" - "DOTA_Tooltip_ability_item_2007" "Lord Of Calamity Ningyou" - "DOTA_Tooltip_ability_item_2007_Description" "[Single Item Effect]PROMOTE 4%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% MP REGEN\n\n[Quadruple Item Effect]REDUCE ENEMIES 10%% MOVEMENT SPEED IN 1000 DISTANCES" - "DOTA_Tooltip_ability_item_2008" "Shinigami's Oar" - "DOTA_Tooltip_ability_item_2008_Description" "[Single Item Effect]PROMOTE 4%% CHANCE OF CRIT\n\n[Double Item Effect]PROMOTE 10%% CHANCE OF CRIT\n\n[Quadruple Item Effect]PROMOTE 100%% CRIT DAMAGE" - "DOTA_Tooltip_ability_item_2009" "Reality Ripper" - "DOTA_Tooltip_ability_item_2009_Description" "[Single Item Effect]+10 POWER POINT +5%% Magic Damage\n\n[Set of 2] +25 POWER POINT +15%% Magic Damage\n\n[Set of 4]Deals 2x Damage to enemy over 70%% health." - "DOTA_Tooltip_ability_item_2026" "Reaper’s Scythe" - "DOTA_Tooltip_ability_item_2010" "Reaper's Scythe" - "DOTA_Tooltip_ability_item_2010_Description" "[Single Item Effect]+10 POWER POINT +5%% Physical Damage\n\n[Set of 2] +25 POWER POINT 15%% Physical Damage\n\n[Set of 4]Deals 2x Damage to enemy under 30%% health" - "DOTA_Tooltip_ability_item_2011" "Moon Rabbit Smashing Blade" - "DOTA_Tooltip_ability_item_2011_Description" "[Single Item Effect]PROMOTE 20 ATTACK DAMAGE, 10 POWER POINTS\n\n[Double Item Effect]PROMOTE 50 ATTACK DAMAGE 25 POWER POINT\n\n[Quadruple Item Effect]PROMOTE 150%% CRIT DAMAGE AND SPLASH ATTACK IN 400 RANGE" - "DOTA_Tooltip_ability_item_2012" "Mini-Hakkero" - "DOTA_Tooltip_ability_item_2012_Description" "[Single Item Effect]PROMOTE 10%% MAGIC SKILL DAMAGE\n\n[Double Item Effect]PROMOTE 25%% MAGIC SKILL DAMAGE\n\n[Quadruple Item Effect]ENEMIES IN 1000 DISTANCES GET 120% MAGIC SKILL DAMAGES" - "DOTA_Tooltip_ability_item_2013" "L?vateinn" - "DOTA_Tooltip_ability_item_2013_Description" "[Single Item Effect]PROMOTE 10%% PHYSICAL DAMAGE\n\n[Double Item Effect]PROMOTE 25%% PHYSICAL DAMAGE\n\n[Quadruple Item Effect]ENEMIES IN 1000 DISTANCES GET 120%% PHYSICAL DAMAGES." - "DOTA_Tooltip_ability_item_2014" "Spear Gungnir" - "DOTA_Tooltip_ability_item_2014_Description" "[Single Item Effect]PROMOTE 10%% DAMAGE\n\n[Double Item Effect]PROMOTE 20%% DAMAGE\n\n[Quadruple Item Effect]PROMOTE DAMAGE OF UNITS IN 1000 RANGE BY 15%%" - "DOTA_Tooltip_ability_item_2015" "Mind-WRAITH's Hooks" - "DOTA_Tooltip_ability_item_2015_Description" "[Single Item Effect]PROMOTE 5%% CHANCE OF CRIT.\n\n[Double Item Effect]PROMOTE 20%% CHANCE OF CRIT.\n\n[Quadruple Item Effect]PROMOTE 45%% CHANCE OF CRIT" - "DOTA_Tooltip_ability_item_2016" "Eutectic Karyogamy Stick" - "DOTA_Tooltip_ability_item_2016_Description" "[Single Item Effect]PROMOTE 5%% DAMAGE AND 5%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% DAMAGE AND 10%% MP REGEN\n\n[Quadruple Item Effect]REDUCE 25% SKILL FREEZING TIME." - "DOTA_Tooltip_ability_item_2017" "Devil's Baby Teeth" - "DOTA_Tooltip_ability_item_2017_Description" "[Single Item Effect]PROMOTE 10 ATTACK SPEED\n\n[Double Item Effect]PROMOTE 25 ATTACK SPEED.\n\n[Quadruple Item Effect]PROMOTE 45 ATTACK SPEED." - "DOTA_Tooltip_ability_item_2018" "Moon Crossbow" - "DOTA_Tooltip_ability_item_2018_Description" "[Single Item Effect]PROMOTE 15 ATTACK DAMAGE AND 5 POWER POINTS\n\n[Double Item Effect]PROMOTE 45 ATTACK DAMAGE AND 15 POWER POINTS\n\n[Quadruple Item Effect]PROMOTE 70 ATTACK DAMAGE AND 30% CRIT CHANCE." - "DOTA_Tooltip_ability_item_2019" "Yin-yang Orb for Tax Payment" - "DOTA_Tooltip_ability_item_2019_Description" "[Single Item Effect]PROMOTE 4%% POWER POINTS\n\n[Double Item Effect]PROMOTE 12%% POWER POINTS\n\n[Quadruple Item Effect]PROMOTE 40 POWER POINTS" - "DOTA_Tooltip_ability_item_2020" "Hi-Tech Camera" - "DOTA_Tooltip_ability_item_2020_Description" "[Single Item Effect]PROMOTE 20 POWER POINTS\n\n[Double Item Effect]PROMOTE 60 POWER POINTS\n\n[Quadruple Item Effect]WHEN SKLLS CAUSE DAMAGE TO UNITS, UNITS GET EXTRA 2 TIMES (STAR * POWER POINT) DAMAGE." - "DOTA_Tooltip_ability_item_2021_Description" "All basic attributes are increased %bonus%%%, the first use lasts %duration_max% seconds, the duration of each subsequent use decreases %step% seconds until it is reduced to %duration_min% seconds. (Consumable)" - "DOTA_Tooltip_ability_item_2021_Note0" "Basic attributes include: attack speed, mana regen, energy, attack power, crit chance, crit damage." - "DOTA_Tooltip_modifier_item_2021_buff" "Good Wine" - "DOTA_Tooltip_modifier_item_2021_buff_Description" "All stats increased" - "DOTA_Tooltip_ability_item_2021" "Good Wine(cannot sell)" - "DOTA_Tooltip_ability_item_2022_Description" "PROMOTE A UNIT TO MAX LEVEL." - "DOTA_Tooltip_ability_item_2022" "Hakurei Shrine's Amulet(cannot sell)" - "DOTA_Tooltip_ability_item_0042" "[SR]Shameimaru Aya" - "hatate" "Himekaidou Hatate" - "momiji" "Inubashiri Momiji" - "DOTA_Tooltip_ability_thtd_patchouli_04" "Sun Sign「Royal Flare」" - "DOTA_Tooltip_ability_thtd_patchouli_04_Description" "Patchouli through guide Sun Sign「Royal Flare」,enemies in 1000 distance get huge damages and stun,For two seconds.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5 /EACH TIME\n\n[COOPERATION PROMOTION - Koakuma]\nNeed five stars and Koakuma on the court." - "DOTA_Tooltip_ability_thtd_kaguya_03_attack_speed" "Attack speed increased:" - "DOTA_Tooltip_ability_thtd_kaguya_03_attack_percent" "Attack increased:" - "DOTA_Tooltip_ability_thtd_kaguya_03_outgoing_percent" "Damage increased:" - "DOTA_Tooltip_ability_thtd_kaguya_03_penetration" "Physical Penetration increased:" - "DOTA_Tooltip_ability_thtd_kaguya_03_move_slow" "Movement Speed reduced:" - "DOTA_Tooltip_ability_thtd_kaguya_03_armor" "Armor reduced:" - "DOTA_Tooltip_ability_thtd_kaguya_03_incoming_percent" "Injured damage increased:" - "DOTA_Tooltip_ability_thtd_kaguya_03_Description" "Kaguya summon Divine Treasures,Inflicts damage on impacted enemies,Adds bonus effect to allied forces.\nActive release will Stop rotating.\n\nDivine Treasures「Brilliant Dragon Bullet」\nFor friendly units:Increase Attack speed\nFor enemy units:Reduce Movement Speed\nDivine Treasures「Buddhist Diamond」\nFor friendly units:Increase Attack\nFor enemy units:Double up Divine Treasures Damage\nDivine Treasures「Salamander Shield」\nFor friendly units:Increase Damage\nFor enemy units:Increase enemy units injured damage\nDivine Treasures「Life Spring Infinity」\nFor friendly units:Increase Physical Penetration\nFor enemy units:Reduce Armor\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*3.5 Per second" - "DOTA_Tooltip_ability_thtd_kaguya_03" "「Divine Treasure」" - "DOTA_Tooltip_modifier_kaguya_03_4_debuff" "Divine Treasures「Life Spring Infinity」" - "DOTA_Tooltip_modifier_kaguya_03_4_buff" "Divine Treasures「Life Spring Infinity」" - "DOTA_Tooltip_modifier_kaguya_03_1_buff" "Divine Treasures「Brilliant Dragon Bullet」" - "DOTA_Tooltip_modifier_kaguya_03_2_buff" "Divine Treasures「Buddhist Diamond」" - "DOTA_Tooltip_modifier_kaguya_03_3_buff" "Divine Treasures「Salamander Shield」" - "DOTA_Tooltip_modifier_kaguya_03_3_debuff" "Divine Treasures「Salamander Shield」" - "DOTA_Tooltip_modifier_kaguya_03_1_debuff" "Divine Treasures「Brilliant Dragon Bullet」" - "DOTA_Tooltip_modifier_kaguya_03_1_buff_Description" "Affected by Kaguya's Divine Treasures,this unit's Attack Speed increased." - "DOTA_Tooltip_modifier_kaguya_03_2_buff_Description" "Affected by Kaguya's Divine Treasures,this unit's Attack increased." - "DOTA_Tooltip_modifier_kaguya_03_3_buff_Description" "Affected by Kaguya's Divine Treasures,this unit's Damage increased." - "DOTA_Tooltip_modifier_kaguya_03_4_buff_Description" "Affected by Kaguya's Divine Treasures,this unit's Physical Penetration increased." - "DOTA_Tooltip_modifier_kaguya_03_4_debuff_Description" "Affected by Kaguya's Divine Treasures,this unit's Armor reduced." - "DOTA_Tooltip_modifier_kaguya_03_3_debuff_Description" "Affected by Kaguya's Divine Treasures,this unit's Injured damage increased" - "DOTA_Tooltip_modifier_kaguya_03_1_debuff_Description" "Affected by Kaguya's Divine Treasures,this unit's Movement Speed reduced." - "DOTA_Tooltip_ability_thtd_aya_02" "「Illusionary Dominance」" - "DOTA_Tooltip_ability_thtd_aya_02_Description" "Shameimaru Aya fly to the destination,Injuries the enemy units that collided.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5\n\n[COOPERATION PROMOTION - Himekaidou Hatate]\nwith「Kakashi Spirit News」sharing information." - "DOTA_Tooltip_ability_thtd_aya_03" "「Peerless Wind God」" - "DOTA_Tooltip_ability_thtd_aya_03_Description" "When Shameimaru Aya trigger Wind Sign 「Wind God's Fan」,「Illusionary Dominance」freezing time will refresh,moreover incidental once attack on the enemy unit." - "DOTA_Tooltip_ability_thtd_hatate_01" "Reporting 「Hatate Himekaidou's Reporting Training」" - "DOTA_Tooltip_ability_thtd_hatate_02" "Far-sightedness 「Tengu Psychography」" - "DOTA_Tooltip_modifier_aya01_news_buff" "「Bunbunmaru Newspaper」" - "DOTA_Tooltip_modifier_aya01_news_buff_Description" "This unit photographed by Aya." - "DOTA_Tooltip_ability_thtd_momiji_02" "Tengu「Shield of the Guardian」" - "DOTA_Tooltip_ability_thtd_hatate_01_Description" "Himekaidou Hatate injury to the target area and attach all enemy units「Kakashi Spirit News」。\nAll attach「Kakashi Spirit News」units will be harmed once damage\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Shameimaru Aya]\nwith「Bunbunmaru Newspape」sharing information." - "DOTA_Tooltip_modifier_hatate01_news_buff" "「Kakashi Spirit News」" - "DOTA_Tooltip_ability_thtd_hatate_02_Description" "Himekaidou Hatate make sustained damage to the enemy units in own area,attach all enemy units「Kakashi Spirit News」,for 5 seconds。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*4 /per second" - "DOTA_Tooltip_modifier_hatate01_news_buff_Description" "This unit photographed by Hatate." - "DOTA_Tooltip_modifier_thdots_hatate02_think_interval" "「Kakashi Spirit News」" - "DOTA_Tooltip_modifier_thdots_hatate02_think_interval_Description" "Himekaidou Hatate thoughtography now" - "DOTA_Tooltip_modifier_momiji_02" "Tengu 「Guardian of Shield」" - "DOTA_Tooltip_modifier_momiji_02_Description" "Affected by Momiji,this unit's Skill damage change to physical type." - "DOTA_Tooltip_ability_thtd_momiji_02_Description" "Make traget friendly unit's skill damage change to physical type and increase 30%%/40%%/60%%。\n\n[COOPERATION PROMOTION - Shameimaru Aya]\nWhen Momiji guard Shameimaru Aya,Aya attack inner circle enemy units will take 50%% effect,attack outer ring enemy units will ignore target unit's Armor." - "DOTA_Tooltip_ability_item_0041" "[SR]Houraisan Kaguya" - "DOTA_Tooltip_ability_item_0043" "[R]Himekaidou Hatate" - "DOTA_Tooltip_ability_item_0044" "[R]Inubashiri Momiji" - "DOTA_Tooltip_ability_item_0041_Description" "Houraisan Kaguya is the main antagonist of Imperishable Night.\nShe was once a princess of the Lunarians, a race of people living on the Moon. Due to illegally creating the Hourai Elixir with Eirin Yagokoro, they ended up living on Earth and what would eventually be Gensokyo.\n She is currently the princess of Eientei.\n\n[★]Impossible Request「Bullet Branch of Hourai -Rainbow Danmaku-」\n[★]「End of Imperishable Night」\n[★★★★]「Divine Treasure」" - "DOTA_Tooltip_ability_item_0040_Description" "Fujiwara no Mokou was formerly an ordinary human, but she became an immortal being after drinking the Hourai Elixir about 1300 years ago. \nNot close to humans,but it will secretly help humanity.she has the ability to manipulate the flame。\nNow she is never able to die, though she still feels the pain of injuries as normal.\nShe's considered to be very powerful, given her long life, the power she earned through her life, and her immortal status since she can keep fighting until she can no longer stand the pain.\n\n[★]Hourai「South Wind, Clear Sky -Fujiyama Volcano-」\n[★]Forgiveness「Honest Man's Death」\n[★★★★]Inextinguishable「Phoenix's Tail」" - "DOTA_Tooltip_ability_item_0042_Description" "Aya is unrelenting when it comes to getting sensationalist news stories, and she frequently twists the truth in her writing to her own advantage. It is her policy as a reporter to only report the truth, but there have been many instances where she has written blatant lies. \n It is said that she will come politely asking interviews of humans and youkai alike if she sees them as worth writing an article about, but will forcefully drive away any who interfere. \n \nHowever, Aya has shown a serious side as well. She can be thoughtful about the effect her stories will have on those who read them. She resents the rigid tengu caste system, as even though she works hard, she is unable to advance in rank due to being a crow tengu. \n\n[★]Wind Sign 「Wind God's Fan」\n[★★★★]「Illusionary Dominance」\n[★★★★]「Peerless Wind God」" - "DOTA_Tooltip_ability_item_0043_Description" "Himekaidou Hatate is a tengu reporter who produces the Kakashi Spirit News. \nUnlike her colleague Aya Shameimaru, she never goes outside for her newspaper research. Instead, she uses her ability called thoughtography.\nAfter reading Aya's Bunbunmaru Newspaper, she decided to observe Aya's way of gathering for her articles.\n\n[★]Reporting 「Hatate Himekaidou's Reporting Training」\n[★★★★] Far-sightedness 「Tengu Psychography」" - "DOTA_Tooltip_ability_item_0044_Description" "Inubashiri Momiji is a white wolf tengu whose duty is to patrol the Youkai Mountain. \nHer good sense of smell and sight are helpful for this duty.\nIt is usually idle, and Kappa is a friend and often plays chess together.\n\n[★]White wolf「Tengu Guardian」\n[★★★] Tengu 「Guardian of Shield」" - "minoriko_max_change" "Minoriko Aki can only exchange up to three times!" - "DOTA_Tooltip_ability_thtd_sanae_01" "Miracle「Daytime Guest Stars」" - "DOTA_Tooltip_ability_thtd_sanae_02" "Great Miracle 「Yasaka's Divine Wind」" - "DOTA_Tooltip_ability_thtd_sanae_03" "Sea Opening 「The Day the Sea Split」" - "DOTA_Tooltip_ability_thtd_sanae_01_Description" "Sanae miracle to the target,Increase the power point of the target,and transfer(1/times)effect to next unit。\n\n[Relative to star level]attribute increased:25/50/100/200/500" - "DOTA_Tooltip_ability_thtd_sanae_02_Description" "Sanae hurricane blowing at the target,Inflicts damage to nearby units and slows them down.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2 /per second\n[Relative to star level]slow down:15%%/25%%/35%%/50%%" - "DOTA_Tooltip_modifier_sanae_debuff" "Great Miracle 「Yasaka's Divine Wind」" - "DOTA_Tooltip_modifier_sanae_debuff_Description" "Affected by Sanae,the unit was decelerated." - "DOTA_Tooltip_ability_thtd_sanae_03_Description" "Sanae randomly drop lightning at the target area,Each lightning strike damages the target and stun 0.5 seconds。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL\n\n[Special Effects - Beliefs]\n\nincrease(1+Belief value/250)multiple stun time,and improve(1+Belief value/250)multiple damage." - "DOTA_Tooltip_ability_thtd_kanako_01" "Divine Festival「Expanded Onbashira」" - "DOTA_Tooltip_ability_thtd_kanako_01_Description" "Kanako fire a Onbashira toward the target's direction,Damage units and constantly repelled(Each unit will only be knocked back once),Lasts 2.5 seconds.\n\n[Relative to star level]DAMAGE:POWER POINT*5 /per second" - "DOTA_Tooltip_ability_thtd_kanako_02" "Onbashira「descent」" - "DOTA_Tooltip_ability_thtd_kanako_03" "Onbashira「recover」" - "DOTA_Tooltip_ability_thtd_kanako_02_Description" "Drop a Onbashira at the target location,Onbashira can connect with other Onbashira,Touching the linked unit will injured damage.\n\nMaximum descent(2/4/6)Onbashiras。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*(5/6/8) /times\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/1000)multiple damage." - "DOTA_Tooltip_ability_thtd_kanako_03_Description" "recover target Onbashira." - "DOTA_Tooltip_ability_thtd_kanako_03_unit" "Onbashira「link」" - "DOTA_Tooltip_ability_thtd_kanako_03_unit_Description" "Connect with the target Onbashira." - "DOTA_Tooltip_ability_thtd_suwako_01" "Divine Tool「Moriya's Iron Ring」" - "DOTA_Tooltip_ability_thtd_suwako_01_Description" "Suwako attack will come with an iron wheel,Repel hit targets 150distances and cause damage。(Each unit will only be knocked back once)\n\n[Relative to star level]DAMAGE:POWER POINT*1\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/500)multiple knocked back distance." - "DOTA_Tooltip_ability_thtd_minamitsu_02" "Captain「spinach」" - "DOTA_Tooltip_ability_thtd_minamitsu_02_Description" "Minamitsu eat the ancestral spinach,improve50%%power point in 7 seconds,and Attacks can cause power point-based splash damage to the target area。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Houjuu Nue]\n\npower point improve to 75%%。" - "DOTA_Tooltip_modifier_thdots_minamitsu03_bonus" "Captain「spinach」" - "DOTA_Tooltip_modifier_thdots_minamitsu03_bonus_Description" "Minamitsu is a big deal!" - "DOTA_Tooltip_ability_thtd_nue_01" "「Nightmare of Heiankyou」" - "DOTA_Tooltip_ability_thtd_nue_02" "Grudge Bow 「The Bow of Genzanmi Yorimasa」" - "DOTA_Tooltip_ability_thtd_nue_03" "「Stars ○□△× bug」" - "DOTA_Tooltip_ability_thtd_nue_01_Description" "Nue Can impose a nightmare on anyone,Damage adds additional spell damage。When you take the initiative, the effect will double.\nAttack:Add 1x damage to this skill damage\nPositive judgment:Added 2x damage to this skill damage\nThe Bow of Genzanmi Yorimasa:Added 3x damage to this skill damage\n\nRelative to star level]DAMAGE:POWER POINT*1\n\n[COOPERATION PROMOTION - Murasa Minamitsu]\n\nWhen causing damage to enemies in the waters,increased damage50%%。" - "DOTA_Tooltip_ability_thtd_nue_01_Note0" "Skipping waves will decrease stacks by 20 per" - "DOTA_Tooltip_ability_thtd_nue_01_Note1" "Expiration removes 1/3rd stacks" - "DOTA_Tooltip_ability_thtd_nue_01_power_damage" "Damage:" - "DOTA_Tooltip_ability_thtd_nue_01_attack_bonus" "Bonus From Attacks:" - "DOTA_Tooltip_ability_thtd_nue_01_spell_bonus" "Bonus from Spells:" - "DOTA_Tooltip_ability_thtd_nue_01_damage_up" "% Damage Up:" - "DOTA_Tooltip_passive_nue01_attack" "「Nightmare of Heiankyou」" - "DOTA_Tooltip_passive_nue01_attack_Description" "Houjuu Nue's damage will take extra damage." - "DOTA_Tooltip_modifier_nue_01_extradamage" "「Nightmare of Heiankyou」" - "DOTA_Tooltip_modifier_nue_01_extradamage_Description" "「Nightmare of Heiankyou」the number of overlays." - "DOTA_Tooltip_ability_thtd_nue_02_Description" "Shoot a powerful arrow that full of hatred,The penetrated will receive a large amount of spell damage.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1" - "DOTA_Tooltip_ability_thtd_nue_03_Description" "When nue kill a unit, it resets the skill cooldown." - "DOTA_Tooltip_modifier_thdots_nue_03" "「Stars ○□△× bug」" - "DOTA_Tooltip_modifier_thdots_nue_03_Description" "When nue kill a unit, it resets the skill cooldown." - "DOTA_Tooltip_ability_item_0046" "[SR]Kochiya Sanae" - "DOTA_Tooltip_ability_item_0046_Description" "Kochiya Sanae is a human, but is also a distant descendant of the goddess Suwako Moriya. \nHer role at the Moriya Shrine is similar to a shrine maiden, but with her inherited power Sanae has also become a minor deity herself. \nOriginally from the Outside World, Sanae migrated to Gensokyo with the shrine and its two resident goddesses, Kanako Yasaka and Suwako Moriya. As a result, she is rather knowledgeable about the outside world and modern living, although her attempts to explain scientific concepts usually just confuse the locals. \n\n[★]Miracle「Daytime Guest Stars\n[★]Great Miracle 「Yasaka's Divine Wind」\n[★★★★]Sea Opening 「The Day the Sea Split」" - "DOTA_Tooltip_ability_item_0047" "[SSR]Yasaka Kanako" - "DOTA_Tooltip_ability_item_0047_Description" "Yasaka Kanako is the main antagonist of Mountain of Faith. She's the current goddess of the Moriya Shrine after defeating its previous resident goddess Suwako Moriya in the Great Suwa War. \nShe desires to collect large amounts of faith, but since the humans of the Outside World no longer place much importance on gods, she has transported the shrine to Gensokyo.\nShe currently lives on top of the Youkai Mountain, where she has an uneasy relationship with the leaders of the tengu. \n\n[★]Divine Festival「Expanded Onbashira」\n[★★★]Onbashira「descent」\n[★★★]Onbashira「recover」\n[★★★★★]「Sacred Authority of the Gods」" - "DOTA_Tooltip_ability_item_0048" "[SR]Moriya Suwako" - "DOTA_Tooltip_ability_item_0048_Description" "Moriya Suwako is the original god of the Moriya Shrine.\nOfficially the shrine now belongs to Kanako Yasaka, but in Suwako's words she handles most of the divine services while Kanako handles the 'sales'. \n\n[★]Divine Tool「Moriya's Iron Ring」\n[★★★]Scourge God 「Mishaguchi-sama」\n[★★★★]「Hellish Heat Geyser」" - "DOTA_Tooltip_ability_item_0048_Note0" "" - "DOTA_Tooltip_ability_item_0049" "[SR]Murasa Minamitsu" - "DOTA_Tooltip_ability_item_0050" "[SR]Houjuu Nue" - "DOTA_Tooltip_ability_item_0050_Description" "Houjuu Nue is said to be one of the most mysterious and feared youkai in many years, yet has been defeated by humans many times. \nThere are many differing legends according to her appearance because she hides her \nAt some point, she was sealed underground, and because of the events of Subterranean Animism, she resurfaced back in Gensokyo. \n\n[★]「Nightmare of Heiankyou」\n[★★★]Grudge Bow 「The Bow of Genzanmi Yorimasa」\n[★★★★]「Stars ○□△× bug」" - "DOTA_Tooltip_ability_item_0049_Description" "Murasa Minamitsu is the spirit of a young drowning victim who afterwards became a notorious threat due to her power to sink ships. \nShe is currently the captain of the Palanquin Ship, searching for the fragments of the Flying Storage. \nShe meets the heroine as she is completing the preparations to travel to Makai. \n\n[★]Harbor Sign 「Eternally Anchored Phantom Ship」\n[★]Captain「spinach」\n[★★★★]Drowning Sign 「Sinkable Vortex」\n[★★★★★]Harbor Sign 「Phantom Ship's Port」" - "sanae" "Kochiya Sanae" - "kanako" "Yasaka Kanako" - "suwako" "Moriya Suwako" - "minamitsu" "Murasa Minamitsu" - "nue" "Houjuu Nue" - "kanako_gojou" "Onbashira" - "DOTA_Tooltip_ability_thtd_momiji_01" "White wolf「Tengu Guardian」」" - "DOTA_Tooltip_ability_thtd_momiji_01_Description" "Summon four white wolf to automatically attack the surrounding units,White Wolf Doesn't Leave momiji to Walk Over 600 Yards.\n\nRelative to star level]white wolf attack:POWER POINT*STAR LEVEL*1" - "DOTA_Tooltip_ability_ability_common_star_up_speed_Description" "Increase the growth rate of the unit.\n\nThis skill can be upgraded through card cultivation.\n\n[Growth rate increased]:10%%/20%%/30%%/40%%" - "DOTA_Tooltip_ability_ability_common_star_up_speed" "Special Skill - Growth rate increased" - "DOTA_Tooltip_ability_ability_common_star_up_speed_speed_tooltips" "Growth rate increased:" - "DOTA_Tooltip_ability_ability_touhoutd_ex_up" "Awakening" - "DOTA_Tooltip_ability_ability_touhoutd_ex_up_Description" "Can stimulate the hidden power of some units" - "DOTA_Tooltip_ability_item_0069" "[R]Toramaru Shou" - "DOTA_Tooltip_ability_item_0080" "[SSR]Shinki" - "DOTA_Tooltip_ability_item_0088" "[R]Aki Shizuha" - "sizuha" "Aki Shizuha" - "toramaru" "Toramaru Shou" - "shinki" "Shinki" - "DOTA_Tooltip_ability_thtd_sizuha_01" "Autumn SignFall in Blast」" - "DOTA_Tooltip_ability_thtd_sizuha_01_Description" "Shizuha Aalthough it is impossible to improve the star in a normal way,but it can grow through time.\n\nEvery(216/432/720/1008)seconds will raise one star。" - "DOTA_Tooltip_ability_thtd_sizuha_02" "Wilted Path「Lost Windrow」" - "DOTA_Tooltip_ability_thtd_sizuha_02_Description" "Shizuha can through reduce your own(1)star raise target (1)star,the star rating of the promotion goal cannot exceed Shizuha own star rating." - "DOTA_Tooltip_ability_thtd_toramaru_01" "Treasure Sign 「Dazzling Gold」" - "DOTA_Tooltip_ability_thtd_toramaru_01_Description" "Toramaru Shou inflicts damage on one unit and gains money,And at the end of each turn,Toramaru Shou will cause harm 1%%Tturn into money.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n[Relative to star level]Harvest quantity:12/44/108/216/852" - "DOTA_Tooltip_ability_thtd_suwako_02" "Scourge God 「Mishaguchi-sama」" - "DOTA_Tooltip_ability_thtd_suwako_02_Description" "Suwako create one Mishaguchi at the target location,when the unit through Mishaguchi will chained for 1 second.\n\nUnits are not subject to two binding effects,Leave the Mishaguchi will refresh.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2.5 /per second\n\n[Special Effects - Beliefs]\n\nimprove(1+Beliefs value/500)multiple damage." - "change_to_patchouli_agni_shine" "Switch to「Agni Shine」" - "change_to_patchouli_bury_in_lake" "Switch to「Bury In Lake」" - "change_to_patchouli_mercury_poison" "Switch to「Mercury poison」" - "DOTA_Tooltip_ability_thtd_suwako_03" "「Hellish Heat Geyser」" - "DOTA_Tooltip_ability_thtd_suwako_03_Description" "Suwako use Geyser to bounce all units,Bounce it to a random area within 200 yards and cause damage when landing.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*5.0" - "DOTA_Tooltip_ability_thtd_minamitsu_01" "Harbor Sign 「Eternally Anchored Phantom Ship」」" - "DOTA_Tooltip_ability_thtd_kanako_04" "「Mountain of Faith」" - "DOTA_Tooltip_ability_thtd_kanako_04_Description" "Kanako create a Suwa Foughten Field,All units entering and leaving the battlefield are subject to an injury,Units in the battlefield will continue to be harmed.\n\n[Relative to star level]entering/leaving damage:POWER POINT*STAR LEVEL*8\n[Relative to star level]Continuous damage:POWER POINT*STAR LEVEL*0.25 /per second\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/1000)multiple damage." - "DOTA_Tooltip_modifier_thdots_kanako_04_buff" "「Mountain of Faith」" - "DOTA_Tooltip_modifier_thdots_kanako_04_buff_Description" "Suwa Foughten Field." - "DOTA_Tooltip_ability_thtd_sanae_04" "Divine Virtue 「Bumper Crop Rice Shower」" - "DOTA_Tooltip_ability_thtd_sanae_04_Description" "Sanae inspires all special effects for units that gain belief.\n\n[COOPERATION PROMOTION - Yasaka Kanako,Moriya Suwako]\n\nTurn on this skill.\n\nMake Sanae,Kanako and Suwako both can gain belief by killing units." - "DOTA_Tooltip_ability_thtd_toramaru_02" "Buddhist Art 「Most Valuable Vajra」" - "DOTA_Tooltip_ability_thtd_toramaru_02_Description" "Toramaru Shou Gather the power of money point,Make huge damage to single target.\n\nEnter Endless mode. This skill will have no cooldown,Increases damage to 4x.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*10" - "DOTA_Tooltip_ability_thtd_toramaru_03_Description" "Toramaru Shou Gather the power of money point,Make huge damage to all targets on the inner ring.\n\nEnter Endless mode. This skill will have no cooldown,Increases damage to 4x.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*5" - "DOTA_Tooltip_ability_thtd_toramaru_03" "Buddha's Light 「Vajra of Perfect Buddhism」" - "DOTA_Tooltip_ability_thtd_shinki_01" "「Makai gate」" - "DOTA_Tooltip_ability_thtd_shinki_01_Description" "At the end of each round,Randomly Summon X shikigami card(The shikigami card maybe not be in your card pool)And the consumption of this type of shikigami card will not return to the card pool(X=star level)\n1X:100%%Summon 1 N card\n2X:100%% 2 N cards\n3X:80%%Summon N card,20%%Summon R card,A total of 3\n4X:80%%Summon R cards,20%%Summon SR cards,5%%Summon SSR cards,A total of 1. 80%%Summon N card,20%%Summon R cards,A total of 3.\n5X:80%Summon R cards,20%%Summon SR cards,5%%Summon SSR,A total of 5." - "DOTA_Tooltip_ability_thtd_rumia_03" "「Dark Mastery」" - "DOTA_Tooltip_ability_thtd_rumia_03_Description" "Rumia attack have 10%% probability outstretched Dark Claws to70%%HP unit,this unit will be directly spiked." "DOTA_Tooltip_modifier_rumia_03_pause" "「Dark Mastery」" - "DOTA_Tooltip_modifier_rumia_03_pause" "" - "DOTA_Tooltip_ability_thtd_rumia_04" "「A story that has been forgotten by fantasy」" - "DOTA_Tooltip_ability_thtd_rumia_04_Description" "Rumia each attack creates a dark and damage to the target area.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL/3 /per Danmaku\n\n[COOPERATION PROMOTION - Hakurei Reimu]\n\nimprove50%%damage.。" - "DOTA_Tooltip_modifier_thtd_ss_faith" "Belief value" - "DOTA_Tooltip_ability_thtd_shinki_02" "「Enze earth」" - "DOTA_Tooltip_ability_thtd_shinki_02_Description" "When per unit upgrade around 2000 yards ,Then the unit gets(Shinki star level*1)extra power points." "DOTA_Tooltip_modifier_shinki_02_power_up_bonus_buff" "「Enze earth」" - "DOTA_Tooltip_modifier_shinki_02_power_up_bonus_buff" "" - "DOTA_Tooltip_ability_thtd_minamitsu_04" "Harbor Sign 「Phantom Ship's Port」」" - "DOTA_Tooltip_ability_thtd_minamitsu_03" "Drowning Sign 「Sinkable Vortex」" - "DOTA_Tooltip_ability_thtd_minamitsu_03_Description" "Minamitsu release a vortex to the target area,Involved in the surrounding unit and caused damage.Units in the whirlpool will be rolled out of the waters.(Each unit is rolled up at most once)\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2.5 /per second" - "DOTA_Tooltip_ability_thtd_minamitsu_01_Description" "Minamitsu release a ghost ship in the opposite direction of the target,Where the ghost ship passes, water will be generated,Units in the waters will be slowed down." - "DOTA_Tooltip_ability_thtd_minamitsu_01_move_slow" "movement slow:" - "DOTA_Tooltip_modifier_minamitsu_01_slow_buff" "Harbor Sign 「Eternally Anchored Phantom Ship」" - "DOTA_Tooltip_modifier_minamitsu_01_slow_buff_Description" "Affected by Minamitsu,the unit was decelerated." - "DOTA_Tooltip_ability_thtd_minamitsu_04_Description" "Minamitsu from upstream waters summon a ghost ship,Crash into the waters downstream,enemy unit will be hurt.\n\nEveryone in the team「Undefined Fantastic Object」shikigami,Each character is additionally boosted by this skill 50%%damage.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*10 /per impact" - "DOTA_Tooltip_modifier_shinki_02_power_up_bonus_buff_Description" "Affected by Shinki,the unit's extra power point has increased." - "DOTA_Tooltip_ability_item_0080_Description" "Shinki is the creator of Makai.Shinki has light-blue eyes with white hair and wears red robes. \nShe's able to summon six white wings, which can turn purple with red markings. " - "DOTA_Tooltip_ability_item_0069_Description" "Toramaru Shou is a disciple of the god Bishamonten.\nAlong with Minamitsu Murasa and the other youkai aboard the Palanquin Ship, she seeks to revive Byakuren Hijiri after she had been sealed away in Makai by humans.\n\n[★]Treasure Sign 「Dazzling Gold」\n[★★★]Buddhist Art 「Most Valuable Vajra」」\n[★★★★★]Buddha's Light 「Vajra of Perfect Buddhism」" "DOTA_Tooltip_ability_item_0088_Description" "Aki Shizuha is the goddess of Autumn, the old sister of Minoriko Aki.\nShe rules over Gensokyo’s Autumn together with Minoriko Aki. Although not a great combatant, Aki Shizuha will punish those disrespectful of Autumn.\nShe thinks Maples are the most beautiful in Autumn, always indulges in herself's sueriority when she gives her sister to look beautiful maples.\nBut she also becomes sorrow when Winter comes.\n\n[★]Autumn Sign「Fall in Blast」\n[★★]Wilted Path「Lost Windrow」" - "DOTA_Tooltip_ability_item_0088_Description" "" - "DOTA_Tooltip_ability_thtd_byakuren_03" "「Yugyou Hijiri」" - "DOTA_Tooltip_ability_thtd_byakuren_01" "Good Omen「Nirvana's Cloudy Way in Purple」I" - "DOTA_Tooltip_ability_thtd_byakuren_01_Description" "-0.1 Attack Interval,decrease spell damage.\nAttack Interval cannot be smaller than 0.2s.\nWhen Attack Interval is greater than 1.0s, this spell deals Magic Damage.\nWhen Attack Interval is equal to 1.0s, deals Pure Damage.\nWhen Attack Interval Is less than 1.0s, deals Physical Damage.\n\nEach attack will damage the target and all surrounding units.\n\n[Damage Multiplier]Damage Multiplier: Power Point* Star * (1+ 0.1*Number of believers) " - "DOTA_Tooltip_ability_thtd_byakuren_02" "Good Omen「Nirvana's Cloudy Way in Purple」II" - "DOTA_Tooltip_ability_thtd_byakuren_02_Description" "+0.1 Attack Interval,decrease spell damage.\nAttack Interval cannot be smaller than 0.2s.\nWhen Attack Interval is greater than 1.0s, this spell deals Magic Damage.\nWhen Attack Interval is equal to 1.0s, deals Pure Damage.\nWhen Attack Interval Is less than 1.0s, deals Physical Damage.\n\nEach attack will damage the target and all surrounding units.\n\n[Damage Multiplier]Damage Multiplier: Power Point* Star * (1+ 0.1*Number of believers)" - "DOTA_Tooltip_ability_thtd_byakuren_03_Description" "With any other 'Seirensen' Unit, Byakuren will preach them into believers,increasing Religious Point over time. \nWhen Religious point reaches 6000, the unit turns into a Believer.\nBelievers can accelerate the preaching process,\nBelievers gain additional abilities and enhences Byakuren’s Damage\n\nNazrin:In Endless Mode, attacks deals additional damage to target and surrounding units. Damage= Rank *0.2* Current Gold. \nToramaru Shou:Spell gold cost reduced by 50%.\nTatara Kogasa: [Karakasa Surprising]reduces 50%% movement speed and deals more damage.\nHoujuu Nue: Instantly kill units damaged by her abilities that are under 10% health.\nMurasa Minamitsu: 'Phantom Ship's Port' 's cooldown to 15s." - "DOTA_Tooltip_modifier_byakuren_03_aura" "Yugyou Hijiri" - "DOTA_Tooltip_modifier_byakuren_03_buff" "Yugyou Hijiri" - "DOTA_Tooltip_modifier_byakuren_03_aura_Description" "Byakuren is preaching." - "DOTA_Tooltip_modifier_byakuren_03_buff_Description" "This unit is a Believer of Byakuren." - "DOTA_Tooltip_ability_thtd_byakuren_04" "Superhuman[Byakuren Hijiri]/Heaven Sign[Brilliance of Mahavairocana]/Great Magic[Devil's Recitation]" - "DOTA_Tooltip_ability_thtd_byakuren_04_Description" "When Byakuren’s attack interval is <1.0s, uses uperhuman[Byakuren Hijiri].\nEach attack has a 10% chance to increase Power Point after channeling, increasing attack speed to maximum. \n[Damage Multiplie]Power Point Multiplier: Power Point * Believer *0.2.\n\nWhen Byakuren’s attack interval is 1.0s, uses Heaven Sign [Brilliance of Mahavairocana].\nEvery (6/ (1+believer*0.2)) attack will also damage surrounding units.\n\nWhen Byakuren’s attack interval is >1.0s, uses Great Magic [Devil's Recitation].\nIncrease Magic Penetration by 50, each attack releases 4 laser that deals damage to a random surrounding units.\n[Damage Multiplier] Power Point Multiplier: Power Point * Number of Believer*6*(1+ Number of Believer*0.1)" - "DOTA_Tooltip_modifier_byakuren_04_physical_buff" "superhuman [Byakuren Hijiri]" - "DOTA_Tooltip_modifier_byakuren_04_physical_buff_Description" "Byakuren uses magic to vastly enhance her strength." - "DOTA_Tooltip_modifier_byakuren_04_pose_Description" "Byakuren’s energy is charging." - "DOTA_Tooltip_modifier_byakuren_04_pose" "superhuman [Byakuren Hijiri]" - "DOTA_Tooltip_modifier_byakuren_04_magic_buff" "Great Magic[Devil's Recitation]" - "DOTA_Tooltip_modifier_byakuren_04_magic_buff_Description" "Byakuren channels magic to increase her magic penetration." - "DOTA_Tooltip_ability_thtd_byakuren_04_penetration" "Magic Penetration:" - "DOTA_Tooltip_ability_item_0051" "[SSR]Byakuren Hijiri" - "DOTA_Tooltip_ability_item_0051_Description" "After Myouren dies, Byakuren fears the mortality of life and seeks immortality.\nFailing to achieve immortality through the way of the Buddha, Byakuren turns to magic and sorcery. \nIn her contact wit youkai , she realizes that only the strong can survival. “Survival of the fittest” became her cornerstone. \nOn the one hand, she accepts to beat off youkaies, on the other hand, she helps youkaies, this is the 'balance' she thinks.\nAs mankind rejects her, Byakuren was banished to devil's world --- where Palanquin Ship sails towards.\n\n[★]Good Omen [Nirvana's Cloudy Way in Purple]I\n[★]Good Omen [Nirvana's Cloudy Way in Purple]II\n[★★★] [Yugyou Hijiri]\n[★★★★★]Superhuman [Byakuren Hijiri]/Heaven Sign [Brilliance of Mahavairocana]/Great Magic [Devil's Recitation]" - "byakuren" "Hijiri Byakuren" - "soga" "Soga no Tojiko" - "futo" "Mononobe no Futo" - "miko" "Toyosatomimi no Miko" - "DOTA_Tooltip_ability_thtd_soga_02" "Thunder Arrow [Gagouji's Tornado]" - "DOTA_Tooltip_ability_thtd_soga_01" "Vengeful Spirit [Iruka's Thunder]" - "DOTA_Tooltip_ability_thtd_soga_01_Description" "Deals damage to enemies in a straight line, and deals 1s stun.\n\n After releasing, a ball lightning will be created in the track, next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage:POWER POINT * STAR LEVEL" - "DOTA_Tooltip_ability_thtd_soga_02_Description" "Deals 1 time of damage to units in target areas.\n\nAfter releasing, a ball lightning will be created in the track, next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage: POWER POINT * STAR LEVEL*4" - "DOTA_Tooltip_ability_thtd_soga_03" "Thunder Arrow [Gagouji's Tornado]" - "DOTA_Tooltip_ability_thtd_soga_03_Description" "After a short-time delay, deals a huge damage to units in target areas.\n\nAfter releasing, a ball lightning will be created in the track,next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 10\n\n[COOPERATION PROMOTION - Mononobe no Futo]\n\n+20%% Magic Damage to units are hitted, during 10s." - "DOTA_Tooltip_ability_thtd_futo_01" "Throwing Dishes [Mononobe's Eighty Sake Cups]" - "DOTA_Tooltip_ability_thtd_futo_01_Description" "Each attack will randomly change a dish, each dish deals different effect.\nGreen Deals 1 time of (POWER POINT * Star Level) damage to all units behind the target.\nOrange Throwes dishes to all surrounding units and deals (POWER POINT * Star Level) damage.\nGreen Inflicting poison to units in target areas and decreasing HP over time.\nRed makes a flame burst to deal (POWER POINT * Star Level * 4) damage to enemies in the area.\nYellow Deals 0.5s stun to enemies in the area.\nBlue Deals critical strike( x 32) to enemies in ther area(this critical strike damage is MAGIC DAMAGE.)" - "DOTA_Tooltip_ability_thtd_futo_02" "Saint Girl [Sun Goddess's Sacrifice]" - "DOTA_Tooltip_ability_thtd_futo_02_Description" "Each time kill unit, deals self 10%% more magic damage.\n\nAt most overlay 10 times, during 10s.\n\n[COOPERATION PROMOTION - Soga no Tojiko]\n\nOverlay times increase from 10 to 15." - "DOTA_Tooltip_ability_thtd_futo_03" "Blaze Sign [Sakuraiji in Flames]" - "DOTA_Tooltip_ability_thtd_futo_03_Description" "Sets big fire to the area, deals damage to enemies in the area over time.\n\n[Damage Multiplier]Damage:POWER POINT * Star Level * 2.5 /Per-sec" "DOTA_Tooltip_ability_item_0052" "[SSR]Toyosatomimi no Miko" - "DOTA_Tooltip_ability_item_0052" "" - "DOTA_Tooltip_ability_item_0094" "[SR]Soga no Tojiko" - "DOTA_Tooltip_ability_item_0095" "[SR]Mononobe no Futo" - "extra_bonus_minoriko_limit" "Minoriko's Gift: Aki Minoriko's exchange time refreshes." - "extra_bonus_nazrin" "Nazrin's Gift: Get 3500 gold." - "extra_bonus_lily" "Lily White's Gift: Promote all Shikigamis'level to Max." - "extra_bosses_minoriko" "Boss Mission: Aki Minoriko: Each 10s regen 30% HP." - "extra_bosses_keine" "Boss Mission: Kamishirasawa Keine: When HP < 70%, record current HP and recover after 5s." - "extra_bosses_aya" "Boss Mission: Shameimaru Aya: Immune most of movement speed decreasing." - "extra_bosses_kisume" "Boss Mission: Kisume: Reduce self 2000 damage." - "extra_bosses_alice" "Boss Mission: Alice: After she died, she will split into 3 ningyous, each ningyou has 30% HP, food spawns will be occupied when ningyous enter the circle." - "extra_bosses_kaguya" "Boss Mission: Houraisan Kaguya: Resurrection" - "extra_bosses_yuugi" "Boss Mission: Hoshiguma Yuugi: Have double HP" - "extra_bosses_mokou" "Boss Mission: Fujiwara no mokou: IMMUNE ITEM'S CRITICAL STRIKE effect." - "extra_bosses_hina" "Boss Mission: giyama Hina: When she gets hurt, if damage > (the source of damage * 4 * Star Level * POWER POINT), this damage will decrease a half." - "extra_bosses_marisa" "Boss Mission: Kirisame Marisa: Each 3s she will rush 0.3s." - "extra_bosses_rumia" "Boss Mission: Rumia: Each 3s will have 1s Invincibility." - "DOTA_Tooltip_ability_thtd_miko_04" "[Newborn Divine Spirit]" - "DOTA_Tooltip_ability_thtd_miko_02" "Hermit Sign [Emperor of the Land of the Rising Sun]" - "DOTA_Tooltip_ability_thtd_miko_03" "Honor [Colors of Twelve Levels]" - "DOTA_Tooltip_ability_thtd_miko_01" "[Cipangu the Golden Sword]" - "DOTA_Tooltip_ability_thtd_miko_01_Description" "Miko releases 3 golden swords to target direction, units hit by golden swords will get damage, the damage will attach Miko (POWER POINT * 1)'s' damage.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 4" - "DOTA_Tooltip_modifier_miko_01_pose" "[Cipangu the Golden Sword]" - "DOTA_Tooltip_modifier_miko_01_debuff" "[Cipangu the Golden Sword]" - "DOTA_Tooltip_modifier_miko_01_debuff_Description" "This unit is hitted by golden swords." - "DOTA_Tooltip_ability_thtd_miko_02_Description" "Each time there is 1 'Divine Spirit Mausoleum' unit, it will be 'Listen' by Miko\nEach time 'Listen a unit, Religious Point will increase constantly.'\nWhen Religious Points reach 6000, Miko can do 'Teach' to every 'Divine Spirit Mausoleum' unit.\nUnits success to be 'Teach' will get extra ability.\n\nSoga no Tojiko: [Iruka's Thunder] Cooldown time reduces to 4s, [Gagouji's Tornado] Cooldown time reduces to 10s.\nMononobe no Futo: [Sakuraiji in Flames]Deals 25%% more damage.\nMiyako Yoshika: Attack attaches an extra [poison] buff." - "DOTA_Tooltip_modifier_miko_02_aura" "Hermit Sign [Emperor of the Land of the Rising Sun]" - "DOTA_Tooltip_modifier_miko_02_buff" "Hermit Sign [Emperor of the Land of the Rising Sun]" - "DOTA_Tooltip_modifier_miko_02_buff_Description" "This unit has been 'Taught'." - "DOTA_Tooltip_modifier_miko_02_aura_Description" "Miko is 'Listening'." - "DOTA_Tooltip_ability_thtd_miko_03_Description" "Each 0.3s Miko will release a colorful light ball to attack surrounding random targets.\n\nEach 'Be Taught' unit there will cause release 1 extra light ball.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level" - "DOTA_Tooltip_ability_thtd_miko_04_Description" "Miko asks all 'Be Taught' units there to release 'Meteor Shower' to inner enemies with itself together.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 2.5/Per Meteor Shower." - "DOTA_Tooltip_modifier_thdots_miko04_think_interval" "[Newborn Divine Spirit]" - "DOTA_Tooltip_modifier_miko_04_pose" "[Newborn Divine Spirit]" - "DOTA_Tooltip_ability_thtd_yoshika_01" "poison Nail[Undead Murderer]" - "DOTA_Tooltip_ability_thtd_yoshika_01_Description" "Miyako's every attack will attach a [poison] buff to units in target area, and decrease their movement speed, during 5s.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level *1/Per-Sec." - "DOTA_Tooltip_ability_thtd_yoshika_02_Description" "Depends on the number of [poison] buff,Miyako deals damage to units are attaching [poison] in inner circle.\n(This [poison] includes other units' poisoned Spell cards.)\n\n[Damage Multiplier]Damage:POWER POINT * Star Level * 0.5 * Num of Buff" - "DOTA_Tooltip_ability_thtd_yoshika_02" "Poison Nail [Poison Murder]" - "DOTA_Tooltip_modifier_yoshika_01_slow" "Poison Nail [Undead Murderer]" - "DOTA_Tooltip_modifier_yoshika_01_slow_Description" "This unit affects by [Poison], movement speed decreases." - "DOTA_Tooltip_ability_item_0097" "[R]Yoshika Miyako" - "DOTA_Tooltip_ability_item_0052_Description" "The saint Wakes up from sleeping eternally, when she was born she has got unbelievable gift, has beyond the mankind a lot.\nShe can undersatnd 10 people's spoken at the same time and give correct answers. It is said when she was a child, she used phus to make Four King's Shapes and built Four King Temple.On another hand, although there are some stories said she was born in the barn, they seems like jokes.\nNow she has become an immortal.But she still has not broken off with mankind's world, sometimes she even meddles in mankind's stuff. It perhaps is a habit was left due to be an Emperor before.\nHer character is so kind and humorous. However if you are meet face by face, you would make fault easily, even felt you have no secret now, so people mostly revered her.\n\n[★][Cipangu the Golden Sword]\n[★]Hermit Sign[Emperor of the Land of the Rising Sun]\n[★★★]Honor[Colors of Twelve Levels]\n[★★★★★][Newborn Divine Spirit]" - "DOTA_Tooltip_ability_item_0094_Description" "Ancients' spirit. Serving Toyosatomimi no Miko with Mononobe no Futo together.\nshe becomes a spirit due to be cheated by Futo, but she is not mind now.\nShe has the ability to fall the thunder.\n\n[★]Vengeful Spirit[Iruka's Thunder]\n[★★★]Thunder Arrow[Gagouji's Cyclone]\n[★★★★]Thunder Arrow[Gagouji's Tornado]" - "DOTA_Tooltip_ability_item_0095_Description" "The ancient keeps sleeping by cursing self in a long time.\nShe trys reaching immortal by using death to divide into Metempsychosis wheel.\nBut in fact it is not that simple, finally she was still found out by Death god.\nComparing with Toyosatomimi no Miko who lives until now, she seems not really like Gensokyo, perhaps it is because she is not suitable.\nThis can be found out some from her past.\nWhen she was alive, she didn't accept Buddhism preached from the mainland, oppositely believed Tao near the ancient Shintoism.\nHence Her magic and style of using magic are not really old. It can say it is her personal style.\n\n[★]Throwing Dishes[Mononobe's Eighty Sake Cups]\n[★★★]Saint Girl[Sun Goddess's Sacrifice]\n[★★★★]Blaze Sign[Sakuraiji in Flames]" - "DOTA_Tooltip_ability_item_0097_Description" "The corpses that are revived and controlled Kaku Seiga.\nThey are never feeling pain and exhausted,so they can break out huge power,\nand they are Loyal but a little bit stupid.\n\n[★]Poison Nail[Poison Murder]\n[★★★]Poison Nail[Undead Murderer]" - "yoshika" "Miyako Yoshika" - "DOTA_Tooltip_ability_thtd_seiga_01" "Evil Sign[Yang Xiaogui]" - "DOTA_Tooltip_ability_thtd_seiga_01_Description" "Each unit dies around Seiga have chance to produce a [zombie].\n\n[★]1%% probability to produce 1 [★]zombie.\n[★★]2%% probability to produce 1 [★]zombie,\n[★★★]2%% probability to produce 1 [★]zombie,1%% probability to produce 1 [★★] zombie.\n[★★★★]2%% probability to produce a [★★] zombie,1%% probability to produce 1 [★★★] zombie.\n[★★★★★]3%% probability to produce 1 [★★★] zombie, 1%% probability to produce 1 [★★★★] zombie." - "DOTA_Tooltip_ability_thtd_seiga_02_Description" "increase a units' attack speed, during 10s." - "DOTA_Tooltip_ability_thtd_seiga_02" "Demonify[Zouhuo Rumo]" - "DOTA_Tooltip_ability_thtd_seiga_02_attack_speed" "Attack Speed Increase:" - "DOTA_Tooltip_modifier_seiga_02_attack_speed_buff" "Demonify[Zouhuo Rumo]" - "DOTA_Tooltip_modifier_seiga_02_attack_speed_buff_Description" "Affecting by Kaku Seiga, this unit's attack speed increases." - "DOTA_Tooltip_ability_thtd_seiga_03" "Necromancy[Corpse Tongji]" - "DOTA_Tooltip_ability_thtd_seiga_03_Description" "Each unit dies near her, other units around the dead unit will be hurt by amount of [Poison] buffs in dead units near her.\n\n[Damage Multiplier]Damage:Power Point*Star Level*0.5*amount of buffs" - "DOTA_Tooltip_ability_item_0096" "[SR]Kaku Seiga" - "seiga" "Kaku Seiga" - "DOTA_Tooltip_ability_item_1011" "Zombie Lv1" - "DOTA_Tooltip_ability_item_1011_Description" "Can replace any 1 [★] Shikigami." - "DOTA_Tooltip_ability_item_1012" "Zombie Lv2" - "DOTA_Tooltip_ability_item_1012_Description" "Can replace any 1 [★★] Shikigami." - "DOTA_Tooltip_ability_item_1013" "Zombie Lv3" - "DOTA_Tooltip_ability_item_1013_Description" "Can replace any 1 [★★★] Shikigami." - "DOTA_Tooltip_ability_item_1014" "Zombie Lv4" - "DOTA_Tooltip_ability_item_1014_Description" "Can replace any 1 [★★★★] Shikigami." - "change_to_keine_04_jade" "Switch to [Three Sacred Treasures] - Orb" - "change_to_keine_04_mirror" "Switch to [Three Sacred Treasures] - Mirror" - "change_to_keine_04_sword" "Switch to [Three Sacred Treasures] - Sword" - "change_to_keine_04_shrine" "Switch to [Three Sacred Treasures] - Country" - "change_to_keine_shirasawa" "" - "change_to_keine_humen" "" - "keine" "Kamishirasawa Keine" - "change_to_close_ai" "" - "change_to_open_ai" "" - "medicine" "Medicine Melancholy" - "luna" "Luna Child" - "sunny" "Sunny Milk" - "star" "Star Sapphire" - "DOTA_Tooltip_ability_thtd_keine_01" "Spiritual Birth [First Pyramid]" - "DOTA_Tooltip_ability_thtd_keine_01_Description" "Human Form: Increase a unit's attack damage, during 10s.\n\n[Damage Multiplier] Attack Increase:100/200/400/800/2000\n\nKeine Form: Ambition Sign [General Headquarters Crisis]\n\nAttack has 25%% Chance to stun units in target area 1s, and cause extra damage.\n\n[Damage Multiplier] Damage: Power Point*Star Level*1.0" - "DOTA_Tooltip_ability_thtd_keine_02" "Switch [Human]/[Keine] Form" - "DOTA_Tooltip_ability_thtd_keine_02_Description" "Switch to Human or Keine Form." - "DOTA_Tooltip_ability_thtd_keine_03_Description" "Human Form: Each attack has 20%% chance to devour target units [History],make Keine record this unit's current position and HP.\n\nKeine Form:Each attack has 20%% chance to create target units' [History], this unit will be back to the position and HP in devoured [History] recording.\n\nActive Use:\nHuman Form: Devour all units' [History] in target area.\n\nKeine Form: Create all units' [History] in target area.\n\n[Cooperation Promotion - Fujiwara no mokou]\n\nChance increases to 50%%." - "DOTA_Tooltip_ability_thtd_keine_03" "Pseudo-History [The Legend of Gensokyo]" - "DOTA_Tooltip_thtd_keine_03_debuff" "Pseudo-History [The Legend of Gensokyo]" - "DOTA_Tooltip_thtd_keine_03_debuff_Description" "This unit is devoured [History]." - "DOTA_Tooltip_ability_thtd_keine_04" "Land Sign [Three Sacred Treasures]" - "DOTA_Tooltip_ability_thtd_keine_04_Description" "When Keine creates [History], [History]'s effect can be changed by current treasure. \n\nLand Sign [Three Sacred Treasures - Sword]: Shoot a sword to target, cause Power Point*Star Level*5 damage to the target.\n\n[Three Sacred Treasures] - Orb: Cause damage bases of distances between current position and creating [History].\n\n[Three Sacred Treasures] - Mirror: make target units' HP become (Current HP - HP when Devouring [History ])*0.5." - "DOTA_Tooltip_ability_thtd_medicine_01" "Poison Sign[Poison Breath]" - "DOTA_Tooltip_ability_thtd_medicine_01_Description" "Medicine attacks targets will cause targets enter [Lost] Form and decrease movement speed, during 1.0s, then cause damage over time to them.\n\n[Damage Multiplier]Damage: Power Point*Star Level*1.0/per-sec" - "DOTA_Tooltip_ability_thtd_medicine_01_move_slow" "Movement speed Decrease Effect:" - "DOTA_Tooltip_modifier_medicine_01_slow" "Poison Sign[Poison Breath]" - "DOTA_Tooltip_modifier_medicine_01_slow_Description" "This unit's movement speed is decreased, because Medicine's posion attack." - "DOTA_Tooltip_ability_thtd_medicine_02" "Fog Sign[Gassing Garden]" - "DOTA_Tooltip_ability_thtd_medicine_02_Description" "Release gas to target area, attract nearby units, and cause damage over time.\n\n[Damage Multiplier]Damage:Power Point*Star Level*4.0/per-sec" - "DOTA_Tooltip_ability_thtd_star_01" "Shooting Star[Petit Comet]" - "DOTA_Tooltip_ability_thtd_star_02" "Star Sign[Starlight Rain]" - "DOTA_Tooltip_ability_thtd_star_01_Description" "Star releases shooting star in target position, cause damage to target and decrease the movement speed.\n\n[Damage Multiplier]Damage:Power Point*Star Level*1.0\n\n[Cooperation Promotion - Sunny Milk, Luna Child]\n\nUnits in fairies' area will gain 1 shooting star attack." - "DOTA_Tooltip_ability_thtd_star_01_move_slow" "Movement Speed Decrease effect:" - "DOTA_Tooltip_modifier_star_01_slow" "Shooting Star[Petit Comet]" - "DOTA_Tooltip_modifier_star_01_slow_Description" "This unit's movement speed is decreased because Star's influence." - "DOTA_Tooltip_ability_thtd_star_02_Description" "Release 20 times shooting star in target area, each time will increase 5%% damage.\n\n[Damage Multiplier] Damage:Power Point*Star Level*5\n\n[Cooperation Promotion - Sunny Milk, Luna Child]\n\nUnits in fairies' area will also get 1 time shooting star attack." - "DOTA_Tooltip_ability_thtd_sunny_01" "Rainbow Light[Prism Flash]" - "DOTA_Tooltip_ability_thtd_sunny_01_Description" "Shoot laser to target to make laser reflect to 2 units, each reflection increase 100%% damage.\n\n[Damage Multiplier] Damage: Power Point*Star Level*1.0\n\n[Cooperation Promotion - Star Sapphire, Luna Child]\n\nUnits in fairies' area will also gain 1 laser effect." - "DOTA_Tooltip_ability_thtd_sunny_02_Description" "Switch damage which units in target area gain to pure damage, and make units in the area gain 110%%/115%%/125%% pure damage.\n\n[Cooperation Promotion - Star Sapphire, Luna Child]\n\nUnits in fairies' area will also get same effect." - "DOTA_Tooltip_ability_thtd_sunny_02" "Light Sign[Yellow Deflection]" - "DOTA_Tooltip_ability_thtd_luna_02" "Light Sign[Full Moon Night]" - "DOTA_Tooltip_ability_thtd_luna_01" "Moonlight[Moon Stillness]" - "DOTA_Tooltip_ability_thtd_luna_01_Description" "Luna's each attack will summon a moonlight to target and 2 units around it, and cause damage.Damage to surrounding units will increase 100%%.\n\n[Cooperation Promotion]Damage:Power Point*Star Level*1.0\n\n[Cooperation Promotion - Sunny Milk, Star Sapphire]\n\nUnits in fairies' area will also gain a moonlight attack." - "DOTA_Tooltip_ability_thtd_luna_02_Description" "Shooting to target position, every time shoot a unit will increase self's Power Points.\n\n[Damage Multiplier]Damage: Power Point*Star Level*5.0\n[Damage Multiplier]Power Point Increase: 100/250/500 /per-unit\n\n[Cooperation Promotion - Sunny Milk, Star Sapphire]\n\nUnits in faries' area will also increase Luna's Power Points." - "DOTA_Tooltip_modifier_sunny_02_debuff" "Light Sign[Yellow Deflection]" - "DOTA_Tooltip_modifier_sunny_02_debuff_Description" "Skill damage this unit gains will be switched to Pure Damage." - "DOTA_Tooltip_ability_item_0092" "[R]Medicine Melancholy" - "DOTA_Tooltip_ability_item_0056" "[R]Star Sapphire" - "DOTA_Tooltip_ability_item_0057" "[R]Sunny Milk" - "DOTA_Tooltip_ability_item_0058" "[R]Luna Child" - "DOTA_Tooltip_ability_item_0061" "[SR]Kamishirasawa Keine" - "DOTA_Tooltip_ability_thtd_suika_01" "Ghastly Atmosphere[Dense Fog Labyrinth]/Oni Sign[Ooeyama Complete Massacre]" - "DOTA_Tooltip_ability_thtd_suika_01_Description" "Using her ability to manipulate density and sparsity, Suika splits herself into Tiny Suikas. The Tiny Suikas inherit the main body's attack damage and abilities, however, they deal less damage and have reduced range.\n\nOni Sign[Ooeyama Complete Massacre]\n\nSuika's attacks have a 25%% chance to deal damage to units around the target and slow them.\n\n[Star Level Correlation]Damage: POWER*Star Level*1.0" - "DOTA_Tooltip_ability_thtd_suika_01_move_slow" "Slow:" - "DOTA_Tooltip_modifier_suika_01_slow_debuff" "Oni Sign[Ooeyama Complete Massacre]" - "DOTA_Tooltip_modifier_suika_01_slow_debuff_Description" "Due to Suika's doing this unit's movement speed has been reduced." - "DOTA_Tooltip_ability_thtd_suika_02" "Oni God[Missing Purple Power]" - "DOTA_Tooltip_ability_thtd_suika_02_Description" "Using her ability to manipulate density and sparsity, Suika turns into GIANT SUIKA.\n\n GIANT SUIKA deals more damage and has increased range, however, she has a lower chance to proc [Ooeyama Complete Massacre]." - "DOTA_Tooltip_ability_thtd_suika_03" "Onibi[Super-High-Density Phosphor Calamity Technique]" - "DOTA_Tooltip_ability_thtd_suika_03_Description" "Suika throws a fireball at the targeted location, damaging all enemies within the impact area." - "DOTA_Tooltip_ability_thtd_suika_04" "Drunken Dream[Segaki Binding Technique]" - "DOTA_Tooltip_ability_thtd_suika_04_Description" "Suika uses her chain to pull a targeted unit, preventing her from moving away from Suika any more than 800 units while receiving damage over time. If the target tries to break free, she will receive double damage.\n\n[Star Level Correlation]Damage: POWER * Star Level * 1.0" - "DOTA_Tooltip_ability_thtd_yuugi_01" "Shackle Sign[Shackles A Criminal Can't Take Off]" - "DOTA_Tooltip_ability_thtd_yuugi_01_Description" "Yuugi stamps on the ground, dealing damage to all enemies within 1000 units around her. The more enemies around her, the higher the chance to deal increased damage.\n\n[Star Level Correlation]Damage: POWER * Star Level * (5-15)" - "DOTA_Tooltip_ability_thtd_yuugi_02" "Feat of Strength[Ooeyama Storm]" - "DOTA_Tooltip_ability_thtd_yuugi_02_Description" "Yuugi's attack have a 30%% chance to slam the ground around the target, dealing damage and knocking back all enemies within that area.\n\n[Star Level Correlation]Damage: POWER * Star Level * 2" - "DOTA_Tooltip_ability_thtd_yuugi_03" "Secret Technique of the Four Heavenly Kings[Three Step Kill]" - "DOTA_Tooltip_ability_thtd_yuugi_03_Description" "Yuugi stops any enemy movement in the targeted area for 2 seconds. If an enemy leaves the targeted area, she will receive a great amount of damage after taking three steps. \n\n[Star Level Correlation]Damage: POWER * Star Level * 20" - "DOTA_Tooltip_modifier_yuugi_03_pause_unit" "Secret Technique of the Four Heavenly Kings[Three Step Kill]" - "DOTA_Tooltip_modifier_yuugi_03_pause_unit_Description" "Omae wa mou shindeiru!" - "DOTA_Tooltip_modifier_yuugi_02_pause_unit" "Feat of Strength[Ooeyama Storm]" - "DOTA_Tooltip_modifier_yuugi_02_pause_unit_Description" "This unit has been knocked back by Yuugi." - "DOTA_Tooltip_ability_item_0054" "【SR】Hoshiguma Yuugi" - "DOTA_Tooltip_ability_item_0055" "【SR】Ibuki Suika" - "suika" "Ibuki Suika" - "yuugi" "Hoshiguma Yuugi" - "DOTA_Tooltip_ability_item_0073" "【SSR】Junko" - "DOTA_Tooltip_ability_item_0073_Lore" "This vengeance will be repeated forever." - "DOTA_Tooltip_ability_item_0073_Description" "Hou Yi's imperial concubine has strong hatred for Chang'e. The husband had killed his son, which was the first resentment, but the resentment had been purified. Pure fox purifies her hatred so that her identity is no longer important. Now anger and hatred are the only motive force that drives her to act, that is, where her heart exists." - "junko" "Junko" - "DOTA_Tooltip_ability_thtd_junko_01" "Shackle Sign「purification」" - "DOTA_Tooltip_ability_thtd_junko_01_Description" "Pure fox releases its pure power, so that the target has the same ability to purify itself. \n[Purified Damage] Skills directly cause the final damage according to the skill damage. They don't eat any other additions or subtractions, including the explosion and special effects of items, and ignore the enemy's damage reduction. Equipments only have basic attributes and energy to be useful." - "DOTA_Tooltip_ability_thtd_junko_02" "Shackle Sign「pure light」" - "DOTA_Tooltip_ability_thtd_junko_02_Description" "Pure fox transforms its resentment into an arrow of light, injure the target and add mental damage.\nDamage: energy point * star * 3. Mental injury: the highest superposition is to the 10 level." - "DOTA_Tooltip_ability_thtd_junko_03" "Shackle Sign「Kill the meaning」" - "DOTA_Tooltip_ability_thtd_junko_03_Description" "Pure fox transforms the killing around it into pure power, causing damage to the target, and adds additional effects according to the number of wound layers of the target.\nStar related injury: energy point * star * 5. Additional effects: The number of wound layers increasing the damage of this skill by 10% per layer; the number of wound layers is equal to 10 layers, stunning target for 2 second; and the effect of the wound will be removed." - "DOTA_Tooltip_ability_item_0074" "【SSR】Hecatia Lapislazuli" - "DOTA_Tooltip_ability_item_0074_Lore" "There is resentment against Chang'e because the husband of Chang'e is the one who shot down the sun (Apollo)." - "DOTA_Tooltip_ability_item_0074_Description" "The mysterious spirit of the moon, the earth and the outer boundary. She has the body in three worlds at the same time, and can freely come and go in different worlds. By the way, dreams are equivalent to different worlds." - "hecatia" "Hecatia Lapislazuli" - "DOTA_Tooltip_ability_thtd_hecatia_01" "earth" - "DOTA_Tooltip_ability_thtd_hecatia_01_Description" "Hcartiya releases the sphere representing the earth floating around, and the body transforms every second.\nThe ball hits the enemy to launch the following effects according to its own form. If the form is Earth, the first effect will be launched, otherwise the second effect will be launched.\n1. foul play: damage to target and wound for 1 second, damage: energy * star *2. Each enemy can only be hit in 2 seconds, range: 350.\n2. Rainfall in Hell: Each rainfall will damage the target, range: 500, damage: energy * STAR * 3." - "DOTA_Tooltip_ability_thtd_hecatia_02" "Moon" - "DOTA_Tooltip_ability_thtd_hecatia_02_Description" "Hcartiya releases the sphere that represents the moon floating around, and the body transforms every second.\n\nWhen the ball collides with the enemy, it launches the following effects according to its own form. If the form is the moon, it launches the first effect, otherwise the second effect.\n1. Apollo mirror: from the body to the moon, reflecting to the surrounding units, damage: energy * STAR * 4.5, range: 350.\n2. month frenzy impact: each hit the enemy will cause damage and repulse, damage: energy * star *4.5. Each enemy can only be hit in 2 seconds, range: 250" - "DOTA_Tooltip_ability_thtd_hecatia_03" "Alien border" - "DOTA_Tooltip_ability_thtd_hecatia_03_Description" "Hcartiya releases the sphere that represents the other side floating around, and the body transforms every second.\n\nThe ball hits the enemy to launch the following effects according to its own form. If the form is different, the first effect will be launched, otherwise the second effect will be launched.\n1. Dusk and dusk: leaving fog, causing sustained damage and attracting targets, damage: energy * star, activation range: 350, attraction range: 500, duration: 3 seconds.\n2. the non ideal barrage of Hell: Launch 12 barrage, damage: energy * star *3, range: 350." - "DOTA_Tooltip_ability_thtd_hecatia_04" "Three-in-one" - "DOTA_Tooltip_ability_thtd_hecatia_04_Description" "Hcartiya manipulated three spheres to launch the trinity of Rhapsody.\n\nOntology will constantly change shape. When the shape sphere hits the target release skill, it will produce a triangle. When it forms three triangles, it will link three triangles and use laser to scan the surrounding units.\nDamage: energy * star *5, lasts 5 seconds." - "DOTA_Tooltip_modifier_earthshock_debuff_datadriven" "shockwave" - "DOTA_Tooltip_modifier_earthshock_debuff_datadriven_Description" "Affected by the shock wave of the devil, the speed is reduced." - "DOTA_Tooltip_ability_thtd_shinki_04" "「Return of the devil」" - "DOTA_Tooltip_ability_thtd_shinki_04_Description" "Goddess summons the Devil King as the Lord of the Devil World, so that the great Devil King lost in time and space can return. The great Devil King's attack power is a star-rated energy of the Devil King.\nThe great devil has three skills:\nDevouring: Devouring an enemy every 30 seconds and growing up. Each 5%% increase in attack requires digestion before it can devour the next one. When the enemy is digested, it suffers pure damage with the same attack power per second. When the size grows to the extreme, it does not grow.\nStrike: The Devil's attack has a 50%% chance of stunning an enemy 300 yards around the target and causing 5 times the pure damage of a normal attack.\nWrath: The Great Devil gets angry and slams the ground, causing a wide range of shocks, hitting the affected enemy hard and slowing down by 60%%, causing pure damage in double attacks.\nAt the same time, there is only one big devil." - "DOTA_Tooltip_ability_item_0059" "【SR】Alice Margatroid" - "DOTA_Tooltip_ability_item_0059_Lore" "As a collector, he often meets magic, and the relationship between the two is incompatible with fire and water." - "DOTA_Tooltip_ability_item_0059_Description" "Alice Margaret Loyd is a magical manipulator who can manipulate dolls with magic and make them vivid and artistic. Alice is also a collector. He has a hobby of collecting magic books and other things." - "alice" "Alice Margatroid" - "DOTA_Tooltip_ability_thtd_alice_01" "Magic operation 「puppet ambush」" - "DOTA_Tooltip_ability_thtd_alice_01_Description" "Alice placed a doll in a fixed place. The doll remained in a latent state. When the target approached, the doll exploded, causing range damage and increasing subsequent damage to the target for 2 minutes.\n\nStar related injury: energy * star *5\nDamage increased: 3%% 6%% 9%% 12%% 18%%\nDuration: 3 seconds.\nDetonation range: 150, damage range: 300" - "DOTA_Tooltip_ability_thtd_alice_02" "Curse the 「Falanxi Doll」" - "DOTA_Tooltip_ability_thtd_alice_02_Description" "Alice calls on elaborate dolls to fight instead of herself, and observes the command in the rear." - "DOTA_Tooltip_ability_thtd_alice_03" "War symbol 「small military force」" - "DOTA_Tooltip_ability_thtd_alice_03_Description" "Alice placed the doll in front of her to protect herself closely, and sent a laser across the front, causing a lot of damage.\n[star correlation] damage: energy * star *7, times: 10" - "DOTA_Tooltip_modifier_alice_01_debuff" "Puppet ambush" - "DOTA_Tooltip_modifier_alice_01_debuff_Description" "Influenced by the explosion of the puppet soldiers, they were hurt." - "DOTA_Tooltip_modifier_alice_shanghainingyou_crit_chance" "strike a deadly blow" - "DOTA_Tooltip_modifier_alice_shanghainingyou_crit_chance_Description" "Standing near the Shanghai doll, the explosion increased." - "DOTA_Tooltip_modifier_alice_hourainingyou_buff" "Heavy blow" - "DOTA_Tooltip_modifier_alice_hourainingyou_buff_Description" "Standing near the Penglai dolls, there is a chance to cause a heavy blow." - - "kokoro" "秦心" - "DOTA_Tooltip_ability_item_0053" "【SR】秦心" - "DOTA_Tooltip_ability_item_0053_Lore" "猿乐之祖秦河胜使用的面具历经漫长的时间后化作的妖怪" - "DOTA_Tooltip_ability_item_0053_Description" "表情丰富的扑克脸,每个面具都代表固定的感情,戴上面具后感情就会变化,感情也会影响到在附近的人。" - "DOTA_Tooltip_ability_thtd_kokoro_01" "凭依「喜怒哀乐附体」" - "DOTA_Tooltip_ability_thtd_kokoro_01_Description" "秦心操纵感情的力量,将喜怒哀乐化成面具攻击目标,并降低目标基础护甲和持续造成伤害。\n【星级相关】伤害: 能量*星级*5 每秒\n【星级相关】护甲降低:10 20 30 40 60 (与水银之毒不叠加)" - "DOTA_Tooltip_ability_thtd_kokoro_02" "怒面「吼怒的妖狐面」" - "DOTA_Tooltip_ability_thtd_kokoro_02_Description" "戴上狐面,将面具化成灵气变成狐狸扑向目标并咬住目标,造成伤害并晕眩目标1.5秒。\n【星级相关】伤害: 能量*星级*5。" - "DOTA_Tooltip_ability_thtd_kokoro_03" "喜符「狂喜的火男面」" - "DOTA_Tooltip_ability_thtd_kokoro_03_Description" "戴上火男面具,从面具和心洋溢出来的喜悦的感情撒向周围,提升物理伤害。\n【星级相关】物理伤害提升: 30%%" - "DOTA_Tooltip_ability_thtd_kokoro_04" "特技「表情丰富的扑克脸」" - "DOTA_Tooltip_ability_thtd_kokoro_04_Description" "她能将感情车转轮换,但是自身却始终是面无表情。使用技能后心会释放「喜」「忧」「怒」三种感情,在这些感情有效的期间增强对应的技能。\n「喜」: 狂喜的火男面效果提高50%%。\n「忧」: 喜怒哀乐伤害提高50%%。\n「怒」: 吼怒的妖狐面冷却加快50%%。" - "DOTA_Tooltip_modifier_kokoro_01_debuff" "喜怒哀乐附体" - "DOTA_Tooltip_modifier_kokoro_01_debuff_Description" "造成持续伤害并降低护甲" - "DOTA_Tooltip_modifier_kokoro_03_buff" "狂喜的火男面" - "DOTA_Tooltip_modifier_kokoro_03_buff_Description" "物理伤害提高了" - "DOTA_Tooltip_modifier_kokoro_04_buff_1" "「忧」" - "DOTA_Tooltip_modifier_kokoro_04_buff_1_Description" "喜怒哀乐附体附加了减速" - "DOTA_Tooltip_modifier_kokoro_04_buff_2" "「怒」" - "DOTA_Tooltip_modifier_kokoro_04_buff_2_Description" "吼怒的妖狐面效果提高了" - "DOTA_Tooltip_modifier_kokoro_04_buff_3" "「喜」" - "DOTA_Tooltip_modifier_kokoro_04_buff_3_Description" "狂喜的火男面效果提高了" - - "hina" "键山雏" - "DOTA_Tooltip_ability_item_0091" "【R】键山雏" - "DOTA_Tooltip_ability_item_0091_Lore" "收集厄运,是因为厄运可以成为她的力量。厄运的负面能量本身是使她行动的原动力。疫病神虽然名字里有个神字,但却不追求信仰。她并非普通的神明,而是妖怪的一种。" - "DOTA_Tooltip_ability_item_0091_Description" "收集厄运的神明,但她本人却完全没有恶意,倒不如说她是个待人友好的神明,收集厄运的本意也只是为了不让厄运转移到人类身上。" - "DOTA_Tooltip_ability_thtd_hina_01" "创符「痛苦之流」" - "DOTA_Tooltip_ability_thtd_hina_01_Description" "降低周围单位的移速。\n【星级相关】移速减少:20/30/40/50/65%%" - "DOTA_Tooltip_ability_thtd_hina_01_move_slow" "移速降低:" - "DOTA_Tooltip_ability_thtd_hina_02" "厄符「厄运」" - "DOTA_Tooltip_ability_thtd_hina_02_Description" "对「痛苦之流」影响的单位施加厄运,每4秒造成伤害,目标在受到纯粹伤害时会附加额外伤害:当超过伤害来源的星级*能量*4时,附加星级*能量*4的伤害,低于时40%%概率伤害提高40%%。\n【星级相关】伤害: 能量*星级*4" - "DOTA_Tooltip_modifier_hina_01_slow_debuff" "创符「痛苦之流」" - "DOTA_Tooltip_modifier_hina_01_slow_debuff_Description" "该单位受到键山雏「痛苦之流」影响" - - "DOTA_Tooltip_modifier_touhoutd_extra_gold" "超过上限金钱" - "DOTA_Tooltip_modifier_touhoutd_extra_gold_Description" "超过上限金钱已记录,将在下次获取金钱时补入到当前金钱中,每层代表1000金钱。" - "DOTA_Tooltip_modifier_item_2011_stun_lock" "月兔粉碎巨刃" - "DOTA_Tooltip_modifier_item_2011_stun_lock_Description" "月兔粉碎巨刃晕眩效果处于冷却中" - "DOTA_Tooltip_modifier_touhoutd_luck" "幸运日" - "DOTA_Tooltip_modifier_touhoutd_luck_Description" "今天捡到四叶草,全身充满正能量!每层提高1%%的伤害输出!" - "DOTA_Tooltip_modifier_touhoutd_unluck" "特殊日" - "DOTA_Tooltip_modifier_touhoutd_unluck_Description" "今天日子特殊,这个...那个...,心情不佳!每层降低1%%的伤害输出!" - - "kagerou" "今泉影狼" - "DOTA_Tooltip_ability_item_0045" "【SR】今泉影狼" - "DOTA_Tooltip_ability_item_0045_Lore" "因为比较在意满月之夜的时候全身体毛会变多,所以平常都遮住皮肤,一个人静静的生活。" - "DOTA_Tooltip_ability_item_0045_Description" "她是在外面的世界已经绝种的日本狼的狼女。有着狼的特征,会在满月变成狼,毛发会变多,但是依旧能保持理智。\n因为她自己比较在意体毛变多这件事,平常都是遮住皮肤,独自生活在迷途竹林里。\n因为被万宝槌的魔力所影响,正当她变得凶暴之时就被灵梦等人狠狠的教训了一顿。如今又再度变得温顺了。\n【★】特质「奔狼之血」\n【★】爪符「刚猛利爪」\n【★】咆哮「陌生的咆哮」\n【★★★】变身「星形齿」" - "DOTA_Tooltip_ability_thtd_kagerou_01" "link_DOTA_Tooltip_ability_sven_great_cleave" - "DOTA_Tooltip_ability_thtd_kagerou_02" "link_DOTA_Tooltip_ability_lycan_howl" - "DOTA_Tooltip_ability_thtd_kagerou_03" "link_DOTA_Tooltip_ability_lycan_shapeshift" - "DOTA_Tooltip_ability_lycan_feral_impulse" "特质「奔狼之血」" - "DOTA_Tooltip_ability_lycan_feral_impulse_Description" "提升影狼及周围队友的攻击力,影狼普通攻击会额外附加 能量点*星级*系数 的伤害。" - "DOTA_Tooltip_ability_lycan_feral_impulse_Lore" "奔狼之血强化了她的反应能力和强度。" - "DOTA_Tooltip_ability_lycan_feral_impulse_radius" "攻击范围:" - "DOTA_Tooltip_ability_lycan_feral_impulse_bonus_hp_regen" "伤害附加系数:" - "DOTA_Tooltip_modifier_lycan_feral_impulse" "奔狼之血" - "DOTA_Tooltip_modifier_lycan_feral_impulse_Description" "攻击力加成:%dMODIFIER_PROPERTY_BASEDAMAGEOUTGOING_PERCENTAGE%%%。" - "DOTA_Tooltip_ability_sven_great_cleave" "爪符「刚猛利爪」" - "DOTA_Tooltip_ability_sven_great_cleave_Description" "影狼以利爪攻击,对所有附近的敌方单位造成分裂攻击伤害。" - "DOTA_Tooltip_ability_sven_great_cleave_Lore" "影狼有着锋利的利爪,横扫前面敌人。" - "DOTA_Tooltip_ability_sven_great_cleave_Note0" "分裂伤害会计算护甲。" - "DOTA_Tooltip_ability_sven_great_cleave_Note1" "分裂伤害无视技能免疫。" - "DOTA_Tooltip_ability_sven_great_cleave_Note2" "" - "DOTA_Tooltip_ability_lycan_howl" "咆哮「陌生的咆哮」" - "DOTA_Tooltip_ability_lycan_howl_Lore" "毛骨悚然的狼嚎让敌人明白影狼就在它们之中。" - "DOTA_Tooltip_ability_lycan_howl_Description" "给予影狼和所有友方单位攻击速度加成,影狼额外获得攻击造成%hp_regen%倍伤害并附带能量点*星级*%armor%的伤害。" - "DOTA_Tooltip_ability_lycan_howl_armor" "额外伤害(能量点*星级):" - "DOTA_Tooltip_ability_lycan_howl_hp_regen" "攻击伤害倍数:" - "DOTA_Tooltip_modifier_lycan_howl" "咆哮「陌生的咆哮」" - "DOTA_Tooltip_modifier_lycan_howl_Description" "获得%dMODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT%攻击速度。" - "DOTA_Tooltip_modifier_lycan_howl_aura" "陌生的咆哮" - "DOTA_Tooltip_modifier_lycan_howl_aura_Description" "玩家控制的单位获得咆哮效果。" - "DOTA_Tooltip_ability_lycan_shapeshift" "变身「星形齿」" - "DOTA_Tooltip_ability_lycan_shapeshift_Lore" "影狼接受了永恒的狼人诅咒,拥抱了她的野性。" - "DOTA_Tooltip_ability_lycan_shapeshift_Description" "影狼展现出她的凶狼形态,获得致命一击的能力。每次攻击有%crit_chance%%%的几率造成%crit_multiplier%%%的致命一击伤害。\n凶狼形态在夜晚持续时间较长。" - "DOTA_Tooltip_ability_lycan_shapeshift_Note0" "" - "DOTA_Tooltip_ability_lycan_shapeshift_Note1" "" - "DOTA_Tooltip_ability_lycan_shapeshift_speed" "夜晚持续时间加成:" - "DOTA_Tooltip_ability_lycan_shapeshift_bonus_night_vision" "额外夜间视野:" - "DOTA_Tooltip_modifier_lycan_shapeshift_Description" "获得致命一击。" - "DOTA_Tooltip_modifier_lycan_shapeshift_speed_Description" "变身在夜间持续时间比白天要长。" - "DOTA_Tooltip_ability_life_stealer_feast" "爪符「刚猛利爪」" - "DOTA_Tooltip_ability_life_stealer_feast_Lore" "影狼有着锋利的利爪,能够造成流血的致命伤害。" - "DOTA_Tooltip_ability_life_stealer_feast_Description" "影狼每次攻击时还会根据目标最大生命值造成额外伤害。" - "DOTA_Tooltip_ability_life_stealer_feast_hp_leech_percent" "%额外伤害:" - "DOTA_Tooltip_ability_life_stealer_feast_Note0" "" - "DOTA_Tooltip_ability_life_stealer_feast_Note1" "" - "DOTA_Tooltip_ability_life_stealer_feast_Note2" "" - "DOTA_Tooltip_ability_life_stealer_feast_Note3" "" - - "wriggle" "莉格露·奈特巴格" - "DOTA_Tooltip_ability_item_0060" "【R】莉格露·奈特巴格" - "DOTA_Tooltip_ability_item_0060_Lore" "当发现莉格露身边没有虫子并且看起来很有自信的话,那时是最危险的。说不定在她的身边,已集满了恙虫。" - "DOTA_Tooltip_ability_item_0060_Description" "莉格露被称为虫之妖怪,更准确的说法是萤火虫妖怪。她伴随着大群昆虫出现,让昆虫自由地活动。\n她身边总是围绕着很多虫子。大量集结的萤火虫之所以能分秒不差,整齐地同时闪烁,正是因为当中存在着她这样的命令中枢。不要以为只是藐小的虫子而已,一旦被大量的虫子袭击绝不会好受。特别于她发怒而使出真正实力的时候,召唤出来的恙虫大军,可会令人高烧致死。\n【★】蠢符「小虫风暴」\n【★★★】萤符「地上的恒星」" - "DOTA_Tooltip_ability_thtd_wriggle_01" "link_DOTA_Tooltip_ability_death_prophet_exorcism" - "DOTA_Tooltip_ability_thtd_wriggle_02" "link_DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp" - "DOTA_Tooltip_modifier_weaver_swarm_debuff" "蠢符「小虫风暴」" - "DOTA_Tooltip_modifier_weaver_swarm_debuff_Description" "正在造成伤害并削弱护甲。" - "DOTA_Tooltip_ability_death_prophet_exorcism" "蠢符「小虫风暴」" - "DOTA_Tooltip_ability_death_prophet_exorcism_Lore" "莉格露身边总是围绕着很多虫子听从号令。" - "DOTA_Tooltip_ability_death_prophet_exorcism_Description" "莉格露释放虫群攻击敌人。" - "DOTA_Tooltip_ability_death_prophet_exorcism_Note0" "作用范围代表莉格露周围的虫群寻找目标的范围。" - "DOTA_Tooltip_ability_death_prophet_exorcism_Note1" "虫群的伤害为物理技能伤害。" - "DOTA_Tooltip_ability_death_prophet_exorcism_radius" "作用范围:" - "DOTA_Tooltip_ability_death_prophet_exorcism_spirits" "虫群数量:" - "DOTA_Tooltip_ability_death_prophet_exorcism_heal_percent" "伤害(莉格露的能量点*星级):" - "DOTA_Tooltip_ability_death_prophet_exorcism_average_damage" "虫群移动速度:" - "DOTA_Tooltip_modifier_death_prophet_exorcism" "蠢符「小虫风暴」" - "DOTA_Tooltip_modifier_death_prophet_exorcism_description" "?" - "DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp" "萤符「地上的恒星」" - "DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp_Description" "在目标区域大量集结变异的萤火虫,施放强光,每秒交替闪亮和闪灭。闪亮时将使附近所有敌人被蛊惑,强制凝视萤火虫群。" - "DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp_radius" "作用范围:" - "DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp_on_count" "闪亮次数:" - "DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp_hit_count" "被蛊惑时移速:" - "DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp_off_duration" "闪灭持续时间:" - "DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp_on_duration" "闪亮持续时间:" - "DOTA_Tooltip_modifier_keeper_of_the_light_will_o_wisp" "被蛊惑" - "DOTA_Tooltip_modifier_keeper_of_the_light_will_o_wisp_Description" "" - "DOTA_Tooltip_modifier_keeper_of_the_light_will_o_wisp_aura" "蛊惑光环" - "DOTA_Tooltip_modifier_keeper_of_the_light_will_o_wisp_aura_Description" "作用范围内敌人被闪亮的光源蛊惑。" - - "inaba" "因幡帝" - "DOTA_Tooltip_ability_item_0062" "【R】因幡帝" - "DOTA_Tooltip_ability_item_0062_Lore" "于竹林里迷路的人,偶然会看到她的身影。据说只要见到她就必定能够找到出路,所以人们都将她看成是竹林的引路人。" - "DOTA_Tooltip_ability_item_0062_Description" "她懂人话,而且能变成人的样子。虽说是妖怪兔,但她别名是幸运的白兔,据说见到她的人能得到幸运。不过她常常在迷失竹林,而且身法敏捷,可不容易看得到。\n性格喜欢捉弄人,受惊吓会立刻逃跑,很狡猾。喜怒哀乐鲜明,和妖精性情相似。\n【★】爆头「幸运之击」\n【★】兔符「开运大纹」" - "DOTA_Tooltip_ability_thtd_inaba_01" "link_DOTA_Tooltip_ability_sniper_headshot" - "DOTA_Tooltip_ability_thtd_inaba_02" "link_DOTA_Tooltip_ability_ogre_magi_bloodlust" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist" "脱兔「逃脱之击」" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_Lore" "顷刻之间,无影无踪。" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_Description" "因幡帝以最擅长的逃脱的速度横冲直撞,攻击目标区域内所有敌人,随后返回所在位置,并在此期间提高自己造成的伤害。" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_radius" "作用范围:" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_bonus_hero_damage" "伤害(因幡帝的能量点*星级):" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_attack_interval" "攻击间隔:" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_creep_damage_penalty" "%伤害提升:" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_Note0" "在施放技能时作用的目标就已决定。" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_Note1" "对目标的攻击每次间隔0.2秒。" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_Note2" "拥有的攻击特效(如致命一击、重击、分裂等效果)在技能攻击期间都能生效。" - "DOTA_Tooltip_ability_ember_spirit_sleight_of_fist_Note3" "施放时间可以使用其他技能和物品。" - "DOTA_Tooltip_modifier_ember_spirit_sleight_of_fist_charge_counter" "脱兔「逃脱之击」能量点数" - "DOTA_Tooltip_ability_sniper_headshot" "爆头「幸运之击」" - "DOTA_Tooltip_ability_sniper_headshot_Lore" "童年时对潜行兽的胡乱射击现在被练就成攻击敌人的技术。" - "DOTA_Tooltip_ability_sniper_headshot_Description" "因幡帝提高她的精确度,每次攻击根据目标最大生命值造成额外伤害,并有一定概率造成短暂的移动停滞。" - "DOTA_Tooltip_ability_sniper_headshot_Note0" "额外伤害基于目标最大生命值,没有上限限制。" - "DOTA_Tooltip_ability_sniper_headshot_proc_chance" "%停滞概率:" - "DOTA_Tooltip_ability_sniper_headshot_knockback_distance" "击退距离:" - "DOTA_Tooltip_ability_sniper_headshot_slow_duration" "%额外伤害:" - "DOTA_Tooltip_modifier_sniper_headshot_slow" "爆头停滞" - "DOTA_Tooltip_modifier_sniper_headshot_slow_Description" "因幡帝的爆头使其停滞!" - "DOTA_Tooltip_ability_ogre_magi_bloodlust" "兔符「开运大纹」" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_Description" "将运气带给一个友方单位,增加其攻击速度和提升伤害。" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_Lore" "幸运的白兔,据说见到她的人能得到幸运。" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_duration" "持续时间:" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_bonus_attack_speed" "额外攻击速度:" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_bonus_movement_speed" "%爆击概率提升:" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_self_bonus" "对己攻击速度加成:" - "DOTA_Tooltip_modifier_ogre_magi_bloodlust" "兔符「开运大纹」" - "DOTA_Tooltip_modifier_ogre_magi_bloodlust_description" "爆击概率提升%dMODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE%%%,攻击速度提升%dMODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT%。" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_Note0" "爆击概率与物品叠加" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_Note1" "" - "DOTA_Tooltip_ability_ogre_magi_bloodlust_Note2" "" - } -} diff --git a/tools/copy_localization_lines.py b/tools/copy_localization_lines.py new file mode 100644 index 0000000..b1e7aa8 --- /dev/null +++ b/tools/copy_localization_lines.py @@ -0,0 +1,20 @@ +import vdf +import sys + +def main(english_keyfile: str, chinese_keyfile: str, output_file: str): + chinese = vdf.load(open(chinese_keyfile, encoding='utf-16-le'), mapper=vdf.VDFDict)['lang']['Tokens'] + english = vdf.load(open(english_keyfile), mapper=vdf.VDFDict)['lang']['Tokens'] + output = vdf.VDFDict() + output['lang'] = vdf.VDFDict() + output['lang']['Language'] = "english" + output['lang']['Tokens'] = vdf.VDFDict() + output_tokens = output['lang']['Tokens'] + for key in chinese: + #print(key) + if key in english.keys(): + output_tokens[key] = english[key] + else: + output_tokens[key] = chinese[key] + vdf.dump(output, open(output_file, 'w'),pretty=True) +args = sys.argv[1:] +main(args[0], args[1], args[2]) \ No newline at end of file diff --git a/tools/out.txt b/tools/out.txt new file mode 100644 index 0000000..6492ffb --- /dev/null +++ b/tools/out.txt @@ -0,0 +1,3202 @@ +"lang" +{ + "Language" "english" + "Tokens" + { + "game_mode_15" "Touhou Dream Sign Festival" + "addon_game_name" "Touhou Dream Sign Festival" + "DOTA_Hero_Selection_Team_Good" "Hakurei Shrine" + "DOTA_Hero_Selection_Team_Bad" "Incident" + "dota_match_history_Winner_GoodGuys" "Winner: Hakurei Shrine" + "dota_match_history_Winner_BadGuys" "Winner: Incident" + "npc_dota_goodguys_fort" "Hakurei Shrine" + "npc_dota_hero_lina" "Hakurei Reimu" + "npc_dota_hero_juggernaut" "幻装灵梦" + "DOTA_GoodGuys" "Hakurei Shrine" + "DOTA_BadGuys" "Incident" + "DOTA_Winner_GoodGuys" "The Hakurei Shrine has won." + "DOTA_Winner_BadGuys" "Your whole body is covered in wounds..." + "DOTA_Starting_Team_Radiant" "Hakurei Shrine" + "DOTA_Starting_Team_Dire" "Incident" + "DOTA_GoodGuysCaps" "Hakurei Shrine" + "DOTA_BadGuysCaps" "Incident" + "DOTA_Chat_CourierRespawnedGood" "" + "DOTA_Chat_CourierRespawnedBad" "" + "npc_dota_fort" "Shrine" + "pause_game" "The game has been paused. Press F9 to restore the game!" + "item_locked_tip" "Locked items can not be used as materials for cultivation, star promotion, sale, and can not be picked up by teammates. Please make good use of this function to prevent misoperation or stolen items." + "reach_to_wave" "The specified wave number is successful and the next wave will jump directly to the {d:count} wave." + "power_game_end_info" "The maximum number of wave s that have been successfully passed this time: {d: wave}, the total damage of the wave: {d: damage} * 10,000, 30 seconds after the end of the game and settlement of rewards." + "normal_game_end_info" "{s:name} 已游戏失败,成功通过的波数:{d:wave}。" + "game_will_end" "一分钟后退出游戏,按F6截图。" + "challenge_game_on" "In Challenge mode, the endless preparation time is extended and three gifts from Nazlin Liebert, the autumn dumpling, are given directly from Wave 68." + "funny_game_on" "提示:无尽直接从第70波开始。" + "key_made_tip" "获得1把宠物小灵制造的钥匙。" + "game_start_vip_tip" "欢迎贡献者 {s:name} ,特别奖励持续到:{s:endtime}。" + "user_steam_id" "{s:name}" + "item_is_locked" "The item has been locked. Please click on the right-click items to open and unlock. Locked items can not be used as materials for training, rising stars, not for sale, and can not be picked up by teammates." + "item_disable_sell" "非运营所得物品禁止出售" + "not_has_key_item" "请从宠物小灵那里获取钥匙" + "not_key_unit" "魔法宝箱只能由博丽灵梦拾取" + "only_hero_use" "只能由博丽灵梦使用" + "only_less_ten_item2021" "原始榜只能用5瓶" + "only_target_self" "只能选中自己使用" + "only_unlimited_wave" "只能在无尽之后使用" + "only_water_area_use" "必须在自己的水域上" + "only_unlimited_280wave_before" "只能在无尽280波之前使用" + "only_not_unlimited_wave" "只能在无尽之前使用" + "only_max_wave_exist" "没有上榜波数,请先上榜" + "only_wave12_use" "只能在12波以后使用" + "reach_to_limit" "已达到上限" + "special_boss_exist" "已经使用,请完成挑战后再使用" + "skip_wave_exist" "已经使用了跳波,请通过后再使用" + "no_user_data" "无用户数据,新玩家请下次游戏再试" + "user_server_error" "服务器处理出错" + "connect_server_error" "无法连接服务器" + "not_enough_item_slot" "Not enough inventory space!" + "not_enough_game_point" "没有足够的符卡精华" + "not_enough_key_count" "没有足够的魔法钥匙" + "not_enough_food" "Not enough unit space!" + "the_same_card_reach_to_limit" "同名卡上场超过数量限制(SSR相同卡2张,SR相同卡4张,R相同卡6张)" + "card_cannot_unlock_when_having_equipment" "卡牌存在保留装备,请插拔将装备丢掉之后再回收解锁" + "start_card_cannot_be_sell" "开局初始卡不能出售" + "others_card_cannot_be_sell" "不能出售来自队友的物品" + "item_cannot_be_sell" "该物品无法出售" + "cannot_use_others_item_in_single_mode" "原始排行榜不能使用队友的卡牌和装备" + "cannot_vote_when_over_some_waves" "无尽20波以后不能发起踢人投票" + "new_card_test_tip" "该卡技能当前正在测试中,仅限特别奖励期间使用" + "target_is_error" "无效目标" + "minoriko_cannot_be_material" "娱乐模式下秋穣子不能当作素材" + "minoriko_cannot_be_change" "娱乐模式下,秋穣子在前10波不能使用交换技能" + "minoriko_change_one_tip" "娱乐模式下,秋穣子在前20波只能使用一次交换技能" + "hero_is_game_over" "该商店所在位置已经游戏失败" + "roll_card_reach_to_max" "已经达到最大使用次数" + "roll_card_reach_to_wave" "可用次数已用完需通过一波后再使用" + "random_card_power_up" "{s:user}使用了「艾哲红石」,{s:card}的潜能获得永久提升" + "minoriko_up_to_5_star" "Please note that Minoriko has reached 5 stars!" + "sizuha_up_to_5_star" "Please note that Sizuha has reached 5 stars!" + "bonus_tower_limit" "You can only have a maximum of three income shikigami(Lily, Nazrin, Minoriko, Daiyousei, Shou, Shizuha, Shinki)!" + "player_disconnect" "A player has been disconnected! Enter -kickafk + player number to kick the player. Player number:" + "player_in_vote" "In the voting, one minute after the end of the mandatory, then vote can be launched again.\nCurrently kicked player number: {d:count}" + "player_vote_pass" "The vote has been successful and has been kicked out of the {d:count} player." + "player_vote_no_pass" "The vote was unsuccessful. The {d:count} player objected, and this polls ended." + "spawn_unlimited" "Endless level is imminent, you must stick to the defensive {d:count} bouts. In the endless level, each player will count the number of missing monsters individually. Simultaneously, all income category shikigami near expiry. Please use the last time to configure your shikigami lineup." + "start_unlimited" "已经进入无尽关卡准备时间,所有收益类式神已经失效,已重置秋穣子的交换次数,请利用好最后的时间配置阵容。" + "DOTA_Tooltip_ability_tt1" "拒绝盗版游戏" + "DOTA_Tooltip_ability_tt2" "抵制不良游戏" + "DOTA_Tooltip_ability_tt3" "谨防受骗上当" + "DOTA_Tooltip_ability_tt4" "注意自我保护" + "DOTA_Tooltip_ability_tt5" "沉迷游戏伤身" + "DOTA_Tooltip_ability_tt6" "适度游戏益脑" + "DOTA_Tooltip_ability_tt7" "享受健康生活" + "DOTA_Tooltip_ability_tt8" "合理安排时间" + "open_day_tip" "服务器当前时间:{s:server_time},游戏开始北京时间:{s:start_time},本月开放日:{s:open_day_list}。(贡献者特别奖励期间可随时进入娱乐模式和全部卡组)" + "game_ban_tip" "{s:player_name} 因 {s:reason} 被举报加入黑名单,已将其踢出游戏!" + "team_rank_tip" "{s:player_name}上榜将进入巅峰榜,因为{s:reason}" + "skip_wave_tip" "{s:player_name}召唤了{s:item_name},下一波直接跳到第{d:wave}波" + "power_view_tip" "下方头像栏右边第4行为能量点,第5行为暴击伤害,第6行为暴击概率" + "game_keyboard_tip" "按字母键 i 切换第一视角,输入 -0 至 -6 发表情,商店可购买跳关卷轴" + "funny_mode_bonus_no_use_tip" "娱乐模式所有收益卡收益无效,秋穣子初始三星" + "one_hundred_wave_tip" "恭喜通过100波大关,射命丸文见证了你的强大,急于报道而飞走了,以后不再出现" + "pause_game_forever" "游戏已永久暂停,再次点击或按 F9 可恢复游戏!" + "skip_wave_rank_tip" "本波为跳关后前4波(使用爆弹顺延),不计入有效波数" + "damage_less_rank_tip" "{s:player_name}的上一波最终阵容总伤害量低于90%总血量,不计入有效波数" + "test_tip" "{s:player_name}上一波最终阵容{s:locstring_value}低于{d:int_value}%总血量,{s:ability_name}不计入%s1有效波数" + "dota_tip_advanced_1" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_advanced_10" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_advanced_11" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_advanced_17" "物品可以锁定用来防偷和防误操作。" + "dota_tip_advanced_18" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_advanced_19" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_advanced_2" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_advanced_20" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_advanced_21" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_advanced_22" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_advanced_23" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_advanced_24" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_advanced_25" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_advanced_26" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_advanced_28" "本地图不能开启作弊和控制台启动。" + "dota_tip_advanced_29" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_advanced_3" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_advanced_30" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_advanced_31" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_advanced_32" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_advanced_33" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_advanced_34" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_advanced_35" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_advanced_36" "速度下限为100,最多减速到100为止。" + "dota_tip_advanced_37" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_advanced_38" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_advanced_39" "神绮大魔王的减速不叠加。" + "dota_tip_advanced_4" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_advanced_40" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_advanced_41" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_advanced_42" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_advanced_43" "每日任务一天只能完成一次。" + "dota_tip_advanced_44" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_advanced_45" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_advanced_46" "被动和光环、buff效果一般不会叠加。" + "dota_tip_advanced_47" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_advanced_48" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_advanced_5" "多人游戏时计巅峰排行榜。" + "dota_tip_advanced_6" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_advanced_7" "Buff层数最大为999。" + "dota_tip_advanced_8" "重要节假日一般会开启无限活力活动,开局可自选满潜能圣物" + "dota_tip_advanced_9" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_beginner_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_beginner_10" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_beginner_11" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_beginner_12" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_beginner_13" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_beginner_14" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_beginner_15" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_beginner_16" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_beginner_17" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_beginner_18" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_beginner_19" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_beginner_2" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_beginner_20" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_beginner_21" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_beginner_22" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_beginner_25" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_beginner_26" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_beginner_28" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_beginner_29" "物品可以锁定用来防偷和防误操作。" + "dota_tip_beginner_3" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_beginner_31" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_beginner_32" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_beginner_33" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_beginner_36" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_beginner_4" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_beginner_40" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_beginner_41" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_beginner_42" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_beginner_43" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_beginner_44" "本地图不能开启作弊和控制台启动。" + "dota_tip_beginner_45" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_beginner_46" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_beginner_47" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_beginner_48" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_beginner_49" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_beginner_5" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_beginner_50" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_beginner_51" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_beginner_52" "速度下限为100,最多减速到100为止。" + "dota_tip_beginner_53" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_beginner_54" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_beginner_55" "神绮大魔王的减速不叠加。" + "dota_tip_beginner_56" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_beginner_7" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_abaddon_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_abaddon_2" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_abaddon_3" "每日任务一天只能完成一次。" + "dota_tip_hero_abaddon_4" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_abaddon_5" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_abaddon_6" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_abaddon_7" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_abaddon_8" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_abyssal_underlord_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_alchemist_1" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_alchemist_2" "Buff层数最大为999。" + "dota_tip_hero_alchemist_3" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_alchemist_4" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_alchemist_5" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_alchemist_6" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_alchemist_7" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_ancient_apparition_1" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_antimage_1" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_arc_warden_1" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_arc_warden_2" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_arc_warden_3" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_arc_warden_4" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_axe_1" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_axe_2" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_axe_3" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_axe_4" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_axe_5" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_axe_6" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_axe_7" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_bane_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_bane_2" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_bane_3" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_bane_4" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_bane_5" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_batrider_1" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_beastmaster_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_beastmaster_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_beastmaster_3" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_beastmaster_4" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_beastmaster_5" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_beastmaster_6" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_bloodseeker_1" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_bloodseeker_2" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_bloodseeker_3" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_bloodseeker_4" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_bloodseeker_5" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_bloodseeker_6" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_bloodseeker_7" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_bloodseeker_8" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_bounty_hunter_1" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_bounty_hunter_2" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_brewmaster_1" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_brewmaster_2" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_brewmaster_3" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_brewmaster_4" "神绮大魔王的减速不叠加。" + "dota_tip_hero_brewmaster_5" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_brewmaster_6" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_bristleback_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_bristleback_2" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_bristleback_3" "每日任务一天只能完成一次。" + "dota_tip_hero_bristleback_4" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_bristleback_5" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_bristleback_6" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_bristleback_7" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_broodmother_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_centaur_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_centaur_2" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_centaur_3" "Buff层数最大为999。" + "dota_tip_hero_centaur_4" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_centaur_5" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_centaur_6" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_chaos_knight_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_chaos_knight_2" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_chaos_knight_3" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_chaos_knight_4" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_chaos_knight_5" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_chaos_knight_6" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_chaos_knight_7" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_chen_1" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_clinkz_1" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_crystal_maiden_1" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_crystal_maiden_2" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_crystal_maiden_3" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_crystal_maiden_4" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_dark_seer_1" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_dark_willow_1" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_dazzle_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_death_prophet_1" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_disruptor_1" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_doom_bringer_1" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_doom_bringer_2" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_doom_bringer_3" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_doom_bringer_4" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_doom_bringer_5" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_doom_bringer_6" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_dragon_knight_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_dragon_knight_2" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_dragon_knight_3" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_dragon_knight_4" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_dragon_knight_5" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_dragon_knight_6" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_drow_ranger_1" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_drow_ranger_2" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_drow_ranger_3" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_drow_ranger_4" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_drow_ranger_5" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_earth_spirit_1" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_earth_spirit_2" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_earth_spirit_3" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_earth_spirit_4" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_earth_spirit_5" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_earth_spirit_6" "神绮大魔王的减速不叠加。" + "dota_tip_hero_earth_spirit_7" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_earthshaker_1" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_earthshaker_2" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_earthshaker_3" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_earthshaker_4" "每日任务一天只能完成一次。" + "dota_tip_hero_earthshaker_5" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_earthshaker_6" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_earthshaker_7" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_earthshaker_8" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_elder_titan_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_ember_spirit_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_enchantress_1" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_enchantress_2" "Buff层数最大为999。" + "dota_tip_hero_enchantress_3" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_enigma_1" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_faceless_void_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_furion_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_gyrocopter_1" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_huskar_1" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_huskar_2" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_invoker_1" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_jakiro_1" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_juggernaut_1" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_juggernaut_2" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_juggernaut_3" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_juggernaut_4" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_juggernaut_5" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_juggernaut_6" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_keeper_of_the_light_1" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_kunkka_1" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_legion_commander_1" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_leshrac_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_lich_1" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_lich_2" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_life_stealer_1" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_lina_1" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_lion_1" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_lone_druid_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_lone_druid_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_luna_1" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_lycan_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_lycan_2" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_magnataur_1" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_medusa_1" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_meepo_1" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_mirana_1" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_mirana_2" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_mirana_3" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_mirana_4" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_mirana_5" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_mirana_6" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_mirana_7" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_monkey_king_1" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_morphling_1" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_morphling_2" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_morphling_3" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_morphling_4" "神绮大魔王的减速不叠加。" + "dota_tip_hero_morphling_5" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_morphling_6" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_naga_siren_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_naga_siren_2" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_necrolyte_1" "每日任务一天只能完成一次。" + "dota_tip_hero_necrolyte_2" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_night_stalker_1" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_nyx_assassin_1" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_obsidian_destroyer_1" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_ogre_magi_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_omniknight_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_oracle_1" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_oracle_2" "Buff层数最大为999。" + "dota_tip_hero_oracle_3" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_oracle_4" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_pangolier_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_phantom_assassin_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_phantom_lancer_1" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_phantom_lancer_2" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_phantom_lancer_3" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_phantom_lancer_4" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_phantom_lancer_5" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_phoenix_1" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_puck_1" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_puck_2" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_puck_3" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_puck_4" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_puck_5" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_puck_6" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_pudge_1" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_pudge_10" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_pudge_11" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_pudge_2" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_pudge_3" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_pudge_4" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_pudge_5" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_pudge_6" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_pudge_7" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_pudge_8" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_pudge_9" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_pugna_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_queenofpain_1" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_rattletrap_1" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_rattletrap_2" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_rattletrap_3" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_rattletrap_4" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_rattletrap_5" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_rattletrap_6" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_rattletrap_7" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_razor_1" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_razor_2" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_razor_3" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_razor_4" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_razor_5" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_razor_6" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_razor_7" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_riki_1" "神绮大魔王的减速不叠加。" + "dota_tip_hero_rubick_1" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_sand_king_1" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_sand_king_2" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_sand_king_3" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_sand_king_4" "每日任务一天只能完成一次。" + "dota_tip_hero_sand_king_5" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_sand_king_6" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_shadow_demon_1" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_shadow_fiend_1" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_shadow_fiend_2" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_shadow_fiend_3" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_shadow_fiend_4" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_shadow_fiend_5" "Buff层数最大为999。" + "dota_tip_hero_shadow_fiend_6" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_shadow_shaman_1" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_hero_shredder_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_hero_silencer_1" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_hero_skeleton_king_1" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_hero_skywrath_mage_1" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_hero_slardar_1" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_hero_slark_1" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_hero_sniper_1" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_hero_spectre_1" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_hero_spirit_breaker_1" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_hero_storm_spirit_1" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_hero_storm_spirit_2" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_hero_storm_spirit_3" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_hero_storm_spirit_4" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_hero_storm_spirit_5" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_hero_storm_spirit_6" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_hero_storm_spirit_7" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_hero_sven_1" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_hero_sven_2" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_hero_sven_3" "物品可以锁定用来防偷和防误操作。" + "dota_tip_hero_sven_4" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_hero_sven_5" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_hero_sven_6" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_hero_techies_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_hero_techies_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_hero_templar_assassin_1" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_hero_terrorblade_1" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_hero_tidehunter_1" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_hero_tinker_1" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_hero_tiny_1" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_hero_tiny_2" "本地图不能开启作弊和控制台启动。" + "dota_tip_hero_tiny_3" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_hero_tiny_4" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_hero_tiny_5" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_hero_tiny_6" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_hero_tiny_7" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_hero_treant_1" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_hero_troll_warlord_1" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_hero_tusk_1" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_hero_undying_1" "速度下限为100,最多减速到100为止。" + "dota_tip_hero_ursa_1" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_hero_vengeful_spirit_1" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_hero_vengeful_spirit_2" "神绮大魔王的减速不叠加。" + "dota_tip_hero_vengeful_spirit_3" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_hero_venomancer_1" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_hero_viper_1" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_hero_visage_1" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_hero_visage_2" "每日任务一天只能完成一次。" + "dota_tip_hero_visage_3" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_hero_visage_4" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_hero_warlock_1" "被动和光环、buff效果一般不会叠加。" + "dota_tip_hero_weaver_1" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_hero_windrunner_1" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_hero_winter_wyvern_1" "多人游戏时计巅峰排行榜。" + "dota_tip_hero_winter_wyvern_2" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_hero_wisp_1" "Buff层数最大为999。" + "dota_tip_hero_witchdoctor_1" "原神绮的收益技能移到秋穣子商店" + "dota_tip_hero_zuus_1" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_intermediate_1" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_intermediate_10" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_intermediate_11" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_intermediate_12" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_intermediate_13" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_intermediate_14" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_intermediate_15" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_intermediate_16" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_intermediate_17" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_intermediate_18" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_intermediate_2" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_intermediate_20" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_intermediate_21" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_intermediate_22" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_intermediate_23" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_intermediate_24" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_intermediate_25" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_intermediate_26" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_intermediate_27" "物品可以锁定用来防偷和防误操作。" + "dota_tip_intermediate_28" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_intermediate_29" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_intermediate_3" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_intermediate_30" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_intermediate_31" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_intermediate_33" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_intermediate_34" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_intermediate_35" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_intermediate_36" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_intermediate_37" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_intermediate_38" "本地图不能开启作弊和控制台启动。" + "dota_tip_intermediate_39" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_intermediate_4" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_intermediate_41" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_intermediate_42" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_intermediate_43" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_intermediate_45" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_intermediate_46" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_intermediate_47" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_intermediate_49" "速度下限为100,最多减速到100为止。" + "dota_tip_intermediate_50" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_intermediate_51" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_intermediate_52" "神绮大魔王的减速不叠加。" + "dota_tip_intermediate_53" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_intermediate_54" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_intermediate_55" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_intermediate_56" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_intermediate_57" "每日任务一天只能完成一次。" + "dota_tip_intermediate_58" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_intermediate_59" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_intermediate_6" "被动和光环、buff效果一般不会叠加。" + "dota_tip_intermediate_60" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_intermediate_61" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_intermediate_62" "多人游戏时计巅峰排行榜。" + "dota_tip_intermediate_63" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_intermediate_64" "Buff层数最大为999。" + "dota_tip_intermediate_65" "原神绮的收益技能移到秋穣子商店" + "dota_tip_intermediate_66" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_intermediate_67" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_intermediate_68" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_intermediate_69" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_intermediate_70" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_intermediate_71" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_intermediate_72" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_intermediate_73" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_intermediate_74" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_intermediate_75" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_intermediate_8" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_intermediate_9" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_introduction_1" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_introduction_10" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_introduction_11" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_introduction_2" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_introduction_3" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_introduction_4" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_introduction_5" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_introduction_6" "物品可以锁定用来防偷和防误操作。" + "dota_tip_introduction_7" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_introduction_8" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_introduction_9" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_lore_1" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_lore_2" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_lore_3" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_lore_4" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_lore_5" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_lore_6" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_lore_7" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_universal_1" "本地图不能开启作弊和控制台启动。" + "dota_tip_universal_10" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_universal_11" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_universal_12" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_universal_13" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_universal_14" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_universal_15" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_universal_16" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_universal_17" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_universal_18" "速度下限为100,最多减速到100为止。" + "dota_tip_universal_19" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_universal_2" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_universal_20" "神绮大魔王的减速不叠加。" + "dota_tip_universal_21" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_universal_22" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "dota_tip_universal_23" "相同阵容只有最高者才能上榜,单核(输出占比60%以上)或多核(总输出占比80%以上)相同即为同阵容。" + "dota_tip_universal_24" "将四次元爆弹放置在宠物小灵的背包中,小灵等级达到2时则漏怪超标时自动使用。" + "dota_tip_universal_25" "每日任务一天只能完成一次。" + "dota_tip_universal_26" "符卡精华可以用于培养卡牌,永久提升潜能。" + "dota_tip_universal_27" "本地图有独特的伤害机制,详细见小地图上方攻略。" + "dota_tip_universal_28" "被动和光环、buff效果一般不会叠加。" + "dota_tip_universal_29" "技能伤害类型转换只生效一个,优先级从高到低为: 纯狐,大妖精,狗桦,桑尼。" + "dota_tip_universal_3" "排行榜阵容详细可以进Q群相册查看。" + "dota_tip_universal_30" "多人游戏时计巅峰排行榜。" + "dota_tip_universal_31" "本地图已进行代码重构,文文、赫卡、灵梦等卡顿已解决。" + "dota_tip_universal_33" "Buff层数最大为999。" + "dota_tip_universal_34" "原神绮的收益技能移到秋穣子商店" + "dota_tip_universal_35" "商店处可以购买跳关卷轴,使用后跳过指定波数" + "dota_tip_universal_36" "辉夜点击神宝技能可以停止或恢复神宝旋转,停止旋转可以插拔辉夜到其它地方。" + "dota_tip_universal_37" "博丽护身符和主角电怪有防误用功能。" + "dota_tip_universal_38" "抽卡出ssr、商店出ssr、青娥给僵尸、蕾米莉亚出命运都有运气保护机制的伪随机" + "dota_tip_universal_39" "部分技能支持AI选择不施放或定点施放,开关AI来设定" + "dota_tip_universal_4" "内圈(第一个方形圈内)的怪只能自己造成伤害,外圈无限制" + "dota_tip_universal_40" "所有光环Buff只对卡牌有效,不直接作用召唤物,但召唤物继承主人的攻速、攻击力加成、暴击等效果" + "dota_tip_universal_42" "金钱超过上限的部分会保存起来,详细见主角buff栏。" + "dota_tip_universal_43" "纳兹琳无尽伤害金钱计算不会计算超过上限保存起来的金钱。" + "dota_tip_universal_44" "玲仙大招击退可以重复作用,被大招击退的不再被普攻击退。" + "dota_tip_universal_45" "赫卡提亚的球有最小半径限制,再次施放可以重置起点位置调整相位。" + "dota_tip_universal_46" "星级不显示可以点击主角灵梦最后一个技能两次来恢复显示。" + "dota_tip_universal_47" "断线重连或卡顿会造成特效视角效果丢失,如辉夜神宝,各连线,实际效果任在,重插拔或放技能后恢复视角效果。" + "dota_tip_universal_48" "AI间隔为0.3秒,技能施放有前摇和后摇时间,所以某些技能AI不能无缝衔接。" + "dota_tip_universal_49" "三月精妖精区域只有在2000码内才能形成,三角区域内都有效,三月精技能只有在自己形成的伤害妖精区域有效。" + "dota_tip_universal_5" "无尽之后收益卡收益无效,且不再有数量限制。" + "dota_tip_universal_50" "装备套装计算方式: 2件套=单件×2+套装2效果,4件套=单件×4+套装2效果+套装4效果,6件套只比4件套多个单件×2" + "dota_tip_universal_51" "套装的2件套效果只能生效一次,装备6件只也比4件多个单件×2。" + "dota_tip_universal_52" "绝大部分情况下,装备4件套+其它2件套的收益选大于装备6件套。" + "dota_tip_universal_53" "物品可以锁定用来防偷和防误操作。" + "dota_tip_universal_54" "插下前将卡牌锁定,插下后放入装备,拔起时将保留装备。" + "dota_tip_universal_55" "将主力卡牌插拔前锁定,放入装备将在插拔时保留装备,无尽前利用好将不再手忙脚乱。" + "dota_tip_universal_56" "使用灵梦的整理地面物品技能,自动分类整齐摆放自己所有地面物品。" + "dota_tip_universal_57" "一键自动整理将会跳过已锁定的物品,不需要整理的物品可以提前锁定。" + "dota_tip_universal_58" "抽到有用的卡牌后将其锁定是个好习惯。" + "dota_tip_universal_59" "断线、异常退出和直接关闭游戏将永久暂停。" + "dota_tip_universal_6" "创建密码房间的暂停是永久暂停,公开房间暂停有时间和次数限制。" + "dota_tip_universal_60" "开始地图游戏,房主可以在房间下方更改为公开或密码房间" + "dota_tip_universal_61" "每日开箱任务的宝箱在地图中间,宠物可以制造开箱用的钥匙。" + "dota_tip_universal_62" "可以点击dps栏,则该卡头上星级会闪动,由此找到对应卡。" + "dota_tip_universal_63" "本地图不能开启作弊和控制台启动。" + "dota_tip_universal_64" "选中主角灵梦,然后点击右下角或左下角金币,弹出快捷购买。" + "dota_tip_universal_65" "更改快捷键设置选中英雄,设置为空格,可以按空格快速选择主角灵梦。" + "dota_tip_universal_66" "按Ctrl+主键盘数字键可以将选中的单位编队,下次直接按数字键将选定对应单位。" + "dota_tip_universal_67" "将商店的秋瓤子编队为2,按2后可以使用快捷键购买。" + "dota_tip_universal_68" "游戏开始你能控制移动的单位就是主角博丽灵梦,简称灵梦、红白。" + "dota_tip_universal_69" "按字母 i 键可以以第一人称视角观察,再按一次退出。" + "dota_tip_universal_7" "多人游戏,当队友失败后,其所有装备和卡牌将放在地上,可以供队友使用,俗称遗产。" + "dota_tip_universal_70" "本地图减速大部分不叠加,以先入为主,详细见小地图上方攻略。" + "dota_tip_universal_71" "速度下限为100,最多减速到100为止。" + "dota_tip_universal_72" "最强减速为八云蓝,带4核棒基本可以无缝减速。" + "dota_tip_universal_73" "装备灾厄人形的4件套减速效果可以与其它减速叠加。" + "dota_tip_universal_74" "神绮大魔王的减速不叠加。" + "dota_tip_universal_8" "挑战和娱乐模式无尽直接从70波开始。" + "dota_tip_universal_9" "只要超过排行榜第100名都可以上榜,不论是哪种难度。" + "Unassigned" "Unassigned" + "creature_01" "CREATURE_01" + "creature_02" "CREATURE_02" + "creature_03" "CREATURE_03" + "creature_04" "CREATURE_04" + "creature_05" "CREATURE_05" + "creature_06" "CREATURE_06" + "creature_07" "CREATURE_07" + "creature_08" "CREATURE_08" + "creature_09" "CREATURE_09" + "creature_10" "CREATURE_10" + "creature_11" "CREATURE_11" + "creature_12" "CREATURE_12" + "creature_13" "CREATURE_13" + "creature_14" "CREATURE_14" + "creature_15" "CREATURE_15" + "creature_16" "CREATURE_16" + "creature_17" "CREATURE_17" + "creature_18" "CREATURE_18" + "creature_19" "CREATURE_19" + "creature_20" "CREATURE_20" + "creature_21" "CREATURE_21" + "creature_22" "CREATURE_22" + "creature_23" "CREATURE_23" + "creature_24" "CREATURE_24" + "creature_25" "CREATURE_25" + "creature_26" "CREATURE_26" + "creature_27" "CREATURE_27" + "creature_28" "CREATURE_28" + "creature_29" "CREATURE_29" + "creature_30" "CREATURE_30" + "creature_31" "CREATURE_31" + "creature_32" "CREATURE_32" + "creature_33" "CREATURE_33" + "creature_34" "CREATURE_34" + "creature_35" "CREATURE_35" + "creature_36" "CREATURE_36" + "creature_37" "CREATURE_37" + "creature_38" "CREATURE_38" + "creature_39" "CREATURE_39" + "creature_40" "CREATURE_40" + "creature_41" "CREATURE_41" + "creature_42" "CREATURE_42" + "creature_43" "CREATURE_43" + "creature_44" "CREATURE_44" + "creature_45" "CREATURE_45" + "creature_46" "CREATURE_46" + "creature_47" "CREATURE_47" + "creature_48" "CREATURE_48" + "creature_49" "CREATURE_49" + "creature_50" "CREATURE_50" + "creature_unlimited" "CREATURE_UNLIMITED" + "creature_bosses_alice" "CREATURE_BOSSES_ALICE" + "creature_bosses_aya" "CREATURE_BOSSES_AYA" + "creature_bosses_hina" "CREATURE_BOSSES_HINA" + "creature_bosses_kaguya" "CREATURE_BOSSES_KAGUYA" + "creature_bosses_keine" "CREATURE_BOSSES_KEINE" + "creature_bosses_kisume" "CREATURE_BOSSES_KISUME" + "creature_bosses_marisa" "CREATURE_BOSSES_MARISA" + "creature_bosses_minoriko" "CREATURE_BOSSES_MINORIKO" + "creature_bosses_mokou" "CREATURE_BOSSES_MOKOU" + "creature_bosses_rumia" "CREATURE_BOSSES_RUMIA" + "creature_bosses_yuugi" "CREATURE_BOSSES_YUUGI" + "creature_bosses_nian" "巨兽" + "creature_bosses_long" "巨龙" + "minoriko_shop" "MinoriKonbini" + "christmas_tree" "CHRISTMAS_TREE" + "npc_dummy_unit" "NPC_DUMMY_UNIT" + "npc_dota2x_unit_marisa04_spark" "NPC_DOTA2X_UNIT_MARISA04_SPARK" + "npc_dota2x_unit_yuuka04_spark" "NPC_DOTA2X_UNIT_YUUKA04_SPARK" + "npc_dota2x_unit_yuyuko_04" "NPC_DOTA2X_UNIT_YUYUKO_04" + "npc_thdots_unit_yukari01_unit" "NPC_THDOTS_UNIT_YUKARI01_UNIT" + "yukari_train" "YUKARI_TRAIN" + "reisen_illusion" "REISEN_ILLUSION" + "flandre_illusion" "FLANDRE_ILLUSION" + "yuuka_flower" "YUUKA_FLOWER" + "yuuka_illusion" "YUUKA_ILLUSION" + "kanako_gojou" "Onbashira" + "momiji_wolf" "MOMIJI_WOLF" + "shinki_dragon" "SHINKI_DRAGON" + "tiny_suika" "TINY_SUIKA" + "alice_boom" "ALICE_BOOM" + "alice_falanxi_ningyou" "ALICE_FALANXI_NINGYOU" + "kokoro_jin_yin" "KOKORO_JIN_YIN" + "npc_unit_aya_03_wings" "NPC_UNIT_AYA_03_WINGS" + "reimu_pet" "REIMU_PET" + "inaba_rabbit" "INABA_RABBIT" + "DOTA_Tooltip_ability_item_0001_Description" "Although there is no attack, but can quickly enhance the experience of Shikigamis.\n[★][★]Spring Sign「Proclaim Of spring」\n[★★★★]Spring Sign「Surprise Spring」" + "DOTA_Tooltip_ability_item_0001" "[R]Lily White" + "DOTA_Tooltip_ability_item_1001" "Normal Summon Sign" + "DOTA_Tooltip_ability_item_1001_Description" "Summon a normal Shikigami.\n[N]80%%\n[R]20%%" + "DOTA_Tooltip_ability_item_1002" "Advanced Summon Sign" + "DOTA_Tooltip_ability_item_1002_Description" "Summon a rare Shikigami.\n[R]75%%\n[SR]20%%\n[SSR]5%%" + "DOTA_Tooltip_ability_item_1003" "The Drug Of Evolution Lv1" + "DOTA_Tooltip_ability_item_1003_Description" "It can replace any material with a star level of 1." + "DOTA_Tooltip_ability_item_1004" "The Drug Of Evolution Lv2" + "DOTA_Tooltip_ability_item_1005" "The Drug Of Evolution Lv3" + "DOTA_Tooltip_ability_item_1006" "The Drug Of Evolution Lv4" + "DOTA_Tooltip_ability_item_1004_Description" "It can replace any material with a star level of 2." + "DOTA_Tooltip_ability_item_1005_Description" "It can replace any material with a star level of 3." + "DOTA_Tooltip_ability_item_1006_Description" "It can replace any material with a star level of 4." + "DOTA_Tooltip_ability_item_0001_Lore" "Lily White is a fairy that heralds the coming of spring. Where she passes, there will be warm air in spring." + "DOTA_Tooltip_ability_item_0002" "[R]Nazrin" + "DOTA_Tooltip_ability_item_0002_Description" "Have a certain ability to attack and could steal money by attack.\n[★]Search Sign「Gold Detector」" + "DOTA_Tooltip_ability_item_0003" "[R]Aki Minoriko" + "DOTA_Tooltip_ability_item_0003_Description" "Although there is no attack ability and can not grow through the general way, she can grow up stars with the time, and exchange star with other Shikigami.\n[★]Fruit Sign「Warm Color Harvest」\n[★★★]Bumper Crop「Promise of the Wheat Godg」" + "DOTA_Tooltip_ability_item_0002_Lore" "The Little Dowser General" + "DOTA_Tooltip_ability_item_0003_Lore" "Aki Minoriko and her old sister-Aki Shizuha manipulate the Autumn together." + "DOTA_Tooltip_ability_item_0004" "[N]Graveyard Fairy" + "DOTA_Tooltip_ability_item_0004_Description" "A fairy that can be found everywhere in the GY.\n[★]POISONED DAGGER" + "DOTA_Tooltip_ability_item_0005" "[N]Shanghai Doll" + "DOTA_Tooltip_ability_item_0005_Description" "A doll that was made by Alice.\n[★]CRITICAL STRIKE" + "DOTA_Tooltip_ability_item_0006" "[N]Hourai Doll" + "DOTA_Tooltip_ability_item_0006_Description" "A doll that was made by Alice.\n[★]THUMP" + "DOTA_Tooltip_ability_item_0007" "[N]Flower Field Fairy" + "DOTA_Tooltip_ability_item_0007_Description" "A fairy that can be found everywhere on a flower field.\n[★]MULTI-SHOT" + "DOTA_Tooltip_ability_item_0008" "[N]Maid Fairy" + "DOTA_Tooltip_ability_item_0008_Description" "A fairy that can be found everywhere in Koumakan.\n[★]MOONBLADE" + "DOTA_Tooltip_ability_item_0009" "[R]Cirno" + "DOTA_Tooltip_ability_item_0009_Description" "Cirno is leader of fairies that live near the Misty Lake,hence she has stronger power than other fairies. She is aggressive and has the ability of manipulating cold air,can freeze things flashily. She is more dangerous than normal fairies.\n[★]Frost Sign Card「Frost Columns」\n[★★★★]Freeze Sign「Perfect Freeze」" + "DOTA_Tooltip_ability_item_0009_Lore" "I am the strongest!" + "DOTA_Tooltip_ability_item_0010" "[R]Tatara Kogasa" + "DOTA_Tooltip_ability_item_0010_Description" "Karakasa Obake,is a Tsukumogami which transformed by the umbrella that is not used for a long time.\ndoes not attack people or eat people, only like shock people. \n[★]Halo「Karakasa Surprising Flash」\n[★★★]Rain Sign「A Rainy Night\'s Ghost Story」" + "DOTA_Tooltip_ability_item_0010_Lore" "Just often cannot shock anyone...." + "DOTA_Tooltip_ability_item_0011" "[R]Letty Whiterock" + "DOTA_Tooltip_ability_item_0011_Description" "This youkai only can be seen in Winter, Like cold place, is a kind of scary fairy that can freeze people cause they cannot fight any more. \n[★]Winter Sign「Flower Wither Away」\n[★★★]Cold Sign「Lingering Cold」" + "DOTA_Tooltip_ability_item_0012" "[R]Lyrica Prismriver" + "DOTA_Tooltip_ability_item_0012_Description" "Prismriver Band is formed by Poltergeist Sisters, Lyrica is the youngest sister of Poltergeist Sisters.\nNormally using keyboard or percussion.\n[★]Nether Keys「Fazioli Nether Performance」\n[★★★]Key Spirit「B\?sendorfer Divine Performance」" + "DOTA_Tooltip_ability_item_0013" "[R]Lunasa Prismriver" + "DOTA_Tooltip_ability_item_0012_Lore" "Be different from her sisters, her music is the \'Fantasy Music\' which is nonexistent." + "DOTA_Tooltip_ability_item_0013_Description" "Prismriver Band is formed by Poltergeist Sisters,Lunasa is the oldest sister of Poltergeist Sisters, is good at playing violin. And he is also the captain of Prismriver Band\n[★]String Performance「Guarneri del Gesù」\n[★★★]Fake Strings「Pseudo Stradivarius」" + "DOTA_Tooltip_ability_item_0014" "[R]Merlin Prismriver" + "DOTA_Tooltip_ability_item_0014_Description" "The middle sister of Poltergeist Sisters.\n Has pleasant personality, she is the tallest in three sisters, hence she often stands in the mid of the three when they are in concerts.\n[★]Trumpet Spirit「Hino Phantasm」\n[★★★]Trumpet Spirit「Ghost Clifford」" + "DOTA_Tooltip_ability_item_0014_Lore" "When you heard her music, you will suddenly start dancing or impossible to have fluent conversations." + "DOTA_Tooltip_ability_item_0013_Lore" "Do not make children heard that. Only adults can listen ghost music." + "DOTA_Tooltip_ability_item_0015" "[R]Rumia" + "DOTA_Tooltip_ability_item_0015_Description" "a kind of low level youkai, the ability is manipulate darkness-create some ranges of the dark area circle around her. Although she looks young, she also eats people. \n[★]「SOU~NA~NO~KA!」\n[★★★]Darkness Sign「Demarcation」" + "DOTA_Tooltip_ability_item_0015_Lore" "Actually the ribbon which twines around the hair is the Sign, even if she wants to take off the ribbon, Rumia-herself still cannot touch it" + "DOTA_Tooltip_ability_item_0016" "[R]Komeiji Satori" + "DOTA_Tooltip_ability_item_0016_Description" "Satori Komeiji is the Mistress of the Palace of the Earth Spirits after the underground city was separated from Hell. Her ability to read minds causes various youkai and spirits to fear her, but makes her loved by the animals that normally can\'t be understood. With these animals as pets, she manages the ruins of the Hell of Blazing Fires where her home stands.\n[★]Recollection「Terrible Souvenir」\n[★★★★]Recollection「Terrifying hypnotism」" + "DOTA_Tooltip_ability_item_0016_Lore" "Because she can read others\'minds, there is no secret behind her.\nNo matter any fairies, even ghost feels scary." + "DOTA_Tooltip_ability_item_0017" "[R]Nagae Iku" + "DOTA_Tooltip_ability_item_0017_Description" "The envoy of Dragon Palace who lives in the cloud, Most of time she lives in the cloud, guarding the dragon.\n[★]Thunder Sign「Lightning Fish」\n[★★★★]Fish Sign「Dragonfish Drill」" + "DOTA_Tooltip_ability_item_0017_Lore" "Can understand dragon\'s language, convey important things to humans and youkaies." + "DOTA_Tooltip_ability_item_0018" "[R]Mystia Lorelei" + "DOTA_Tooltip_ability_item_0018_Description" "Mystia Lorelei is a night sparrow with an outgoing egocentric personality, at least she sounds arrogant, that enjoys infusing confusion and terror into the hearts of humans using her ability: a song that creates confusion in those who hear her. Her song seems to attract nearby monsters as well. She roams the Youkai Trail near the Human Village that Keine Kamishirasawa tries to protect, in search of humans to frighten. She is indeed feared by the locals as people around her become blinded by darkness. \nlike bustle environments, she often sings popular songs\n[★]Vocal Sign「Hooting in the Night」\n[★★★]\tVocal Sign「Howl of the Horned Owl」" + "DOTA_Tooltip_ability_item_0018_Lore" "Looking a stall with red lanterns in the Roads at night, feeling strange and walking there, you will find out it\'s Night-Birds\' stall." + "DOTA_Tooltip_ability_item_0019" "[SR]Kirisame Marisa" + "DOTA_Tooltip_ability_item_0019_Description" "Marisa Kirisame is an ordinary human magician who specializes in light and heat magic and currently resides in the Forest of Magic.\nRunning a \'Kirisame Magic Shop\',that place is not only her work place but also her home.\nHer appearance looks like a typical western witch, and she often rides a broom to fly.\n[★]Love Sign「Master Spark」\n[★]Magic Sign「Stardust Reverie」\n[★★★★]Magiccannon「Final Spark」" + "DOTA_Tooltip_ability_item_0019_Lore" "I am a passing magician! Da☆Ze" + "DOTA_Tooltip_ability_item_0020" "[SR]Hinanawi Tenshi" + "DOTA_Tooltip_ability_item_0020_Description" "The celestial who lives in the heaven,the \'Eldest Daughter\' of the Hinanawi clan.\nShe can suppress and trigger the earthquake, and can manipulate the keystones and use Sword Of Hisou.\n[★]Heaven Sign「Sword of Divine Justice」\n[★]Non-Perception「Sword of Neither Perception nor Non-Perception」\n[★★★★]Earth Sign「Sword of Unletting Soil」" + "DOTA_Tooltip_ability_item_0020_Lore" "Celestials is just a kind of nonentity that occationally comes to the earth to give advice. Tell the truth, They are all some fantastic advice as for me." + "DOTA_Tooltip_ability_item_0021" "[SR]Patchouli Knowledge" + "DOTA_Tooltip_ability_item_0021_Description" "Patchouli is the witch and resident of the Scarlet Devil Mansion\nShe\'s friends with the mistress,Remilia,is an about 100-year-old witch.\nShe likes reading, and can manipulate fire,water,wood,metal,earth,sun,and moon. \nShe often stays in the library,has hard asthma,anemia,cause the body is weak, she is weak in hand-to-hand combat.\n[★]Fire Water Wood Metal Earth Sign「Philosopher\'s Stone」\n[★]「Philosopher\'s Stone」\n[★★★]\tMoon Sign「Silent Selene」" + "DOTA_Tooltip_ability_item_0021_Lore" "Everytime she carries books, and think books are apart of herself." + "DOTA_Tooltip_ability_item_0022" "[SR]Sakuya Izayoi" + "DOTA_Tooltip_ability_item_0023" "[SR]Reisen Udongein Inaba" + "DOTA_Tooltip_ability_item_0023_Description" "Reisen Udongein Inaba is a rabbit youkai that has a much different temperament from other fairies.\nit is said keep looking her red eyes will make people mad, and her voice,can\'t be heard even you want to, conversely sometimes in the far place you can hear it is talking beside your ears.\nDue to this makes people mad,hardly ever can talk to her.\n[★]Weak Heart 「Demotivation」\n[★]Illusion Rabbit 「Parallel Cross」\n[★★★★]「Lunatic Red Eyes」" + "DOTA_Tooltip_ability_item_0023_Lore" "Reisen" + "DOTA_Tooltip_ability_item_0024" "[SR]Saigyouji Yuyuko" + "DOTA_Tooltip_ability_item_0024_Description" "Mistress of Saigyouji family,1000 years ago this ghost girl had been living in Hakugyokurou in the Netherworld.\nShe has ability to command ghosts, so she was appointed to the manager of ghosts in the Netherworld by Enma,and can live in the Netherworld forever.\n[★]Deadly Butterfly「Eternal Sleep in Dreamland」\n[★]Deadly Dance「Law of Mortality」\n[★★★★]Death Sign「Life of Drunk, Dream of Death」" + "DOTA_Tooltip_ability_item_0024_Lore" "Sparrows have too much tiny bone, I really don\'t like them." + "DOTA_Tooltip_ability_item_0025_Lore" "Guangzhou people shoot fairies is none of my business." + "DOTA_Tooltip_ability_item_0025" "[SR]Konpaku Youmu" + "DOTA_Tooltip_ability_item_0025_Description" "Youmu is the second generation of the desire of the Saiyouji family. The former generation of the desire, Youmu\'s grandfather - Konpaku Youki, after he had been 300 years desire, one day he suddenly understand something, so he give this job to Youmu, when she was just a young girl, then he lived with himself alone.\nYoumu is different from her pure-ghost master,Saigyouji Yuyuko, she is the \'half-human half-phantom \'. The huge ghost beside her is active by her thought, that is a part of her body.\n[★]Sword Skill「Cherry Blossom Flashing」\n[★]Konpaku「Dharma of Gumonji Wisdom of the Living and Dead」\n[★★★★]Six Realms Sword「A Single Thought and the Infinite Kalpas」" + "DOTA_Tooltip_ability_item_0026" "[SR]Kaenbyou Rin" + "DOTA_Tooltip_ability_item_0026_Description" "living in the Old Hell, one of the fairies which are hated, is called \'Cart\'. appearing in funerals and carrying-away corpses,this ominous behaviour will enrage people who are in sadness.So people hate this youkaies.\nis Satori Komeiji\'s pet, due to it\'s silver tongue and have the ability to have conversations with corpses and souls,it manages the Hell of Blazing Fires\'s ghosts.\n[★]Youkai「Blazing Wheel」\n[★★★]「Rekindling of Dead Ashes」" + "DOTA_Tooltip_ability_item_0026_Lore" "That human is surprisingly strong, reputedly it is called the professor of defeating fairies\nIf that human exactly has some power, perhaps he can give that pretentious Okuu a hard blow.\nNot sure, she thought." + "DOTA_Tooltip_ability_item_0027" "[SR]Reiuji Utsuho" + "DOTA_Tooltip_ability_item_0027_Description" "This crow has special posture\nThe left leg is\'the leg of decomposition\'\\,the right leg is\'\the leg of fusion\',otherwise she also has the right arm\'s \'third leg\'\' for controling rod and fuel, she use these three legs to manipulate ultimate energy. rod\nOkuu\'s mission is guarding the Hell of Blazing Fires\' remain to ensure it would not be out of control.\nThe deity-Yatagarasu lives in her body. Yatagarasu has ultimate power,that is the power of creating the nuclear-nuclear fusion.\n[★]Explosion Sign「Petit Flare」\n[★]Explosion Sign「Peta Flare」\n[★★★★]「Hell\'s Artificial Sun」" + "DOTA_Tooltip_ability_item_0027_Lore" "The envoy from the ground.\nWho is it on earth, and what\'s it target.\nThose questions are asked immediately in Okuu\'s little head." + "DOTA_Tooltip_ability_item_0028" "[SSR]Hakurei Reimu" + "DOTA_Tooltip_ability_item_0028_Description" "Shrine Maiden of the Hakurei Shrine,nominally the manager of Gensokyo\nShe has talented miraculous luck and sensitivity, and many abilities, but lack of practices.\nDon\'t believe \'efforts will pay off,\' hate practicing, lack of sense of danger.\nEveryday she just cleans up the shrine and leisurely enjoys the tea.\nBut everytime something strange happens, she will hurry to investigate.\nShe will be serious when she is defeating the fairies, but she also treats youkais and humans in the same attitude when she doesn\'t need to work.\n[★]Spirit Sign「Fantasy Seal -Spread」\n[★]Bewitched Weapon「Merciless Purification Rod」\n[★★★]Holy Relic「Yin-Yang Demon God Orb」\n[★★★★★]「Fantasy Nature」" + "DOTA_Tooltip_ability_item_0029" "[SSR]Daiyousei" + "DOTA_Tooltip_ability_item_0029_Description" "Daiyousei is a greater fairy who lives around the Misty Lake near the Scarlet Devil Mansion. Like other fairies, she\'s cheerful and mischievous, simple and emotional.\n[★]「Kind Heart of Yousei」\n[★]「Yousei Garden」\n[★★★]「Revelution」\n[★★★★★]「Beyond The World」" + "DOTA_Tooltip_ability_item_0030" "[SSR]Remilia Scarlet" + "DOTA_Tooltip_ability_item_0031" "[SSR]Komeiji Koishi" + "DOTA_Tooltip_ability_ability_touhoutd_release_tower" "Recycle the Shikigami" + "DOTA_Tooltip_ability_ability_touhoutd_release_tower_Description" "Recycle a shikigami to transform it back to card" + "DOTA_Tooltip_ability_ability_touhoutd_blink" "Blink" + "DOTA_Tooltip_ability_ability_touhoutd_blink_Description" "Blink to the target point" + "DOTA_Tooltip_ability_ability_touhoutd_kill" "「Fantasy Seal」" + "DOTA_Tooltip_ability_ability_touhoutd_kill_Description" "Kill an enemy immediately" + "DOTA_Tooltip_ability_ability_touhoutd_buy_normal_card" "Use normal card" + "DOTA_Tooltip_ability_ability_touhoutd_buy_normal_card_Description" "Use normal card by SHORTCUT" + "DOTA_Tooltip_ability_ability_touhoutd_buy_senior_card" "Use senior card by SHORTCUT" + "DOTA_Tooltip_ability_ability_touhoutd_buy_senior_card_Description" "Use senior card by SHORTCUT。" + "DOTA_Tooltip_ability_ability_touhoutd_sort_item" "整理地面物品" + "DOTA_Tooltip_ability_ability_touhoutd_sort_item_Description" "自动分类整齐摆放自己所有地面物品,锁定的物品会忽略。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1" "召唤「初级异变」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1_Description" "在秋穣子商店可以召唤3种异变跳关。\n召唤初级异变,直接跳过%add_wave%波。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1_cost" "消耗金钱:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_1_add_wave" "跳关波数:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2" "召唤「高级异变」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_Description" "右键点击切换金钱购买魔法钥匙购买。\n召唤高级异变,直接跳过%add_wave%波。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_cost" "消耗金钱:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_count" "消耗魔法钥匙:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_2_add_wave" "跳关波数:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3" "召唤「终极异变」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_Description" "右键点击切换金钱购买魔法钥匙购买。\n召唤终级异变,直接跳过%add_wave%波。" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_cost" "消耗金钱:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_count" "消耗魔法钥匙:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_wave_3_add_wave" "跳关波数:" + "DOTA_Tooltip_ability_ability_touhoutd_shop_roll" "开启「结界之门」" + "DOTA_Tooltip_ability_ability_touhoutd_shop_roll_Description" "开启结界之门,随机召唤%card_count%张式神卡(该式神卡可以不在卡池内)并且该式神卡消耗掉将不会回到卡池。无尽之前每通过一波则可开启一次。\n等级1:80%%召唤N卡,20%%召唤R卡,共3张\n等级2:80%%召唤R卡,20%%召唤SR卡,5%%召唤SSR卡,共1张。80%%召唤N卡,20%%召唤R卡,共3张\n等级3:75%%召唤R卡,20%%召唤SR卡,5%%召唤SSR,共5张" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_1" "Buy senior nostrum Lv1" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_1_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_2" "Buy senior nostrum Lv2" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_2_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_3" "Buy senior nostrum Lv3" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_3_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_4" "Buy senior nostrum Lv4" + "DOTA_Tooltip_ability_ability_touhoutd_shop_buy_egg_level_4_Description" "Buy items and drop them to Reimu\'s slots." + "DOTA_Tooltip_ability_ability_touhoutd_close_star" "Close/Open Star Display" + "DOTA_Tooltip_ability_ability_touhoutd_close_star_Description" "Close/Open Star Display.(After reconnected, you can click twice to look up)" + "DOTA_Tooltip_ability_ability_touhoutd_star_up" "Star-Up the card" + "DOTA_Tooltip_ability_ability_touhoutd_star_up_Description" "You can promote shikigami cards\' star number which has reach max level by feeding shikigamies and cards\'meterial heroes are carrying.\nPromote to ★★ needs 1 ★ max level material\nPromote to ★★★ needs 2 ★★ max level material.\nPromote to ★★★★ needs 3 ★★★ max level material.\nPromote to ★★★★★ needs 4 ★★★★ max level material." + "DOTA_Tooltip_ability_ability_touhoutd_exp_up" "Card feeding" + "DOTA_Tooltip_ability_ability_touhoutd_exp_up_Description" "Can promote cards\' exp by feeding first cell\'s material of shikigami\'s equipment slot.\nThe same type cards feeding can promote special skills\' level." + "DOTA_Tooltip_ability_thtd_lily_01" "Spring Sign「Spring Declaration」" + "DOTA_Tooltip_ability_thtd_lily_01_Description" "Lily White put Spring power into friendly units\'bodies in the area,promote their exp\n\nPromotion Value:Star Parameters*POWER POINTs*6.5\n\nStar Parameters:1,1.8,2.4,3.2,4" + "DOTA_Tooltip_ability_thtd_lily_01_Note0" "潜能Lv10:魔法消耗降低10%%。" + "DOTA_Tooltip_ability_thtd_lily_01_Note1" "潜能Lv50:魔法消耗降低20%%。" + "DOTA_Tooltip_ability_thtd_lily_01_Note2" "潜能Lv100:魔法消耗降低30%%。" + "DOTA_Tooltip_ability_thtd_lily_01_radius" "区域范围:" + "DOTA_Tooltip_ability_thtd_lily_01_power_factor" "经验系数:" + "DOTA_Tooltip_ability_thtd_lily_02" "Spring Sign「Surprise Spring」" + "DOTA_Tooltip_ability_thtd_lily_02_Description" "Lily White opens the barrier, units in the range of barrier\'s cause 125% damages to enemies." + "DOTA_Tooltip_ability_thtd_lily_02_Note0" "潜能Lv10:范围+150。" + "DOTA_Tooltip_ability_thtd_lily_02_Note1" "潜能Lv50:范围+300。" + "DOTA_Tooltip_ability_thtd_lily_02_Note2" "潜能Lv100:范围+450。" + "DOTA_Tooltip_ability_thtd_lily_02_Note3" "\n春天是2月5日至5月5日。" + "DOTA_Tooltip_ability_thtd_lily_02_radius" "区域范围:" + "DOTA_Tooltip_ability_thtd_lily_02_duration" "DURATION:" + "DOTA_Tooltip_ability_thtd_lily_02_damage_up" "%伤害提升:" + "DOTA_Tooltip_modifier_lily_02_buff" "春符「Surprise Spring」" + "DOTA_Tooltip_modifier_lily_02_buff_Description" "受到春之力的影响,造成的伤害提高。" + "DOTA_Tooltip_ability_thtd_nazrin_01" "Search Sign「Gold Detector」" + "DOTA_Tooltip_ability_thtd_nazrin_01_Description" "Every attack, Nazrin has posible to steal targets some money.\n\nSteal Chance:50%%\n\nAmount of Stealing:Star Parameter+POWER POINTs*0.02\n\nStar Parameter:2.4,8.8,21.6,43.2,170.4" + "DOTA_Tooltip_ability_thtd_nazrin_01_Note0" "潜能Lv10:概率+5%%。" + "DOTA_Tooltip_ability_thtd_nazrin_01_Note1" "潜能Lv50:概率+10%%。" + "DOTA_Tooltip_ability_thtd_nazrin_01_Note2" "潜能Lv100:概率+15%%。" + "DOTA_Tooltip_ability_thtd_nazrin_01_bonus_chance" "%偷取概率:" + "DOTA_Tooltip_ability_thtd_nazrin_01_bonus_gold" "基础金钱:" + "DOTA_Tooltip_ability_thtd_nazrin_01_power_percent" "%能量参数:" + "DOTA_Tooltip_ability_thtd_minoriko_01" "Plenty Sign「Warm Color Harvest」" + "DOTA_Tooltip_ability_thtd_minoriko_01_Description" "Although Minoriko can\'t promote star levels by normal ways, she can promote by time.\n\nEvery(270/540/900/1260)seconds will promote a star level." + "DOTA_Tooltip_ability_thtd_minoriko_01_Note0" "潜能Lv10:成长花费时间-10%%。" + "DOTA_Tooltip_ability_thtd_minoriko_01_Note1" "潜能Lv50:成长花费时间-20%%。" + "DOTA_Tooltip_ability_thtd_minoriko_01_Note2" "潜能Lv100:成长花费时间-30%%。" + "DOTA_Tooltip_ability_thtd_minoriko_01_grow_time" "成长花费时间:" + "DOTA_Tooltip_ability_thtd_minoriko_02" "Bumper Crop「Promise of the Wheat God」" + "DOTA_Tooltip_ability_thtd_minoriko_02_Description" "exchange star levels of the target with Minoriko\'s star levels.(The maximum exchange of 3 times)" + "DOTA_Tooltip_ability_thtd_minoriko_02_Note0" "潜能Lv10:交换次数+1。" + "DOTA_Tooltip_ability_thtd_minoriko_02_Note1" "潜能Lv50:交换次数+2。" + "DOTA_Tooltip_ability_thtd_minoriko_02_Note2" "潜能Lv100:交换次数+3。" + "DOTA_Tooltip_ability_thtd_minoriko_02_max_count" "最大交换次数:" + "DOTA_Tooltip_ability_thtd_mugiyousei_01" "POISONED WEAPON" + "DOTA_Tooltip_ability_thtd_mugiyousei_01_Description" "Graveyard Fairies\' attacks apply poison that deals damage over time." + "DOTA_Tooltip_ability_thtd_mugiyousei_01_power_damage" "技能伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_mugiyousei_01_damage_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_shanghainingyou_01" "CRITICAL STRIKE" + "DOTA_Tooltip_ability_thtd_shanghainingyou_01_Description" "Shanghai Dolls\' attacks have a certain chance to critically strike." + "DOTA_Tooltip_ability_thtd_shanghainingyou_01_crit_chance" "CHANCE" + "DOTA_Tooltip_ability_thtd_shanghainingyou_01_crit_mult" "MULTIPLE" + "DOTA_Tooltip_ability_thtd_hourainingyou_01" "THUMP" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_Description" "Hourai Dolls\' attacks have a certain chance to deal additional damage and stun the target." + "DOTA_Tooltip_ability_thtd_hourainingyou_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_stun_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_hourainingyou_01_lock_time" "眩晕后免疫时间:" + "DOTA_Tooltip_ability_thtd_hanadayousei_01" "MULTI-SHOT" + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Description" "Flower Field Fairies can attack up to 3 units at the same time." + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Note0" "潜能Lv10:范围+100,额外攻击数量+3。" + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Note1" "潜能Lv50:范围+200,额外攻击数量+6。" + "DOTA_Tooltip_ability_thtd_hanadayousei_01_Note2" "潜能Lv100:范围+400,额外攻击全部单位。" + "DOTA_Tooltip_ability_thtd_maidyousei_01" "link_DOTA_Tooltip_ability_luna_moon_glaive" + "DOTA_Tooltip_ability_luna_moon_glaive" "飞刃" + "DOTA_Tooltip_ability_luna_moon_glaive_Description" "攻击可以在敌方单位之间弹跳。每次弹跳造成的伤害都会减少。" + "DOTA_Tooltip_ability_luna_moon_glaive_bounces" "弹射次数:" + "DOTA_Tooltip_ability_luna_moon_glaive_range" "弹跳范围:" + "DOTA_Tooltip_ability_luna_moon_glaive_damage_reduction_percent" "%弹跳伤害衰减:" + "DOTA_Tooltip_ability_luna_moon_glaive_Lore" "" + "DOTA_Tooltip_ability_thtd_cirno_01" "Frost Sign「Frost Columns」" + "DOTA_Tooltip_ability_thtd_cirno_01_Description" "Reduce enemies around Cirno 30% movement speed.\n\n[Combination promotion - Letty]\nMovement Speed reduction promote from 30% to 50%." + "DOTA_Tooltip_ability_thtd_cirno_01_move_slow" "MOVEMENT SPEED REDUCTION:" + "DOTA_Tooltip_modifier_cirno_01_slow_buff" "Frost Sign「Frost Columns」" + "DOTA_Tooltip_modifier_cirno_01_slow_buff_Description" "be influenced by Cirno, this units\' Movement Speed reduces." + "DOTA_Tooltip_modifier_cirno_suwako_buff" "霜符「冰袭方阵」" + "DOTA_Tooltip_modifier_cirno_suwako_buff_Description" "受到琪露诺的影响,该单位魔法伤害提高了。" + "DOTA_Tooltip_ability_thtd_cirno_02" "Freeze Sign「Perfect Freeze」" + "DOTA_Tooltip_ability_thtd_cirno_02_Description" "To the target and units around it cause 8 times damages, and has chance to freeze them.\n\n[Damage Multiplier ]DAMAGE:POWER POINTs * Star levels * 2 per time" + "DOTA_Tooltip_ability_thtd_cirno_02_Note0" "潜能Lv10:技能伤害提高至3倍,造成的伤害次数+4。" + "DOTA_Tooltip_ability_thtd_cirno_02_Note1" "潜能Lv50:技能伤害提高至6倍,造成的伤害次数+8。" + "DOTA_Tooltip_ability_thtd_cirno_02_Note2" "潜能Lv100:技能伤害提高至9倍,造成的伤害次数+16。" + "DOTA_Tooltip_ability_thtd_cirno_02_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_cirno_02_ice_count" "次数:" + "DOTA_Tooltip_ability_thtd_cirno_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_cirno_02_stun_time" "Freeze Time:" + "DOTA_Tooltip_modifier_cirno_frozen_unit" "Freeze Sign「Perfect Freeze」" + "DOTA_Tooltip_modifier_cirno_frozen_unit_Description" "be influenced by Cirno,this unit is being freezed." + "DOTA_Tooltip_ability_thtd_cirno_03" "Blowing Ice「Ice Tornado」" + "DOTA_Tooltip_ability_thtd_cirno_03_Description" "Cirno\'s every attack will cause damage to the target and units around it.\n\n[Damage Multiplier]Damage:POWER POINTs * Star levels" + "DOTA_Tooltip_ability_thtd_cirno_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_cirno_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_cirno_04" "Ice Sign「Ultimate Blizzard」" + "DOTA_Tooltip_ability_thtd_cirno_04_Description" "Cirno every 5 times attack will cause Damage Over Time to target area.\n\n[Damage Multiplier]Damage:POWER POINTs * Star levels * 4 per second" + "DOTA_Tooltip_ability_thtd_cirno_04_Note0" "潜能Lv10:技能伤害提高至3倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note1" "潜能Lv50:技能伤害提高至6倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note2" "潜能Lv100:技能伤害提高至9倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note3" "潜能Lv666:\n获得特殊效果:雪符「钻石风暴」,每次攻击召唤钻石冰晶打击目标周围单位,造成 69*能量*星级 的伤害。" + "DOTA_Tooltip_ability_thtd_cirno_04_Note4" "潜能Lv999:\n获得特殊效果:冰王「霜冻之王」,所有伤害提高至9倍。" + "DOTA_Tooltip_ability_thtd_cirno_04_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_cirno_04_range" "范围:" + "DOTA_Tooltip_ability_thtd_cirno_04_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_letty_01" "Winter Sign「Flower Wither Away」" + "DOTA_Tooltip_ability_thtd_letty_01_Description" "Letty summon 2 blizzards, cause damage to units in the target area.\n\n[Damage Multiplier]Damage:POWER POINT*1/per blizzard\n\n[Combination Promotion - Cirno]\nThe number of blizzards promote at least 3" + "DOTA_Tooltip_ability_thtd_letty_01_Note0" "潜能Lv10:暴风雪阵数+1,技能伤害+1,每阵暴风雪使下一次的暴风雪伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_letty_01_Note1" "潜能Lv50:暴风雪阵数+2,技能伤害+2,每阵暴风雪使下一次的暴风雪伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_letty_01_Note2" "潜能Lv100:暴风雪阵数+4,技能伤害+4,每阵暴风雪使下一次的暴风雪伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_letty_01_power_damage" "技能伤害(能量点*星级/每阵):" + "DOTA_Tooltip_ability_thtd_letty_01_radius" "区域范围:" + "DOTA_Tooltip_ability_thtd_letty_01_max_count" "暴风雪阵数:" + "DOTA_Tooltip_ability_thtd_letty_02" "Cold Sign「Lingering Cold」" + "DOTA_Tooltip_ability_thtd_letty_02_Description" "Reduce units around Letty\'s Magic Resistance." + "DOTA_Tooltip_ability_thtd_letty_02_magic_armor" "Resistance Reduction:" + "DOTA_Tooltip_modifier_letty_02_magic_armor_buff" "Cold Sign「Lingering Cold」" + "DOTA_Tooltip_modifier_letty_02_magic_armor_buff_Description" "Be influenced by Letty, this unit\'s Magic Resistance reduces" + "DOTA_Tooltip_ability_thtd_kogasa_01" "Halo「Karakasa Surprising Flash」" + "DOTA_Tooltip_ability_thtd_kogasa_01_Description" "Kogasa shocks the target and units around it, cause damage to them and reduce the movement speed.\n\n[Damage Multiplier]Initial Damage:60/120/240/480/960\n\n[Damage Multiplier]Damage Over Time:15/30/60/120/240 per second" + "DOTA_Tooltip_ability_thtd_kogasa_01_Note0" "潜能Lv10:范围+100,技能伤害提高200%%,丢魂效果+2%%最大血量和+2倍惊吓伤害。" + "DOTA_Tooltip_ability_thtd_kogasa_01_Note1" "潜能Lv50:范围+200,技能伤害提高400%%,丢魂效果+4%%最大血量和+4倍惊吓伤害。" + "DOTA_Tooltip_ability_thtd_kogasa_01_Note2" "潜能Lv100:范围+400,技能伤害提高800%%,丢魂效果+8%%最大血量和+8倍惊吓伤害。" + "DOTA_Tooltip_ability_thtd_kogasa_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kogasa_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_kogasa_01_radius" "范围:" + "DOTA_Tooltip_modifier_kogasa_debuff" "Halo「Karakasa Surprising Flash」" + "DOTA_Tooltip_modifier_kogasa_debuff_Description" "Be shocked by Karakasa,the unit reduces the Movement Speed and causes Damage Over Time." + "DOTA_Tooltip_ability_thtd_kogasa_02" "Rain Sign「A Rainy Night\'s Ghost Story」" + "DOTA_Tooltip_ability_thtd_kogasa_02_Description" "Reduce units around Kogasa\'s Armor." + "DOTA_Tooltip_ability_thtd_kogasa_02_armor" "ARMOR REDUCTION:" + "DOTA_Tooltip_modifier_kogasa_02_armor_buff" "Rain Sign「A Rainy Night\'s Ghost Story」" + "DOTA_Tooltip_modifier_kogasa_02_armor_buff_Description" "Be influenced by Karakasa, This unit\'s armors reduce." + "DOTA_Tooltip_ability_thtd_kogasa_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_kogasa_03_Description" "选择一个地点来设定AI定点施放:光晕「唐伞惊吓Flash」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_lyrica_01" "Nether Keys「Fazioli Nether Performance」" + "DOTA_Tooltip_ability_thtd_lyrica_01_Description" "Lyrica causes damage to the target and units around it\n\n[Damage Multiplier]Damage:POWER POINTs*Star levels\n\n[Combination Promotion - lunasa - Merlin]\nPromote 50% damages." + "DOTA_Tooltip_ability_thtd_lyrica_01_power_damage1" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_lyrica_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_lyrica_01_damage_up" "%组合提升伤害:" + "DOTA_Tooltip_ability_thtd_lyrica_01_power_damage2" "群体额外伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_lyrica_01_power_damage3" "单体额外伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_lyrica_02" "Key Spirit「B\?sendorfer Divine Performance」" + "DOTA_Tooltip_ability_thtd_lyrica_02_Description" "When Lyrica\'s skill causes damages, Each note in the target will cause each extra damages. \n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*0.5\n\n[Combination Promotion - Lunasa - Merlin]\nPromote 50% damages." + "DOTA_Tooltip_ability_thtd_lunasa_01" "String Performance「Guarneri del Gesù」" + "DOTA_Tooltip_ability_thtd_lunasa_01_Description" "Lunasa causes Damage Over Time and reduces Movement Speed to the target and units around it,and attaching a [ensemble]note\n\n[Damage Multiplier]Damage:40/100/200/400/800 per second" + "DOTA_Tooltip_ability_thtd_lunasa_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_lunasa_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_lunasa_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_lunasa_01_stun_time1" "单体「忧郁」状态持续时间:" + "DOTA_Tooltip_ability_thtd_lunasa_01_stun_time2" "群体「忧郁」状态持续时间:" + "DOTA_Tooltip_modifier_lunasa_01_debuff" "Note - [Sadness]" + "DOTA_Tooltip_modifier_lunasa_01_debuff_Description" "The music of violin makes people sad." + "DOTA_Tooltip_ability_thtd_lunasa_02" "Fake Strings「Pseudo Stradivarius」" + "DOTA_Tooltip_ability_thtd_lunasa_02_Description" "Lunatha\'s normal attack will cause damage to the target, and attaching a [ensemble]note.\n\n[Damage Multiplier]Damage:200/400/800 per second" + "DOTA_Tooltip_ability_thtd_lunasa_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_merlin_01" "Trumpet Spirit「Hino Phantasm」" + "DOTA_Tooltip_ability_thtd_merlin_01_Description" "Merlin plays trumpet to cause damage and reduce the Movement Speed to units in the range, and attaching a [maniac]note\n\n[Damage Multiplier]Damage: 40/100/200/400/800 Per second" + "DOTA_Tooltip_ability_thtd_merlin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_merlin_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_merlin_01_move_slow" "Movement Speed Reduction:" + "DOTA_Tooltip_ability_thtd_merlin_01_move_slow_duration" "减速持续时间:" + "DOTA_Tooltip_ability_thtd_merlin_01_outgoing_percent" "%组合伤害提升:" + "DOTA_Tooltip_ability_thtd_merlin_01_duation_time" "伤害提升持续时间:" + "DOTA_Tooltip_ability_thtd_merlin_01_mana_regen" "魔法值回复:" + "DOTA_Tooltip_modifier_merlin_01_buff" "管灵「日野幻想」" + "DOTA_Tooltip_modifier_merlin_01_buff_Description" "「狂躁」状态下造成的伤害提升。" + "DOTA_Tooltip_modifier_merlin_01_debuff" "Trumpet Spirit「Hino Phantasm」" + "DOTA_Tooltip_modifier_merlin_01_debuff_Description" "Passionate Trumpet music makes people mad." + "DOTA_Tooltip_ability_thtd_merlin_02" "Trumpet Spirit「Ghost Clifford」" + "DOTA_Tooltip_ability_thtd_merlin_02_Description" "Merlin\'s normal attack will cause damages to the target, and attaching a [maniac] note\n\n[Damage Multiplier]Damage:200/400/800 Per second" + "DOTA_Tooltip_ability_thtd_merlin_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_01" "「Is~It~Like~That!」" + "DOTA_Tooltip_ability_thtd_rumia_01_Description" "Rumia\'s attack attach extra damage, every unit Rumia kills will promote herself\'s POWER POINTs.\n\n[Damage Multiplier]Max POWER POINT Promotion:50/100/200/400/600" + "DOTA_Tooltip_ability_thtd_rumia_01_power_damage" "额外伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_01_max_bonus" "Max POWER POINTs:" + "DOTA_Tooltip_ability_thtd_rumia_02" "Darkness Sign「Demarcation」" + "DOTA_Tooltip_ability_thtd_rumia_02_Description" "Rumia\'s every 10 normal attacks will shoot arc Danmakus, units which touch Danmakus will be hurt.\n\n[Damage Multiplier]Damage: POWER POINTs*1/every barrage" + "DOTA_Tooltip_ability_thtd_rumia_02_Note0" "潜能Lv10:攻击次数需求-2。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note1" "潜能Lv50:攻击次数需求-4。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note2" "潜能Lv100:攻击次数需求-6。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note3" "潜能Lv666:\n获得特殊效果:十字架or十进制,解开封印,暗符伤害提升至10倍。" + "DOTA_Tooltip_ability_thtd_rumia_02_Note4" "潜能Lv999:\n获得特殊效果:大胃王,击杀单位能量点提高上限提高至10倍。" + "DOTA_Tooltip_ability_thtd_rumia_02_power_damage1" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_02_power_damage2" "觉醒后伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_02_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_rumia_03" "「Dark Mastery」" + "DOTA_Tooltip_ability_thtd_rumia_03_Description" "Rumia attack have 10%% probability outstretched Dark Claws to70%%HP unit,this unit will be directly spiked." + "DOTA_Tooltip_ability_thtd_rumia_03_chance" "%概率:" + "DOTA_Tooltip_modifier_rumia_03_pause" "" + "DOTA_Tooltip_ability_thtd_rumia_04" "「A story that has been forgotten by fantasy」" + "DOTA_Tooltip_ability_thtd_rumia_04_Description" "Rumia each attack creates a dark and damage to the target area.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL/3 /per Danmaku\n\n[COOPERATION PROMOTION - Hakurei Reimu]\n\nimprove50%%damage.。" + "DOTA_Tooltip_ability_thtd_rumia_04_Note0" "潜能Lv10:技能伤害+3。" + "DOTA_Tooltip_ability_thtd_rumia_04_Note1" "潜能Lv50:技能伤害+8。" + "DOTA_Tooltip_ability_thtd_rumia_04_Note2" "潜能Lv100:技能伤害+13。" + "DOTA_Tooltip_ability_thtd_rumia_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rumia_04_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_satori_01" "Recollection「Terrible Souvenir」" + "DOTA_Tooltip_ability_thtd_satori_01_Description" "Reducing units around Satori\'s Movement Speed, during 3s.\n\n[Damage Multiplier]Movement Speed Reduction:35/40/45/50/55%%" + "DOTA_Tooltip_ability_thtd_satori_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_satori_01_move_slow" "Movement Speed Reduction:" + "DOTA_Tooltip_ability_thtd_satori_01_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_satori_01_debuff" "Recollection「Terrible Souvenir」" + "DOTA_Tooltip_modifier_satori_01_debuff_Description" "Be influenced by Satori, this unit\'s Movement Speed reduces." + "DOTA_Tooltip_ability_thtd_satori_02" "Recollection「Terrifying Hypnotism」" + "DOTA_Tooltip_ability_thtd_satori_02_Description" "Units enter terrible souvenir\' HP will be recorded, they will get damage which base on the damage in these 3s again after 3s. \n\n[Damage Multiplier]Damage:40%%/100%%\n\n[Combination Promotion - Komeiji Koishi]\nUnits in terrible Hypnotism area will get 120% physical damages" + "DOTA_Tooltip_ability_thtd_satori_02_Note0" "伤害上限在基础伤害计算时判断。\n" + "DOTA_Tooltip_ability_thtd_satori_02_Note1" "潜能Lv10:伤害上限提升50%%。" + "DOTA_Tooltip_ability_thtd_satori_02_Note2" "潜能Lv50:伤害上限提升100%%。" + "DOTA_Tooltip_ability_thtd_satori_02_Note3" "潜能Lv100:伤害上限提升150%%。" + "DOTA_Tooltip_ability_thtd_satori_02_Note4" "潜能Lv666:\n获得特殊效果:地灵符「心灵恒星蒸馏器」,对目标的伤害上限提高4倍。" + "DOTA_Tooltip_ability_thtd_satori_02_Note5" "潜能Lv999:\n获得特殊效果:地妖符「自我的式神」,享受古明地恋「本我的解放」效果提高10倍。" + "DOTA_Tooltip_ability_thtd_satori_02_damage_percent" "%伤害比例:" + "DOTA_Tooltip_ability_thtd_satori_02_damage_up" "%物理伤害加深:" + "DOTA_Tooltip_modifier_thtd_satori_02_combo_buff" "【组合提升 - 古明地恋】" + "DOTA_Tooltip_modifier_thtd_satori_02_combo_buff_Description" "在恐怖催眠术作用范围下的单位受到的物理伤害加深。" + "DOTA_Tooltip_ability_thtd_iku_01" "Thunder Sign「Lightning Fish」" + "DOTA_Tooltip_ability_thtd_iku_01_Description" "Iku\'s every 8 attacks will cause extra damages and Paralysis 0.5s to the target and units in that area around the target.\n\n[Damage Multiplier]Damage:50 * 2^star-levels\n\n[Combination Promotion - Tenshi Hinanawi]\nParalysis time will promote 1s." + "DOTA_Tooltip_ability_thtd_iku_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_iku_01_radius" "范围:" + "DOTA_Tooltip_ability_thtd_iku_01_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_iku_01_stun_time" "麻痹时间:" + "DOTA_Tooltip_ability_thtd_iku_01_lock_time" "麻痹后免疫时间:" + "DOTA_Tooltip_modifier_iku_01_debuff" "Thunder Sign「Lightning Fish」" + "DOTA_Tooltip_modifier_iku_01_debuff_Description" "be attacked by Iku Nagae, this unit paralysises." + "DOTA_Tooltip_ability_thtd_iku_02" "Fish Sign「Dragonfish Drill」" + "DOTA_Tooltip_ability_thtd_iku_02_Description" "Iku uses Drill to cause Damage Over Time to front area.\n\n[Damage Multiplier]Damage: Star-levels * POWER POINTs * 3 per second" + "DOTA_Tooltip_ability_thtd_iku_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_iku_02_radius" "范围:" + "DOTA_Tooltip_ability_thtd_iku_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_iku_02_tick_time" "伤害间隔时间:" + "DOTA_Tooltip_ability_thtd_mystia_01" "Vocal Sign「Hooting in the Night」" + "DOTA_Tooltip_ability_thtd_mystia_01_Description" "Promote surrounding friendly units\' physical strike ability.\n\n[Damage Multiplier]Strike Values:10/20/30/40/60" + "DOTA_Tooltip_ability_thtd_mystia_01_penetration" "Strike Value" + "DOTA_Tooltip_modifier_mystia_01_buff" "Vocal Sign「Hooting in the Night」" + "DOTA_Tooltip_modifier_mystia_01_buff_Description" "Be influenced by night sparrow\'s voice, this units\' physical strike promotes." + "DOTA_Tooltip_ability_thtd_mystia_02" "Vocal Sign「Howl of the Horned Owl」" + "DOTA_Tooltip_ability_thtd_mystia_02_Description" "Promote surrounding units\' normal attack damages.\n\n[Damage Multiplier]Normal attack damage promotion:50/100/200" + "DOTA_Tooltip_ability_thtd_mystia_02_critdamage" "Normal attack damage Promotion:" + "DOTA_Tooltip_modifier_mystia_02_buff" "Vocal Sign「Howl of the Horned Owl」" + "DOTA_Tooltip_modifier_mystia_02_buff_Description" "Be influenced by night sparrow\'s voice, this units\' attack damage promotes." + "DOTA_Tooltip_ability_thtd_marisa_01" "Love Sign「Master Spark」" + "DOTA_Tooltip_ability_thtd_marisa_01_Description" "Marisa shoots Magicannon to front, cause large Damage Over Time to enemies on straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star levels*3.5 per second\n\n[Combination Promotion - Hakurei Reimu]\nDuration of Magic Connon promotes to 7s." + "DOTA_Tooltip_ability_thtd_marisa_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_marisa_01_damage_width" "WIDTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_01_damage_lenth" "LENGTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_01_channel_time" "DURATION:" + "DOTA_Tooltip_modifier_thdots_marisa01_think_interval" "Magicannon「Final Spark」" + "DOTA_Tooltip_modifier_thdots_marisa01_think_interval_Description" "Marisa is shooting Magicannon." + "DOTA_Tooltip_ability_thtd_marisa_03" "Magicannon「Final Spark」" + "DOTA_Tooltip_ability_thtd_marisa_03_Description" "Marisa shoots magicannon to front, cause large Damage Over Time to enemies on straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star level*7.0 per second\n\n[Combination Promotion - Hakurei Reimu]\nDuration of Magic Connon promotes to 7s." + "DOTA_Tooltip_ability_thtd_marisa_03_Note0" "潜能Lv10:技能伤害+8,能量提升+40%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note1" "潜能Lv50:技能伤害+18,能量提升+80%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note2" "潜能Lv100:技能伤害+28,能量提升+160%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note3" "潜能Lv666:\n获得特殊效果:二重火花,能量提升效果和伤害翻倍。" + "DOTA_Tooltip_ability_thtd_marisa_03_Note4" "潜能Lv999:\n获得特殊效果:超究极火花,魔炮伤害提升至400%%。" + "DOTA_Tooltip_ability_thtd_marisa_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_marisa_03_power_up" "%能量提升:" + "DOTA_Tooltip_ability_thtd_marisa_03_damage_width" "WIDTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_03_damage_lenth" "LENGTH OF MAGICANNON:" + "DOTA_Tooltip_ability_thtd_marisa_03_channel_time" "DURATION:" + "DOTA_Tooltip_ability_thtd_marisa_02" "Magic Sign「Stardust Reverie」" + "DOTA_Tooltip_ability_thtd_marisa_02_Description" "When Marisa attacks or use skills,Starlike Danmakus will be shooted, enemies are killed by Danmakus will make Marisa\'s MP recover." + "DOTA_Tooltip_ability_thtd_marisa_02_Note0" "潜能Lv10:技能伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_marisa_02_Note1" "潜能Lv50:技能伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_marisa_02_Note2" "潜能Lv100:技能伤害提高400%%。" + "DOTA_Tooltip_ability_thtd_marisa_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_marisa_02_mana" "回复法力值:" + "DOTA_Tooltip_ability_thtd_tenshi_01" "Heaven Sign「Sword of Divine Justice」" + "DOTA_Tooltip_ability_thtd_tenshi_01_Description" "causing damage to a small range to the units in target area. \n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*1.5" + "DOTA_Tooltip_ability_thtd_tenshi_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_tenshi_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_tenshi_01_bonus_attack_power" "攻击力和能量提升:" + "DOTA_Tooltip_ability_thtd_tenshi_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_tenshi_02" "Non-Perception「Sword of Neither Perception nor Non-Perception」" + "DOTA_Tooltip_ability_thtd_tenshi_02_Description" "Effect 1:\nTenshi\'s attack has chance to attach Quadruple Critical Strike.\nEffect 2:\nTenshi\'s attack will attach a small range cleave effect." + "DOTA_Tooltip_ability_thtd_tenshi_02_Note0" "潜能Lv10:暴击概率 +10%%。" + "DOTA_Tooltip_ability_thtd_tenshi_02_Note1" "潜能Lv50:暴击概率 +20%%。" + "DOTA_Tooltip_ability_thtd_tenshi_02_Note2" "潜能Lv100:暴击概率 +40%%。" + "DOTA_Tooltip_ability_thtd_tenshi_02_chance" "%暴击概率:" + "DOTA_Tooltip_ability_thtd_tenshi_02_crit" "%暴击伤害:" + "DOTA_Tooltip_ability_thtd_tenshi_02_range" "分裂范围:" + "DOTA_Tooltip_ability_thtd_tenshi_03" "Earth Sign「Sword of Unletting Soil」" + "DOTA_Tooltip_ability_thtd_tenshi_03_Description" "Effect 1:Tenshi\'s EVERY 15 TIMES attack will shoot a STRAIGHT-LINE WAVE to the target,it will cause huge damages.\n\nEffect 2:Promote surrounding units 20% ATTACK SPEED.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*2.5\n\n[Combination Promotion - Iku Nagae]\nAttack times for triggering the wave REDUCE TO 8 TIMES." + "DOTA_Tooltip_ability_thtd_tenshi_03_Note0" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note1" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note2" "潜能Lv100:技能伤害+40。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note3" "潜能Lv666:\n获得特殊效果:地符「一击震乾坤」,攻击时施放,造成 星级*能量*666 伤害。" + "DOTA_Tooltip_ability_thtd_tenshi_03_Note4" "潜能Lv999:\n获得特殊效果:气符「无念无想的境界」,进入空灵之境,非想之剑增加的暴击伤害翻倍。" + "DOTA_Tooltip_ability_thtd_tenshi_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_tenshi_03_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_tenshi_03_attack_speed" "ATTACK SPEED Promotion" + "DOTA_Tooltip_modifier_tenshi_03_attack_speed_buff" "Earth Sign「Sword of Unletting Soil」" + "DOTA_Tooltip_modifier_tenshi_03_attack_speed_buff_Description" "Be influenced by Tenshi, this unit\'s ATTACK SPEED promotes" + "DOTA_Tooltip_ability_thtd_patchouli_01" "Fire Water Wood Metal Earth Sign「Philosopher\'s Stone」" + "DOTA_Tooltip_ability_thtd_patchouli_01_Description" "Patchouli can switch elements, use different kinds of magic:\n\nFire Sign「Agni Shine」\n\nCause large amount of damage to the target area.\n[Damage Multiplier]Damage:POWER POINTs*2^Star levels\n\nWater Sign「Bury In Lake」\n\nCause Damage Over Time to the target area, and if enemies\' HP is less than 30% of the total HP, they will directly die.\n[Damage Multiplier]Damage:POWER POINTs*Star-levels per second\n\nMetal& Water Sign「Mercury poison」\n\nAttaching Posion to units in the target area, cause Damage Over Time and reduce Armors and resistance.\n[Damage Multiplier]Damage:POWER POINTs*Star-levels Per Second\n[Damage Multiplier]Resistance Reduction:10/20/30/40/60" + "DOTA_Tooltip_ability_thtd_patchouli_01_Note0" "潜能Lv10:贤者之石效果提升,伤害提高50%%。" + "DOTA_Tooltip_ability_thtd_patchouli_01_Note1" "潜能Lv50:贤者之石效果提升,伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_patchouli_01_Note2" "潜能Lv100:贤者之石效果提升,伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_patchouli_01_power_damage1" "「火神之光」伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_patchouli_01_range1" "「火神之光」作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_01_power_damage2" "「湖葬」伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_patchouli_01_range2" "「湖葬」作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_01_duration_time2" "「湖葬」持续时间:" + "DOTA_Tooltip_ability_thtd_patchouli_01_power_damage3" "「水银之毒」伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_patchouli_01_range3" "「水银之毒」作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_01_duration_time3" "「水银之毒」持续时间:" + "DOTA_Tooltip_modifier_patchouli_01_mercury_poison_debuff" "Metal & Water Sign「Mercury poison」" + "DOTA_Tooltip_modifier_patchouli_01_mercury_poison_debuff_Description" "Be effected by Mercury poison, this unit is getting Damage Over Time and reducing the resistance." + "DOTA_Tooltip_modifier_patchouli_01_buff_fire" "「火神的光辉」" + "DOTA_Tooltip_modifier_patchouli_01_buff_fire_Description" "造成暴击伤害。" + "DOTA_Tooltip_modifier_patchouli_01_buff_water" "「精灵公主」" + "DOTA_Tooltip_modifier_patchouli_01_buff_water_Description" "增强了自身的伤害。" + "DOTA_Tooltip_modifier_patchouli_01_debuff_gold" "「金属疲劳」" + "DOTA_Tooltip_modifier_patchouli_01_debuff_gold_Description" "受到七元素符卡的伤害提高了。" + "DOTA_Tooltip_ability_thtd_patchouli_02" "「Philosopher\'s Stone」" + "DOTA_Tooltip_ability_thtd_patchouli_02_Description" "Switch Philosopher\'s Stone\'s effects" + "change_to_patchouli_agni_shine" "Switch to「Agni Shine」" + "change_to_patchouli_bury_in_lake" "Switch to「Bury In Lake」" + "change_to_patchouli_mercury_poison" "Switch to「Mercury poison」" + "DOTA_Tooltip_ability_thtd_patchouli_03" "Moon Sign「Silent Selene」" + "DOTA_Tooltip_ability_thtd_patchouli_03_Description" "Promote friendly units around Patchouli 30% Magic Damages." + "DOTA_Tooltip_ability_thtd_patchouli_03_magic_outgoing" "%魔法伤害提高:" + "DOTA_Tooltip_modifier_patchouli_03_buff" "Moon Sign「Silent Selene」" + "DOTA_Tooltip_modifier_patchouli_03_buff_Description" "Be influenced by Patchouli, this unit\'s Magic Damage promotes." + "DOTA_Tooltip_ability_thtd_patchouli_04" "Sun Sign「Royal Flare」" + "DOTA_Tooltip_ability_thtd_patchouli_04_Description" "Patchouli through guide Sun Sign「Royal Flare」,enemies in 1000 distance get huge damages and stun,For two seconds.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5 /EACH TIME\n\n[COOPERATION PROMOTION - Koakuma]\nNeed five stars and Koakuma on the court." + "DOTA_Tooltip_ability_thtd_patchouli_04_Note0" "潜能Lv10:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note1" "潜能Lv50:技能伤害+30。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note2" "潜能Lv100:技能伤害+60。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note3" "潜能Lv666:\n获得特殊效果:知识就是力量,获得三千大界能量+3000(施放贤者之石符卡后获得)。" + "DOTA_Tooltip_ability_thtd_patchouli_04_Note4" "潜能Lv999:\n获得特殊效果:魔法阵,布下五芒星法阵,增强七元素之威力,造成伤害提升至5倍。" + "DOTA_Tooltip_ability_thtd_patchouli_04_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_patchouli_04_range" "作用范围:" + "DOTA_Tooltip_ability_thtd_patchouli_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_reisen_01" "Weak Heart「Demotivation」" + "DOTA_Tooltip_ability_thtd_reisen_01_Description" "Reisen\'s attack will knockback the target, this skill only can trigger one time to one target." + "DOTA_Tooltip_ability_thtd_reisen_02" "Illusion Rabbit「Parallel Cross」" + "DOTA_Tooltip_ability_thtd_reisen_02_Description" "Reisen\'s attack has chance to create an illusion, at most have 3 illusions.\n\n[Combination Promotion - Youmu Konpaku]\nThe max illusions promotes to 5 illusions." + "DOTA_Tooltip_ability_thtd_reisen_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_reisen_02_max_count" "分身最大数量:" + "DOTA_Tooltip_ability_thtd_reisen_03" "「Lunatic Red Eyes」" + "DOTA_Tooltip_ability_thtd_reisen_03_Description" "Reisen causes damage and knockback units in the target area.\n\n[Damage Multiplier]Damage: POWER POINTs*5" + "DOTA_Tooltip_ability_thtd_reisen_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_reisen_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_reisen_03_damage_up" "%分身增加伤害:" + "DOTA_Tooltip_ability_thtd_yuyuko_01" "Deadly Butterfly「Eternal Sleep in Dreamland」" + "DOTA_Tooltip_ability_thtd_yuyuko_01_Description" "Yuyuko use light butterfly to track surrouding units and cause damages\n\n[Damage Multiplier]Damage:POWER POINTs*0.6" + "DOTA_Tooltip_ability_thtd_yuyuko_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuyuko_02" "Deadly Dance「Law of Mortality」" + "DOTA_Tooltip_ability_thtd_yuyuko_02_Description" "The Damage from Yuyuko has 5% chance to directly kill units (max damage: power * star * 100).\n\n[Combination Promotion - Youmu Konpaku]\nChance of directly killing promotes to 10%%." + "DOTA_Tooltip_ability_thtd_yuyuko_02_Note0" "潜能Lv10:概率+5%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_02_Note1" "潜能Lv50:概率+10%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_02_Note2" "潜能Lv100:概率+15%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_yuyuko_03" "Death Sign「Life of Drunk, Dream of Death」" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Description" "Yuyuko opens barrier, if units in target area\'s HP less than 30%%, they will be DIRECTLY KILLED." + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note0" "潜能Lv10:生命值秒杀下限+10%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note1" "潜能Lv50:生命值秒杀下限+20%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note2" "潜能Lv100:生命值秒杀下限+30%%。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note3" "潜能Lv666:\n获得特殊效果:「蝴蝶风暴阎魔笏」,死蝶每次放出光蝶数量+3。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_Note4" "潜能Lv999:\n获得特殊效果:「反魂蝶-三分咲」,吸收能量提高至3倍最大次数。" + "DOTA_Tooltip_ability_thtd_yuyuko_03_health_kill" "%秒杀生命值:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_damage_radius" "作用范围:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_power_bonus" "死亡吸收能量:" + "DOTA_Tooltip_ability_thtd_yuyuko_03_max_count" "最大叠加次数:" + "DOTA_Tooltip_modifier_yuyuko_03_think" "死符「醉人之生,死的梦幻」" + "DOTA_Tooltip_modifier_yuyuko_03_think_Description" "幽幽子正在展开结界" + "DOTA_Tooltip_modifier_yuyuko04_killed" "死符已触发" + "DOTA_Tooltip_modifier_yuyuko04_killed_Description" "该单位已经触发过死符「醉人之生,死的梦幻」,同一目标每秒只能触发一次。" + "DOTA_Tooltip_ability_thtd_youmu_01" "Sword Skill「Cherry Blossom Flashing」" + "DOTA_Tooltip_ability_thtd_youmu_01_Description" "Youmu\'s every 8 times attack will shoot a Swordkee, cause damage to units on the straight line.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*2\n\n[Combination Promotion - Yuyuko Saigyouji]\nATTACK SPEED promotes 50%%." + "DOTA_Tooltip_ability_thtd_youmu_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_youmu_01_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_youmu_01_length" "直线长度:" + "DOTA_Tooltip_ability_thtd_youmu_01_attack_speed" "攻击速度提升:" + "DOTA_Tooltip_ability_thtd_youmu_02" "Konpaku「Dharma of Gumonji Wisdom of the Living and Dead」" + "DOTA_Tooltip_ability_thtd_youmu_02_Description" "When Youmu use Sword Skill「Cherry Blossom Flashing」or Six Realms Sword「A Single Thought and the Infinite Kalpas」,have 30% chance to summon half spirit to do an extra kill hit.\n\n[Combination Promotion - Reisen]\nChance to trigger promote to 70%%." + "DOTA_Tooltip_ability_thtd_youmu_02_Note0" "潜能Lv10:概率+10%%。" + "DOTA_Tooltip_ability_thtd_youmu_02_Note1" "潜能Lv50:概率+20%%。" + "DOTA_Tooltip_ability_thtd_youmu_02_Note2" "潜能Lv100:概率+30%%。" + "DOTA_Tooltip_ability_thtd_youmu_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_youmu_03" "Six Realms Sword「A Single Thought and the Infinite Kalpas」" + "DOTA_Tooltip_ability_thtd_youmu_03_Description" "Effect 1:Youmu Konpaku\'s every attack will recover 1 MP.\n\nEffect 2:Youmu Konpaku waves her double swords to hit units in the target area continously.\n\n[Damage Multiplier]Damage:POWER POINTs*Sta-levels*5, total 10 hits" + "DOTA_Tooltip_ability_thtd_youmu_03_Note0" "转化成能量的攻击力为白字攻击力。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note1" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note2" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note3" "潜能Lv100:技能伤害+40。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note4" "潜能Lv666:\n获得特殊效果:迷符「半身大悟」,召唤半灵后获得冥罚效果,使目标受到妖梦的伤害增加200%%。" + "DOTA_Tooltip_ability_thtd_youmu_03_Note5" "潜能Lv999:\n获得特殊效果:四生剑「众生无情之声」,斩击伤害提升至4倍。" + "DOTA_Tooltip_ability_thtd_youmu_03_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_rin_01" "Youkai「Blazing Wheel」" + "DOTA_Tooltip_ability_thtd_rin_01_Description" "Rin creates a wheel to cause damage to the target and units behind it, and attaching a [inferno] effect.\n\n[Damage Multiplier]Damage:POWER POINTs\n\n[Combination Promotion - Reiuji Utsuho]\nPromote surrounding units 20%% physical damage." + "DOTA_Tooltip_ability_thtd_rin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_modifier_utsuho_rin_buff" "「Blazing ground」" + "DOTA_Tooltip_modifier_utsuho_rin_buff_Description" "Be influenced by ground youseis, this unit\'s physical damage promotes." + "DOTA_Tooltip_modifier_rin_01_debuff" "Youkai「Blazing Wheel」" + "DOTA_Tooltip_modifier_rin_01_debuff_Description" "Bumped by the wheel, this unit is under the inferno effect." + "DOTA_Tooltip_ability_thtd_rin_02" "「Rekindling of Dead Ashes」" + "DOTA_Tooltip_ability_thtd_rin_02_Description" "If units attached [inferno] effect are killed, the surrounding units of the target will get HP-percent damage. \n\n[Damage Multiplier]Damage:4%%/6%%/15%%" + "DOTA_Tooltip_ability_thtd_rin_02_hp_damage" "%生命上限伤害:" + "DOTA_Tooltip_ability_thtd_rin_02_power_damage" "伤害上限(能量点*星级):" + "DOTA_Tooltip_ability_thtd_rin_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_01" "Explosion Sign「Petit Flare」" + "DOTA_Tooltip_ability_thtd_utsuho_01_Description" "Utsuho\'s every attack will cause damage to the target and units around it.\n\n[Damage Multiplier]Damage: POWER POINTs*1\n\n[Combination Promotion - Rin Kaenbyou]\nPromote surrounding units 20% physical damage." + "DOTA_Tooltip_ability_thtd_utsuho_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_utsuho_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_01_damage_up" "%组合提升物理伤害:" + "DOTA_Tooltip_ability_thtd_utsuho_02" "Explosion Sign「Giga Flare」" + "DOTA_Tooltip_ability_thtd_utsuho_02_Description" "Utsuho\'s every 6 times attack will cause huge damage to the target and units around it.\n\n[Damage Multiplier]Damage:POWER POINTs * Star-levels" + "DOTA_Tooltip_ability_thtd_utsuho_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_utsuho_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_02_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_utsuho_03" "「Hell\'s Artificial Sun」" + "DOTA_Tooltip_ability_thtd_utsuho_03_Description" "Utsuho makes artificial sun to the target area, cause tractive effort to surrouding units, and cause damage to units in the area when the skill finishes.\n\n[Damage Multiplier]Damage:POWER POINTs * Star-levels * 24" + "DOTA_Tooltip_ability_thtd_utsuho_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_utsuho_03_radius" "范围:" + "DOTA_Tooltip_ability_thtd_utsuho_03_duration_time" "牵引时间:" + "DOTA_Tooltip_ability_thtd_utsuho_04" "AI定点施放" + "DOTA_Tooltip_ability_thtd_utsuho_04_Description" "选择一个地点来设定AI定点施放:「地狱的人造太阳」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_reimu_01" "Spirit Sign「Fantasy Seal-Spread-」" + "DOTA_Tooltip_ability_thtd_reimu_01_Description" "Reimu\'s every 6 attacks will throw many spirit signs to the target.\n\n[Damage Multiplier]Damage:POWER POINTs*Star*2.0 Every Spirit Sign\n\n[Combination Promotion - Rumia]\nAttack times for triggering the wave REDUCE TO 3 TIMES." + "DOTA_Tooltip_ability_thtd_reimu_01_power_damage" "技能伤害(能量点*星级/每道灵符):" + "DOTA_Tooltip_ability_thtd_reimu_01_max_count" "攻击次数需求:" + "DOTA_Tooltip_ability_thtd_reimu_02" "Bewitched Weapon「Merciless Purification Rod」" + "DOTA_Tooltip_ability_thtd_reimu_02_Description" "Reimu\'s skill has 20% chance to cause double damage.\n\n[Combination Promotion - Marisa Kirisame]\nThe chance will promote to 50%." + "DOTA_Tooltip_ability_thtd_reimu_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_reimu_03" "Holy Relic「Yin-Yang Demon God Orb」" + "DOTA_Tooltip_ability_thtd_reimu_03_Description" "Reimu throw a huge Yin-Yang Orb.\n\nYin-Yang orb will cleave to smaller Yin-Yang orbs and reduce the damage when dropping the floor.\n\nUnits that are punched by Yin-Ynag orb will get damage and stun. \n\n[Damage Multiplier]Damage:POWER POINTs*Star*3 every time." + "DOTA_Tooltip_ability_thtd_reimu_03_Note0" "潜能Lv10:附带力符「阴阳玉将」,伤害提高至5倍。" + "DOTA_Tooltip_ability_thtd_reimu_03_Note1" "潜能Lv50:附带力符「阴阳玉将」,伤害提高至10倍。" + "DOTA_Tooltip_ability_thtd_reimu_03_Note2" "潜能Lv100:附带力符「阴阳玉将」,伤害提高至15倍。" + "DOTA_Tooltip_ability_thtd_reimu_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_reimu_03_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_reimu_03_max_count" "分裂次数:" + "DOTA_Tooltip_ability_thtd_reimu_03_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_reimu_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_reimu_05_Description" "选择一个地点来设定AI定点施放:宝具「阴阳鬼神玉」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_reimu_04" "「Fantasy Nature」" + "DOTA_Tooltip_ability_thtd_reimu_04_Description" "Everytime Reimu trigger Bewitched Weapon「Merciless Purification Rod」\'s effect, a Yin-Yang orb will be counted.\n\nWhen 7 Yin-Yang orbs are triggered, Yin-Yang orbs will automatically track and attack around enemies, cause damage to units in the target area.\n\n[Damage Multiplier]Damage:POWER POINTs*Star-levels*5 every attack \n\n[Combination Promotion - Yukari]\n\\The damage will promote to 150%." + "DOTA_Tooltip_ability_thtd_reimu_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note2" "潜能Lv100:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note3" "潜能Lv666:\n获得特殊效果:梦想妙珠,阴阳玉发射速度提高至3倍。" + "DOTA_Tooltip_ability_thtd_reimu_04_Note4" "潜能Lv999:\n获得特殊效果:神灵宝珠,祈愿后的能量提升效果提高至7倍。" + "DOTA_Tooltip_ability_thtd_reimu_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_reimu_04_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_reimu_04_power_up" "%祈愿能量提升:" + "DOTA_Tooltip_ability_thtd_daiyousei_01" "「Kind Heart of Yousei」" + "DOTA_Tooltip_ability_thtd_daiyousei_01_Description" "Daiyousei manipulate yousei\'s power, promote target\'s level\n\n[Damage Multiplier]level Promotion:Star-levels*1" + "DOTA_Tooltip_ability_thtd_daiyousei_01_level_up" "提升等级:" + "DOTA_Tooltip_ability_thtd_daiyousei_02" "「Yousei Garden」" + "DOTA_Tooltip_ability_thtd_daiyousei_02_Description" "Daiyousei manipulate yousei\'s power,Recovering surrounding units 10 MP." + "DOTA_Tooltip_ability_thtd_daiyousei_02_Note0" "潜能Lv10:恢复魔法值+1点。" + "DOTA_Tooltip_ability_thtd_daiyousei_02_Note1" "潜能Lv50:恢复魔法值+2点。" + "DOTA_Tooltip_ability_thtd_daiyousei_02_Note2" "潜能Lv100:恢复魔法值+3点。" + "DOTA_Tooltip_ability_thtd_daiyousei_02_mana_reg" "魔法恢复:" + "DOTA_Tooltip_ability_thtd_daiyousei_03" "「Revelution」" + "DOTA_Tooltip_ability_thtd_daiyousei_03_Description" "Daiyousei links with the target unit, transform its skill damage to magic damage, and promote its skill damage.\n\n[Damage Multiplier]Damage Promotion:30%%/40%%/60%%\n\n[Combination Promotion - Cirno]\nWhen linking with Cirno,The damage promotes to 45%%/60%%/90%%." + "DOTA_Tooltip_ability_thtd_daiyousei_03_Note0" "潜能Lv10:技能伤害提升+10%%。" + "DOTA_Tooltip_ability_thtd_daiyousei_03_Note1" "潜能Lv50:技能伤害提升+20%%。" + "DOTA_Tooltip_ability_thtd_daiyousei_03_Note2" "潜能Lv100:技能伤害提升+30%%。" + "DOTA_Tooltip_ability_thtd_daiyousei_03_damage_up" "%技能伤害提升:" + "DOTA_Tooltip_ability_thtd_daiyousei_03_crino_up" "%琪露诺技能伤害提升:" + "DOTA_Tooltip_modifier_daiyousei_03" "「Revelution」" + "DOTA_Tooltip_modifier_daiyousei_03_Description" "Linking with Daiyousei, this unit\'s skill damage is transformed to magic damage, and promotes skill damage." + "DOTA_Tooltip_modifier_thtd_daiyousei_03_combo_buff" "【组合提升 - 琪露诺】" + "DOTA_Tooltip_modifier_thtd_daiyousei_03_combo_buff_Description" "与琪露诺相连时伤害提升效果增加,且可以额外连接一个目标。" + "DOTA_Tooltip_ability_thtd_daiyousei_04" "「Beyond The World」" + "DOTA_Tooltip_ability_thtd_daiyousei_04_Description" "Daiyousei can release Cirno\'s hiding power.(This Cirno must be ★★★★★, this skill only can use one time.)" + "DOTA_Tooltip_ability_ability_common_attack_speed_buff" "Special Skill - ATTACK SPEED Promotion" + "DOTA_Tooltip_ability_ability_common_attack_speed_buff_Description" "Promote this unit\'s ATTACK SPEED.\n\nThis skill can upgrade by CARD FEEDING." + "DOTA_Tooltip_ability_ability_common_attack_speed_buff_attack_speed" "ATTACK SPEED Promotion:" + "DOTA_Tooltip_ability_ability_common_power_buff_Description" "Promote this unit\'s POWER POINTs.\n\nThis skill can upgrade by CARD FEEDING.\n\n[Power Promotion]:20%%/40%%/60%%/80%%" + "DOTA_Tooltip_ability_ability_common_power_buff" "Special Skill - Power Promotion" + "DOTA_Tooltip_ability_ability_common_power_buff_power_up" "%能量和攻击提升:" + "DOTA_Tooltip_ability_ability_common_mana_regen_buff" "Special Skill - MP Recovery Promotion" + "DOTA_Tooltip_ability_ability_common_mana_regen_buff_Description" "Promote this unit\'s MP RECOVERY SPEED.\n\nThis skill can upgrade by CARD FEEDING." + "DOTA_Tooltip_ability_ability_common_mana_regen_buff_mana_regen" "MP RECOVERY SPEED:" + "DOTA_Tooltip_ability_ability_common_ai" "关闭/开启AI" + "DOTA_Tooltip_ability_ability_common_ai_Description" "关闭/开启该单位的AI。如果要手动施放技能,请先关闭AI,防止施法前摇被AI指令打断导致施放失败。" + "minoriko_shop" "MinoriKonbini" + "lily" "Lily White" + "nazrin" "Nazrin" + "minoriko" "Aki Minoriko" + "mugiyousei" "Mugiyousei" + "shanghainingyou" "Shanghainingyou" + "hourainingyou" "Hourainingyou" + "hanadayousei" "Hanadayousei" + "maidyousei" "Maidyousei" + "cirno" "Cirno" + "letty" "Letty Whiterock" + "kogasa" "Tatara Kogasa" + "lyrica" "Lyrica Prismriver" + "lunasa" "Lunasa Prismriver" + "merlin" "Merlin Prismriver" + "rumia" "Rumia" + "satori" "Komeiji Satori" + "iku" "Nagae Iku" + "mystia" "Mystia Lorelei" + "marisa" "Kirisame Marisa" + "tenshi" "Hinanawi Tenshi" + "patchouli" "Patchouli Knowledge" + "reisen" "Reisen Udongein Inaba" + "yuyuko" "Saigyouji Yuyuko" + "youmu" "Konpaku Youmu" + "rin" "Kaenbyou Rin" + "utsuho" "Reiuji Utsuho" + "reimu" "Hakurei Reimu" + "daiyousei" "Daiyousei" + "DOTA_Tooltip_ability_item_0032" "[SSR]Flandre Scarlet" + "DOTA_Tooltip_ability_item_0032_Description" "Flandre has lived for at least 495 years.\n She is young sister of the host of Scarlet Devil Mansion.Like her sister-Remilia Scarlet, she also has a lolita body shape.\nShe seems to has abnormal mentality and thought, and she has uncontrollable collapsing force, so she is shutted in Scarlet Devil Mansion by her sister, not allowed to going out, even hardly ever join parties.\nHuman being is her dessert which she usually have, although she doesn\'t know at all.\nMany Spell cards of hers have [Taboo] meanings\' words.\nThe crystal wings in her back are her biggest feature.\n\n[★][Taboo]Four of a Kind\n[★]Taboo「L\?vatein」\n[★★★]Taboo「Kagome, Kagome」\n[★★★★★]Secret Barrage「And Then Will There Be None\?」" + "DOTA_Tooltip_ability_item_0032_Lore" "Sometimes diving Scarlet Devil Mansion aboveboard, would meet young sister. it can pass save without stimulating her. It is rarely for me to dive in, wish not to meet her.(Kirisame Marisa)" + "DOTA_Tooltip_ability_item_0031_Description" "The young sister of Master of Palace of the Earth Spirits. The same as Satori, she also has mind-reading ability.\nBut she knows people hate this ability, so she closes her third-eye which can read minds, makes herself cannot read other people\'s minds.\nRelatively she gains the ability to manipulate the level of subconciousness, but actually her mind-reading ability isn\'t disappear.\nShe also often acts under subconciousness, makes people cannot find her out.\nShe normally rambles in the earth or Palace of the Earth Spirits.\nSometimes she will pop up on the earth, but due to her own abilities, even looking at her,while you have a distraction, you will forget her soon.\nActually there are also many youkaies in underworld feel self-condemned about Koishi\'s current situation.\n\n[★]「Rose Hell」\n[★]「Philosophy of a Hated Person」\n[★★★]\tInstinct「Release of the Id」\n[★★★★★]「Subterranean Rose」" + "DOTA_Tooltip_ability_item_0030_Description" "Remilia\'s a 500-year-old vampire lord, king of night.\nShe is the host of Scarlet Devil Mansion, the old sister of Flandre.\nShe has a lolita body shape,wearing a pink dress.\nAs the host of Scarlet Devil Mansion, she really pays attention to majesty and dignity like ordinary nobilities. \nBut her character is like her appearance, very wilful and childish.\nShe has「Ability of manipulating the fate」, seems to be able to make people which are affected have high chance to meet something precious.\n\n[★]「Red Magic」\n[★]Night Lord「Dracula Cradle」\n[★★★]\tDivine Spear「Spear the Gungnir」\n[★★★★★]Scarlet Sign「Red the Nightless Castle」" + "remilia" "Remilia Scarlet" + "flandre" "Flandre Scarlet" + "sakuya" "Izayoi Sakuya" + "koakuma" "Koakuma" + "meirin" "Hong Meiling" + "yuuka" "Kazami Yuuka" + "DOTA_Tooltip_ability_item_0033" "[R]Little Devil" + "DOTA_Tooltip_ability_item_0033_Description" "The devil is a powerful race in Gensoukyou, like Magicians and vampires.\nBut relative to others, little devils are still weak.\n Similar with fairies, her life is light-hearted, her character is so naughty and usually looks really free\n\n[★]「Pyro Match」\n[★★★]「Taboo Grimoire Index」" + "DOTA_Tooltip_ability_item_0034" "[R]Hong Meiling" + "DOTA_Tooltip_ability_item_0034_Description" "Chinese youkai,the guard of Scarlet Devil Mansion.\n She is also a Kungfu master, as first line of defense to against intruders.\nThe appearance is just like human.\nHer ability is very comprehensive, without obvious weaknesses,causes when she compares with youkais that reinforced some skills specificly, she will be not outstanding enough.\nBut only of intruding rudely,she is so kind to human and hardly ever attack human.\nDuring she is doing the guard, she also managing the garden of Scarlet Devil Mansion, being the gardener of Scarlet Devil Mansion.\n\n[★]Flowery Sign「Colorful Light Lotus Flower Palm」\n[★★★]Three Blasts「Colorful Ultimate Mountain Breaker」" + "DOTA_Tooltip_ability_item_0034_Lore" "「A...abasolutely don\'t laze any more.」" + "DOTA_Tooltip_ability_item_0033_Lore" "Living in Scarlet Devil Mansion at ordinary time, also not be allocated some work, are a group of free characters." + "DOTA_Tooltip_ability_item_0035" "[SSR]Kazami Yuuka" + "DOTA_Tooltip_ability_item_0035_Description" "The youkai lives in Gensokyo. Has ability to control flowers.\nReally like flowers open seasonally, Spring flowers on Spring,\nSummer flowers on Summer,Autumn flowers on Autumn,\n and there are still a few Winter flowers on Winter\nas having flowers open in all year to the goal to work hard.\nLiving around flowers in all year, if human or youkai intrude to bother her, she will use her powerful power to kill them without any explaining.\nAs a flower youkai, she is more like the incarnation of nature. Differ from fairies, She is much more dangerous than all youkaies that had been introduced until now.\nAt ordinary time she lives in the place surrounding by flowers, looks like a kind man but in fact she is no mercy to others.\n\n[★]Flower Sign「Blossoming of Gensokyo」\n[★]「Fantastic Spring Flowers」\n[★★★]Fantasy「The Beauties of Nature」\n[★★★★★]Extremity「Double Spark」" + "DOTA_Tooltip_ability_thtd_remilia_01" "「Red Magic」" + "DOTA_Tooltip_ability_thtd_remilia_01_Description" "Remilia causes one time of damage to units in target areas.\n\n[Damage Multiplier]DAMAGE:POWER POINT*STAR-LEVEL*1" + "DOTA_Tooltip_ability_thtd_remilia_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_01_range" "目标区域范围:" + "DOTA_Tooltip_ability_thtd_remilia_01_power_bonus" "能量点增加:" + "DOTA_Tooltip_ability_thtd_remilia_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_remilia_02" "Night Lord「Dracula Cradle」" + "DOTA_Tooltip_ability_thtd_remilia_02_Description" "When Remilia\'s skills cause damage, she will absorb targets\'power,promote herself 1%% magic damage.(max to promote 50%%)\n\n[COOPERATION PROMOTION -Flandre]\n\nPROMOTE DAMAGES BECOME TO 2%%." + "DOTA_Tooltip_ability_thtd_remilia_02_damage_up" "%魔法伤害提升:" + "DOTA_Tooltip_ability_thtd_remilia_02_max_up" "%最大提升:" + "DOTA_Tooltip_ability_thtd_remilia_02_duration_time" "每次持续时间:" + "DOTA_Tooltip_ability_thtd_remilia_03" "Divine Spear「Spear the Gungnir」" + "DOTA_Tooltip_ability_thtd_remilia_03_Description" "Remilia flings out the divine spear, causes damage to enemies in the straight line.\n\n[Damage Multiplier]DAMAGE:POWER POINTS*STAR LEVEL*3" + "DOTA_Tooltip_ability_thtd_remilia_03_Note0" "潜能Lv10:冷却时间-1秒。" + "DOTA_Tooltip_ability_thtd_remilia_03_Note1" "潜能Lv50:冷却时间-3秒。" + "DOTA_Tooltip_ability_thtd_remilia_03_Note2" "潜能Lv100:冷却时间-5秒。" + "DOTA_Tooltip_ability_thtd_remilia_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_03_distance" "距离:" + "DOTA_Tooltip_ability_thtd_remilia_04" "Scarlet Sign「Red the Nightless Castle」" + "DOTA_Tooltip_ability_thtd_remilia_04_Description" "While the divine spear pierces targets, there is 5%% CHANCE to cause targets attaching a [Fate]Sign.\n\nMake targets\' HP REDUCE 5%%, and REDUCING 1000 PHYSICAL RESISTANCES AND MAGIC RESISTANCES.\n\nAfter targets dead,it will perform[Nightless Castle] in dead place,causes damage over time to units around the target. \n\n[Relative to Star Level]Nightless Castle DAMAGE:POWER POINTS*STAR LEVEL*7 PER SECOND\n\n[COOPERATION PROMOTION - Sakuya Izayoi]\n\nACTIVATION CHANCE BECOME TO 10%%." + "DOTA_Tooltip_ability_thtd_remilia_04_Note0" "潜能Lv10:不夜城伤害+10。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note1" "潜能Lv50:不夜城伤害+20。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note2" "潜能Lv100:不夜城伤害+30。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note3" "潜能Lv666:\n获得特殊效果:红符「Scarlet Meister」,获得6倍红魔法血液增强效果。" + "DOTA_Tooltip_ability_thtd_remilia_04_Note4" "潜能Lv999:\n获得特殊效果:神罚「年幼的恶魔之王」,操纵恶魔的魔法力,所有伤害+400%%。" + "DOTA_Tooltip_ability_thtd_remilia_04_chance" "%触发概率:" + "DOTA_Tooltip_ability_thtd_remilia_04_power_damage_03" "【命运】神枪技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_04_damage_up" "%【命运】魔法和物理伤害加深:" + "DOTA_Tooltip_ability_thtd_remilia_04_power_damage" "不夜城技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_remilia_04_tick_time" "不夜城伤害间隔:" + "DOTA_Tooltip_ability_thtd_remilia_04_duration_time" "不夜城持续时间:" + "DOTA_Tooltip_ability_thtd_remilia_04_range" "不夜城伤害范围:" + "DOTA_Tooltip_modifier_reimilia_02_buff" "夜王「德古拉的摇篮」" + "DOTA_Tooltip_modifier_reimilia_02_buff_Description" "蕾米莉亚的技能造成伤害时,会汲取目标的能量,提高自己的魔法伤害" + "DOTA_Tooltip_modifier_remilia_03_debuff" "命运" + "DOTA_Tooltip_modifier_remilia_03_debuff_Description" "【命运】标记,双抗降低为零,受到的魔法和物理伤害加深,在目标死亡后,会在原地释放【不夜城】" + "DOTA_Tooltip_ability_thtd_flandre_01" "Taboo「Four of a Kind」" + "DOTA_Tooltip_ability_thtd_flandre_01_Description" "Flandre creates 3 replications, WHEN FLANDRE CAUSES SKILL DAMAGES, REPLICATIONS WILL ALSO CAUSE DAMAGES." + "DOTA_Tooltip_ability_thtd_flandre_02" "Taboo「L\?vatein」" + "DOTA_Tooltip_ability_thtd_flandre_02_Description" "WHEN FLANDRE IS DOING NORMAL ATTACKS, THEY WILL CAUSE EXTRA DAMAGES TP TARGETS, AND ABSORB POWER TO PROMOTE HERSELF 1%% PHYSICAL DAMAGES.(MAX TO PROMOTE 50%%)\n\nIF FLANDRE\'S SKILL DAMAGES KILL THE TARGET, THE OVERFLOW DAMAGES WILL TRANSFER TO SURROUNDDING UNITS.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL/4\n\n[COOPERATION PROMOTION - Remilia Scarlet]\n\nPROMOTE DAMAGE BECOME TO 2%%." + "DOTA_Tooltip_ability_thtd_flandre_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_flandre_02_damage_up" "%物理伤害提升:" + "DOTA_Tooltip_ability_thtd_flandre_02_max_up" "%最大提升:" + "DOTA_Tooltip_ability_thtd_flandre_02_duration_time" "每次持续时间:" + "DOTA_Tooltip_ability_thtd_flandre_03" "Taboo「Kagome, Kagome」" + "DOTA_Tooltip_ability_thtd_flandre_03_Description" "When Flandre causes damage to targets, TARGETS\' LOWER HP WILL CAUSE HIGHER DAMAGES. h\n\n TARGETS REDUCE EACH 1%% HP, THE DAMAGE WILL PROMOTE 1%%." + "DOTA_Tooltip_ability_thtd_flandre_03_damage_up" "%每损失百分之一生命值提高伤害:" + "DOTA_Tooltip_ability_thtd_flandre_03_Note0" "潜能Lv10:提高伤害+1%%。" + "DOTA_Tooltip_ability_thtd_flandre_03_Note1" "潜能Lv50:提高伤害+2%%。" + "DOTA_Tooltip_ability_thtd_flandre_03_Note2" "潜能Lv100:提高伤害+3%%。" + "DOTA_Tooltip_ability_thtd_flandre_04" "Secret Barrage「And Then Will There Be None\?」" + "DOTA_Tooltip_ability_thtd_flandre_04_Description" "Flandre catches targets\' weakness, CAUSES HUGE SINGLE DAMAGE TO THE TARGET.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*24/4" + "DOTA_Tooltip_ability_thtd_flandre_04_Note0" "潜能Lv10:冷却时间-1秒。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note1" "潜能Lv50:冷却时间-2秒。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note2" "潜能Lv100:冷却时间-3秒。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note3" "潜能Lv666:\n获得特殊效果:禁弹「星弧破碎」,秘弹技能伤害造成4倍伤害。" + "DOTA_Tooltip_ability_thtd_flandre_04_Note4" "潜能Lv999:\n获得特殊效果:禁忌「四重存在」,技能施放获得多重施法效果。" + "DOTA_Tooltip_ability_thtd_flandre_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_item_0022_Description" "The only human in Scarlet Devil Mansion,the maid manager there. \nHaving the highest level of ability relative to human: ability of manipulating time.\nAt ordinary time she serves Remilia and manages daily routines in Scarlet Devil Mansion.\nBut due to work is so heavy, she often needs to use ability to help her complete work.\nHaving absolute loyalty to Madam, but sometimes her thinking ways seem to a little be natural dullness.\nbeing able to play magic show, using throwing knives to be danmuku, and her knife-throwing skill is excellent.\nThe actual spokesperson in Scarlet Devil Mansion.\n\n[★]Buriallusion「Phantom Killer in Night Mist」\n[★★★]Time Sign「Sakuya\'s Special Stopwatch」\n[★★★★]Time Sign「Private Square」" + "DOTA_Tooltip_ability_item_0022_Lore" "「Thd World!」" + "DOTA_Tooltip_ability_ability_dummy_unit" "" + "DOTA_Tooltip_ability_thtd_sakuya_01_Description" "Sakuya throws a row of throwing knives, causes damage to enemies in the sector areas.\n\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1 /EACH KNIFE" + "DOTA_Tooltip_ability_thtd_sakuya_01_Note0" "潜能Lv10:飞刀伤害+5。" + "DOTA_Tooltip_ability_thtd_sakuya_01_Note1" "潜能Lv50:飞刀伤害+10。" + "DOTA_Tooltip_ability_thtd_sakuya_01_Note2" "潜能Lv100:飞刀伤害+15。" + "DOTA_Tooltip_ability_thtd_sakuya_01" "Buriallusion「Phantom Killer in Night Mist」" + "DOTA_Tooltip_ability_thtd_sakuya_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_sakuya_02" "Time Sign「Sakuya\'s Special Stopwatch」" + "DOTA_Tooltip_ability_thtd_sakuya_02_Description" "REFRESH A UNIT\'S TIME, REGEN ITS SKILL\'S FREEZING TIME, AND REGEN ITS MP IS USED(NOT USEFUL TO SOME SKILLS).\n\nA UNIT ONLY CAN HAVE ONE REFRESH IN 15S.\n\n[COOPERATION PROMOTION - Remilia Scarlet]\n\nWHEN REFRESHING REMILIA\'S TIME, THIS SKILL\'S FREEZING TIME REDUCE TO A HALF, AND REFRESHING TIME ALSO REDUCE TO A HALF." + "DOTA_Tooltip_ability_thtd_sakuya_02_mana_reg" "%魔法恢复增加:" + "DOTA_Tooltip_modifier_sakuya_02_buff" "Time Sign「Sakuya\'s Special Stopwatch」" + "DOTA_Tooltip_modifier_sakuya_02_buff_Description" "THIS UNIT HAS GOT REFRESH EFFECT." + "DOTA_Tooltip_ability_thtd_sakuya_03" "Time Sign「Private Square」" + "DOTA_Tooltip_ability_thtd_sakuya_03_Description" "Sakuya enter private time, open a forbidden barrier, ALL ENEMIES STOP THEIR TIME IN THIS BARRIER, DURING 2 SECONDS.\n\nDURING THIS TIME SAKUYA\'S Buriallusion「Phantom Killer in Night Mist」WILL NOT EXPEND MP, BUT DAMAGE REDUCE 75%%.\n\n[COOPERATION PROMOTION - Hong Meiling]\nDAMAGE REDUCTION REDUCES TO 50%%." + "DOTA_Tooltip_ability_thtd_sakuya_03_Note0" "潜能Lv10:冷却时间-5秒。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note1" "潜能Lv50:冷却时间-10秒。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note2" "潜能Lv100:冷却时间-15秒。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note3" "潜能Lv666:\n获得特殊效果:奇术「永恒的温柔」,飞刀获得窒息之刃效果,造成400%%暴击伤害。" + "DOTA_Tooltip_ability_thtd_sakuya_03_Note4" "潜能Lv999:\n获得特殊效果:幻象「月神之钟」,飞刀伤害提升至12倍。" + "DOTA_Tooltip_ability_thtd_sakuya_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sakuya_03_damage_down" "%伤害降低:" + "DOTA_Tooltip_ability_thtd_sakuya_03_range" "结界范围:" + "DOTA_Tooltip_modifier_sakuya_03_time_pause_debuff" "Time Sign「Private Square」" + "DOTA_Tooltip_modifier_sakuya_03_time_pause_debuff_Description" "THIS UNIT\'S TIME IS STOPPED BY SAKUYA." + "koishi" "Komeiji Koishi" + "DOTA_Tooltip_ability_thtd_koishi_01_Description" "Koishi Komeiji\'S ATTACK WILL ATTACK ALL UNITS IN ATTACK RANGES IN SAME TIME.\n\nAND HAS 30% CHANCE TO ATTACH EXTRA DAMAGES.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_koishi_01" "「Rose Hell」" + "DOTA_Tooltip_ability_thtd_koishi_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_koishi_01_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_koishi_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_koishi_02" "「Philosophy of a Hated Person」" + "DOTA_Tooltip_ability_thtd_koishi_02_Description" "Koishi Komeiji\'s EACH ATTACK WILL PROMOTE 5% ATTACK SPEED, MAX TO STACK 10 BUFFS." + "DOTA_Tooltip_ability_thtd_koishi_02_attack_speed_bonus" "攻击速度提高:" + "DOTA_Tooltip_ability_thtd_koishi_02_max_count" "最大叠加层数:" + "DOTA_Tooltip_ability_thtd_koishi_02_count_bonus" "封闭状态最大叠加层数:" + "DOTA_Tooltip_ability_thtd_koishi_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_koishi_02_attack_speed" "「Philosophy of a Hated Person」" + "DOTA_Tooltip_modifier_koishi_02_attack_speed_Description" "Koishi Komeiji\'s attack speed promotes." + "DOTA_Tooltip_ability_thtd_koishi_03" "Instinct「Release of the Id」" + "DOTA_Tooltip_ability_thtd_koishi_03_Description" "Koishi Komeiji PROMOTES TARGET UNITS\' POWER POINTS. DURING 10 SECONDS.\n\n[RELATIVE TO STAR LEVEL]POWER PROMOTION:200/400/1000\n\n[COOPERATION PROMOTION - Koishi Komeiji]\n\nDURATION PROMOTES TO 20 SECONDS." + "DOTA_Tooltip_ability_thtd_koishi_03_Note0" "潜能Lv10:古明地姐妹获得倍数+1。" + "DOTA_Tooltip_ability_thtd_koishi_03_Note1" "潜能Lv50:古明地姐妹获得倍数+2。" + "DOTA_Tooltip_ability_thtd_koishi_03_Note2" "潜能Lv100:古明地姐妹获得倍数+3。" + "DOTA_Tooltip_ability_thtd_koishi_03_power_bonus" "基础攻击力和能量提高:" + "DOTA_Tooltip_ability_thtd_koishi_03_self_crit" "古明地姐妹获得倍数:" + "DOTA_Tooltip_ability_thtd_koishi_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_koishi_03_combo_time" "组合持续时间:" + "DOTA_Tooltip_modifier_koishi_03_buff" "本能「本我的解放」" + "DOTA_Tooltip_modifier_koishi_03_buff_Description" "基础攻击力和能量点提高。" + "DOTA_Tooltip_ability_thtd_koishi_04" "「Subterranean Rose」" + "DOTA_Tooltip_ability_thtd_koishi_04_Description" "Koishi Komeiji enter mental closing status, PROMOTE HER OWN POWER POINTS HUGELY, AND MAKES ATTACK STYLE TO BE MELEE-ATTACK. \n\nIN THE DURATION,「Philosophy of a Hated Person」BUFF CAN STACK MAX TO 20." + "DOTA_Tooltip_ability_thtd_koishi_04_Note0" "潜能Lv10:持续时间+2秒。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note1" "潜能Lv50:持续时间+4秒。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note2" "潜能Lv100:持续时间+8秒。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note3" "潜能Lv666:\n获得特殊效果:「Super Ego」,封闭状态基础能量和攻击力增加+1000。" + "DOTA_Tooltip_ability_thtd_koishi_04_Note4" "潜能Lv999:\n获得特殊效果:本能「Freudian」,封闭状态能量和攻击力提升+300%%。" + "DOTA_Tooltip_ability_thtd_koishi_04_power_base" "基础能量和攻击力增加:" + "DOTA_Tooltip_ability_thtd_koishi_04_power_up" "%能量和攻击力提升:" + "DOTA_Tooltip_ability_thtd_koishi_04_count_bonus" "叠加上限提高到:" + "DOTA_Tooltip_ability_thtd_koishi_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_koakuma_01" "「Pyro Match」" + "DOTA_Tooltip_ability_thtd_koakuma_01_Description" "Little devil throws a fire ball to the target, THE FIRE BALL WILL BOUNCE IN THE TARGET AND ITS AROUND UNITS, MAX TO BOUNCE 25 TIMES.\n\n[RELATIVE TO STAR LEVEL]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Patchouli Knowledge]\n\nFIRE BALLS GET EXTRA 35%% RANGE DAMAGES." + "DOTA_Tooltip_ability_thtd_koakuma_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_koakuma_01_max_count" "弹射次数:" + "DOTA_Tooltip_ability_thtd_koakuma_01_range1" "弹射范围:" + "DOTA_Tooltip_ability_thtd_koakuma_01_range_damage" "%附加范围伤害:" + "DOTA_Tooltip_ability_thtd_koakuma_01_range2" "附加范围:" + "DOTA_Tooltip_ability_thtd_koakuma_02" "「Taboo Grimoire Index」" + "DOTA_Tooltip_ability_thtd_koakuma_02_Description" "Little devil promotes her surrounding units\' MAGEC PENETRATION.\n\n[RELATIVE TO STAR LEVEL]PENETRATION PROMOTION:10/20/40" + "DOTA_Tooltip_ability_thtd_koakuma_02_penetration" "魔法穿透:" + "DOTA_Tooltip_modifier_koakuma_02_buff" "「Taboo Grimoire Index」" + "DOTA_Tooltip_modifier_koakuma_02_buff_Description" "Influencing by little devil, this unit\'s magic penetration has been promoted." + "DOTA_Tooltip_ability_thtd_meirin_01" "Flowery Sign「Colorful Light Lotus Flower Palm」" + "DOTA_Tooltip_ability_thtd_meirin_01_Description" "Hong Meiling doesn\'t have normal attack way, but if there are units go through her, she will do continous attack to her front side.\n\nFirst Trick:Rainbow Sign「Intense Rainbow Fist」\nCausing (power points *1) DAMAGES TO THE TARGETS IN FRONT STRAIGHT-LINE AREAS.\nSecond Trick:Chi Sign「Earth Dragon Sky Dragon Kick」\nCausing (POWER POINTS*1) DAMAGES TO UNITS IN FRONT SECTOR AREAS.\nThird Trick:Flower Sign「Gorgeous Sweet Flower」\nCausing (POWER POINTS*STAR LEVEL*1) DAMAGES TO UNITS IN FRONT CIRCLE AREAS, AND REDUCING MOVEMENT SPEED." + "DOTA_Tooltip_ability_thtd_meirin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_meirin_01_slow" "%第三式减速:" + "DOTA_Tooltip_ability_thtd_meirin_01_slow_time" "减速持续时间:" + "DOTA_Tooltip_modifier_meirin_01_pause" "Flowery Sign「Colorful Light Lotus Flower Palm」" + "DOTA_Tooltip_modifier_meirin_01_slow_buff" "Flowery Sign「Colorful Light Lotus Flower Palm」" + "DOTA_Tooltip_modifier_meirin_01_pause_Description" "Meiling is releasing Colorful Light Lotus Flower Palm." + "DOTA_Tooltip_modifier_meirin_01_slow_buff_Description" "Affecting by Colorful Light Lotus Flower Palm, this unit\'s movement speed is reduced." + "DOTA_Tooltip_ability_thtd_meirin_02" "Three Blasts「Colorful Ultimate Mountain Breaker」" + "DOTA_Tooltip_ability_thtd_meirin_02_Description" "After Hong Meiling release 「Colorful Light Lotus Flower Palm」, HAVE 50% CHANCE TO RELEASE ADVANCED 4 KUNGFU TRICKS.\n\nFourth Trick[★★★Unlock]:Chi Sign「Fierce Tiger Energy Release」\nCause (POWER POINTS*2) DAMAGE TO UNITS IN FRONT SECTOR AREAS.\nFifth Trick[★★★Unlock]:Flowery Sign「Mountain Breaker」\nCause (POWER POINTS*STAR LEVEL*2) DAMAGE TO UNITS IN FRONT CIRCLE AREAS, AND STUN ENEMIES 0.5 SECOND.\nSixth Trick[★★★★★Unlock]:Colorful Flower「Rainbow Taijiquan」\nCause (POWER POINTS*4) DAMAGES TO UNITS IN FRONT STRAIGHT LINE AREAS.\nSeventh Trick[★★★★★Unlock]:Three Blasts「Colorful Ultimate Mountain Breaker」\nCausing (POWER POINTS*STAR LEVEL*4) DAMAGE TO UNITS IN FRONT CIRCLE AREAS, AND STUN ENEMIES 1.0 SECOND.\n\n[COOPERATION PROMOTION- Izayoi Sakuya]\nACTIVATION CHANCE PROMOTES TO 75%%." + "DOTA_Tooltip_ability_thtd_meirin_02_level4_chance" "%第四式概率:" + "DOTA_Tooltip_ability_thtd_meirin_02_level5_stun_time" "第五式眩晕时间:" + "DOTA_Tooltip_ability_thtd_meirin_02_level6_chance" "%第六式概率:" + "DOTA_Tooltip_ability_thtd_meirin_02_level7_stun_time" "第七式眩晕时间:" + "yukari" "Yakumo Yukari" + "ran" "Yakumo Ran" + "chen" "Chen" + "eirin" "Yagokoro Eirin" + "mokou" "Fujiwara no mokou" + "DOTA_Tooltip_ability_thtd_yuuka_01" "Flower Sign「Blossoming of Gensokyo」" + "DOTA_Tooltip_ability_thtd_yuuka_01_Description" "Causing a damage to enemies near Yuuka.\n\nIf there are seeds in the area, the seeds will bloom and attack nearby enemies. \n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_yuuka_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuuka_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_yuuka_01_crit" "爆炸伤害倍数:" + "DOTA_Tooltip_ability_thtd_yuuka_01_radius" "爆炸范围:" + "DOTA_Tooltip_ability_thtd_yuuka_02" "「Fantastic Spring Flowers」" + "DOTA_Tooltip_ability_thtd_yuuka_02_Description" "Creating a flower field in front of Yuuka.\n\nThe flower field will constantly sow.\n\n[Relative to Star level]FLOWER ATTACK DAMAGE:Yuuka ATTACK DAMAGE*1" + "DOTA_Tooltip_ability_thtd_yuuka_02_attack_crit" "倍数:" + "DOTA_Tooltip_ability_thtd_yuuka_03" "Fantasy「The Beauties of Nature」" + "DOTA_Tooltip_ability_thtd_yuuka_03_Description" "Creating a illusion of Yuuka in the target point, at the same time FLOWER FIELD WILL APPEAR BETWEEN YUUKA AND ILLUSION.\n\nUNITS GO CROSS THE FLOWER FIELD WILL GET DAMAGE OVER TIME, IF UNITS DIE IN FLOWER FIELD, IT WILL PROMOTE YUUKA 0.5%% SKILL DAMAGES AND 0.5%% FLOWER ATTACK DAMAGES.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1 /PER SEC\n[Relative to Star level]MAX DAMAGE PROMOTION:50%%/100%%/200%%" + "DOTA_Tooltip_ability_thtd_yuuka_03_Note0" "潜能Lv10:最大叠加层数+50。" + "DOTA_Tooltip_ability_thtd_yuuka_03_Note1" "潜能Lv50:最大叠加层数+100。" + "DOTA_Tooltip_ability_thtd_yuuka_03_Note2" "潜能Lv100:最大叠加层数+150。" + "DOTA_Tooltip_ability_thtd_yuuka_03_power_damage" "技能伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_yuuka_03_damage_up" "%提升效果:" + "DOTA_Tooltip_ability_thtd_yuuka_03_max_count" "最大叠加层数:" + "DOTA_Tooltip_modifier_yuuka_03_kill" "Fantasy「The Beauties of Nature」" + "DOTA_Tooltip_modifier_thtd_yuuka_03_death" "Fantasy「The Beauties of Nature」" + "DOTA_Tooltip_modifier_thtd_yuuka_03_death_Description" "This unit intrude the flower field, will become fertilizers soon." + "DOTA_Tooltip_modifier_yuuka_03_kill_Description" "Due to the fertilizers,Yuuka\'s power promotes." + "DOTA_Tooltip_ability_thtd_yuuka_04" "Extremity「Double Spark」" + "DOTA_Tooltip_ability_thtd_yuuka_04_Description" "Yuuka control the power of nature, release devastating magic cannon with her replication.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*7 /PER SECOND" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note0" "潜能Lv10:冷却时间-2秒。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note1" "潜能Lv50:冷却时间-4秒。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note2" "潜能Lv100:冷却时间-8秒。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note3" "潜能Lv666:\n获得特殊效果:变异的花朵,花田提升最大叠加层数+250。" + "DOTA_Tooltip_ability_thtd_yuuka_04_Note4" "潜能Lv999:\n获得特殊效果:压倒性力量,魔炮伤害提高至5倍。" + "DOTA_Tooltip_ability_thtd_yuuka_04_power_damage" "技能伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_yuuka_04_channel_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yuuka_04_times" "伤害频率(次/秒):" + "DOTA_Tooltip_modifier_thdots_yuuka04_think_interval" "Extremity「Double Spark」" + "DOTA_Tooltip_modifier_thdots_yuuka04_think_interval_Description" "This unit is releasing magic cannon." + "DOTA_Tooltip_ability_thtd_yukari_01" "Evil Spirits「Yukari Yakumo\'s Spiriting Away」" + "DOTA_Tooltip_ability_thtd_yukari_01_Description" "Yukari manipulates space crack to hide the target.\n\n[COOPERATION PROMOTION - Hakurei Reimu]\n\nSTORAGE NUMBER PROMOTES TO 5." + "DOTA_Tooltip_ability_thtd_yukari_01_max_count" "储存数量:" + "DOTA_Tooltip_ability_thtd_yukari_01_limit_count" "最大次数:" + "DOTA_Tooltip_ability_thtd_yukari_01_duration_time" "境界吸收持续时间:" + "DOTA_Tooltip_modifier_yukari_01_hidden_Description" "This unit is in the space crack." + "DOTA_Tooltip_modifier_yukari_01_hidden" "Evil Spirits「Yukari Yakumo\'s Spiriting Away」" + "DOTA_Tooltip_ability_thtd_yukari_02" "Barrier「Balance of Motion and Stillness」" + "DOTA_Tooltip_ability_thtd_yukari_02_Description" "Yukari throw units in space crack into target point. CAUSING DAMAGE AND STUN TO TARGET POINTS.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_yukari_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yukari_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_yukari_02_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_yukari_03" "「Profound Danmaku Barrier -Phantasm, Foam and Shadow-」" + "DOTA_Tooltip_ability_thtd_yukari_03_Description" "Yukari CHANNEL 1 SECOND, TELEPORT TO TARGET POINT.\n\nAFTER 3 SECONDS TELEPORT BACK BY 1 SECOND CHANNEL.\n\n[COOPERATION PROMOTION - Ran Yakumo,Chen]\n\nRan and Chen will be teleported together" + "DOTA_Tooltip_ability_thtd_yukari_03_Note0" "潜能Lv10:弹幕伤害+5。" + "DOTA_Tooltip_ability_thtd_yukari_03_Note1" "潜能Lv50:弹幕伤害+10。" + "DOTA_Tooltip_ability_thtd_yukari_03_Note2" "潜能Lv100:弹幕伤害+15。" + "DOTA_Tooltip_ability_thtd_yukari_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yukari_03_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_yukari_04" "Abandoned Line「Aimless Journey to the Abandoned Station」" + "DOTA_Tooltip_modifier_yukari_04_speed" "Abandoned Line「Aimless Journey to the Abandoned Station」" + "DOTA_Tooltip_modifier_yukari_04_speed_Description" "This unit is galloping." + "DOTA_Tooltip_ability_thtd_yukari_04_Description" "Yukari summons abandoned trolley bus, galloping from enemies\'starting point in the path.\n\nCAUSING DAMAGE TO UNITS ARE CRASHED BY TROLLEY BUS AND STUN.TROLLEY BUS\'S DURATION IS 30 SECONDS.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*10 /PER SEC\n\n[COOPERATION PROMOTION - Ran Yakumo, Chen]\n\nADD 5 MORE CARRIAGES FOR TROLLEY BUS." + "DOTA_Tooltip_ability_thtd_yukari_04_Note0" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note1" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note2" "潜能Lv100:技能伤害+30。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note3" "潜能Lv666:\n获得特殊效果:幻想「第一类永动机」,电车车厢数量翻倍,神隐境界效果持续时间翻倍。" + "DOTA_Tooltip_ability_thtd_yukari_04_Note4" "潜能Lv999:\n获得特殊效果:境符「四重结界」,八云紫的能量加成+400%%。" + "DOTA_Tooltip_ability_thtd_yukari_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yukari_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_yukari_04_max_count" "车厢数量:" + "DOTA_Tooltip_ability_thtd_yukari_04_damage_up" "%每增加一节车厢伤害提升:" + "DOTA_Tooltip_ability_thtd_yukari_04_stun_time" "撞击晕眩时间:" + "DOTA_Tooltip_ability_thtd_yukari_04_duration_time" "电车持续时间:" + "DOTA_Tooltip_ability_thtd_ran_01" "Shikigami\'s Radiance「Fox-Tanuki Youkai Laser」" + "DOTA_Tooltip_ability_thtd_ran_01_Description" "Ran shoots laser to a target, and bounces in the target and random targets around the first target.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*2 /EACH TIME" + "DOTA_Tooltip_ability_thtd_ran_01_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_ran_01_jump_radius" "弹射距离:" + "DOTA_Tooltip_ability_thtd_ran_01_jump_count" "最大次数:" + "DOTA_Tooltip_ability_thtd_ran_01_jump_interval" "间隔时间:" + "DOTA_Tooltip_ability_thtd_ran_02" "Shikigami\'s Shot「Ultimate Buddhist」" + "DOTA_Tooltip_ability_thtd_ran_02_Description" "Ran rotates large Sign, CAUSING MOVEMENT SPEED REDUCTION TO ENEMIES TOUCHED THE SIGN. DURING 3.4 SECONDS.\n\n[Relative to Star level]MOVEMENT SPEED REDUCTION:20%%/35%%/50%%/65%%/80%%" + "DOTA_Tooltip_ability_thtd_ran_02_radius" "作用范围:" + "DOTA_Tooltip_ability_thtd_ran_02_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_ran_02_slow_movement_pct" "%减速:" + "DOTA_Tooltip_modifier_thdots_ran02_debuff" "Shikigami\'s Shot「Ultimate Buddhist」" + "DOTA_Tooltip_modifier_thdots_ran02_debuff_Description" "Due to Ran\'s influence, this unit\'s movement speed is reduced." + "DOTA_Tooltip_ability_thtd_ran_03" "Illusion God「Descent of Izuna Gongen」" + "DOTA_Tooltip_ability_thtd_ran_03_Description" "Every time when there are units release skills and expand MP around Ran, Ran will shoot a Shikigami\'s Radiance「Fox-Tanuki Youkai Laser」to surrounding random units.\n\n[COOPERATION PROMOTION - Yukari Yakumo,Chen]\n\nWhen activate this skill, it will regen the target this skill\'s 25% MP expense." + "DOTA_Tooltip_ability_thtd_ran_03_Note0" "对莉莉白、大妖精无效。" + "DOTA_Tooltip_ability_thtd_ran_03_mana_regen" "%恢复魔法值:" + "DOTA_Tooltip_modifier_ran_03_spell_buff" "Illusion God「Descent of Izuna Gongen」" + "DOTA_Tooltip_modifier_ran_03_spell_buff_Description" "Getting Ran\'s supports." + "DOTA_Tooltip_ability_thtd_chen_01" "Yin Yang「Large Pentagram Crest」" + "DOTA_Tooltip_ability_thtd_chen_01_Description" "PASSIVE: EACH TIME CHEN MOVES, CAUSING A SHOCKING ATTACK, SHOCKING ATTACK WILL PROMOTES RANGES AND DAMAGES BY MOVEMENT DISTANCES PROMOTION.\n\nACTIVE:Chen roll to target point.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.7 / PER 100 DISTANCE (MAX TO PROMOTE TO *5)\n\n[COOPERATION PROMOTION - Ran Yakumo,Yukari Yakumo]\n\nPER 100 DISTANCE CHANGE TO PER 75 DISTANCE(MAX TO PROMOTE TO *20)" + "DOTA_Tooltip_ability_thtd_chen_01_power_damage" "技能伤害(能量点*星级/距离):" + "DOTA_Tooltip_ability_thtd_eirin_01" "Revival「Seimei Yūgi -Life Game-」" + "DOTA_Tooltip_ability_thtd_eirin_01_Description" "WHEN EIRIN IS ATTACKING, WILL ATTACH A DANMUKU ATTACK AROUND UNITS RANDOMLY, AND REDUCE 10 MP.\n\nWHEN RELEASING DANMUKU, HAVE CHANCE TO REGEN SELF 40% MP.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5\n[Relative to star level]CHANCE TO REGEN:10%%/20%%/30%%/40%%/50%%" + "DOTA_Tooltip_ability_thtd_eirin_01_Note0" "潜能Lv10:技能伤害+2。" + "DOTA_Tooltip_ability_thtd_eirin_01_Note1" "潜能Lv50:技能伤害+4。" + "DOTA_Tooltip_ability_thtd_eirin_01_Note2" "潜能Lv100:技能伤害+6。" + "DOTA_Tooltip_ability_thtd_eirin_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_eirin_01_mana_cost" "魔法消耗:" + "DOTA_Tooltip_ability_thtd_eirin_01_mana_chance" "%基础概率:" + "DOTA_Tooltip_ability_thtd_eirin_01_mana_bonus" "%魔法回复:" + "DOTA_Tooltip_ability_thtd_eirin_01_power_bonus" "每50分奖励攻击和能量点:" + "DOTA_Tooltip_ability_thtd_eirin_01_crit_bonus" "%每50分奖励暴击伤害:" + "DOTA_Tooltip_ability_thtd_eirin_01_crit_chance" "%每50分奖励暴击概率:" + "DOTA_Tooltip_modifier_eirin_01_count" "「生命游戏」" + "DOTA_Tooltip_modifier_eirin_01_count_Description" "生命游戏每击中一次目标则获得1点游戏分数,每波结束时兑换奖励并重置积分。" + "DOTA_Tooltip_ability_thtd_eirin_02" "「Heaven Spider\'s Butterfly-Capturing Web」" + "DOTA_Tooltip_ability_thtd_eirin_02_Description" "Every time there is unit attack near Eirin, she will release a Revival「Seimei Yūgi -Life Game-」to around random targets." + "DOTA_Tooltip_modifier_eirin_02_spell_buff" "「Heaven Spider\'s Butterfly-Capturing Web」" + "DOTA_Tooltip_modifier_eirin_02_spell_buff_Description" "This unit get Eirin\'s support." + "DOTA_Tooltip_ability_thtd_eirin_03" "Medicine Sign「Large Galaxy in a Pot」" + "DOTA_Tooltip_ability_thtd_eirin_03_Description" "Creating an unescapable barrier in target point." + "DOTA_Tooltip_ability_thtd_eirin_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_eirin_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_eirin_04" "God Sign「Genealogy of the Celestials」" + "DOTA_Tooltip_ability_thtd_eirin_04_Description" "Eirin shoots danmuku to around in target point, DANMUKU WILL REBOUNCE WHEN CRACK THE BARRIER, EACH REBOUNCE WILL PROMOTE 20% DAMAGE, MAX TO PROMOTE 5 TIMES.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.1 /EACH DANMUKU" + "DOTA_Tooltip_ability_thtd_eirin_04_Note0" "潜能Lv10:弹幕伤害+5。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note1" "潜能Lv50:弹幕伤害+10。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note2" "潜能Lv100:弹幕伤害+15。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note3" "潜能Lv666:\n获得特殊效果:苏生「Rising Game」,游戏奖励提高至5倍。" + "DOTA_Tooltip_ability_thtd_eirin_04_Note4" "潜能Lv999:\n获得特殊效果:秘药「仙香玉兔」,永琳觉醒压倒性的力量,不再保留实力,能量和攻击力+1200。" + "DOTA_Tooltip_ability_thtd_eirin_04_power_damage" "技能伤害(能量点*星级/每个弹幕):" + "DOTA_Tooltip_ability_thtd_eirin_04_damage_up" "%反弹伤害提高:" + "DOTA_Tooltip_ability_thtd_eirin_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_eirin_05_Description" "选择一个地点来设定AI定点施放:药符「壶中的大银河」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_mokou_01" "Hourai「South Wind, Clear Sky -Fujiyama Volcano-」" + "DOTA_Tooltip_ability_thtd_mokou_01_Description" "Fujiwara no Mokou\'s attack HAS 10%% CHANCE TO CRIT.\n\nAND EACH ATTACK WILL PROMOTE 5%% CRIT CHANCE\n\n[Relative to Star level]MAX CRIT CHANCE:30%%/40%%/50%%/60%%/70%%" + "DOTA_Tooltip_ability_thtd_mokou_01_base_chance" "%基础概率:" + "DOTA_Tooltip_ability_thtd_mokou_01_bonus_chance" "%每次提升概率:" + "DOTA_Tooltip_ability_thtd_mokou_01_max_chance" "%概率上限:" + "DOTA_Tooltip_ability_thtd_mokou_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_mokou_01_range" "范围:" + "DOTA_Tooltip_passive_mokou_01_crit" "Hourai「South Wind, Clear Sky -Fujiyama Volcano-」" + "DOTA_Tooltip_passive_mokou_01_crit_Description" "This unit\'s crit chance promotes." + "DOTA_Tooltip_ability_thtd_mokou_02" "Forgiveness「Honest Man\'s Death」" + "DOTA_Tooltip_ability_thtd_mokou_02_Description" "Fujiwara no Mokou\'s EACH CRIT WILL PROMOTE HERSELF DOUBLE CRIT DAMAGE.\n\nIF THIS ATTACK DOESN\'T CRIT, THE MULTIPLE WILL BE CLEARED.\n\n[Relative to star level]MAX CRIT DAMAGE:2/4/8/16/32 TIMNES." + "DOTA_Tooltip_ability_thtd_mokou_02_base_crit" "每次提升倍数:" + "DOTA_Tooltip_ability_thtd_mokou_02_max_crit" "倍数上限:" + "DOTA_Tooltip_modifier_mokou_crit_buff" "灭罪「正直者之死」" + "DOTA_Tooltip_modifier_mokou_crit_buff_Description" "当前致命一击倍数。" + "DOTA_Tooltip_ability_thtd_mokou_03" "Inextinguishable「Phoenix\'s Tail」" + "DOTA_Tooltip_ability_thtd_mokou_03_Description" "Fujiwara no Mokou releases phoenix\'s power,promotes self\'s ATTACK DAMAGE, and RELEASE Undying「Fire Bird -Flying Phoenix-」IN CRIT.\n\n[Relative to star level]ATTACK DAMAGE PROMOTION:500/2000" + "DOTA_Tooltip_ability_thtd_mokou_03_bonus_attack" "攻击力增加:" + "DOTA_Tooltip_ability_thtd_mokou_03_bonus_range" "伤害范围增加:" + "DOTA_Tooltip_ability_thtd_mokou_03_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_mokou_03_buff" "不灭「不死鸟之尾」" + "DOTA_Tooltip_modifier_mokou_03_buff_Description" "藤原妹红释放不死鸟的力量,增加自身的攻击力,伤害范围提升。" + "DOTA_Tooltip_ability_item_0035_Lore" "Don\'t have some special target, just enjoy life: sleeping, waking up,apprecationg flowers,and sleeping repeatedly." + "DOTA_Tooltip_ability_item_0036" "[SSR]Yukari Yakumo" + "DOTA_Tooltip_ability_item_0037" "[SR]Ran Yakumo" + "DOTA_Tooltip_ability_item_0038" "[R]cHEN" + "DOTA_Tooltip_ability_item_0039" "[SSR]Eirin Yagokoro" + "DOTA_Tooltip_ability_item_0040" "[SR]Fujiwara no Mokou" + "DOTA_Tooltip_ability_item_0036_Lore" "I am purple mother so what\?\nPoped up behind me, Caught my head and pressed to the keyboard if you could anghhkjl;l\'klhjhgfsdfhjkl;\' lkhjfcxsdffhjkhl;lkjhgfsdhjkl;" + "DOTA_Tooltip_ability_item_0036_Description" "Experience and power are both powerful, has high intelligence, always looks like understand everything.\nShe is called Youkai Oracle, t Before thousands of years one of the Gensokyo\'s founders.\nAs one of a few youkaies know the essence of Gensokyo, she also extremely cherishes Gensokyo.\nGap Youkai, this race only constitutes by herself, at ordinary time she stays in her gap.\nTwice Lunar War\'s originator.\n\n[★]Evil Spirits「Yukari Yakumo\'s Spiriting Away」\n[★]Barrier「Balance of Motion and Stillness」\n[★★★]「Profound Danmaku Barrier -Phantasm, Foam and Shadow-」\n[★★★★★]Abandoned Line「Aimless Journey to the Abandoned Station」" + "DOTA_Tooltip_ability_item_0037_Description" "Ran Yakumo is a Kyuubi, herself has been powerful,and being shikigami of Yukari Yakumo for a long time makes her abilities more powerful than normal youkaies.\nDue to most of time Yukari Yakumo sleeps, the barrier\'s daily maintenance work is also belongs to her.\nBeing able to work independently and has her own Shikigami(Chen), so she is The Most Powerful Monster.\n\n[★]Shikigami\'s Radiance「Fox-Tanuki Youkai Laser」\n[★]Shikigami\'s Shot「Ultimate Buddhist」\n[★★★★]\"Illusion God「Descent of Izuna Gongen」" + "DOTA_Tooltip_ability_item_0037_Lore" "When I am working busily, my own lord is keeping sleeping." + "DOTA_Tooltip_ability_item_0038_Description" "A youkai cat lives in Mayohiga, and also she is Ran Yakumo\'s shikigami.\nHaving quick action, youkai power will promote in shikigami state, but still scared to water.\nLooks so smart, but actually her IQ is only like nearby human children.\n\n[★]Yin Yang「Large Pentagram Crest」" + "DOTA_Tooltip_ability_item_0039_Description" "The oracle of Lunar Capital. Her appearance looks young, and knowledgeable. But her speaking style, facial expressions, acts and so on all have unapproachable atmosphere seems like immortal exclusively have.\nShe called herself Forever Person, treats Remilia(500 years old) like treating a child.\nHer age has beyonded billions.\nPharmacology and archery are both excellent,\\can use magic medicine and archery to knit the barrier.\nBut the really powerful of her is magic and wisdom.\n\n[★]Revival「Seimei Yūgi -Life Game-」\n[★]「Heaven Spider\'s Butterfly-Capturing Web」\n[★★★]Medicine Sign「Large Galaxy in a Pot」\n[★★★★★]God Sign「Genealogy of the Celestials」" + "kaguya" "Houraisan Kaguya" + "aya" "Shameimaru Aya" + "DOTA_Tooltip_ability_thtd_kaguya_01" "Impossible Request「Bullet Branch of Hourai -Rainbow Danmaku-」" + "DOTA_Tooltip_ability_thtd_kaguya_01_Description" "Kaguya RELEASE 3 TIMES DANMUKU TO THE TARGET POINT, DANMUKU WILL NARROW GRADUALLY.\n\n[Relative to Star level]DAMAGE:POWER POINT*STAR LEVEL*0.5" + "DOTA_Tooltip_ability_thtd_kaguya_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kaguya_01_max_count" "弹幕次数:" + "DOTA_Tooltip_ability_thtd_kaguya_01_range" "弹幕伤害范围:" + "DOTA_Tooltip_ability_thtd_kaguya_02" "「End of Imperishable Night」" + "DOTA_Tooltip_ability_thtd_kaguya_02_Description" "The ability of kaguya: manipulates forever and moment, makes surrounding units\' speed change constantly. \n\nEACH 2 SECONDS SWITCH 1 TIME, MAKES AROUND UNITS SPEED UP OR SPEED DOWN, WHEN SPEED UP, UNITS GET MORE DAMAGES, WHEN SPEED DOWN, UNITS GET LESS DAMAGES.\n\n[Relative to Star level]SPEED UP/DOWN EFFECT:50%%\n[Relative to Star level]More/LESS DAMAGE EFFECT:15%%/20%%/25%%/30%%/50%%(LESS-DAMAGE EFFECT IS ONLY HALF OF THE MORE-DAMAGE EFFECT)" + "DOTA_Tooltip_ability_thtd_kaguya_02_bonus_chance" "%暴击概率:" + "DOTA_Tooltip_ability_thtd_kaguya_02_bonus_crit" "%暴击伤害:" + "DOTA_Tooltip_modifier_kaguya_02_buff" "永夜返「光明之世」" + "DOTA_Tooltip_modifier_kaguya_02_buff_Description" "暴击概率和暴击伤害提高了。" + "DOTA_Tooltip_ability_thtd_kaguya_03" "「Divine Treasure」" + "DOTA_Tooltip_ability_thtd_kaguya_03_Description" "Kaguya summon Divine Treasures,Inflicts damage on impacted enemies,Adds bonus effect to allied forces.\nActive release will Stop rotating.\n\nDivine Treasures「Brilliant Dragon Bullet」\nFor friendly units:Increase Attack speed\nFor enemy units:Reduce Movement Speed\nDivine Treasures「Buddhist Diamond」\nFor friendly units:Increase Attack\nFor enemy units:Double up Divine Treasures Damage\nDivine Treasures「Salamander Shield」\nFor friendly units:Increase Damage\nFor enemy units:Increase enemy units injured damage\nDivine Treasures「Life Spring Infinity」\nFor friendly units:Increase Physical Penetration\nFor enemy units:Reduce Armor\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*3.5 Per second" + "DOTA_Tooltip_ability_thtd_kaguya_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_kaguya_03_attack_speed" "Attack speed increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_move_slow" "Movement Speed reduced:" + "DOTA_Tooltip_ability_thtd_kaguya_03_attack_percent" "Attack increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_damage_up" "%「佛体的金刚石」本技能伤害增加:" + "DOTA_Tooltip_ability_thtd_kaguya_03_outgoing_percent" "Damage increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_incoming_percent" "Injured damage increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_penetration" "Physical Penetration increased:" + "DOTA_Tooltip_ability_thtd_kaguya_03_armor" "Armor reduced:" + "DOTA_Tooltip_ability_thtd_kaguya_03_range" "作用范围:" + "DOTA_Tooltip_modifier_kaguya_03_1_buff" "Divine Treasures「Brilliant Dragon Bullet」" + "DOTA_Tooltip_modifier_kaguya_03_1_debuff" "Divine Treasures「Brilliant Dragon Bullet」" + "DOTA_Tooltip_modifier_kaguya_03_2_buff" "Divine Treasures「Buddhist Diamond」" + "DOTA_Tooltip_modifier_kaguya_03_3_buff" "Divine Treasures「Salamander Shield」" + "DOTA_Tooltip_modifier_kaguya_03_3_debuff" "Divine Treasures「Salamander Shield」" + "DOTA_Tooltip_modifier_kaguya_03_4_debuff" "Divine Treasures「Life Spring Infinity」" + "DOTA_Tooltip_modifier_kaguya_03_4_buff" "Divine Treasures「Life Spring Infinity」" + "DOTA_Tooltip_modifier_kaguya_03_1_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Attack Speed increased." + "DOTA_Tooltip_modifier_kaguya_03_2_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Attack increased." + "DOTA_Tooltip_modifier_kaguya_03_3_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Damage increased." + "DOTA_Tooltip_modifier_kaguya_03_4_buff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Physical Penetration increased." + "DOTA_Tooltip_modifier_kaguya_03_1_debuff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Movement Speed reduced." + "DOTA_Tooltip_modifier_kaguya_03_3_debuff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Injured damage increased" + "DOTA_Tooltip_modifier_kaguya_03_4_debuff_Description" "Affected by Kaguya\'s Divine Treasures,this unit\'s Armor reduced." + "DOTA_Tooltip_ability_ability_common_decrease_armor_buff" "Special skill - Armor Reduction" + "DOTA_Tooltip_ability_ability_common_decrease_armor_buff_Description" "Promote this unit\'s ARMOR REDUCTION.\n\nThis skill can upgrade by SPELL CARDS FEEDING." + "DOTA_Tooltip_ability_ability_common_decrease_armor_buff_armor" "ARMOR REDUCTION:" + "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff_Description" "Promote this unit\'s MAGIC RESISTANCE REDUCTION.\n\nThis skill can upgrade by SPELL CARDS FEEDING." + "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff" "SPECIAL SKILL - MAGIC RESISTANCE REDUCTION" + "DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff_magic_armor" "MAGIC RESISTANCE REDUCTION:" + "DOTA_Tooltip_ability_item_2001_Description" "CLEAR ALL ENEMIES(ESCAPE FROM YOUR HAND) IN THE MAP(CONSUMABLES)" + "DOTA_Tooltip_ability_item_2001" "Four Dimensional Bomb" + "DOTA_Tooltip_ability_item_2002" "Hakurei Gohei" + "DOTA_Tooltip_ability_item_2002_Description" "Choose a SSR card from your deck and draw it out(consumables)" + "DOTA_Tooltip_ability_item_2003_Description" "Choose a SR card from your deck and draw it out(consumable)" + "DOTA_Tooltip_ability_item_2003" "Wind Priest Gohei" + "DOTA_Tooltip_ability_item_2004_Description" "Choose a R card from your deck and draw it out(consumable)" + "DOTA_Tooltip_ability_item_2004" "Gohei" + "DOTA_Tooltip_ability_item_2005_Description" "[Single Item Effect]PROMOTE 10%% ATTACK DAMAGE\n\n[Double Item Effect]PROMOTE 30% ATTACK DAMAGE\n\n[Quadruple Item Effect]PROMOTE UNITS 50%% ATTACK DAMAGE IN 1000 DISTANCES." + "DOTA_Tooltip_ability_item_2005" "Bloody Parasol" + "DOTA_Tooltip_ability_item_2006_Description" "[Single Item Effect]PROMOTE 4%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% MP REGEN\n\n[Quadruple Item Effect]PROMOTE UNITS 20%% MP REGEN IN 1000 DISTANCES" + "DOTA_Tooltip_ability_item_2006" "Moonlight Secret Mineral" + "DOTA_Tooltip_ability_item_2007" "Lord Of Calamity Ningyou" + "DOTA_Tooltip_ability_item_2007_Description" "[Single Item Effect]PROMOTE 4%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% MP REGEN\n\n[Quadruple Item Effect]REDUCE ENEMIES 10%% MOVEMENT SPEED IN 1000 DISTANCES" + "DOTA_Tooltip_ability_item_2008" "Shinigami\'s Oar" + "DOTA_Tooltip_ability_item_2008_Description" "[Single Item Effect]PROMOTE 4%% CHANCE OF CRIT\n\n[Double Item Effect]PROMOTE 10%% CHANCE OF CRIT\n\n[Quadruple Item Effect]PROMOTE 100%% CRIT DAMAGE" + "DOTA_Tooltip_ability_item_2009" "Reality Ripper" + "DOTA_Tooltip_ability_item_2009_Description" "[Single Item Effect]+10 POWER POINT +5%% Magic Damage\n\n[Set of 2] +25 POWER POINT +15%% Magic Damage\n\n[Set of 4]Deals 2x Damage to enemy over 70%% health." + "DOTA_Tooltip_ability_item_2010" "Reaper\'s Scythe" + "DOTA_Tooltip_ability_item_2010_Description" "[Single Item Effect]+10 POWER POINT +5%% Physical Damage\n\n[Set of 2] +25 POWER POINT 15%% Physical Damage\n\n[Set of 4]Deals 2x Damage to enemy under 30%% health" + "DOTA_Tooltip_ability_item_2011" "Moon Rabbit Smashing Blade" + "DOTA_Tooltip_ability_item_2011_Description" "[Single Item Effect]PROMOTE 20 ATTACK DAMAGE, 10 POWER POINTS\n\n[Double Item Effect]PROMOTE 50 ATTACK DAMAGE 25 POWER POINT\n\n[Quadruple Item Effect]PROMOTE 150%% CRIT DAMAGE AND SPLASH ATTACK IN 400 RANGE" + "DOTA_Tooltip_ability_item_2012" "Mini-Hakkero" + "DOTA_Tooltip_ability_item_2012_Description" "[Single Item Effect]PROMOTE 10%% MAGIC SKILL DAMAGE\n\n[Double Item Effect]PROMOTE 25%% MAGIC SKILL DAMAGE\n\n[Quadruple Item Effect]ENEMIES IN 1000 DISTANCES GET 120% MAGIC SKILL DAMAGES" + "DOTA_Tooltip_ability_item_2013" "L\?vateinn" + "DOTA_Tooltip_ability_item_2013_Description" "[Single Item Effect]PROMOTE 10%% PHYSICAL DAMAGE\n\n[Double Item Effect]PROMOTE 25%% PHYSICAL DAMAGE\n\n[Quadruple Item Effect]ENEMIES IN 1000 DISTANCES GET 120%% PHYSICAL DAMAGES." + "DOTA_Tooltip_ability_item_2014" "Spear Gungnir" + "DOTA_Tooltip_ability_item_2014_Description" "[Single Item Effect]PROMOTE 10%% DAMAGE\n\n[Double Item Effect]PROMOTE 20%% DAMAGE\n\n[Quadruple Item Effect]PROMOTE DAMAGE OF UNITS IN 1000 RANGE BY 15%%" + "DOTA_Tooltip_ability_item_2015" "Mind-WRAITH\'s Hooks" + "DOTA_Tooltip_ability_item_2015_Description" "[Single Item Effect]PROMOTE 5%% CHANCE OF CRIT.\n\n[Double Item Effect]PROMOTE 20%% CHANCE OF CRIT.\n\n[Quadruple Item Effect]PROMOTE 45%% CHANCE OF CRIT" + "DOTA_Tooltip_ability_item_2016" "Eutectic Karyogamy Stick" + "DOTA_Tooltip_ability_item_2016_Description" "[Single Item Effect]PROMOTE 5%% DAMAGE AND 5%% MP REGEN\n\n[Double Item Effect]PROMOTE 10%% DAMAGE AND 10%% MP REGEN\n\n[Quadruple Item Effect]REDUCE 25% SKILL FREEZING TIME." + "DOTA_Tooltip_ability_item_2017" "Devil\'s Baby Teeth" + "DOTA_Tooltip_ability_item_2017_Description" "[Single Item Effect]PROMOTE 10 ATTACK SPEED\n\n[Double Item Effect]PROMOTE 25 ATTACK SPEED.\n\n[Quadruple Item Effect]PROMOTE 45 ATTACK SPEED." + "DOTA_Tooltip_ability_item_2018" "Moon Crossbow" + "DOTA_Tooltip_ability_item_2018_Description" "[Single Item Effect]PROMOTE 15 ATTACK DAMAGE AND 5 POWER POINTS\n\n[Double Item Effect]PROMOTE 45 ATTACK DAMAGE AND 15 POWER POINTS\n\n[Quadruple Item Effect]PROMOTE 70 ATTACK DAMAGE AND 30% CRIT CHANCE." + "DOTA_Tooltip_ability_item_2019" "Yin-yang Orb for Tax Payment" + "DOTA_Tooltip_ability_item_2019_Description" "[Single Item Effect]PROMOTE 4%% POWER POINTS\n\n[Double Item Effect]PROMOTE 12%% POWER POINTS\n\n[Quadruple Item Effect]PROMOTE 40 POWER POINTS" + "DOTA_Tooltip_ability_item_2020" "Hi-Tech Camera" + "DOTA_Tooltip_ability_item_2020_Description" "[Single Item Effect]PROMOTE 20 POWER POINTS\n\n[Double Item Effect]PROMOTE 60 POWER POINTS\n\n[Quadruple Item Effect]WHEN SKLLS CAUSE DAMAGE TO UNITS, UNITS GET EXTRA 2 TIMES (STAR * POWER POINT) DAMAGE." + "DOTA_Tooltip_ability_item_2021" "Good Wine(cannot sell)" + "DOTA_Tooltip_ability_item_2021_Description" "All basic attributes are increased %bonus%%%, the first use lasts %duration_max% seconds, the duration of each subsequent use decreases %step% seconds until it is reduced to %duration_min% seconds. (Consumable)" + "DOTA_Tooltip_ability_item_2021_Note0" "Basic attributes include: attack speed, mana regen, energy, attack power, crit chance, crit damage." + "DOTA_Tooltip_modifier_item_2021_buff" "Good Wine" + "DOTA_Tooltip_modifier_item_2021_buff_Description" "All stats increased" + "DOTA_Tooltip_ability_item_2022_Description" "PROMOTE A UNIT TO MAX LEVEL." + "DOTA_Tooltip_ability_item_2022" "Hakurei Shrine\'s Amulet(cannot sell)" + "DOTA_Tooltip_ability_item_0042" "[SR]Shameimaru Aya" + "hatate" "Himekaidou Hatate" + "momiji" "Inubashiri Momiji" + "DOTA_Tooltip_ability_thtd_aya_01" "Wind Sign「Wind God\'s Fan」" + "DOTA_Tooltip_ability_thtd_aya_01_Description" "Aya Shameimaru\'s attack has 12%% CHANCE TO RELEASE A HURRICANE, CAUSE DAMAGE AND SPEED REDUCTION TO TARGETS AND UNITS AROUND IT.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5" + "DOTA_Tooltip_ability_thtd_aya_01_Note0" "潜能Lv10:技能伤害+1。" + "DOTA_Tooltip_ability_thtd_aya_01_Note1" "潜能Lv50:技能伤害+2,「文文新闻」每层增加伤害+1%%。" + "DOTA_Tooltip_ability_thtd_aya_01_Note2" "潜能Lv100:技能伤害+4,「文文新闻」每层增加伤害+2%%。" + "DOTA_Tooltip_ability_thtd_aya_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_aya_01_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_aya_01_move_slow" "MOVEMENT SPEED REDUCTION EFFECT:" + "DOTA_Tooltip_ability_thtd_aya_01_duration_time" "减速持续时间:" + "DOTA_Tooltip_ability_thtd_aya_01_range" "作用范围:" + "DOTA_Tooltip_ability_thtd_aya_01_buff_time" "「文文新闻」持续时间:" + "DOTA_Tooltip_ability_thtd_aya_01_damage_up" "%每层「文文新闻」伤害增加:" + "DOTA_Tooltip_modifier_aya01_slow" "Wind Sign「Wind God\'s Fan」" + "DOTA_Tooltip_modifier_aya01_slow_Description" "Due to Aya\'s affection, this units\' movement speed is reduced." + "DOTA_Tooltip_ability_thtd_aya_02" "「Illusionary Dominance」" + "DOTA_Tooltip_ability_thtd_aya_02_Description" "Shameimaru Aya fly to the destination,Injuries the enemy units that collided.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*0.5\n\n[COOPERATION PROMOTION - Himekaidou Hatate]\nwith「Kakashi Spirit News」sharing information." + "DOTA_Tooltip_ability_thtd_aya_02_Note0" "潜能Lv10:碰撞技能伤害+2。" + "DOTA_Tooltip_ability_thtd_aya_02_Note1" "潜能Lv50:碰撞技能伤害+4。" + "DOTA_Tooltip_ability_thtd_aya_02_Note2" "潜能Lv100:碰撞技能伤害+8。" + "DOTA_Tooltip_ability_thtd_aya_02_Note3" "潜能Lv666:\n获得特殊效果:突符「天狗巨暴流」,所有伤害造成4倍暴击。" + "DOTA_Tooltip_ability_thtd_aya_02_Note4" "潜能Lv999:\n获得特殊效果:鸦符「暗夜昼魇」,「文文新闻」每层增加伤害+4%%。" + "DOTA_Tooltip_ability_thtd_aya_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_aya_03" "「Peerless Wind God」" + "DOTA_Tooltip_ability_thtd_aya_03_Description" "When Shameimaru Aya trigger Wind Sign 「Wind God\'s Fan」,「Illusionary Dominance」freezing time will refresh,moreover incidental once attack on the enemy unit." + "DOTA_Tooltip_ability_thtd_hatate_01" "Reporting 「Hatate Himekaidou\'s Reporting Training」" + "DOTA_Tooltip_ability_thtd_hatate_01_Description" "Himekaidou Hatate injury to the target area and attach all enemy units「Kakashi Spirit News」。\nAll attach「Kakashi Spirit News」units will be harmed once damage\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Shameimaru Aya]\nwith「Bunbunmaru Newspape」sharing information." + "DOTA_Tooltip_ability_thtd_hatate_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hatate_01_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_hatate_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_hatate_01_damage_up" "%每层「花果子念报」伤害增加:" + "DOTA_Tooltip_ability_thtd_hatate_02" "Far-sightedness 「Tengu Psychography」" + "DOTA_Tooltip_ability_thtd_hatate_02_Description" "Himekaidou Hatate make sustained damage to the enemy units in own area,attach all enemy units「Kakashi Spirit News」,for 5 seconds。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*4 /per second" + "DOTA_Tooltip_ability_thtd_hatate_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_hatate_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_hatate_02_tick_time" "伤害间隔时间:" + "DOTA_Tooltip_modifier_aya01_news_buff" "「Bunbunmaru Newspaper」" + "DOTA_Tooltip_modifier_aya01_news_buff_Description" "This unit photographed by Aya." + "DOTA_Tooltip_modifier_hatate01_news_buff" "「Kakashi Spirit News」" + "DOTA_Tooltip_modifier_hatate01_news_buff_Description" "This unit photographed by Hatate." + "DOTA_Tooltip_modifier_thdots_hatate02_think_interval" "「Kakashi Spirit News」" + "DOTA_Tooltip_modifier_thdots_hatate02_think_interval_Description" "Himekaidou Hatate thoughtography now" + "DOTA_Tooltip_modifier_momiji_02" "Tengu 「Guardian of Shield」" + "DOTA_Tooltip_modifier_momiji_02_Description" "Affected by Momiji,this unit\'s Skill damage change to physical type." + "DOTA_Tooltip_ability_thtd_momiji_02" "Tengu「Shield of the Guardian」" + "DOTA_Tooltip_ability_thtd_momiji_02_Description" "Make traget friendly unit\'s skill damage change to physical type and increase 30%%/40%%/60%%。\n\n[COOPERATION PROMOTION - Shameimaru Aya]\nWhen Momiji guard Shameimaru Aya,Aya attack inner circle enemy units will take 50%% effect,attack outer ring enemy units will ignore target unit\'s Armor." + "DOTA_Tooltip_ability_thtd_momiji_02_damage_up" "%物理伤害提高:" + "DOTA_Tooltip_ability_thtd_momiji_02_aya_damage_up" "%射命丸文物理伤害提高:" + "DOTA_Tooltip_ability_item_0041" "[SR]Houraisan Kaguya" + "DOTA_Tooltip_ability_item_0043" "[R]Himekaidou Hatate" + "DOTA_Tooltip_ability_item_0044" "[R]Inubashiri Momiji" + "DOTA_Tooltip_ability_item_0041_Description" "Houraisan Kaguya is the main antagonist of Imperishable Night.\nShe was once a princess of the Lunarians, a race of people living on the Moon. Due to illegally creating the Hourai Elixir with Eirin Yagokoro, they ended up living on Earth and what would eventually be Gensokyo.\n She is currently the princess of Eientei.\n\n[★]Impossible Request「Bullet Branch of Hourai -Rainbow Danmaku-」\n[★]「End of Imperishable Night」\n[★★★★]「Divine Treasure」" + "DOTA_Tooltip_ability_item_0040_Description" "Fujiwara no Mokou was formerly an ordinary human, but she became an immortal being after drinking the Hourai Elixir about 1300 years ago. \nNot close to humans,but it will secretly help humanity.she has the ability to manipulate the flame。\nNow she is never able to die, though she still feels the pain of injuries as normal.\nShe\'s considered to be very powerful, given her long life, the power she earned through her life, and her immortal status since she can keep fighting until she can no longer stand the pain.\n\n[★]Hourai「South Wind, Clear Sky -Fujiyama Volcano-」\n[★]Forgiveness「Honest Man\'s Death」\n[★★★★]Inextinguishable「Phoenix\'s Tail」" + "DOTA_Tooltip_ability_item_0042_Description" "Aya is unrelenting when it comes to getting sensationalist news stories, and she frequently twists the truth in her writing to her own advantage. It is her policy as a reporter to only report the truth, but there have been many instances where she has written blatant lies. \n It is said that she will come politely asking interviews of humans and youkai alike if she sees them as worth writing an article about, but will forcefully drive away any who interfere. \n \nHowever, Aya has shown a serious side as well. She can be thoughtful about the effect her stories will have on those who read them. She resents the rigid tengu caste system, as even though she works hard, she is unable to advance in rank due to being a crow tengu. \n\n[★]Wind Sign 「Wind God\'s Fan」\n[★★★★]「Illusionary Dominance」\n[★★★★]「Peerless Wind God」" + "DOTA_Tooltip_ability_item_0043_Description" "Himekaidou Hatate is a tengu reporter who produces the Kakashi Spirit News. \nUnlike her colleague Aya Shameimaru, she never goes outside for her newspaper research. Instead, she uses her ability called thoughtography.\nAfter reading Aya\'s Bunbunmaru Newspaper, she decided to observe Aya\'s way of gathering for her articles.\n\n[★]Reporting 「Hatate Himekaidou\'s Reporting Training」\n[★★★★]\tFar-sightedness 「Tengu Psychography」" + "DOTA_Tooltip_ability_item_0044_Description" "Inubashiri Momiji is a white wolf tengu whose duty is to patrol the Youkai Mountain. \nHer good sense of smell and sight are helpful for this duty.\nIt is usually idle, and Kappa is a friend and often plays chess together.\n\n[★]White wolf「Tengu Guardian」\n[★★★]\tTengu 「Guardian of Shield」" + "minoriko_max_change" "Minoriko Aki can only exchange up to three times!" + "DOTA_Tooltip_ability_thtd_sanae_01" "Miracle「Daytime Guest Stars」" + "DOTA_Tooltip_ability_thtd_sanae_01_Description" "Sanae miracle to the target,Increase the power point of the target,and transfer(1/times)effect to next unit。\n\n[Relative to star level]attribute increased:25/50/100/200/500" + "DOTA_Tooltip_ability_thtd_sanae_01_power_bonus" "能量点增加:" + "DOTA_Tooltip_ability_thtd_sanae_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sanae_01_down_percent" "%效果降低:" + "DOTA_Tooltip_ability_thtd_sanae_01_range" "传递范围:" + "DOTA_Tooltip_ability_thtd_sanae_01_max_count" "传递次数:" + "DOTA_Tooltip_modifier_sanae_01" "奇迹「白昼新星」" + "DOTA_Tooltip_modifier_sanae_01_Description" "早苗降下奇迹,能量点增加。" + "DOTA_Tooltip_ability_thtd_sanae_02" "Great Miracle 「Yasaka\'s Divine Wind」" + "DOTA_Tooltip_ability_thtd_sanae_02_Description" "Sanae hurricane blowing at the target,Inflicts damage to nearby units and slows them down.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2 /per second\n[Relative to star level]slow down:15%%/25%%/35%%/50%%" + "DOTA_Tooltip_ability_thtd_sanae_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_sanae_02_move_slow" "%减速:" + "DOTA_Tooltip_ability_thtd_sanae_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sanae_02_duration_range" "范围:" + "DOTA_Tooltip_modifier_sanae_debuff" "Great Miracle 「Yasaka\'s Divine Wind」" + "DOTA_Tooltip_modifier_sanae_debuff_Description" "Affected by Sanae,the unit was decelerated." + "DOTA_Tooltip_ability_thtd_sanae_03" "Sea Opening 「The Day the Sea Split」" + "DOTA_Tooltip_ability_thtd_sanae_03_Description" "Sanae randomly drop lightning at the target area,Each lightning strike damages the target and stun 0.5 seconds。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL\n\n[Special Effects - Beliefs]\n\nincrease(1+Belief value/250)multiple stun time,and improve(1+Belief value/250)multiple damage." + "DOTA_Tooltip_ability_thtd_sanae_03_power_damage" "技能伤害(能量点*星级/每个雷击):" + "DOTA_Tooltip_ability_thtd_sanae_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sanae_03_stun_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_sanae_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_sanae_03_stun_up" "%每点信仰提升眩晕时间:" + "DOTA_Tooltip_ability_thtd_sanae_03_damage_up" "%每点信仰提升伤害:" + "DOTA_Tooltip_ability_thtd_sanae_04" "Divine Virtue 「Bumper Crop Rice Shower」" + "DOTA_Tooltip_ability_thtd_sanae_04_Description" "Sanae inspires all special effects for units that gain belief.\n\n[COOPERATION PROMOTION - Yasaka Kanako,Moriya Suwako]\n\nTurn on this skill.\n\nMake Sanae,Kanako and Suwako both can gain belief by killing units." + "DOTA_Tooltip_ability_thtd_sanae_04_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_sanae_04_combo_buff" "神德「五谷丰登」" + "DOTA_Tooltip_modifier_sanae_04_combo_buff_Description" "可通过击杀单位来获得信仰值。" + "DOTA_Tooltip_modifier_sanae_04_buff" "神德「五谷丰登」" + "DOTA_Tooltip_modifier_sanae_04_buff_Description" "所有获得信仰值单位的能量升了。" + "DOTA_Tooltip_ability_thtd_nue_01" "「Nightmare of Heiankyou」" + "DOTA_Tooltip_ability_thtd_nue_02" "Grudge Bow 「The Bow of Genzanmi Yorimasa」" + "DOTA_Tooltip_ability_thtd_nue_03" "「Stars ○□△× bug」" + "DOTA_Tooltip_ability_thtd_nue_01_Description" "Nue Can impose a nightmare on anyone,Damage adds additional spell damage。When you take the initiative, the effect will double.\nAttack:Add 1x damage to this skill damage\nPositive judgment:Added 2x damage to this skill damage\nThe Bow of Genzanmi Yorimasa:Added 3x damage to this skill damage\n\nRelative to star level]DAMAGE:POWER POINT*1\n\n[COOPERATION PROMOTION - Murasa Minamitsu]\n\nWhen causing damage to enemies in the waters,increased damage50%%。" + "DOTA_Tooltip_ability_thtd_nue_01_Note0" "Skipping waves will decrease stacks by 20 per" + "DOTA_Tooltip_ability_thtd_nue_01_Note1" "Expiration removes 1/3rd stacks" + "DOTA_Tooltip_ability_thtd_nue_01_power_damage" "Damage:" + "DOTA_Tooltip_ability_thtd_nue_01_attack_bonus" "Bonus From Attacks:" + "DOTA_Tooltip_ability_thtd_nue_01_spell_bonus" "Bonus from Spells:" + "DOTA_Tooltip_ability_thtd_nue_01_damage_up" "% Damage Up:" + "DOTA_Tooltip_passive_nue01_attack" "「Nightmare of Heiankyou」" + "DOTA_Tooltip_passive_nue01_attack_Description" "Houjuu Nue\'s damage will take extra damage." + "DOTA_Tooltip_modifier_nue_01_extradamage" "「Nightmare of Heiankyou」" + "DOTA_Tooltip_modifier_nue_01_extradamage_Description" "「Nightmare of Heiankyou」the number of overlays." + "DOTA_Tooltip_modifier_nue_killed" "封兽鵺击杀触发" + "DOTA_Tooltip_modifier_nue_killed_Description" "该单位已经触发过封兽鵺击杀,暂时无法再次触发" + "DOTA_Tooltip_ability_thtd_nue_02_Description" "Shoot a powerful arrow that full of hatred,The penetrated will receive a large amount of spell damage.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_nue_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_nue_03_Description" "When nue kill a unit, it resets the skill cooldown." + "DOTA_Tooltip_modifier_thdots_nue_03" "「Stars ○□△× bug」" + "DOTA_Tooltip_modifier_thdots_nue_03_Description" "When nue kill a unit, it resets the skill cooldown." + "DOTA_Tooltip_ability_item_0046" "[SR]Kochiya Sanae" + "DOTA_Tooltip_ability_item_0046_Description" "Kochiya Sanae is a human, but is also a distant descendant of the goddess Suwako Moriya. \nHer role at the Moriya Shrine is similar to a shrine maiden, but with her inherited power Sanae has also become a minor deity herself. \nOriginally from the Outside World, Sanae migrated to Gensokyo with the shrine and its two resident goddesses, Kanako Yasaka and Suwako Moriya. As a result, she is rather knowledgeable about the outside world and modern living, although her attempts to explain scientific concepts usually just confuse the locals. \n\n[★]Miracle「Daytime Guest Stars\n[★]Great Miracle 「Yasaka\'s Divine Wind」\n[★★★★]Sea Opening 「The Day the Sea Split」" + "DOTA_Tooltip_ability_item_0047" "[SSR]Yasaka Kanako" + "DOTA_Tooltip_ability_item_0047_Description" "Yasaka Kanako is the main antagonist of Mountain of Faith. She\'s the current goddess of the Moriya Shrine after defeating its previous resident goddess Suwako Moriya in the Great Suwa War. \nShe desires to collect large amounts of faith, but since the humans of the Outside World no longer place much importance on gods, she has transported the shrine to Gensokyo.\nShe currently lives on top of the Youkai Mountain, where she has an uneasy relationship with the leaders of the tengu. \n\n[★]Divine Festival「Expanded Onbashira」\n[★★★]Onbashira「descent」\n[★★★]Onbashira「recover」\n[★★★★★]「Sacred Authority of the Gods」" + "DOTA_Tooltip_ability_item_0048" "[SR]Moriya Suwako" + "DOTA_Tooltip_ability_item_0048_Description" "Moriya Suwako is the original god of the Moriya Shrine.\nOfficially the shrine now belongs to Kanako Yasaka, but in Suwako\'s words she handles most of the divine services while Kanako handles the \'sales\'. \n\n[★]Divine Tool「Moriya\'s Iron Ring」\n[★★★]Scourge God 「Mishaguchi-sama」\n[★★★★]「Hellish Heat Geyser」" + "DOTA_Tooltip_ability_item_0048_Note0" "" + "DOTA_Tooltip_ability_item_0049" "[SR]Murasa Minamitsu" + "DOTA_Tooltip_ability_item_0050" "[SR]Houjuu Nue" + "DOTA_Tooltip_ability_item_0050_Description" "Houjuu Nue is said to be one of the most mysterious and feared youkai in many years, yet has been defeated by humans many times. \nThere are many differing legends according to her appearance because she hides her \nAt some point, she was sealed underground, and because of the events of Subterranean Animism, she resurfaced back in Gensokyo. \n\n[★]「Nightmare of Heiankyou」\n[★★★]Grudge Bow 「The Bow of Genzanmi Yorimasa」\n[★★★★]「Stars ○□△× bug」" + "DOTA_Tooltip_ability_item_0049_Description" "Murasa Minamitsu is the spirit of a young drowning victim who afterwards became a notorious threat due to her power to sink ships. \nShe is currently the captain of the Palanquin Ship, searching for the fragments of the Flying Storage. \nShe meets the heroine as she is completing the preparations to travel to Makai. \n\n[★]Harbor Sign 「Eternally Anchored Phantom Ship」\n[★]Captain「spinach」\n[★★★★]Drowning Sign 「Sinkable Vortex」\n[★★★★★]Harbor Sign 「Phantom Ship\'s Port」" + "sanae" "Kochiya Sanae" + "kanako" "Yasaka Kanako" + "suwako" "Moriya Suwako" + "nue" "Houjuu Nue" + "kanako_gojou" "Onbashira" + "DOTA_Tooltip_ability_thtd_momiji_01" "White wolf「Tengu Guardian」」" + "DOTA_Tooltip_ability_thtd_momiji_01_Description" "Summon four white wolf to automatically attack the surrounding units,White Wolf Doesn\'t Leave momiji to Walk Over 600 Yards.\n\nRelative to star level]white wolf attack:POWER POINT*STAR LEVEL*1" + "DOTA_Tooltip_ability_thtd_momiji_01_wolf_attack" "攻击力参数:" + "DOTA_Tooltip_ability_thtd_momiji_01_range" "白狼活动范围:" + "DOTA_Tooltip_ability_thtd_momiji_01_max_count" "白狼数量:" + "DOTA_Tooltip_ability_ability_common_star_up_speed_Description" "Increase the growth rate of the unit.\n\nThis skill can be upgraded through card cultivation.\n\n[Growth rate increased]:10%%/20%%/30%%/40%%" + "DOTA_Tooltip_ability_ability_common_star_up_speed" "Special Skill - Growth rate increased" + "DOTA_Tooltip_ability_ability_common_star_up_speed_speed_tooltips" "Growth rate increased:" + "DOTA_Tooltip_ability_ability_touhoutd_ex_up" "Awakening" + "DOTA_Tooltip_ability_ability_touhoutd_ex_up_Description" "Can stimulate the hidden power of some units" + "DOTA_Tooltip_ability_item_0069" "[R]Toramaru Shou" + "DOTA_Tooltip_ability_item_0088" "[R]Aki Shizuha" + "sizuha" "Aki Shizuha" + "toramaru" "Toramaru Shou" + "DOTA_Tooltip_ability_thtd_sizuha_01" "Autumn SignFall in Blast」" + "DOTA_Tooltip_ability_thtd_sizuha_01_Description" "Shizuha Aalthough it is impossible to improve the star in a normal way,but it can grow through time.\n\nEvery(216/432/720/1008)seconds will raise one star。" + "DOTA_Tooltip_ability_thtd_sizuha_01_Note0" "潜能Lv10:成长花费时间-10%%。" + "DOTA_Tooltip_ability_thtd_sizuha_01_Note1" "潜能Lv50:成长花费时间-20%%。" + "DOTA_Tooltip_ability_thtd_sizuha_01_Note2" "潜能Lv100:成长花费时间-30%%。" + "DOTA_Tooltip_ability_thtd_sizuha_01_grow_time" "成长花费时间:" + "DOTA_Tooltip_ability_thtd_sizuha_02" "Wilted Path「Lost Windrow」" + "DOTA_Tooltip_ability_thtd_sizuha_02_Description" "Shizuha can through reduce your own(1)star raise target (1)star,the star rating of the promotion goal cannot exceed Shizuha own star rating." + "DOTA_Tooltip_ability_thtd_toramaru_01" "Treasure Sign 「Dazzling Gold」" + "DOTA_Tooltip_ability_thtd_toramaru_01_Description" "Toramaru Shou inflicts damage on one unit and gains money,And at the end of each turn,Toramaru Shou will cause harm 1%%Tturn into money.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n[Relative to star level]Harvest quantity:12/44/108/216/852" + "DOTA_Tooltip_ability_thtd_toramaru_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_toramaru_01_bonus_gold" "获取金钱:" + "DOTA_Tooltip_ability_thtd_toramaru_01_gold_damage_percent" "%回合结束转化比例:" + "DOTA_Tooltip_ability_thtd_suwako_01" "Divine Tool「Moriya\'s Iron Ring」" + "DOTA_Tooltip_ability_thtd_suwako_01_Description" "Suwako attack will come with an iron wheel,Repel hit targets 150distances and cause damage。(Each unit will only be knocked back once)\n\n[Relative to star level]DAMAGE:POWER POINT*1\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/500)multiple knocked back distance." + "DOTA_Tooltip_ability_thtd_suwako_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suwako_02" "Scourge God 「Mishaguchi-sama」" + "DOTA_Tooltip_ability_thtd_suwako_02_Description" "Suwako create one Mishaguchi at the target location,when the unit through Mishaguchi will chained for 1 second.\n\nUnits are not subject to two binding effects,Leave the Mishaguchi will refresh.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2.5 /per second\n\n[Special Effects - Beliefs]\n\nimprove(1+Beliefs value/500)multiple damage." + "DOTA_Tooltip_ability_thtd_suwako_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_suwako_02_range" "赤口范围:" + "DOTA_Tooltip_ability_thtd_suwako_02_stay_time" "停留时间判定:" + "DOTA_Tooltip_ability_thtd_suwako_02_root_time" "束缚时间:" + "DOTA_Tooltip_ability_thtd_suwako_02_up_percent" "%每点信仰提升:" + "DOTA_Tooltip_ability_thtd_suwako_03" "「Hellish Heat Geyser」" + "DOTA_Tooltip_ability_thtd_suwako_03_Description" "Suwako use Geyser to bounce all units,Bounce it to a random area within 200 yards and cause damage when landing.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*5.0" + "DOTA_Tooltip_ability_thtd_suwako_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suwako_03_up_percent" "%每点信仰提升:" + "DOTA_Tooltip_ability_thtd_suwako_04" "「好运降临」" + "DOTA_Tooltip_ability_thtd_suwako_04_Description" "诹访子给目标带来好运,提升其暴击伤害,如果目标为守矢神社单位则获得更强的效果。" + "DOTA_Tooltip_ability_thtd_suwako_04_crit" "%暴击伤害提升:" + "DOTA_Tooltip_ability_thtd_suwako_04_self_crit" "%守矢神社暴击伤害提升:" + "DOTA_Tooltip_ability_thtd_suwako_04_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_suwako_04_buff" "「好运降临」" + "DOTA_Tooltip_modifier_suwako_04_buff_Description" "暴击伤害提升。" + "minamitsu" "Murasa Minamitsu" + "DOTA_Tooltip_ability_thtd_minamitsu_01" "Harbor Sign 「Eternally Anchored Phantom Ship」」" + "DOTA_Tooltip_ability_thtd_minamitsu_01_Description" "Minamitsu release a ghost ship in the opposite direction of the target,Where the ghost ship passes, water will be generated,Units in the waters will be slowed down." + "DOTA_Tooltip_ability_thtd_minamitsu_01_move_slow" "movement slow:" + "DOTA_Tooltip_modifier_minamitsu_01_slow_buff" "Harbor Sign 「Eternally Anchored Phantom Ship」" + "DOTA_Tooltip_modifier_minamitsu_01_slow_buff_Description" "Affected by Minamitsu,the unit was decelerated." + "DOTA_Tooltip_ability_thtd_minamitsu_02" "Captain「spinach」" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Description" "Minamitsu eat the ancestral spinach,improve50%%power point in 7 seconds,and Attacks can cause power point-based splash damage to the target area。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*1\n\n[COOPERATION PROMOTION - Houjuu Nue]\n\npower point improve to 75%%。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Note0" "潜能Lv10:提高效果+25%%,冷却时间-2秒。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Note1" "潜能Lv50:提高效果+50%%,冷却时间-4秒。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_Note2" "潜能Lv100:提高效果+75%%,冷却时间-7秒。" + "DOTA_Tooltip_ability_thtd_minamitsu_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_minamitsu_02_power_bonus" "%能量点和攻击力提升:" + "DOTA_Tooltip_ability_thtd_minamitsu_02_ability_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_minamitsu_02_radius" "溅射范围:" + "DOTA_Tooltip_ability_thtd_minamitsu_03" "Drowning Sign 「Sinkable Vortex」" + "DOTA_Tooltip_ability_thtd_minamitsu_03_Description" "Minamitsu release a vortex to the target area,Involved in the surrounding unit and caused damage.Units in the whirlpool will be rolled out of the waters.(Each unit is rolled up at most once)\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*2.5 /per second" + "DOTA_Tooltip_ability_thtd_minamitsu_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_minamitsu_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_minamitsu_04" "Harbor Sign 「Phantom Ship\'s Port」」" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Description" "Minamitsu from upstream waters summon a ghost ship,Crash into the waters downstream,enemy unit will be hurt.\n\nEveryone in the team「Undefined Fantastic Object」shikigami,Each character is additionally boosted by this skill 50%%damage.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*10 /per impact" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note1" "潜能Lv50:技能伤害+10,召唤小型幽灵船舰队。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note2" "潜能Lv100:技能伤害+20,召唤大型幽灵船舰队。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note3" "潜能Lv666:\n获得特殊效果:连续打击,幽灵船舰队前面船的撞击会使下艘船的撞击技能伤害+20。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_Note4" "潜能Lv999:\n获得特殊效果:北纬38度,村纱水蜜将所有神秘失踪的船重组成究极幽灵船舰队。" + "DOTA_Tooltip_ability_thtd_minamitsu_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_minamitsu_04_damage_up" "%每个角色额外提升:" + "DOTA_Tooltip_modifier_thdots_minamitsu03_bonus" "Captain「spinach」" + "DOTA_Tooltip_modifier_thdots_minamitsu03_bonus_Description" "Minamitsu is a big deal!" + "DOTA_Tooltip_ability_thtd_kanako_01" "Divine Festival「Expanded Onbashira」" + "DOTA_Tooltip_ability_thtd_kanako_01_Description" "Kanako fire a Onbashira toward the target\'s direction,Damage units and constantly repelled(Each unit will only be knocked back once),Lasts 2.5 seconds.\n\n[Relative to star level]DAMAGE:POWER POINT*5 /per second" + "DOTA_Tooltip_ability_thtd_kanako_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_01_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_kanako_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_kanako_02" "Onbashira「descent」" + "DOTA_Tooltip_ability_thtd_kanako_02_Description" "Drop a Onbashira at the target location,Onbashira can connect with other Onbashira,Touching the linked unit will injured damage.\n\nMaximum descent(2/4/6)Onbashiras。\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*(5/6/8) /times\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/1000)multiple damage." + "DOTA_Tooltip_ability_thtd_kanako_02_Note0" "潜能Lv10:链接造成2倍伤害。" + "DOTA_Tooltip_ability_thtd_kanako_02_Note1" "潜能Lv50:链接造成4倍伤害。" + "DOTA_Tooltip_ability_thtd_kanako_02_Note2" "潜能Lv100:链接造成8倍伤害。" + "DOTA_Tooltip_ability_thtd_kanako_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_02_max_count" "御柱最大数量:" + "DOTA_Tooltip_ability_thtd_kanako_03" "Onbashira「recover」" + "DOTA_Tooltip_ability_thtd_kanako_03_Description" "recover target Onbashira." + "DOTA_Tooltip_ability_thtd_kanako_03_unit" "Onbashira「link」" + "DOTA_Tooltip_ability_thtd_kanako_03_unit_Description" "Connect with the target Onbashira." + "DOTA_Tooltip_ability_thtd_kanako_04" "「Mountain of Faith」" + "DOTA_Tooltip_ability_thtd_kanako_04_Description" "Kanako create a Suwa Foughten Field,All units entering and leaving the battlefield are subject to an injury,Units in the battlefield will continue to be harmed.\n\n[Relative to star level]entering/leaving damage:POWER POINT*STAR LEVEL*8\n[Relative to star level]Continuous damage:POWER POINT*STAR LEVEL*0.25 /per second\n\n[Special Effects - Beliefs]\n\nimprove(1+Belief value/1000)multiple damage." + "DOTA_Tooltip_ability_thtd_kanako_04_Note0" "潜能Lv10:古战场技能伤害提高50%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note1" "潜能Lv50:古战场技能伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note2" "潜能Lv100:古战场技能伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note3" "潜能Lv666:\n获得特殊效果:「风神之神德」,每点信仰值提升伤害+0.6%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_Note4" "潜能Lv999:\n获得特殊效果:「神明的威光」,神奈子在战场中的暴击伤害+600%%。" + "DOTA_Tooltip_ability_thtd_kanako_04_power_damage1" "进入/离开伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_04_power_damage2" "持续伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kanako_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_kanako_04_range" "古战场范围:" + "DOTA_Tooltip_ability_thtd_kanako_04_crit_chance" "%暴击概率增加:" + "DOTA_Tooltip_ability_thtd_kanako_04_damage_up" "%每点信仰值提升伤害:" + "DOTA_Tooltip_ability_thtd_toramaru_02" "Buddhist Art 「Most Valuable Vajra」" + "DOTA_Tooltip_ability_thtd_toramaru_02_Description" "Toramaru Shou Gather the power of money point,Make huge damage to single target.\n\nEnter Endless mode. This skill will have no cooldown,Increases damage to 4x.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*10" + "DOTA_Tooltip_ability_thtd_toramaru_02_Note0" "无尽20波后AI自动使用本技能。" + "DOTA_Tooltip_ability_thtd_toramaru_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_toramaru_02_cost_gold" "消耗金钱:" + "DOTA_Tooltip_ability_thtd_toramaru_03" "Buddha\'s Light 「Vajra of Perfect Buddhism」" + "DOTA_Tooltip_ability_thtd_toramaru_03_Description" "Toramaru Shou Gather the power of money point,Make huge damage to all targets on the inner ring.\n\nEnter Endless mode. This skill will have no cooldown,Increases damage to 4x.\n\n[Relative to star level]DAMAGE:POWER POINT*STAR LEVEL*5" + "DOTA_Tooltip_ability_thtd_toramaru_03_Note0" "无尽20波后AI自动使用本技能。" + "DOTA_Tooltip_ability_thtd_toramaru_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_toramaru_03_cost_gold" "消耗金钱:" + "DOTA_Tooltip_ability_thtd_toramaru_04" "光符「正义之威光」" + "DOTA_Tooltip_ability_thtd_toramaru_04_Description" "寅丸星将毘沙门天宝塔的能量通过护心镜反射出来,对周围全体目标造成伤害。\n寅丸星消耗的金钱还会造成(累计消耗金钱 * 星级 * %power_damage%%%)的额外伤害。" + "DOTA_Tooltip_ability_thtd_toramaru_04_Note0" "累计消耗金钱不扣除返还金钱。" + "DOTA_Tooltip_ability_thtd_toramaru_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_item_0069_Description" "Toramaru Shou is a disciple of the god Bishamonten.\nAlong with Minamitsu Murasa and the other youkai aboard the Palanquin Ship, she seeks to revive Byakuren Hijiri after she had been sealed away in Makai by humans.\n\n[★]Treasure Sign 「Dazzling Gold」\n[★★★]Buddhist Art 「Most Valuable Vajra」」\n[★★★★★]Buddha\'s Light 「Vajra of Perfect Buddhism」" + "DOTA_Tooltip_ability_item_0088_Description" "" + "DOTA_Tooltip_ability_thtd_byakuren_01" "Good Omen「Nirvana\'s Cloudy Way in Purple」I" + "DOTA_Tooltip_ability_thtd_byakuren_01_Description" "-0.1 Attack Interval,decrease spell damage.\nAttack Interval cannot be smaller than 0.2s.\nWhen Attack Interval is greater than 1.0s, this spell deals Magic Damage.\nWhen Attack Interval is equal to 1.0s, deals Pure Damage.\nWhen Attack Interval Is less than 1.0s, deals Physical Damage.\n\nEach attack will damage the target and all surrounding units.\n\n[Damage Multiplier]Damage Multiplier: Power Point* Star * (1+ 0.1*Number of believers) " + "DOTA_Tooltip_ability_thtd_byakuren_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_byakuren_01_damage_up" "%每个教徒提升伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_01_tick_step" "攻击间隔减少:" + "DOTA_Tooltip_ability_thtd_byakuren_01_extra_damage" "%降低技能伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_01_min_tick" "最小攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_01_max_tick" "最大攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_01_base_tick" "初始攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_01_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_byakuren_02" "Good Omen「Nirvana\'s Cloudy Way in Purple」II" + "DOTA_Tooltip_ability_thtd_byakuren_02_Description" "+0.1 Attack Interval,decrease spell damage.\nAttack Interval cannot be smaller than 0.2s.\nWhen Attack Interval is greater than 1.0s, this spell deals Magic Damage.\nWhen Attack Interval is equal to 1.0s, deals Pure Damage.\nWhen Attack Interval Is less than 1.0s, deals Physical Damage.\n\nEach attack will damage the target and all surrounding units.\n\n[Damage Multiplier]Damage Multiplier: Power Point* Star * (1+ 0.1*Number of believers)" + "DOTA_Tooltip_ability_thtd_byakuren_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_byakuren_02_damage_up" "%每个教徒提升伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_02_tick_step" "攻击间隔减少:" + "DOTA_Tooltip_ability_thtd_byakuren_02_extra_damage" "%降低技能伤害:" + "DOTA_Tooltip_ability_thtd_byakuren_02_min_tick" "最小攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_02_max_tick" "最大攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_02_base_tick" "初始攻击间隔:" + "DOTA_Tooltip_ability_thtd_byakuren_02_range" "伤害范围:" + "DOTA_Tooltip_modifier_byakuren_attack_up" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_attack_up_Description" "技能伤害因当前攻击间隔变为魔法。" + "DOTA_Tooltip_modifier_byakuren_attack_down" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_attack_down_Description" "技能伤害因当前攻击间隔变为物理。" + "DOTA_Tooltip_modifier_byakuren_attack_equal" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_attack_equal_Description" "技能伤害因当前攻击间隔变为纯粹。" + "DOTA_Tooltip_modifier_byakuren_damage_percent" "吉兆「极乐的紫色云路」" + "DOTA_Tooltip_modifier_byakuren_damage_percent_Description" "当前技能伤害百分比,每层表示1%%。" + "DOTA_Tooltip_ability_thtd_byakuren_03" "「Yugyou Hijiri」" + "DOTA_Tooltip_ability_thtd_byakuren_03_Description" "With any other \'Seirensen\' Unit, Byakuren will preach them into believers,increasing Religious Point over time. \nWhen Religious point reaches 6000, the unit turns into a Believer.\nBelievers can accelerate the preaching process,\nBelievers gain additional abilities and enhences Byakuren’s Damage\n\nNazrin:In Endless Mode, attacks deals additional damage to target and surrounding units. Damage= Rank *0.2* Current Gold. \nToramaru Shou:Spell gold cost reduced by 50%.\nTatara Kogasa: [Karakasa Surprising]reduces 50%% movement speed and deals more damage.\nHoujuu Nue: Instantly kill units damaged by her abilities that are under 10% health.\nMurasa Minamitsu: \'Phantom Ship\'s Port\' \'s cooldown to 15s." + "DOTA_Tooltip_ability_thtd_byakuren_03_nazrin" "%纳兹琳金钱伤害系数:" + "DOTA_Tooltip_ability_thtd_byakuren_03_toramaru" "%寅丸星返还消耗金钱:" + "DOTA_Tooltip_ability_thtd_byakuren_03_kogasa" "%「唐伞惊吓」最大生命值:" + "DOTA_Tooltip_ability_thtd_byakuren_03_nue" "%封兽鵺秒杀血量:" + "DOTA_Tooltip_ability_thtd_byakuren_03_minamitsu" "「幽灵船之港」冷却时间:" + "DOTA_Tooltip_ability_thtd_byakuren_03_kyouko" "%「尖刺之圆」基础伤害提高:" + "DOTA_Tooltip_modifier_byakuren_03_aura" "Yugyou Hijiri" + "DOTA_Tooltip_modifier_byakuren_03_buff" "Yugyou Hijiri" + "DOTA_Tooltip_modifier_byakuren_03_aura_Description" "Byakuren is preaching." + "DOTA_Tooltip_modifier_byakuren_03_buff_Description" "This unit is a Believer of Byakuren." + "DOTA_Tooltip_ability_thtd_byakuren_04" "Superhuman[Byakuren Hijiri]/Heaven Sign[Brilliance of Mahavairocana]/Great Magic[Devil\'s Recitation]" + "DOTA_Tooltip_ability_thtd_byakuren_04_Description" "When Byakuren’s attack interval is <1.0s, uses uperhuman[Byakuren Hijiri].\nEach attack has a 10% chance to increase Power Point after channeling, increasing attack speed to maximum. \n[Damage Multiplie]Power Point Multiplier: Power Point * Believer *0.2.\n\nWhen Byakuren’s attack interval is 1.0s, uses Heaven Sign [Brilliance of Mahavairocana].\nEvery (6/ (1+believer*0.2)) attack will also damage surrounding units.\n\nWhen Byakuren’s attack interval is >1.0s, uses Great Magic [Devil\'s Recitation].\nIncrease Magic Penetration by 50, each attack releases 4 laser that deals damage to a random surrounding units.\n[Damage Multiplier] Power Point Multiplier: Power Point * Number of Believer*6*(1+ Number of Believer*0.1)" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note0" "潜能Lv10:教徒加成效果+20%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note1" "潜能Lv50:教徒加成效果+40%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note2" "潜能Lv100:教徒加成效果+60%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note3" "潜能Lv666:\n获得特殊效果:「三千大千世界之主」,教徒加成额外+100%%。" + "DOTA_Tooltip_ability_thtd_byakuren_04_Note4" "潜能Lv999:\n获得特殊效果:「释迦牟尼的五行山」,所有技能伤害提高至5倍。" + "DOTA_Tooltip_ability_thtd_byakuren_04_power_bonus" "%教徒奖励参数:" + "DOTA_Tooltip_ability_thtd_byakuren_04_chance" "%超人「圣白莲」触发概率:" + "DOTA_Tooltip_ability_thtd_byakuren_04_duration_time" "超人「圣白莲」持续时间:" + "DOTA_Tooltip_ability_thtd_byakuren_04_attack_speed" "超人「圣白莲」攻速增加:" + "DOTA_Tooltip_ability_thtd_byakuren_04_attack_bonus" "超人「圣白莲」基础能量和攻击增加:" + "DOTA_Tooltip_ability_thtd_byakuren_04_max_count" "「大日如来的光辉」攻击次数需求:" + "DOTA_Tooltip_ability_thtd_byakuren_04_crit_change" "%「大日如来的光辉」暴击概率提高:" + "DOTA_Tooltip_ability_thtd_byakuren_04_crit_damage" "%「大日如来的光辉」暴击伤害提高:" + "DOTA_Tooltip_ability_thtd_byakuren_04_penetration" "Magic Penetration:" + "DOTA_Tooltip_ability_thtd_byakuren_04_damage_count" "「魔神复诵」发射激光数:" + "DOTA_Tooltip_ability_thtd_byakuren_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_byakuren_04_range" "伤害范围:" + "DOTA_Tooltip_modifier_byakuren_04_physical_buff" "superhuman [Byakuren Hijiri]" + "DOTA_Tooltip_modifier_byakuren_04_physical_buff_Description" "Byakuren uses magic to vastly enhance her strength." + "DOTA_Tooltip_modifier_byakuren_04_pure_buff" "超人「圣白莲」" + "DOTA_Tooltip_modifier_byakuren_04_pure_buff_Description" "圣白莲暴击提升了。" + "DOTA_Tooltip_modifier_byakuren_04_magic_buff" "Great Magic[Devil\'s Recitation]" + "DOTA_Tooltip_modifier_byakuren_04_magic_buff_Description" "Byakuren channels magic to increase her magic penetration." + "DOTA_Tooltip_ability_item_0051" "[SSR]Byakuren Hijiri" + "DOTA_Tooltip_ability_item_0051_Description" "After Myouren dies, Byakuren fears the mortality of life and seeks immortality.\nFailing to achieve immortality through the way of the Buddha, Byakuren turns to magic and sorcery. \nIn her contact wit youkai , she realizes that only the strong can survival. “Survival of the fittest” became her cornerstone. \nOn the one hand, she accepts to beat off youkaies, on the other hand, she helps youkaies, this is the \'balance\' she thinks.\nAs mankind rejects her, Byakuren was banished to devil\'s world --- where Palanquin Ship sails towards.\n\n[★]Good Omen [Nirvana\'s Cloudy Way in Purple]I\n[★]Good Omen [Nirvana\'s Cloudy Way in Purple]II\n[★★★] [Yugyou Hijiri]\n[★★★★★]Superhuman [Byakuren Hijiri]/Heaven Sign [Brilliance of Mahavairocana]/Great Magic [Devil\'s Recitation]" + "byakuren" "Hijiri Byakuren" + "soga" "Soga no Tojiko" + "futo" "Mononobe no Futo" + "miko" "Toyosatomimi no Miko" + "DOTA_Tooltip_ability_thtd_soga_01" "Vengeful Spirit [Iruka\'s Thunder]" + "DOTA_Tooltip_ability_thtd_soga_01_Description" "Deals damage to enemies in a straight line, and deals 1s stun.\n\n After releasing, a ball lightning will be created in the track, next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage:POWER POINT * STAR LEVEL" + "DOTA_Tooltip_ability_thtd_soga_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_soga_01_stun_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_soga_01_length" "直线长度:" + "DOTA_Tooltip_ability_thtd_soga_02" "Thunder Arrow [Gagouji\'s Tornado]" + "DOTA_Tooltip_ability_thtd_soga_02_Description" "Deals 1 time of damage to units in target areas.\n\nAfter releasing, a ball lightning will be created in the track, next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage: POWER POINT * STAR LEVEL*4" + "DOTA_Tooltip_ability_thtd_soga_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_soga_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_soga_02_damage_down" "%再次触发伤害:" + "DOTA_Tooltip_ability_thtd_soga_03" "Thunder Arrow [Gagouji\'s Tornado]" + "DOTA_Tooltip_ability_thtd_soga_03_Description" "After a short-time delay, deals a huge damage to units in target areas.\n\nAfter releasing, a ball lightning will be created in the track,next time triggering this skill will create ball lightning again in the track.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 10\n\n[COOPERATION PROMOTION - Mononobe no Futo]\n\n+20%% Magic Damage to units are hitted, during 10s." + "DOTA_Tooltip_ability_thtd_soga_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_soga_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_soga_03_damage_down" "%再次触发伤害:" + "DOTA_Tooltip_ability_thtd_soga_03_damage_up" "%被击中单位魔法伤害提升:" + "DOTA_Tooltip_ability_thtd_soga_03_duration_time" "魔法伤害提升持续时间:" + "DOTA_Tooltip_ability_thtd_futo_01" "Throwing Dishes [Mononobe\'s Eighty Sake Cups]" + "DOTA_Tooltip_ability_thtd_futo_01_Description" "Each attack will randomly change a dish, each dish deals different effect.\nGreen Deals 1 time of (POWER POINT * Star Level) damage to all units behind the target.\nOrange Throwes dishes to all surrounding units and deals (POWER POINT * Star Level) damage.\nGreen Inflicting poison to units in target areas and decreasing HP over time.\nRed makes a flame burst to deal (POWER POINT * Star Level * 4) damage to enemies in the area.\nYellow Deals 0.5s stun to enemies in the area.\nBlue Deals critical strike( x 32) to enemies in ther area(this critical strike damage is MAGIC DAMAGE.)" + "DOTA_Tooltip_ability_thtd_futo_01_damage1" "青伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_futo_01_damage2" "橙伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_futo_01_damage3" "绿伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_futo_01_duration_time" "绿持续时间:" + "DOTA_Tooltip_ability_thtd_futo_01_damage4" "红伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_futo_01_stun_time" "黄眩晕时间:" + "DOTA_Tooltip_ability_thtd_futo_01_crit" "蓝暴击伤害倍数:" + "DOTA_Tooltip_ability_thtd_futo_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_futo_02" "Saint Girl [Sun Goddess\'s Sacrifice]" + "DOTA_Tooltip_ability_thtd_futo_02_Description" "Each time kill unit, deals self 10%% more magic damage.\n\nAt most overlay 10 times, during 10s.\n\n[COOPERATION PROMOTION - Soga no Tojiko]\n\nOverlay times increase from 10 to 15." + "DOTA_Tooltip_ability_thtd_futo_02_damage_up" "%魔法伤害提升:" + "DOTA_Tooltip_ability_thtd_futo_02_max_count" "最大叠加层数:" + "DOTA_Tooltip_ability_thtd_futo_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_futo_02_buff" "圣童女「太阳神的贡品」" + "DOTA_Tooltip_modifier_futo_02_buff_Description" "每次击杀单位,提升自身魔法伤害。" + "DOTA_Tooltip_ability_thtd_futo_03" "Blaze Sign [Sakuraiji in Flames]" + "DOTA_Tooltip_ability_thtd_futo_03_Description" "Sets big fire to the area, deals damage to enemies in the area over time.\n\n[Damage Multiplier]Damage:POWER POINT * Star Level * 2.5 /Per-sec" + "DOTA_Tooltip_ability_thtd_futo_03_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_futo_03_range" "范围:" + "DOTA_Tooltip_ability_thtd_futo_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_item_0052" "" + "DOTA_Tooltip_ability_item_0094" "[SR]Soga no Tojiko" + "DOTA_Tooltip_ability_item_0095" "[SR]Mononobe no Futo" + "extra_bonus_minoriko_limit" "Minoriko\'s Gift: Aki Minoriko\'s exchange time refreshes." + "extra_bonus_nazrin" "Nazrin\'s Gift: Get 3500 gold." + "extra_bonus_lily" "Lily White\'s Gift: Promote all Shikigamis\'level to Max." + "extra_bosses_minoriko" "Boss Mission: Aki Minoriko: Each 10s regen 30% HP." + "extra_bosses_keine" "Boss Mission: Kamishirasawa Keine: When HP < 70%, record current HP and recover after 5s." + "extra_bosses_aya" "Boss Mission: Shameimaru Aya: Immune most of movement speed decreasing." + "extra_bosses_kisume" "Boss Mission: Kisume: Reduce self 2000 damage." + "extra_bosses_alice" "Boss Mission: Alice: After she died, she will split into 3 ningyous, each ningyou has 30% HP, food spawns will be occupied when ningyous enter the circle." + "DOTA_Tooltip_modifier_bosses_alice" "替死符" + "DOTA_Tooltip_modifier_bosses_alice_Description" "当受到致死伤害时使用人偶代替自己死亡,但替死后生命值和生命上限降低为最初的33%%。" + "extra_bosses_kaguya" "Boss Mission: Houraisan Kaguya: Resurrection" + "extra_bosses_yuugi" "Boss Mission: Hoshiguma Yuugi: Have double HP" + "extra_bosses_mokou" "Boss Mission: Fujiwara no mokou: IMMUNE ITEM\'S CRITICAL STRIKE effect." + "extra_bosses_hina" "Boss Mission: giyama Hina: When she gets hurt, if damage > (the source of damage * 4 * Star Level * POWER POINT), this damage will decrease a half." + "extra_bosses_marisa" "Boss Mission: Kirisame Marisa: Each 3s she will rush 0.3s." + "extra_bosses_rumia" "Boss Mission: Rumia: Each 3s will have 1s Invincibility." + "DOTA_Tooltip_ability_thtd_miko_04" "[Newborn Divine Spirit]" + "DOTA_Tooltip_ability_thtd_miko_02" "Hermit Sign [Emperor of the Land of the Rising Sun]" + "DOTA_Tooltip_ability_thtd_miko_03" "Honor [Colors of Twelve Levels]" + "DOTA_Tooltip_ability_thtd_miko_01" "[Cipangu the Golden Sword]" + "DOTA_Tooltip_ability_thtd_miko_01_Description" "Miko releases 3 golden swords to target direction, units hit by golden swords will get damage, the damage will attach Miko (POWER POINT * 1)\'s\' damage.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 4" + "DOTA_Tooltip_ability_thtd_miko_01_power_damage1" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_01_power_damage2" "附带伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_01_range" "黄金剑距离:" + "DOTA_Tooltip_ability_thtd_miko_01_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_miko_01_pose" "[Cipangu the Golden Sword]" + "DOTA_Tooltip_modifier_miko_01_pose_Description" "正在施放黄金剑" + "DOTA_Tooltip_modifier_miko_01_debuff" "[Cipangu the Golden Sword]" + "DOTA_Tooltip_modifier_miko_01_debuff_Description" "This unit is hitted by golden swords." + "DOTA_Tooltip_ability_thtd_miko_02_Description" "Each time there is 1 \'Divine Spirit Mausoleum\' unit, it will be \'Listen\' by Miko\nEach time \'Listen a unit, Religious Point will increase constantly.\'\nWhen Religious Points reach 6000, Miko can do \'Teach\' to every \'Divine Spirit Mausoleum\' unit.\nUnits success to be \'Teach\' will get extra ability.\n\nSoga no Tojiko: [Iruka\'s Thunder] Cooldown time reduces to 4s, [Gagouji\'s Tornado] Cooldown time reduces to 10s.\nMononobe no Futo: [Sakuraiji in Flames]Deals 25%% more damage.\nMiyako Yoshika: Attack attaches an extra [poison] buff." + "DOTA_Tooltip_ability_thtd_miko_02_soga01_cd" "「入鹿之雷」冷却降低:" + "DOTA_Tooltip_ability_thtd_miko_02_soga03_cd" "「元兴寺的龙卷」冷却降低:" + "DOTA_Tooltip_ability_thtd_miko_02_futo03_up" "%「樱井寺炎上」伤害提升:" + "DOTA_Tooltip_ability_thtd_miko_02_yoshika" "附加「毒」层数:" + "DOTA_Tooltip_ability_thtd_miko_02_seiga" "死亡伤害参数:" + "DOTA_Tooltip_ability_thtd_miko_02_bonus_power" "传授能量和攻击增加:" + "DOTA_Tooltip_ability_thtd_miko_02_bonus_chance" "%传授爆击概率增加:" + "DOTA_Tooltip_ability_thtd_miko_02_bonus_crit" "%传授爆击伤害增加:" + "DOTA_Tooltip_modifier_miko_02_aura" "Hermit Sign [Emperor of the Land of the Rising Sun]" + "DOTA_Tooltip_modifier_miko_02_aura_Description" "Miko is \'Listening\'." + "DOTA_Tooltip_modifier_miko_02_buff" "Hermit Sign [Emperor of the Land of the Rising Sun]" + "DOTA_Tooltip_modifier_miko_02_buff_Description" "This unit has been \'Taught\'." + "DOTA_Tooltip_modifier_miko_02_ready" "仙符「日出之处的天子」" + "DOTA_Tooltip_modifier_miko_02_ready_Description" "宗教值达到6000。「传授」已就绪" + "DOTA_Tooltip_ability_thtd_miko_03_Description" "Each 0.3s Miko will release a colorful light ball to attack surrounding random targets.\n\nEach \'Be Taught\' unit there will cause release 1 extra light ball.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level" + "DOTA_Tooltip_ability_thtd_miko_03_Note0" "潜能Lv10:光球造成2倍伤害。" + "DOTA_Tooltip_ability_thtd_miko_03_Note1" "潜能Lv50:光球造成4倍伤害。" + "DOTA_Tooltip_ability_thtd_miko_03_Note2" "潜能Lv100:光球造成6倍伤害。" + "DOTA_Tooltip_ability_thtd_miko_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_03_tick" "发射间隔:" + "DOTA_Tooltip_ability_thtd_miko_04_Description" "Miko asks all \'Be Taught\' units there to release \'Meteor Shower\' to inner enemies with itself together.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level * 2.5/Per Meteor Shower." + "DOTA_Tooltip_ability_thtd_miko_04_Note0" "潜能Lv10:流星雨伤害+5。" + "DOTA_Tooltip_ability_thtd_miko_04_Note1" "潜能Lv50:流星雨伤害+10。" + "DOTA_Tooltip_ability_thtd_miko_04_Note2" "潜能Lv100:流星雨伤害+20。" + "DOTA_Tooltip_ability_thtd_miko_04_Note3" "潜能Lv666:\n获得特殊效果:光符「王道的威光」,光球额外造成12倍伤害,且增加400%%暴击伤害。" + "DOTA_Tooltip_ability_thtd_miko_04_Note4" "潜能Lv999:\n获得特殊效果:星神符「十七条的超人」,流星雨伤害+170。" + "DOTA_Tooltip_ability_thtd_miko_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_miko_04_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_thdots_miko04_think_interval" "[Newborn Divine Spirit]" + "DOTA_Tooltip_modifier_thdots_miko04_think_interval_Description" "神子召唤所有场上的「传授」单位与自己一同对内圈单位持续释放流星雨。" + "DOTA_Tooltip_modifier_miko_04_pose" "[Newborn Divine Spirit]" + "DOTA_Tooltip_modifier_miko_04_pose_Description" "正在释放流星雨中" + "DOTA_Tooltip_ability_thtd_yoshika_01" "poison Nail[Undead Murderer]" + "DOTA_Tooltip_ability_thtd_yoshika_01_Description" "Miyako\'s every attack will attach a [poison] buff to units in target area, and decrease their movement speed, during 5s.\n\n[Damage Multiplier]Damage: POWER POINT * Star Level *1/Per-Sec." + "DOTA_Tooltip_ability_thtd_yoshika_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_yoshika_01_move_slow" "%移速降低:" + "DOTA_Tooltip_ability_thtd_yoshika_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yoshika_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_yoshika_01_attack_speed" "组合提升攻击速度:" + "DOTA_Tooltip_modifier_thtd_yoshika_01_combo_buff" "【组合提升 - 霍青娥】" + "DOTA_Tooltip_modifier_thtd_yoshika_01_combo_buff_Description" "攻击速度得到提升。" + "DOTA_Tooltip_modifier_yoshika_01_slow" "Poison Nail [Undead Murderer]" + "DOTA_Tooltip_modifier_yoshika_01_slow_Description" "This unit affects by [Poison], movement speed decreases." + "DOTA_Tooltip_ability_thtd_yoshika_02" "Poison Nail [Poison Murder]" + "DOTA_Tooltip_ability_thtd_yoshika_02_Description" "Depends on the number of [poison] buff,Miyako deals damage to units are attaching [poison] in inner circle.\n(This [poison] includes other units\' poisoned Spell cards.)\n\n[Damage Multiplier]Damage:POWER POINT * Star Level * 0.5 * Num of Buff" + "DOTA_Tooltip_ability_thtd_yoshika_02_power_damage" "技能伤害(能量点*星级/每层毒):" + "DOTA_Tooltip_ability_item_0097" "[R]Yoshika Miyako" + "DOTA_Tooltip_ability_item_0052_Description" "The saint Wakes up from sleeping eternally, when she was born she has got unbelievable gift, has beyond the mankind a lot.\nShe can undersatnd 10 people\'s spoken at the same time and give correct answers. It is said when she was a child, she used phus to make Four King\'s Shapes and built Four King Temple.On another hand, although there are some stories said she was born in the barn, they seems like jokes.\nNow she has become an immortal.But she still has not broken off with mankind\'s world, sometimes she even meddles in mankind\'s stuff. It perhaps is a habit was left due to be an Emperor before.\nHer character is so kind and humorous. However if you are meet face by face, you would make fault easily, even felt you have no secret now, so people mostly revered her.\n\n[★][Cipangu the Golden Sword]\n[★]Hermit Sign[Emperor of the Land of the Rising Sun]\n[★★★]Honor[Colors of Twelve Levels]\n[★★★★★][Newborn Divine Spirit]" + "DOTA_Tooltip_ability_item_0094_Description" "Ancients\' spirit. Serving Toyosatomimi no Miko with Mononobe no Futo together.\nshe becomes a spirit due to be cheated by Futo, but she is not mind now.\nShe has the ability to fall the thunder.\n\n[★]Vengeful Spirit[Iruka\'s Thunder]\n[★★★]Thunder Arrow[Gagouji\'s Cyclone]\n[★★★★]Thunder Arrow[Gagouji\'s Tornado]" + "DOTA_Tooltip_ability_item_0095_Description" "The ancient keeps sleeping by cursing self in a long time.\nShe trys reaching immortal by using death to divide into Metempsychosis wheel.\nBut in fact it is not that simple, finally she was still found out by Death god.\nComparing with Toyosatomimi no Miko who lives until now, she seems not really like Gensokyo, perhaps it is because she is not suitable.\nThis can be found out some from her past.\nWhen she was alive, she didn\'t accept Buddhism preached from the mainland, oppositely believed Tao near the ancient Shintoism.\nHence Her magic and style of using magic are not really old. It can say it is her personal style.\n\n[★]Throwing Dishes[Mononobe\'s Eighty Sake Cups]\n[★★★]Saint Girl[Sun Goddess\'s Sacrifice]\n[★★★★]Blaze Sign[Sakuraiji in Flames]" + "DOTA_Tooltip_ability_item_0097_Description" "The corpses that are revived and controlled Kaku Seiga.\nThey are never feeling pain and exhausted,so they can break out huge power,\nand they are Loyal but a little bit stupid.\n\n[★]Poison Nail[Poison Murder]\n[★★★]Poison Nail[Undead Murderer]" + "yoshika" "Miyako Yoshika" + "DOTA_Tooltip_ability_thtd_seiga_01" "Evil Sign[Yang Xiaogui]" + "DOTA_Tooltip_ability_thtd_seiga_01_Description" "Each unit dies around Seiga have chance to produce a [zombie].\n\n[★]1%% probability to produce 1 [★]zombie.\n[★★]2%% probability to produce 1 [★]zombie,\n[★★★]2%% probability to produce 1 [★]zombie,1%% probability to produce 1 [★★] zombie.\n[★★★★]2%% probability to produce a [★★] zombie,1%% probability to produce 1 [★★★] zombie.\n[★★★★★]3%% probability to produce 1 [★★★] zombie, 1%% probability to produce 1 [★★★★] zombie." + "DOTA_Tooltip_ability_thtd_seiga_02_Description" "increase a units\' attack speed, during 10s." + "DOTA_Tooltip_ability_thtd_seiga_02" "Demonify[Zouhuo Rumo]" + "DOTA_Tooltip_ability_thtd_seiga_02_attack_speed" "Attack Speed Increase:" + "DOTA_Tooltip_ability_thtd_seiga_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_seiga_02_attack_speed_buff" "Demonify[Zouhuo Rumo]" + "DOTA_Tooltip_modifier_seiga_02_attack_speed_buff_Description" "Affecting by Kaku Seiga, this unit\'s attack speed increases." + "DOTA_Tooltip_ability_thtd_seiga_03" "Necromancy[Corpse Tongji]" + "DOTA_Tooltip_ability_thtd_seiga_03_Description" "Each unit dies near her, other units around the dead unit will be hurt by amount of [Poison] buffs in dead units near her.\n\n[Damage Multiplier]Damage:Power Point*Star Level*0.5*amount of buffs" + "DOTA_Tooltip_ability_thtd_seiga_03_power_damage" "技能伤害(能量点*星级/每层毒):" + "DOTA_Tooltip_ability_thtd_seiga_03_range" "伤害范围:" + "DOTA_Tooltip_ability_item_0096" "[SR]Kaku Seiga" + "seiga" "Kaku Seiga" + "DOTA_Tooltip_ability_item_1011" "Zombie Lv1" + "DOTA_Tooltip_ability_item_1011_Description" "Can replace any 1 [★] Shikigami." + "DOTA_Tooltip_ability_item_1012" "Zombie Lv2" + "DOTA_Tooltip_ability_item_1012_Description" "Can replace any 1 [★★] Shikigami." + "DOTA_Tooltip_ability_item_1013" "Zombie Lv3" + "DOTA_Tooltip_ability_item_1013_Description" "Can replace any 1 [★★★] Shikigami." + "DOTA_Tooltip_ability_item_1014" "Zombie Lv4" + "DOTA_Tooltip_ability_item_1014_Description" "Can replace any 1 [★★★★] Shikigami." + "change_to_keine_04_jade" "Switch to [Three Sacred Treasures] - Orb" + "change_to_keine_04_mirror" "Switch to [Three Sacred Treasures] - Mirror" + "change_to_keine_04_sword" "Switch to [Three Sacred Treasures] - Sword" + "change_to_keine_shirasawa" "" + "change_to_keine_humen" "" + "keine" "Kamishirasawa Keine" + "change_to_close_ai" "" + "change_to_open_ai" "" + "change_to_open_cast_on_fixed_point" "已开启AI定点施放于所选地点" + "change_to_close_cast_on_fixed_point" "已关闭AI定点施放" + "cast_range_out" "超出技能施法范围" + "medicine" "Medicine Melancholy" + "luna" "Luna Child" + "sunny" "Sunny Milk" + "star" "Star Sapphire" + "DOTA_Tooltip_ability_thtd_keine_01" "Spiritual Birth [First Pyramid]" + "DOTA_Tooltip_ability_thtd_keine_01_Description" "Human Form: Increase a unit\'s attack damage, during 10s.\n\n[Damage Multiplier] Attack Increase:100/200/400/800/2000\n\nKeine Form: Ambition Sign [General Headquarters Crisis]\n\nAttack has 25%% Chance to stun units in target area 1s, and cause extra damage.\n\n[Damage Multiplier] Damage: Power Point*Star Level*1.0" + "DOTA_Tooltip_ability_thtd_keine_01_attack_bonus" "攻击力增加:" + "DOTA_Tooltip_ability_thtd_keine_01_bonus_time" "攻击力持续时间:" + "DOTA_Tooltip_ability_thtd_keine_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_keine_01_chance" "%触发概率:" + "DOTA_Tooltip_ability_thtd_keine_01_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_keine_01_lock_time" "晕眩后免疫时间:" + "DOTA_Tooltip_ability_thtd_keine_01_range" "区域范围:" + "DOTA_Tooltip_modifier_keine_01_buff" "产灵「最初的金字塔」" + "DOTA_Tooltip_modifier_keine_01_buff_Description" "攻击力得到提升。" + "DOTA_Tooltip_ability_thtd_keine_02" "Switch [Human]/[Keine] Form" + "DOTA_Tooltip_ability_thtd_keine_02_Description" "Switch to Human or Keine Form." + "DOTA_Tooltip_ability_thtd_keine_03" "Pseudo-History [The Legend of Gensokyo]" + "DOTA_Tooltip_ability_thtd_keine_03_Description" "Human Form: Each attack has 20%% chance to devour target units [History],make Keine record this unit\'s current position and HP.\n\nKeine Form:Each attack has 20%% chance to create target units\' [History], this unit will be back to the position and HP in devoured [History] recording.\n\nActive Use:\nHuman Form: Devour all units\' [History] in target area.\n\nKeine Form: Create all units\' [History] in target area.\n\n[Cooperation Promotion - Fujiwara no mokou]\n\nChance increases to 50%%." + "DOTA_Tooltip_ability_thtd_keine_03_chance" "%触发概率:" + "DOTA_Tooltip_ability_thtd_keine_03_range1" "主动范围:" + "DOTA_Tooltip_ability_thtd_keine_03_range2" "被动范围:" + "DOTA_Tooltip_ability_thtd_keine_03_max_count" "每个单位最大吞噬次数:" + "DOTA_Tooltip_thtd_keine_03_debuff" "Pseudo-History [The Legend of Gensokyo]" + "DOTA_Tooltip_thtd_keine_03_debuff_Description" "This unit is devoured [History]." + "DOTA_Tooltip_ability_thtd_keine_04" "Land Sign [Three Sacred Treasures]" + "DOTA_Tooltip_ability_thtd_keine_04_Description" "When Keine creates [History], [History]\'s effect can be changed by current treasure. \n\nLand Sign [Three Sacred Treasures - Sword]: Shoot a sword to target, cause Power Point*Star Level*5 damage to the target.\n\n[Three Sacred Treasures] - Orb: Cause damage bases of distances between current position and creating [History].\n\n[Three Sacred Treasures] - Mirror: make target units\' HP become (Current HP - HP when Devouring [History ])*0.5." + "DOTA_Tooltip_ability_thtd_keine_04_power_damage" "「剑」技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_keine_04_distance_damage" "「玉」技能伤害(能量点*星级/每百码):" + "DOTA_Tooltip_ability_thtd_keine_04_hp_percent" "「镜」技能参数:" + "DOTA_Tooltip_ability_thtd_medicine_01" "Poison Sign[Poison Breath]" + "DOTA_Tooltip_ability_thtd_medicine_01_Description" "Medicine attacks targets will cause targets enter [Lost] Form and decrease movement speed, during 1.0s, then cause damage over time to them.\n\n[Damage Multiplier]Damage: Power Point*Star Level*1.0/per-sec" + "DOTA_Tooltip_ability_thtd_medicine_01_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_medicine_01_move_slow" "Movement speed Decrease Effect:" + "DOTA_Tooltip_ability_thtd_medicine_01_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_medicine_01_tick_time" "伤害间隔:" + "DOTA_Tooltip_modifier_medicine_01_slow" "Poison Sign[Poison Breath]" + "DOTA_Tooltip_modifier_medicine_01_slow_Description" "This unit\'s movement speed is decreased, because Medicine\'s posion attack." + "DOTA_Tooltip_ability_thtd_medicine_02" "Fog Sign[Gassing Garden]" + "DOTA_Tooltip_ability_thtd_medicine_02_Description" "Release gas to target area, attract nearby units, and cause damage over time.\n\n[Damage Multiplier]Damage:Power Point*Star Level*4.0/per-sec" + "DOTA_Tooltip_ability_thtd_medicine_02_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_medicine_02_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_medicine_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_medicine_02_tick_time" "伤害间隔时间:" + "DOTA_Tooltip_ability_thtd_medicine_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_medicine_03_Description" "选择一个地点来设定AI定点施放:雾符「毒气花园」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_star_01" "Shooting Star[Petit Comet]" + "DOTA_Tooltip_ability_thtd_star_01_Description" "Star releases shooting star in target position, cause damage to target and decrease the movement speed.\n\n[Damage Multiplier]Damage:Power Point*Star Level*1.0\n\n[Cooperation Promotion - Sunny Milk, Luna Child]\n\nUnits in fairies\' area will gain 1 shooting star attack." + "DOTA_Tooltip_ability_thtd_star_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_star_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_star_01_move_slow" "Movement Speed Decrease effect:" + "DOTA_Tooltip_ability_thtd_star_01_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_star_01_slow" "Shooting Star[Petit Comet]" + "DOTA_Tooltip_modifier_star_01_slow_Description" "This unit\'s movement speed is decreased because Star\'s influence." + "DOTA_Tooltip_ability_thtd_star_02" "Star Sign[Starlight Rain]" + "DOTA_Tooltip_ability_thtd_star_02_Description" "Release 20 times shooting star in target area, each time will increase 5%% damage.\n\n[Damage Multiplier] Damage:Power Point*Star Level*5\n\n[Cooperation Promotion - Sunny Milk, Luna Child]\n\nUnits in fairies\' area will also get 1 time shooting star attack." + "DOTA_Tooltip_ability_thtd_star_02_power_damage" "技能伤害(能量点*星级/每阵):" + "DOTA_Tooltip_ability_thtd_star_02_range" "区域范围:" + "DOTA_Tooltip_ability_thtd_star_02_max_count" "流量阵数:" + "DOTA_Tooltip_ability_thtd_star_02_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_sunny_01" "Rainbow Light[Prism Flash]" + "DOTA_Tooltip_ability_thtd_sunny_01_Description" "Shoot laser to target to make laser reflect to 2 units, each reflection increase 100%% damage.\n\n[Damage Multiplier] Damage: Power Point*Star Level*1.0\n\n[Cooperation Promotion - Star Sapphire, Luna Child]\n\nUnits in fairies\' area will also gain 1 laser effect." + "DOTA_Tooltip_ability_thtd_sunny_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_sunny_01_range" "折射范围:" + "DOTA_Tooltip_ability_thtd_sunny_01_max_count" "折射单位数量:" + "DOTA_Tooltip_ability_thtd_sunny_01_damage_up" "%每次伤害提升:" + "DOTA_Tooltip_ability_thtd_sunny_02" "Light Sign[Yellow Deflection]" + "DOTA_Tooltip_ability_thtd_sunny_02_Description" "Switch damage which units in target area gain to pure damage, and make units in the area gain 110%%/115%%/125%% pure damage.\n\n[Cooperation Promotion - Star Sapphire, Luna Child]\n\nUnits in fairies\' area will also get same effect." + "DOTA_Tooltip_ability_thtd_sunny_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_sunny_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_sunny_02_damage_up" "%伤害提升:" + "DOTA_Tooltip_ability_thtd_sunny_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_sunny_03_Description" "选择一个地点来设定AI定点施放:光符「黄色偏移」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_luna_01" "Moonlight[Moon Stillness]" + "DOTA_Tooltip_ability_thtd_luna_01_Description" "Luna\'s each attack will summon a moonlight to target and 2 units around it, and cause damage.Damage to surrounding units will increase 100%%.\n\n[Cooperation Promotion]Damage:Power Point*Star Level*1.0\n\n[Cooperation Promotion - Sunny Milk, Star Sapphire]\n\nUnits in fairies\' area will also gain a moonlight attack." + "DOTA_Tooltip_ability_thtd_luna_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_luna_01_max_count" "单位个数:" + "DOTA_Tooltip_ability_thtd_luna_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_luna_01_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_luna_02" "Light Sign[Full Moon Night]" + "DOTA_Tooltip_ability_thtd_luna_02_Description" "Shooting to target position, every time shoot a unit will increase self\'s Power Points.\n\n[Damage Multiplier]Damage: Power Point*Star Level*5.0\n[Damage Multiplier]Power Point Increase: 100/250/500 /per-unit\n\n[Cooperation Promotion - Sunny Milk, Star Sapphire]\n\nUnits in faries\' area will also increase Luna\'s Power Points." + "DOTA_Tooltip_ability_thtd_luna_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_luna_02_bonus_power" "能量点和攻击力增加:" + "DOTA_Tooltip_ability_thtd_luna_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_luna_02_buff" "光符「满月之夜」" + "DOTA_Tooltip_modifier_luna_02_buff_Description" "每击中一个单位,提高自身的能量点和攻击力。" + "DOTA_Tooltip_modifier_sunny_02_debuff" "Light Sign[Yellow Deflection]" + "DOTA_Tooltip_modifier_sunny_02_debuff_Description" "Skill damage this unit gains will be switched to Pure Damage." + "DOTA_Tooltip_ability_item_0092" "[R]Medicine Melancholy" + "DOTA_Tooltip_ability_item_0056" "[R]Star Sapphire" + "DOTA_Tooltip_ability_item_0057" "[R]Sunny Milk" + "DOTA_Tooltip_ability_item_0058" "[R]Luna Child" + "DOTA_Tooltip_ability_item_0061" "[SR]Kamishirasawa Keine" + "DOTA_Tooltip_ability_thtd_suika_01" "Ghastly Atmosphere[Dense Fog Labyrinth]/Oni Sign[Ooeyama Complete Massacre]" + "DOTA_Tooltip_ability_thtd_suika_01_Description" "Using her ability to manipulate density and sparsity, Suika splits herself into Tiny Suikas. The Tiny Suikas inherit the main body\'s attack damage and abilities, however, they deal less damage and have reduced range.\n\nOni Sign[Ooeyama Complete Massacre]\n\nSuika\'s attacks have a 25%% chance to deal damage to units around the target and slow them.\n\n[Star Level Correlation]Damage: POWER*Star Level*1.0" + "DOTA_Tooltip_ability_thtd_suika_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suika_01_move_slow" "Slow:" + "DOTA_Tooltip_modifier_suika_01_slow_debuff" "Oni Sign[Ooeyama Complete Massacre]" + "DOTA_Tooltip_modifier_suika_01_slow_debuff_Description" "Due to Suika\'s doing this unit\'s movement speed has been reduced." + "DOTA_Tooltip_ability_thtd_suika_02" "Oni God[Missing Purple Power]" + "DOTA_Tooltip_ability_thtd_suika_02_Description" "Using her ability to manipulate density and sparsity, Suika turns into GIANT SUIKA.\n\n GIANT SUIKA deals more damage and has increased range, however, she has a lower chance to proc [Ooeyama Complete Massacre]." + "DOTA_Tooltip_ability_thtd_suika_03" "Onibi[Super-High-Density Phosphor Calamity Technique]" + "DOTA_Tooltip_ability_thtd_suika_03_Description" "Suika throws a fireball at the targeted location, damaging all enemies within the impact area." + "DOTA_Tooltip_ability_thtd_suika_03_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_suika_04" "Drunken Dream[Segaki Binding Technique]" + "DOTA_Tooltip_ability_thtd_suika_04_Description" "Suika uses her chain to pull a targeted unit, preventing her from moving away from Suika any more than 800 units while receiving damage over time. If the target tries to break free, she will receive double damage.\n\n[Star Level Correlation]Damage: POWER * Star Level * 1.0" + "DOTA_Tooltip_ability_thtd_suika_04_power_damage" "技能伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_suika_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_suika_04_range" "距离:" + "DOTA_Tooltip_ability_thtd_yuugi_01" "Shackle Sign[Shackles A Criminal Can\'t Take Off]" + "DOTA_Tooltip_ability_thtd_yuugi_01_Description" "Yuugi stamps on the ground, dealing damage to all enemies within 1000 units around her. The more enemies around her, the higher the chance to deal increased damage.\n\n[Star Level Correlation]Damage: POWER * Star Level * (5-15)" + "DOTA_Tooltip_ability_thtd_yuugi_01_power_damage1" "最小技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuugi_01_power_damage2" "最大技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuugi_02" "Feat of Strength[Ooeyama Storm]" + "DOTA_Tooltip_ability_thtd_yuugi_02_Description" "Yuugi\'s attack have a 30%% chance to slam the ground around the target, dealing damage and knocking back all enemies within that area.\n\n[Star Level Correlation]Damage: POWER * Star Level * 2" + "DOTA_Tooltip_ability_thtd_yuugi_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_yuugi_02_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_yuugi_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_yuugi_03" "Secret Technique of the Four Heavenly Kings[Three Step Kill]" + "DOTA_Tooltip_ability_thtd_yuugi_03_Description" "Yuugi stops any enemy movement in the targeted area for 2 seconds. If an enemy leaves the targeted area, she will receive a great amount of damage after taking three steps. \n\n[Star Level Correlation]Damage: POWER * Star Level * 20" + "DOTA_Tooltip_ability_thtd_yuugi_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_yuugi_03_range" "区域范围:" + "DOTA_Tooltip_modifier_yuugi_03_pause_unit" "Secret Technique of the Four Heavenly Kings[Three Step Kill]" + "DOTA_Tooltip_modifier_yuugi_03_pause_unit_Description" "Omae wa mou shindeiru!" + "DOTA_Tooltip_modifier_yuugi_02_pause_unit" "Feat of Strength[Ooeyama Storm]" + "DOTA_Tooltip_modifier_yuugi_02_pause_unit_Description" "This unit has been knocked back by Yuugi." + "DOTA_Tooltip_ability_item_0054" "【SR】Hoshiguma Yuugi" + "DOTA_Tooltip_ability_item_0055" "【SR】Ibuki Suika" + "suika" "Ibuki Suika" + "yuugi" "Hoshiguma Yuugi" + "DOTA_Tooltip_ability_item_0073" "【SSR】Junko" + "DOTA_Tooltip_ability_item_0073_Lore" "This vengeance will be repeated forever." + "DOTA_Tooltip_ability_item_0073_Description" "Hou Yi\'s imperial concubine has strong hatred for Chang\'e. The husband had killed his son, which was the first resentment, but the resentment had been purified. Pure fox purifies her hatred so that her identity is no longer important. Now anger and hatred are the only motive force that drives her to act, that is, where her heart exists." + "junko" "Junko" + "DOTA_Tooltip_ability_thtd_junko_01" "Shackle Sign「purification」" + "DOTA_Tooltip_ability_thtd_junko_01_Description" "Pure fox releases its pure power, so that the target has the same ability to purify itself. \n[Purified Damage] Skills directly cause the final damage according to the skill damage. They don\'t eat any other additions or subtractions, including the explosion and special effects of items, and ignore the enemy\'s damage reduction. Equipments only have basic attributes and energy to be useful." + "DOTA_Tooltip_ability_thtd_junko_01_damage_up" "%技能伤害提升:" + "DOTA_Tooltip_ability_thtd_junko_01_hecatia_up" "%对赫卡提亚伤害提升:" + "DOTA_Tooltip_modifier_thtd_junko_01_combo_buff" "【组合提升 - 赫卡提亚】" + "DOTA_Tooltip_modifier_thtd_junko_01_combo_buff_Description" "可以额外激活一个目标。" + "DOTA_Tooltip_ability_thtd_junko_02" "Shackle Sign「pure light」" + "DOTA_Tooltip_ability_thtd_junko_02_Description" "Pure fox transforms its resentment into an arrow of light, injure the target and add mental damage.\nDamage: energy point * star * 3. Mental injury: the highest superposition is to the 10 level." + "DOTA_Tooltip_ability_thtd_junko_02_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_junko_02_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_junko_02_Note2" "潜能Lv100:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_junko_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_junko_02_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_junko_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_junko_03" "Shackle Sign「Kill the meaning」" + "DOTA_Tooltip_ability_thtd_junko_03_Description" "Pure fox transforms the killing around it into pure power, causing damage to the target, and adds additional effects according to the number of wound layers of the target.\nStar related injury: energy point * star * 5. Additional effects: The number of wound layers increasing the damage of this skill by 10% per layer; the number of wound layers is equal to 10 layers, stunning target for 2 second; and the effect of the wound will be removed." + "DOTA_Tooltip_ability_thtd_junko_03_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_junko_03_power_suck" "吸收能量点:" + "DOTA_Tooltip_ability_thtd_junko_03_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_junko_03_buff" "「纯粹的疯狂」" + "DOTA_Tooltip_modifier_junko_03_buff_Description" "所有伤害提升,并吸收所有友方单位的基础能量。" + "DOTA_Tooltip_ability_thtd_junko_04" "「战栗的寒冷之星」" + "DOTA_Tooltip_ability_thtd_junko_04_Description" "纯狐造成一次范围伤害,受影响的目标会受到持续伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_junko_04_Note0" "潜能Lv10:初始伤害+10,持续伤害+2。" + "DOTA_Tooltip_ability_thtd_junko_04_Note1" "潜能Lv50:初始伤害+20,持续伤害+4。" + "DOTA_Tooltip_ability_thtd_junko_04_Note2" "潜能Lv100:初始伤害+30,持续伤害+6。" + "DOTA_Tooltip_ability_thtd_junko_04_Note3" "潜能Lv666:\n获得特殊效果:「用于杀人的纯粹弹幕」,所有技能伤害提高至4倍。" + "DOTA_Tooltip_ability_thtd_junko_04_Note4" "潜能Lv999:\n获得特殊效果:「原始的神灵界」,纯狐的能量和攻击提升400%%。" + "DOTA_Tooltip_ability_thtd_junko_04_power_damage1" "初始伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_junko_04_power_damage2" "持续伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_junko_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_junko_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_junko_04_range" "范围:" + "DOTA_Tooltip_modifier_junko_04_debuff" "「战栗的寒冷之星」" + "DOTA_Tooltip_modifier_junko_04_debuff_Description" "该单位正受到持续伤害。" + "DOTA_Tooltip_ability_item_0074" "【SSR】Hecatia Lapislazuli" + "DOTA_Tooltip_ability_item_0074_Lore" "There is resentment against Chang\'e because the husband of Chang\'e is the one who shot down the sun (Apollo)." + "DOTA_Tooltip_ability_item_0074_Description" "The mysterious spirit of the moon, the earth and the outer boundary. She has the body in three worlds at the same time, and can freely come and go in different worlds. By the way, dreams are equivalent to different worlds." + "hecatia" "Hecatia Lapislazuli" + "DOTA_Tooltip_ability_thtd_hecatia_01" "earth" + "DOTA_Tooltip_ability_thtd_hecatia_01_Description" "Hcartiya releases the sphere representing the earth floating around, and the body transforms every second.\nThe ball hits the enemy to launch the following effects according to its own form. If the form is Earth, the first effect will be launched, otherwise the second effect will be launched.\n1. foul play: damage to target and wound for 1 second, damage: energy * star *2. Each enemy can only be hit in 2 seconds, range: 350.\n2. Rainfall in Hell: Each rainfall will damage the target, range: 500, damage: energy * STAR * 3." + "DOTA_Tooltip_ability_thtd_hecatia_01_power_damage1" "邪秽缠身伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_01_range1" "邪秽缠身作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_01_root_time" "邪秽缠身缠绕时间:" + "DOTA_Tooltip_ability_thtd_hecatia_01_lock_time" "缠绕后免疫时间:" + "DOTA_Tooltip_ability_thtd_hecatia_01_power_damage2" "地狱的降雨伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_01_range2" "地狱的降雨作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_01_power_up" "%能量提高:" + "DOTA_Tooltip_ability_thtd_hecatia_02" "Moon" + "DOTA_Tooltip_ability_thtd_hecatia_02_Description" "Hcartiya releases the sphere that represents the moon floating around, and the body transforms every second.\n\nWhen the ball collides with the enemy, it launches the following effects according to its own form. If the form is the moon, it launches the first effect, otherwise the second effect.\n1. Apollo mirror: from the body to the moon, reflecting to the surrounding units, damage: energy * STAR * 4.5, range: 350.\n2. month frenzy impact: each hit the enemy will cause damage and repulse, damage: energy * star *4.5. Each enemy can only be hit in 2 seconds, range: 250" + "DOTA_Tooltip_ability_thtd_hecatia_02_power_damage1" "月狂冲击伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_02_range1" "月狂冲击作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_02_back_distance" "月狂冲击击退距离:" + "DOTA_Tooltip_ability_thtd_hecatia_02_lock_time" "击退后免疫时间:" + "DOTA_Tooltip_ability_thtd_hecatia_02_power_damage2" "阿波罗反射镜伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_02_range2" "阿波罗反射镜作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_02_chance" "%暴击概率提高:" + "DOTA_Tooltip_ability_thtd_hecatia_02_crit" "%暴击伤害提高:" + "DOTA_Tooltip_ability_thtd_hecatia_03" "Alien border" + "DOTA_Tooltip_ability_thtd_hecatia_03_Description" "Hcartiya releases the sphere that represents the other side floating around, and the body transforms every second.\n\nThe ball hits the enemy to launch the following effects according to its own form. If the form is different, the first effect will be launched, otherwise the second effect will be launched.\n1. Dusk and dusk: leaving fog, causing sustained damage and attracting targets, damage: energy * star, activation range: 350, attraction range: 500, duration: 3 seconds.\n2. the non ideal barrage of Hell: Launch 12 barrage, damage: energy * star *3, range: 350." + "DOTA_Tooltip_ability_thtd_hecatia_03_power_damage1" "黄昏薄暮伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_03_active_range" "黄昏薄暮激活范围:" + "DOTA_Tooltip_ability_thtd_hecatia_03_full_range" "黄昏薄暮作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_03_suck_duration" "吸引持续时间:" + "DOTA_Tooltip_ability_thtd_hecatia_03_power_damage2" "地狱的非理想弹幕伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_03_range2" "地狱的非理想弹幕作用范围:" + "DOTA_Tooltip_ability_thtd_hecatia_03_damage_up" "%伤害提高:" + "DOTA_Tooltip_modifier_thtd_hecatia_03_combo_buff" "【组合提升 - 纯狐】" + "DOTA_Tooltip_modifier_thtd_hecatia_03_combo_buff_Description" "组合提升已生效。" + "DOTA_Tooltip_ability_thtd_hecatia_04" "Three-in-one" + "DOTA_Tooltip_ability_thtd_hecatia_04_Description" "Hcartiya manipulated three spheres to launch the trinity of Rhapsody.\n\nOntology will constantly change shape. When the shape sphere hits the target release skill, it will produce a triangle. When it forms three triangles, it will link three triangles and use laser to scan the surrounding units.\nDamage: energy * star *5, lasts 5 seconds." + "DOTA_Tooltip_ability_thtd_hecatia_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note2" "潜能Lv100:技能伤害+15,各形态至少6秒覆盖一次。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note3" "潜能Lv666:\n获得特殊效果:「纯粹与不纯的弹幕」,各球提高暴击/能量/伤害效果提升至3倍。" + "DOTA_Tooltip_ability_thtd_hecatia_04_Note4" "潜能Lv999:\n获得特殊效果:「Trinitarian Rhapsody」,发动三位一体扫射时基础能量+900。" + "DOTA_Tooltip_ability_thtd_hecatia_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hecatia_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_hecatia_04_power_bonus" "能量增加:" + "DOTA_Tooltip_modifier_hecatia_01_earth_lock" "邪秽缠身" + "DOTA_Tooltip_modifier_hecatia_01_earth_lock_Description" "该单位已经触发过邪秽缠身效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_hecatia_01_moon_lock" "月狂冲击" + "DOTA_Tooltip_modifier_hecatia_01_moon_lock_Description" "该单位已经触发过月狂冲击效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_hourainingyou_01_stun_lock" "重击" + "DOTA_Tooltip_modifier_hourainingyou_01_stun_lock_Description" "该单位已经触发过重击效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_keine_01_lock" "野符「GHQ的危机」" + "DOTA_Tooltip_modifier_keine_01_lock_Description" "该单位已经触发过「GHQ的危机」效果,暂时无法再次触发该效果" + "DOTA_Tooltip_modifier_futo_01_lock" "投皿「物部氏的八十平瓮」" + "DOTA_Tooltip_modifier_futo_01_lock_Description" "该单位已经触发过「物部氏的八十平瓮」晕眩效果,暂时无法再次触发该效果" + "shinki" "Shinki" + "DOTA_Tooltip_ability_item_0080" "[SSR]Shinki" + "DOTA_Tooltip_ability_item_0080_Description" "Shinki is the creator of Makai.Shinki has light-blue eyes with white hair and wears red robes. \nShe\'s able to summon six white wings, which can turn purple with red markings. " + "DOTA_Tooltip_ability_thtd_shinki_01" "「Makai gate」" + "DOTA_Tooltip_ability_thtd_shinki_01_Description" "At the end of each round,Randomly Summon X shikigami card(The shikigami card maybe not be in your card pool)And the consumption of this type of shikigami card will not return to the card pool(X=star level)\n1X:100%%Summon 1 N card\n2X:100%% 2 N cards\n3X:80%%Summon N card,20%%Summon R card,A total of 3\n4X:80%%Summon R cards,20%%Summon SR cards,5%%Summon SSR cards,A total of 1. 80%%Summon N card,20%%Summon R cards,A total of 3.\n5X:80%Summon R cards,20%%Summon SR cards,5%%Summon SSR,A total of 5." + "DOTA_Tooltip_ability_thtd_shinki_01_Note0" "魔界式神包括:神绮、爱丽丝、小恶魔、魅魔。" + "DOTA_Tooltip_ability_thtd_shinki_01_kill_bonus" "击杀获得能量:" + "DOTA_Tooltip_ability_thtd_shinki_01_max_count" "最大叠加次数:" + "DOTA_Tooltip_modifier_shinki_01_buff_kill" "「魔神降临」" + "DOTA_Tooltip_modifier_shinki_01_buff_kill_Description" "击杀目标时获得能量提升。" + "DOTA_Tooltip_ability_thtd_shinki_02" "「Enze earth」" + "DOTA_Tooltip_ability_thtd_shinki_02_Description" "When per unit upgrade around 2000 yards ,Then the unit gets(Shinki star level*1)extra power points." + "DOTA_Tooltip_ability_thtd_shinki_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_shinki_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shinki_02_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_shinki_03" "「魔神降临」" + "DOTA_Tooltip_ability_thtd_shinki_03_Description" "唤起本源的力量,获得额外的能量。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_shinki_03_power_bonus" "能量增加:" + "DOTA_Tooltip_ability_thtd_shinki_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shinki_03_Note0" "潜能Lv10:能量增加+200,持续+1秒。" + "DOTA_Tooltip_ability_thtd_shinki_03_Note1" "潜能Lv50:能量增加+400,持续+2秒。" + "DOTA_Tooltip_ability_thtd_shinki_03_Note2" "潜能Lv100:能量增加+600,持续+3秒。" + "DOTA_Tooltip_modifier_shinki_03_buff_self" "「魔神降临」" + "DOTA_Tooltip_modifier_shinki_03_buff_self_Description" "唤起本源的力量,获得额外的能量提升。" + "DOTA_Tooltip_ability_thtd_shinki_04" "「Return of the devil」" + "DOTA_Tooltip_ability_thtd_shinki_04_Description" "Goddess summons the Devil King as the Lord of the Devil World, so that the great Devil King lost in time and space can return. The great Devil King\'s attack power is a star-rated energy of the Devil King.\nThe great devil has three skills:\nDevouring: Devouring an enemy every 30 seconds and growing up. Each 5%% increase in attack requires digestion before it can devour the next one. When the enemy is digested, it suffers pure damage with the same attack power per second. When the size grows to the extreme, it does not grow.\nStrike: The Devil\'s attack has a 50%% chance of stunning an enemy 300 yards around the target and causing 5 times the pure damage of a normal attack.\nWrath: The Great Devil gets angry and slams the ground, causing a wide range of shocks, hitting the affected enemy hard and slowing down by 60%%, causing pure damage in double attacks.\nAt the same time, there is only one big devil." + "DOTA_Tooltip_ability_thtd_shinki_04_Note0" "潜能Lv10:大魔王获得1层狂热效果。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note1" "潜能Lv50:大魔王获得2层狂热效果。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note2" "潜能Lv100:大魔王获得3层狂热效果。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note3" "潜能Lv666:\n获得特殊效果:混乱冲击,魔王震荡波持续不断,伤害提高4倍。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note4" "潜能Lv999:\n获得特殊效果:究极魔王,成长上限提高至极限。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note5" "\n狂热:攻击力+200,攻速+40。" + "DOTA_Tooltip_ability_thtd_shinki_04_Note6" "\n激活潜能后需要插拔重新召唤一次才能获得狂热效果。" + "shinki_dragon" "SHINKI_DRAGON" + "shinki_dragon_casted" "只能存在一个大魔王" + "DOTA_Tooltip_ability_shinki_dragon_01" "吞噬" + "DOTA_Tooltip_ability_shinki_dragon_01_Description" "吞噬一个敌人供自己成长,每次成长提升%damage_up%%%基础攻击力。\n需要消化完毕后才能吞噬下一个敌人,当体型成长到极致后不再成长。\n在跳关时会按所跳波数每波2次吞噬补全至下一次吞噬中(必须在施放跳关后至该波结束前吞噬一次)。" + "DOTA_Tooltip_ability_shinki_dragon_01_Note0" "" + "DOTA_Tooltip_ability_shinki_dragon_01_damage_up" "%成长提升攻击力:" + "DOTA_Tooltip_ability_shinki_dragon_01_max_count" "最大成长次数:" + "DOTA_Tooltip_modifier_shinki_dragon_01_buff" "成长" + "DOTA_Tooltip_modifier_shinki_dragon_01_buff_Description" "大魔王吞噬一个敌人供自己成长,每次成长提升基础攻击力" + "DOTA_Tooltip_ability_shinki_dragon_02" "重击" + "DOTA_Tooltip_ability_shinki_dragon_02_Description" "大魔王的攻击有概率对目标造成%damage_crit%倍攻击伤害,并击晕和伤害目标周围的敌人。" + "DOTA_Tooltip_ability_shinki_dragon_02_Note0" "击晕有1秒内置CD。" + "DOTA_Tooltip_ability_shinki_dragon_02_chance" "%概率:" + "DOTA_Tooltip_ability_shinki_dragon_02_damage_crit" "伤害倍数:" + "DOTA_Tooltip_ability_shinki_dragon_02_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_shinki_dragon_02_range" "击晕范围:" + "DOTA_Tooltip_ability_shinki_dragon_02_aoe_crit" "范围伤害倍数:" + "DOTA_Tooltip_ability_shinki_dragon_03" "震荡波" + "DOTA_Tooltip_ability_shinki_dragon_03_Description" "大魔王发怒,猛击地面造成一个大范围的震荡波,造成%damage_times%倍攻击伤害并减速%movement_slow%%%。" + "DOTA_Tooltip_ability_shinki_dragon_03_shock_radius" "范围:" + "DOTA_Tooltip_ability_shinki_dragon_03_movement_slow" "%移速降低:" + "DOTA_Tooltip_ability_shinki_dragon_03_debuff_duration" "持续时间:" + "DOTA_Tooltip_ability_shinki_dragon_03_damage_times" "伤害倍数:" + "DOTA_Tooltip_modifier_earthshock_debuff_datadriven" "shockwave" + "DOTA_Tooltip_modifier_earthshock_debuff_datadriven_Description" "Affected by the shock wave of the devil, the speed is reduced." + "DOTA_Tooltip_ability_item_0059" "【SR】Alice Margatroid" + "DOTA_Tooltip_ability_item_0059_Lore" "As a collector, he often meets magic, and the relationship between the two is incompatible with fire and water." + "DOTA_Tooltip_ability_item_0059_Description" "Alice Margaret Loyd is a magical manipulator who can manipulate dolls with magic and make them vivid and artistic. Alice is also a collector. He has a hobby of collecting magic books and other things." + "alice" "Alice Margatroid" + "alice_falanxi_ningyou" "ALICE_FALANXI_NINGYOU" + "DOTA_Tooltip_ability_thtd_alice_01" "Magic operation 「puppet ambush」" + "DOTA_Tooltip_ability_thtd_alice_01_Description" "Alice placed a doll in a fixed place. The doll remained in a latent state. When the target approached, the doll exploded, causing range damage and increasing subsequent damage to the target for 2 minutes.\n\nStar related injury: energy * star *5\nDamage increased: 3%% 6%% 9%% 12%% 18%%\nDuration: 3 seconds.\nDetonation range: 150, damage range: 300" + "DOTA_Tooltip_ability_thtd_alice_01_power_damage" "最小技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_alice_01_range1" "引爆范围:" + "DOTA_Tooltip_ability_thtd_alice_01_range2" "伤害范围:" + "DOTA_Tooltip_ability_thtd_alice_01_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_alice_01_duration_time" "人偶持续时间:" + "DOTA_Tooltip_modifier_alice_power666" "狡猾的献祭" + "DOTA_Tooltip_modifier_alice_power666_Description" "人偶爆炸后形成了献祭效果,所有伤害提高。" + "DOTA_Tooltip_ability_thtd_alice_02" "Curse the 「Falanxi Doll」" + "DOTA_Tooltip_ability_thtd_alice_02_Description" "Alice calls on elaborate dolls to fight instead of herself, and observes the command in the rear." + "DOTA_Tooltip_ability_thtd_alice_02_power_up" "%基础能量提升:" + "DOTA_Tooltip_ability_thtd_alice_02_Note0" "潜能Lv10:法兰西人偶攻击+200,攻速+40。" + "DOTA_Tooltip_ability_thtd_alice_02_Note1" "潜能Lv50:法兰西人偶攻击+400,攻速+80。" + "DOTA_Tooltip_ability_thtd_alice_02_Note2" "潜能Lv100:法兰西人偶攻击+600,攻速+120。" + "DOTA_Tooltip_ability_thtd_alice_02_Note3" "激活潜能后需要重新召唤一次才生效。" + "DOTA_Tooltip_ability_thtd_alice_03" "War symbol 「small military force」" + "DOTA_Tooltip_ability_thtd_alice_03_Description" "Alice placed the doll in front of her to protect herself closely, and sent a laser across the front, causing a lot of damage.\n[star correlation] damage: energy * star *7, times: 10" + "DOTA_Tooltip_ability_thtd_alice_03_Note0" "潜能Lv10:技能伤害提升100%%。" + "DOTA_Tooltip_ability_thtd_alice_03_Note1" "潜能Lv50:技能伤害提升200%%。" + "DOTA_Tooltip_ability_thtd_alice_03_Note2" "潜能Lv100:技能伤害提升400%%。" + "DOTA_Tooltip_ability_thtd_alice_03_Note3" "潜能Lv666:\n获得特殊效果:狡猾的献祭,人偶爆炸后形成献祭效果,所有伤害提高至3倍。" + "DOTA_Tooltip_ability_thtd_alice_03_Note4" "潜能Lv999:\n获得特殊效果:惨虐之光,激光伤害提升至5倍。" + "DOTA_Tooltip_ability_thtd_alice_03_power_damage" "技能伤害(能量点*星级/每次):" + "DOTA_Tooltip_ability_thtd_alice_03_max_count" "发射次数:" + "DOTA_Tooltip_ability_thtd_alice_03_damage_up" "人偶伤害提升倍数:" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01" "重击" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01_Description" "攻击对目标周围所有单位造成伤害。" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01_power_damage" "技能伤害(爱丽丝的能量点*星级):" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02" "致命一击" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02_Description" "攻击有概率发起致命一击,造成%health%%%的最大生命值伤害。" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02_crit_chance" "%概率:" + "DOTA_Tooltip_ability_thtd_alice_02_ningyou_02_health" "%生命值伤害:" + "DOTA_Tooltip_ability_thtd_alice_04" "AI定点施放" + "DOTA_Tooltip_ability_thtd_alice_04_Description" "选择一个地点来设定AI定点施放:魔操「人偶伏兵」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "kokoro" "秦心" + "DOTA_Tooltip_ability_item_0053" "【SR】秦心" + "DOTA_Tooltip_ability_item_0053_Lore" "猿乐之祖秦河胜使用的面具历经漫长的时间后化作的妖怪" + "DOTA_Tooltip_ability_item_0053_Description" "表情丰富的扑克脸,每个面具都代表固定的感情,戴上面具后感情就会变化,感情也会影响到在附近的人。" + "DOTA_Tooltip_ability_thtd_kokoro_01" "凭依「喜怒哀乐附体」" + "DOTA_Tooltip_ability_thtd_kokoro_01_Description" "秦心操纵感情的力量,将喜怒哀乐化成面具攻击目标,并降低目标基础护甲和持续造成伤害。\n【星级相关】伤害: 能量*星级*5 每秒\n【星级相关】护甲降低:10 20 30 40 60 (与水银之毒不叠加)" + "DOTA_Tooltip_ability_thtd_kokoro_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kokoro_02" "怒面「吼怒的妖狐面」" + "DOTA_Tooltip_ability_thtd_kokoro_02_Description" "戴上狐面,将面具化成灵气变成狐狸扑向目标并咬住目标,造成伤害并晕眩目标1.5秒。\n【星级相关】伤害: 能量*星级*5。" + "DOTA_Tooltip_ability_thtd_kokoro_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kokoro_02_stun_time" "晕眩时间:" + "DOTA_Tooltip_ability_thtd_kokoro_03" "喜符「狂喜的火男面」" + "DOTA_Tooltip_ability_thtd_kokoro_03_Description" "戴上火男面具,从面具和心洋溢出来的喜悦的感情撒向周围,提升物理伤害。\n【星级相关】物理伤害提升: 30%%" + "DOTA_Tooltip_ability_thtd_kokoro_03_crit_mult" "伤害倍数:" + "DOTA_Tooltip_ability_thtd_kokoro_04" "特技「表情丰富的扑克脸」" + "DOTA_Tooltip_ability_thtd_kokoro_04_Description" "她能将感情车转轮换,但是自身却始终是面无表情。使用技能后心会释放「喜」「忧」「怒」三种感情,在这些感情有效的期间增强对应的技能。\n「喜」: 狂喜的火男面效果提高50%%。\n「忧」: 喜怒哀乐伤害提高50%%。\n「怒」: 吼怒的妖狐面冷却加快50%%。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note0" "潜能Lv10:每个面具提升1%%伤害。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note1" "潜能Lv50:每个面具提升5%%伤害。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note2" "潜能Lv100:每个面具提升10%%伤害。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note3" "潜能Lv666:\n获得特殊效果:「喜怒哀乐附体」,每种感情对应的增强效果提高至4倍。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note4" "潜能Lv999:\n获得特殊效果:「暗黑能乐」,获得999点能量和攻击力,还会基于周围目标损失生命值来提升自己的能量点和攻击力(每损失1%%生命值获得1点)。" + "DOTA_Tooltip_ability_thtd_kokoro_04_Note5" "\n秦心总共有66个面具。" + "DOTA_Tooltip_modifier_kokoro_04_buff_1" "「忧」" + "DOTA_Tooltip_modifier_kokoro_04_buff_1_Description" "喜怒哀乐附体附加了减速" + "DOTA_Tooltip_modifier_kokoro_04_buff_2" "「怒」" + "DOTA_Tooltip_modifier_kokoro_04_buff_2_Description" "吼怒的妖狐面效果提高了" + "DOTA_Tooltip_modifier_kokoro_04_buff_3" "「喜」" + "DOTA_Tooltip_modifier_kokoro_04_buff_3_Description" "狂喜的火男面效果提高了" + "hina" "键山雏" + "DOTA_Tooltip_ability_item_0091" "【R】键山雏" + "DOTA_Tooltip_ability_item_0091_Lore" "收集厄运,是因为厄运可以成为她的力量。厄运的负面能量本身是使她行动的原动力。疫病神虽然名字里有个神字,但却不追求信仰。她并非普通的神明,而是妖怪的一种。" + "DOTA_Tooltip_ability_item_0091_Description" "收集厄运的神明,但她本人却完全没有恶意,倒不如说她是个待人友好的神明,收集厄运的本意也只是为了不让厄运转移到人类身上。" + "DOTA_Tooltip_ability_thtd_hina_01" "创符「痛苦之流」" + "DOTA_Tooltip_ability_thtd_hina_01_Description" "降低周围单位的移速。\n【星级相关】移速减少:20/30/40/50/65%%" + "DOTA_Tooltip_ability_thtd_hina_01_move_slow" "移速降低:" + "DOTA_Tooltip_modifier_hina_01_slow_debuff" "创符「痛苦之流」" + "DOTA_Tooltip_modifier_hina_01_slow_debuff_Description" "该单位受到键山雏「痛苦之流」影响" + "DOTA_Tooltip_ability_thtd_hina_02" "厄符「厄运」" + "DOTA_Tooltip_ability_thtd_hina_02_Description" "对「痛苦之流」影响的单位施加厄运,每4秒造成伤害,目标在受到纯粹伤害时会附加额外伤害:当超过伤害来源的星级*能量*4时,附加星级*能量*4的伤害,低于时40%%概率伤害提高40%%。\n【星级相关】伤害: 能量*星级*4" + "DOTA_Tooltip_ability_thtd_hina_02_Note0" "厄运会叠加,最大叠加999次。\n" + "DOTA_Tooltip_ability_thtd_hina_02_Note1" "潜能Lv10:概率和伤害+7%%。" + "DOTA_Tooltip_ability_thtd_hina_02_Note2" "潜能Lv50:概率和伤害+15%%。" + "DOTA_Tooltip_ability_thtd_hina_02_Note3" "潜能Lv100:概率和伤害+30%%。" + "DOTA_Tooltip_ability_thtd_hina_02_Note4" "潜能Lv666:\n获得特殊效果:创符「痛苦之流」,技能伤害提升4倍。" + "DOTA_Tooltip_ability_thtd_hina_02_Note5" "潜能Lv999:\n获得特殊效果:悲运「大钟婆之火」,每个单位还会受到附近单位40%%厄运影响。" + "DOTA_Tooltip_ability_thtd_hina_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_hina_02_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_hina_02_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_hina_02_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_hina_02_chance" "%伤害提升概率:" + "DOTA_Tooltip_ability_thtd_hina_02_bonus_crit" "%叠加厄运增加伤害:" + "DOTA_Tooltip_ability_thtd_hina_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_hina_03_Description" "选择一个地点来设定AI定点施放:恶灵「厄运之轮」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_modifier_touhoutd_luck" "幸运日" + "DOTA_Tooltip_modifier_touhoutd_luck_Description" "今天捡到四叶草,全身充满正能量!每层提高1%%的伤害输出!" + "DOTA_Tooltip_modifier_touhoutd_poison" "「毒」" + "DOTA_Tooltip_modifier_touhoutd_poison_Description" "该单位已经中毒!" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_pure" "纯粹输出提高" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_pure_Description" "该单位造成的纯粹伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_physical" "物理输出提高" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_physical_Description" "该单位造成的物理伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_magical" "魔法输出提高" + "DOTA_Tooltip_modifier_touhoutd_damage_outgoing_magical_Description" "该单位造成的魔法伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_pure" "受到纯粹伤害提高" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_pure_Description" "受到的纯粹伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_physical" "受到物理伤害提高" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_physical_Description" "受到的物理伤害提高,每层1%%。" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_magical" "受到魔法伤害提高" + "DOTA_Tooltip_modifier_touhoutd_damage_incoming_magical_Description" "受到的魔法伤害提高,每层1%%。" + "random_boss_has_buff" "注意,异变BOSS获得特殊能力:" + "DOTA_Tooltip_modifier_bosses_random_resist_aura" "「无常」" + "DOTA_Tooltip_modifier_bosses_random_resist_aura_Description" "使周围500码范围单位获得无常效果,减少25%%硬控时间。" + "DOTA_Tooltip_modifier_bosses_random_resist_effect" "「无常」" + "DOTA_Tooltip_modifier_bosses_random_resist_effect_Description" "获得「无常」效果,减少25%%硬控时间(对大部分技能有效)。" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_aura" "「震荡」" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_aura_Description" "对周围1200码范围施加「震荡」效果,降低50%%攻速。" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_effect" "「震荡」" + "DOTA_Tooltip_modifier_bosses_random_attack_speed_effect_Description" "受到「震荡」效果影响,攻速降低了(每层降低1攻速)。" + "DOTA_Tooltip_modifier_bosses_random_move_aura" "「疾速」" + "DOTA_Tooltip_modifier_bosses_random_move_aura_Description" "使周围500码范围单位获得疾速效果,提高25%%移动速度。" + "DOTA_Tooltip_modifier_bosses_random_move_effect" "「疾速」" + "DOTA_Tooltip_modifier_bosses_random_move_effect_Description" "获得「疾速」效果,提高25%%移动速度。" + "DOTA_Tooltip_modifier_bosses_random_health_aura" "「坚韧」" + "DOTA_Tooltip_modifier_bosses_random_health_aura_Description" "使周围500码范围单位获得坚韧效果,增加25%%生命值。" + "DOTA_Tooltip_modifier_bosses_random_health_effect" "「坚韧」" + "DOTA_Tooltip_modifier_bosses_random_health_effect_Description" "获得「坚韧」效果,增加25%%生命值。" + "DOTA_Tooltip_modifier_bosses_random_dead_heal" "「血池」" + "DOTA_Tooltip_modifier_bosses_random_dead_heal_Description" "死亡时形成一个300码范围的血池,治疗站在其中的单位,每秒回复5%%的最大生命值,持续5秒。" + "DOTA_Tooltip_modifier_bosses_random_aura_dark" "「黑暗光环」" + "DOTA_Tooltip_modifier_bosses_random_aura_dark_Description" "周围1200码范围单位的能量、攻击和暴击降低25%%。" + "DOTA_Tooltip_modifier_bosses_random_aura_dark_effect" "「黑暗」" + "DOTA_Tooltip_modifier_bosses_random_aura_dark_effect_Description" "受到黑暗光环影响,能量和攻击力性降低了。" + "DOTA_Tooltip_modifier_touhoutd_unlimited_resist" "少女之抵抗" + "DOTA_Tooltip_modifier_touhoutd_unlimited_resist_Description" "受到伤害后会吸收伤害,每层吸收1%%的伤害。" + "kagerou" "今泉影狼" + "DOTA_Tooltip_ability_item_0045" "【SR】今泉影狼" + "DOTA_Tooltip_ability_item_0045_Lore" "因为比较在意满月之夜的时候全身体毛会变多,所以平常都遮住皮肤,一个人静静的生活。" + "DOTA_Tooltip_ability_item_0045_Description" "她是在外面的世界已经绝种的日本狼的狼女。有着狼的特征,会在满月变成狼,毛发会变多,但是依旧能保持理智。\n因为她自己比较在意体毛变多这件事,平常都是遮住皮肤,独自生活在迷途竹林里。\n因为被万宝槌的魔力所影响,正当她变得凶暴之时就被灵梦等人狠狠的教训了一顿。如今又再度变得温顺了。\n【★】特质「奔狼之血」\n【★】爪符「刚猛利爪」\n【★】咆哮「陌生的咆哮」\n【★★★】变身「星形齿」" + "DOTA_Tooltip_ability_thtd_kagerou_01" "link_DOTA_Tooltip_ability_sven_great_cleave" + "DOTA_Tooltip_ability_thtd_kagerou_01_Description" "影狼以利爪攻击,造成分裂攻击伤害。" + "DOTA_Tooltip_ability_thtd_kagerou_01_Lore" "影狼有着锋利的利爪,横扫前面敌人。" + "DOTA_Tooltip_ability_thtd_kagerou_01_Note0" "分裂伤害会计算护甲。" + "DOTA_Tooltip_ability_thtd_kagerou_01_Note1" "变身后的致命一击对分裂伤害有效。" + "DOTA_Tooltip_ability_thtd_kagerou_01_range" "分裂范围:" + "DOTA_Tooltip_ability_thtd_kagerou_01_percent" "%分裂伤害:" + "DOTA_Tooltip_ability_thtd_kagerou_02" "link_DOTA_Tooltip_ability_lycan_howl" + "DOTA_Tooltip_ability_thtd_kagerou_02_Lore" "毛骨悚然的狼嚎让敌人明白影狼就在它们之中。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Description" "影狼将能量转化为攻击力,每点能量增加%bonus_attack%点攻击力,并提升攻击速度。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Note0" "潜能Lv10:每点能量增加攻击力+2。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Note1" "潜能Lv50:每点能量增加攻击力+5。" + "DOTA_Tooltip_ability_thtd_kagerou_02_Note2" "潜能Lv100:每点能量增加攻击力+10。" + "DOTA_Tooltip_ability_thtd_kagerou_02_bonus_attack" "每点能量增加攻击力:" + "DOTA_Tooltip_ability_thtd_kagerou_02_attack_speed" "攻击速度增加:" + "DOTA_Tooltip_ability_thtd_kagerou_02_duration_time" "持续时间:" + "DOTA_Tooltip_modifier_kagerou_02_buff" "咆哮「陌生的咆哮」" + "DOTA_Tooltip_modifier_kagerou_02_buff_Description" "将能量转化为攻击力,并增加攻击速度。" + "DOTA_Tooltip_ability_thtd_kagerou_03" "link_DOTA_Tooltip_ability_lycan_shapeshift" + "DOTA_Tooltip_ability_thtd_kagerou_03_Lore" "影狼接受了永恒的狼人诅咒,拥抱了她的野性。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Description" "影狼展现出她的凶狼形态,攻击力增加%attack_up%%%,并获得致命一击的能力。每次攻击有%crit_chance%%%的概率造成%crit_damage%%%的致命一击伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note0" "潜能Lv10:攻击力增加+100%%,变身持续时间+2秒,概率+10%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note1" "潜能Lv50:攻击力增加+200%%,变身持续时间+4秒,概率+20%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note2" "潜能Lv100:攻击力增加+400%%,变身持续时间+8秒,概率+30%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note3" "潜能Lv666:\n获得特殊效果:满月咆哮,每点能量增加攻击力+30。" + "DOTA_Tooltip_ability_thtd_kagerou_03_Note4" "潜能Lv999:\n获得特殊效果:三角齿,致命一击伤害+500%%。" + "DOTA_Tooltip_ability_thtd_kagerou_03_attack_up" "%攻击力增加:" + "DOTA_Tooltip_ability_thtd_kagerou_03_crit_chance" "%致命一击概率:" + "DOTA_Tooltip_ability_thtd_kagerou_03_crit_damage" "%致命一击伤害:" + "DOTA_Tooltip_ability_thtd_kagerou_03_duration_time" "变身持续时间:" + "wriggle" "莉格露·奈特巴格" + "DOTA_Tooltip_ability_item_0060" "【R】莉格露·奈特巴格" + "DOTA_Tooltip_ability_item_0060_Lore" "当发现莉格露身边没有虫子并且看起来很有自信的话,那时是最危险的。说不定在她的身边,已集满了恙虫。" + "DOTA_Tooltip_ability_item_0060_Description" "莉格露被称为虫之妖怪,更准确的说法是萤火虫妖怪。她伴随着大群昆虫出现,让昆虫自由地活动。\n她身边总是围绕着很多虫子。大量集结的萤火虫之所以能分秒不差,整齐地同时闪烁,正是因为当中存在着她这样的命令中枢。不要以为只是藐小的虫子而已,一旦被大量的虫子袭击绝不会好受。特别于她发怒而使出真正实力的时候,召唤出来的恙虫大军,可会令人高烧致死。\n【★】蠢符「小虫风暴」\n【★★★】萤符「地上的恒星」" + "DOTA_Tooltip_ability_thtd_wriggle_01" "link_DOTA_Tooltip_ability_death_prophet_exorcism" + "DOTA_Tooltip_ability_death_prophet_exorcism" "蠢符「小虫风暴」" + "DOTA_Tooltip_ability_death_prophet_exorcism_Lore" "莉格露身边总是围绕着很多虫子听从号令。" + "DOTA_Tooltip_ability_death_prophet_exorcism_Description" "莉格露释放虫群攻击敌人。" + "DOTA_Tooltip_ability_death_prophet_exorcism_Note0" "作用范围代表莉格露周围的虫群寻找目标的范围。" + "DOTA_Tooltip_ability_death_prophet_exorcism_Note1" "虫群的伤害为物理技能伤害。" + "DOTA_Tooltip_ability_death_prophet_exorcism_radius" "作用范围:" + "DOTA_Tooltip_ability_death_prophet_exorcism_spirits" "虫群数量:" + "DOTA_Tooltip_ability_death_prophet_exorcism_heal_percent" "伤害(莉格露的能量点*星级):" + "DOTA_Tooltip_ability_death_prophet_exorcism_average_damage" "虫群移动速度:" + "DOTA_Tooltip_modifier_death_prophet_exorcism" "蠢符「小虫风暴」" + "DOTA_Tooltip_modifier_death_prophet_exorcism_description" "\?" + "DOTA_Tooltip_ability_thtd_wriggle_02" "link_DOTA_Tooltip_ability_keeper_of_the_light_will_o_wisp" + "DOTA_Tooltip_ability_thtd_wriggle_02_Description" "在目标区域大量集结大个头的源氏萤火虫,施放强光,交替闪亮和熄灭。闪亮时将使附近所有敌人被蛊惑,强制凝视并向萤火虫群加速移动。\n支持AI定点施放。\n支持AI自动错开施放。" + "DOTA_Tooltip_ability_thtd_wriggle_02_Note0" "对击退、迷失等失控状态的单位无效" + "DOTA_Tooltip_ability_thtd_wriggle_02_Note1" "3次时控制总时间为4.0秒" + "DOTA_Tooltip_ability_thtd_wriggle_02_range" "作用范围:" + "DOTA_Tooltip_ability_thtd_wriggle_02_max_count" "闪亮次数:" + "DOTA_Tooltip_ability_thtd_wriggle_02_on_time" "闪亮持续时间:" + "DOTA_Tooltip_ability_thtd_wriggle_02_off_time" "熄灭持续时间:" + "DOTA_Tooltip_ability_thtd_wriggle_02_move_speed" "%被蛊惑时移速增加:" + "DOTA_Tooltip_ability_thtd_wriggle_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_wriggle_03_Description" "选择一个地点来设定AI定点施放:萤符「地上的恒星」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "inaba" "因幡帝" + "DOTA_Tooltip_ability_item_0062" "【R】因幡帝" + "DOTA_Tooltip_ability_item_0062_Lore" "于竹林里迷路的人,偶然会看到她的身影。据说只要见到她就必定能够找到出路,所以人们都将她看成是竹林的引路人。" + "DOTA_Tooltip_ability_item_0062_Description" "她懂人话,而且能变成人的样子。虽说是妖怪兔,但她别名是幸运的白兔,据说见到她的人能得到幸运。不过她常常在迷失竹林,而且身法敏捷,可不容易看得到。\n性格喜欢捉弄人,受惊吓会立刻逃跑,很狡猾。喜怒哀乐鲜明,和妖精性情相似。\n【★】爆头「幸运之击」\n【★】兔符「开运大纹」" + "DOTA_Tooltip_ability_thtd_inaba_01" "link_DOTA_Tooltip_ability_sniper_headshot" + "DOTA_Tooltip_ability_thtd_inaba_01_Description" "将运气带给一个友方单位,增加其暴击概率和攻击速度,并降低魔法消耗。" + "DOTA_Tooltip_ability_thtd_inaba_01_Lore" "幸运的白兔,据说见到她的人能得到幸运。" + "DOTA_Tooltip_ability_thtd_inaba_01_Note0" "魔法消耗效果对莉莉白和大妖精无效。" + "DOTA_Tooltip_ability_thtd_inaba_01_duration" "持续时间:" + "DOTA_Tooltip_ability_thtd_inaba_01_chance" "%暴击概率提升:" + "DOTA_Tooltip_ability_thtd_inaba_01_attack_speed" "攻击速度增加:" + "DOTA_Tooltip_ability_thtd_inaba_01_mana_cost" "%魔法消耗降低:" + "DOTA_Tooltip_modifier_inaba_01_buff" "兔符「开运大纹」" + "DOTA_Tooltip_modifier_inaba_01_buff_description" "提升了暴击概率和攻击速度,并且降低了技能魔法消耗。" + "DOTA_Tooltip_ability_thtd_inaba_02" "link_DOTA_Tooltip_ability_ogre_magi_bloodlust" + "DOTA_Tooltip_ability_thtd_inaba_02_Description" "每攻击%count1%次召唤一只白兔撞向目标位置后自爆,每攻击%count2%次发射竹林弹雨。\n每自爆一只白兔会使因幡帝的伤害提高%damage_up%%%,该效果在停止攻击时结束,可以线性叠加,最大%max_count%次。\n竹林弹雨造成持续伤害,持续%duration%秒。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note0" "潜能Lv10:白兔使因幡帝的伤害提高+5%%。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note1" "潜能Lv50:白兔使因幡帝的伤害提高+10%%。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note2" "潜能Lv100:白兔使因幡帝的伤害提高+20%%。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note3" "潜能Lv666:\n获得特殊效果:「幸运的因番」,提升300%%能量点。" + "DOTA_Tooltip_ability_thtd_inaba_02_Note4" "潜能Lv999:\n获得特殊效果:「大穴牟迟大人的药」,白兔自爆效果叠加次数翻倍。" + "DOTA_Tooltip_ability_thtd_inaba_02_power_damage1" "自爆伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_inaba_02_power_damage2" "弹雨伤害(能量点*星级/秒):" + "DOTA_Tooltip_ability_thtd_inaba_02_range" "伤害范围:" + "DOTA_Tooltip_ability_thtd_inaba_02_count1" "召唤白兔攻击次数需求:" + "DOTA_Tooltip_ability_thtd_inaba_02_count2" "召唤弹雨攻击次数需求:" + "DOTA_Tooltip_ability_thtd_inaba_02_damage_up" "%伤害提高:" + "DOTA_Tooltip_ability_thtd_inaba_02_max_count" "最大叠加:" + "DOTA_Tooltip_ability_thtd_inaba_02_duration" "弹雨持续时间:" + "DOTA_Tooltip_modifier_inaba_02_buff" "兔符「因幡的白兔」" + "DOTA_Tooltip_modifier_inaba_02_buff_description" "白兔自爆使得因幡帝的伤害提高了。" + "kisume" "琪斯美" + "DOTA_Tooltip_ability_item_0063" "【R】琪斯美" + "DOTA_Tooltip_ability_item_0063_Lore" "妖怪的专家,八云紫女士这么说道,「恩——,这应该是地底的妖怪干的,它们的力量来自人类的负的能量,所以或许是想吓唬一下一点紧张感都没有的人类呐。」" + "DOTA_Tooltip_ability_item_0063_Description" "走在夜路上的时候突然从正上方掉落,撞在头顶上的恐怖妖怪。平常都呆在洞窟或者水井里。非常喜欢狭窄的地方所以一直都在桶里,是个内向的妖怪。\n【★】怪奇「钓瓶落之怪」\n【★★★】钓瓶「井下的毁灭者」" + "DOTA_Tooltip_ability_thtd_kisume_01" "怪奇「钓瓶落之怪」" + "DOTA_Tooltip_ability_thtd_kisume_01_Description" "琪斯美降下鬼火打击周围目标。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kisume_01_Note0" "潜能Lv10:鬼火伤害提升200%%。" + "DOTA_Tooltip_ability_thtd_kisume_01_Note1" "潜能Lv50:鬼火伤害提升400%%。" + "DOTA_Tooltip_ability_thtd_kisume_01_Note2" "潜能Lv100:鬼火伤害提升800%%。" + "DOTA_Tooltip_ability_thtd_kisume_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kisume_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_kisume_02" "钓瓶「井下的毁灭者」" + "DOTA_Tooltip_ability_thtd_kisume_02_Description" "琪斯美将深井的恐惧化为鬼爪抓住目标,使其失去行动能力并持续受到伤害,同时每%tick%秒额外造成%damage_hp%%%的当前生命值伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kisume_02_Note0" "潜能Lv10:额外伤害+4%%当前生命值。" + "DOTA_Tooltip_ability_thtd_kisume_02_Note1" "潜能Lv50:额外伤害+8%%当前生命值。" + "DOTA_Tooltip_ability_thtd_kisume_02_Note2" "潜能Lv100:额外伤害+12%%当前生命值,并额外作用附近的1个目标。" + "DOTA_Tooltip_ability_thtd_kisume_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kisume_02_damage_hp" "%额外伤害:" + "DOTA_Tooltip_ability_thtd_kisume_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_kisume_02_tick" "伤害间隔:" + "komachi" "小野塚小町" + "DOTA_Tooltip_ability_item_0068" "【SSR】小野塚小町" + "DOTA_Tooltip_ability_item_0068_Lore" "三途之河的宽度,会随着渡河的人的不同而变化。河面的宽度,由死神引渡前收取的摆渡钱的多寡决定,钱越多,距离越短。钱不是自己生前的财产,而是在人间衷心悼念死者的人的财产总合,死者都会为这个而惊讶吧。" + "DOTA_Tooltip_ability_item_0068_Description" "小野塚小町是担任三途之河的摆渡人一职的死神。小町手持一把极其巨大的镰刀,威严感十足。她喜欢找人聊天,说话语气中也透露着强烈的压迫感,渡河期间还是闭上嘴老老实实地忍着听她说话为好。\n【★】「死神的大镰」\n【★★★】「无间之道」\n【★★★★】恨符「充满留恋的紧缚灵」\n【★★★★★】死符「区别死者的镰刀」" + "DOTA_Tooltip_ability_thtd_komachi_01" "「死神的大镰」" + "DOTA_Tooltip_ability_thtd_komachi_01_Description" "将镰以圆弧状瞬间挥下,对附近敌人造成伤害,并且小町的暴击概率增加%chance%%%。\n攻击范围内每有一个目标损失生命值,则会增加小町的暴击伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_komachi_01_Note0" "潜能Lv10:技能伤害+2。" + "DOTA_Tooltip_ability_thtd_komachi_01_Note1" "潜能Lv50:技能伤害+4。" + "DOTA_Tooltip_ability_thtd_komachi_01_Note2" "潜能Lv100:技能伤害+6。" + "DOTA_Tooltip_ability_thtd_komachi_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_komachi_01_chance" "%暴击概率增加:" + "DOTA_Tooltip_ability_thtd_komachi_01_crit_bonus" "%每损失4%生命增加暴击伤害:" + "DOTA_Tooltip_ability_thtd_komachi_02" "「无间之道」" + "DOTA_Tooltip_ability_thtd_komachi_02_Description" "驱使操作距离的能力,将目标区域的距离变为零,范围的单位将会挤作一团。" + "DOTA_Tooltip_ability_thtd_komachi_02_Lore" "小町具有操纵距离的能力。" + "DOTA_Tooltip_ability_thtd_komachi_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_komachi_02_radius" "范围:" + "DOTA_Tooltip_ability_thtd_komachi_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_komachi_03" "恨符「充满留恋的紧缚灵」" + "DOTA_Tooltip_ability_thtd_komachi_03_Description" "在目标周围召唤出具有强力跟踪性能的恶灵。恶灵不会攻击,仅仅会跟踪并缠绕着敌人,缠绕期间使其受到的伤害提高。" + "DOTA_Tooltip_ability_thtd_komachi_03_max_count" "恶灵数量:" + "DOTA_Tooltip_ability_thtd_komachi_03_duration_time" "恶灵持续时间:" + "DOTA_Tooltip_ability_thtd_komachi_03_damage_up" "%目标受到伤害提高:" + "DOTA_Tooltip_modifier_komachi_03_debuff" "恨符「充满留恋的紧缚灵」" + "DOTA_Tooltip_modifier_komachi_03_debuff_Description" "被恶灵缠绕,受到的伤害提高。" + "DOTA_Tooltip_ability_thtd_komachi_04" "死符「区别死者的镰刀」" + "DOTA_Tooltip_ability_thtd_komachi_04_Description" "把目标作为索命对象,斩杀目标,如果生命值低于斩杀线则无视防御立即杀死目标,否则造成秒杀伤害。\n斩杀致死后获得魂之游戏效果,小町的攻击速度和造成的伤害提升。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note0" "被斩杀期间目标最终只能由小町击杀,优先级最高。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note1" "潜能Lv10:魂之游戏效果持续时间+2秒。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note2" "潜能Lv50:魂之游戏效果持续时间+4秒。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note3" "潜能Lv100:魂之游戏效果持续时间+6秒。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note4" "潜能Lv666:\n获得特殊效果:「超渡体验版」,斩杀线翻倍,魂之游戏效果翻倍。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note5" "潜能Lv999:\n获得特殊效果:「夺魂之镰」,爆击概率+40%%,斩杀致死后永久获得4点能量。" + "DOTA_Tooltip_ability_thtd_komachi_04_Note6" "夺魂之镰效果在跳关时会按所跳波数每波2次斩杀补全至下一次斩杀中(必须在施放跳关后至该波结束前成功斩杀一次)。" + "DOTA_Tooltip_ability_thtd_komachi_04_hp_kill" "%生命值斩杀线:" + "DOTA_Tooltip_ability_thtd_komachi_04_attack_speed" "魂之游戏攻速提升:" + "DOTA_Tooltip_ability_thtd_komachi_04_damage_up" "%魂之游戏伤害提升:" + "DOTA_Tooltip_ability_thtd_komachi_04_duration_time" "魂之游戏持续时间:" + "DOTA_Tooltip_modifier_komachi_04_kill_power_bonus" "夺魂之镰" + "DOTA_Tooltip_modifier_komachi_04_kill_power_bonus_Description" "斩杀致死后永久获得能量。" + "DOTA_Tooltip_ability_thtd_komachi_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_komachi_05_Description" "选择一个地点来设定AI定点施放:「无间之道」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "clownpiece" "克劳恩皮丝" + "DOTA_Tooltip_ability_item_0075" "【SR】克劳恩皮丝" + "DOTA_Tooltip_ability_item_0075_Lore" "「只要你们一直在这里玩下去,月之民就无法动手。」听到这样的话语,她开始盛大地玩耍起来。" + "DOTA_Tooltip_ability_item_0075_Description" "地狱的妖精,赫卡提亚的部下。她受赫卡提亚的命令,令静海充满了自己从地狱带来的妖精们。静海因她的伙伴们变成了妖精乐园。然后由于纯狐的能力,她们觉醒了。\n【★】「阿波罗捏造说」\n【★★★】狱符「喷薄的恶意」\n【★★★★★】狱符「双色地狱火」" + "DOTA_Tooltip_ability_thtd_clownpiece_01" "「阿波罗捏造说」" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Description" "在指定地点召唤月球投影,向四周发射激光,对范围内的敌人造成伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Note0" "潜能Lv10:技能伤害提高100%%。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Note1" "潜能Lv50:技能伤害提高200%%。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_Note2" "潜能Lv100:技能伤害提高400%%。" + "DOTA_Tooltip_ability_thtd_clownpiece_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_clownpiece_01_range" "范围:" + "DOTA_Tooltip_ability_thtd_clownpiece_02" "狱符「喷薄的恶意」" + "DOTA_Tooltip_ability_thtd_clownpiece_02_Description" "使范围内目标陷入疯狂,以增强所有妖精的力量。\n每使一个目标陷入疯狂,所有妖精的技能伤害提高%damage_up_other%%%,克劳恩皮丝获得%damage_up_self%倍效果。\n支持AI自动错开施放。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_clownpiece_02_Note0" "潜能Lv50:范围+200,持续时间+2秒,克劳恩皮丝伤害提高+1倍。" + "DOTA_Tooltip_ability_thtd_clownpiece_02_Note1" "潜能Lv100:范围+400,持续时间+4秒,克劳恩皮丝伤害提高+2倍。" + "DOTA_Tooltip_ability_thtd_clownpiece_02_radius" "范围:" + "DOTA_Tooltip_ability_thtd_clownpiece_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_clownpiece_02_damage_up_other" "%妖精技能伤害提高:" + "DOTA_Tooltip_ability_thtd_clownpiece_02_damage_up_self" "克劳恩皮丝加成倍数:" + "DOTA_Tooltip_modifier_clownpiece_buff" "狱符「喷薄的恶意」" + "DOTA_Tooltip_modifier_clownpiece_buff_Description" "克劳恩皮丝使目标陷入疯狂,从中吸取力量增强妖精的技能伤害,克劳恩皮丝获得多倍效果。层数为陷入疯狂目标数量" + "DOTA_Tooltip_ability_thtd_clownpiece_03" "狱炎「双重地狱火」" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Description" "克劳恩皮丝挥出双重地狱火燃烧目标,造成持续的伤害(可叠加),并降低%speed_down%%%移速。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note2" "潜能Lv100:技能伤害+20,燃烧时间+5秒。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note3" "潜能Lv666:\n获得特殊效果:擦弹地狱火,向自身360度施放双重地狱火,技能伤害+30。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Note4" "潜能Lv999:\n获得特殊效果:拉姆帕德斯火炬,燃烧伤害增加3倍。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_Lore" "地狱火拥有极端危险的气息;而将各种的特性混合起来,就简直难以想象。" + "DOTA_Tooltip_ability_thtd_clownpiece_03_power_damage" "燃烧伤害(能量点*星级/每秒):" + "DOTA_Tooltip_ability_thtd_clownpiece_03_distance" "冲击距离:" + "DOTA_Tooltip_ability_thtd_clownpiece_03_duration_time" "燃烧时间:" + "DOTA_Tooltip_ability_thtd_clownpiece_03_speed_down" "%减速:" + "DOTA_Tooltip_modifier_clownpiece_03_debuff" "狱炎「双重地狱火」" + "DOTA_Tooltip_modifier_clownpiece_03_debuff_Description" "正受到地狱火燃烧,并且移动速度降低%dMODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE%%%。" + "kyouko" "幽谷响子" + "DOTA_Tooltip_ability_item_0093" "【R】幽谷响子" + "DOTA_Tooltip_ability_item_0093_Lore" "爬山时,不知你有没有大喊过:「呀吼—!」呢。而之后那响亮的一声「Yahoo!」回话,正是妖怪山彦。" + "DOTA_Tooltip_ability_item_0093_Description" "当冲着山谷喊叫时,会正直地响应声音的妖怪。对愉快的的声音就愉快地响应,对愤怒的吼叫则会做出反击回应。她觉得这样的世界太空虚了,便出家了。现在正在命莲寺修行的样子。修行内容是,每日都在门前进行打扫的工作。\n【★】劈音「尖刺之圆」\n【★★★】响符「强力共振」" + "DOTA_Tooltip_ability_thtd_kyouko_01" "劈音「尖刺之圆」" + "DOTA_Tooltip_ability_thtd_kyouko_01_Description" "幽谷响子在她面前制造出强大的声波,对其轨迹上的所有敌人造成伤害,并使其下次受到声波伤害提高%damage_up%%%。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note0" "叠加效果为线性叠加,最大999次,对两个技能均有效。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note1" "潜能Lv10:冲击波伤害叠加+5%%。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note2" "潜能Lv50:冲击波伤害叠加+25%%。" + "DOTA_Tooltip_ability_thtd_kyouko_01_Note3" "潜能Lv100:冲击波伤害叠加+50%%。" + "DOTA_Tooltip_ability_thtd_kyouko_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kyouko_01_damage_up" "%叠加伤害:" + "DOTA_Tooltip_modifier_thtd_kyouko_01_debuff" "劈音「尖刺之圆」" + "DOTA_Tooltip_modifier_thtd_kyouko_01_debuff_Description" "受到声波伤害提高。" + "DOTA_Tooltip_ability_thtd_kyouko_02" "响符「强力共振」" + "DOTA_Tooltip_ability_thtd_kyouko_02_Description" "在指定位置创建一次强力共振,发出穿过地面的冲击波,伤害敌方单位并眩晕%duration_time%秒。每个受到攻击的目标都会引起伤害附近单位的反射波。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note0" "潜能Lv10:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note1" "潜能Lv50:技能伤害+20。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note2" "潜能Lv100:技能伤害+40。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note3" "潜能Lv666:\n获得特殊效果:回声,所有技能会再次触发若干次。" + "DOTA_Tooltip_ability_thtd_kyouko_02_Note4" "潜能Lv999:\n获得特殊效果:激动Yahoo,暴击概率+75%%,暴击伤害+500%%。" + "DOTA_Tooltip_ability_thtd_kyouko_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_kyouko_02_duration_time" "眩晕时间:" + "DOTA_Tooltip_ability_thtd_kyouko_02_range" "范围:" + "DOTA_Tooltip_ability_thtd_kyouko_03" "AI定点施放" + "DOTA_Tooltip_ability_thtd_kyouko_03_Description" "选择一个地点来设定AI定点施放:响符「强力共振」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "shikieiki" "四季映姬·夜摩仙那度" + "DOTA_Tooltip_ability_item_0064" "【SSR】四季映姬" + "DOTA_Tooltip_ability_item_0064_Lore" "绝对不要对她说谎、隐瞒一些事使自己看起来像好人。因为谎言被揭穿后会被施以重罪。" + "DOTA_Tooltip_ability_item_0064_Description" "在地狱居住制裁死者的神。拥有判断是非黑白程度的能力。她的名字是四季·映姬,夜摩仙那度是阎魔大人中的官职之一。她从来不会说出有失偏颇的话语,会令人油然而生一种难以接近的氛围。不过,她的说教多数还是为了幻想乡中的人类着想,面对她的说教,要坦率地表达自己的感激之情并洗耳恭听。阎魔大人时刻持于手中的棒,是用来书写受审者的罪孽,并用其击打受审者的道具。\n【★】审判「有罪或无罪」\n【★★★】审判「十王审判」\n【★★★★】审判「最终审判」\n【★★★★★】罪符「彷徨的大罪」" + "DOTA_Tooltip_ability_thtd_shikieiki_01" "审判「有罪或无罪」" + "DOTA_Tooltip_ability_thtd_shikieiki_01_Lore" "单纯以强大的力量裁决对方是否有罪,宛如地狱一般的审判。" + "DOTA_Tooltip_ability_thtd_shikieiki_01_Description" "审判周围单位,造成伤害并添加1至3条罪名,最多叠加10条。" + "DOTA_Tooltip_ability_thtd_shikieiki_01_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_modifier_thtd_shikieiki_01_debuff" "罪名" + "DOTA_Tooltip_modifier_thtd_shikieiki_01_debuff_Description" "被阎魔大人审判" + "DOTA_Tooltip_ability_thtd_shikieiki_02" "审判「十王审判」" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Description" "阎魔大人发动十王审判,对周围目标造成伤害,每条罪名额外造成%damage_up%%%伤害。\n目标在被审判之后罪名会被全部消除,清除罪名后会增加阎魔大人的能量点,持续%duration_time%秒。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Note0" "潜能Lv10:清除罪名获得能量点数+2。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Note1" "潜能Lv50:清除罪名获得能量点数+4。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_Note2" "潜能Lv100:清除罪名获得能量点数+8。" + "DOTA_Tooltip_ability_thtd_shikieiki_02_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_shikieiki_02_damage_up" "%每条罪名伤害提升:" + "DOTA_Tooltip_ability_thtd_shikieiki_02_power_bonus" "每清除一条罪名获得能量点数:" + "DOTA_Tooltip_ability_thtd_shikieiki_02_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shikieiki_03" "审判「最终审判」" + "DOTA_Tooltip_ability_thtd_shikieiki_03_Description" "对目标进行最终审判,在持续时间内每秒对其造成%hp_damage%%%最大生命值的伤害。" + "DOTA_Tooltip_ability_thtd_shikieiki_03_Lore" "阎魔大人的说教是名不虚传的,面对她的说教,要坦率地表达自己的感激之情并洗耳恭听。\n右键切换是否播放说教语音。" + "DOTA_Tooltip_ability_thtd_shikieiki_03_hp_damage" "%额外伤害:" + "DOTA_Tooltip_ability_thtd_shikieiki_03_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shikieiki_04" "罪符「彷徨的大罪」" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Description" "召唤一个强引力漩涡吸收世间的罪。被影响的单位持续受到大量伤害。\n按住ALT键查看激活潜能后的额外效果。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note0" "潜能Lv10:技能伤害+5。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note1" "潜能Lv50:技能伤害+10。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note2" "潜能Lv100:技能伤害+15。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note3" "潜能Lv666:\n获得特殊效果:坠入地狱,漩涡受18层地狱加持,造成18倍伤害。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_Note4" "潜能Lv999:\n获得特殊效果:当头棒喝,暴击伤害+700%%,暴击概率+70%%。" + "DOTA_Tooltip_ability_thtd_shikieiki_04_power_damage" "技能伤害(能量点*星级):" + "DOTA_Tooltip_ability_thtd_shikieiki_04_radius" "作用范围:" + "DOTA_Tooltip_ability_thtd_shikieiki_04_duration_time" "持续时间:" + "DOTA_Tooltip_ability_thtd_shikieiki_04_tick" "伤害间隔:" + "DOTA_Tooltip_ability_thtd_shikieiki_05" "AI定点施放" + "DOTA_Tooltip_ability_thtd_shikieiki_05_Description" "选择一个地点来设定AI定点施放:罪符「彷徨的大罪」,选择自身周围100码内则取消定点施放,设定成功左下角会出现提示。" + "DOTA_Tooltip_ability_thtd_kogasa_00" "link_DOTA_Tooltip_ability_ability_common_decrease_armor_buff" + "DOTA_Tooltip_ability_thtd_utsuho_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_medicine_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_sunny_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_alice_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_wriggle_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_lily_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_nazrin_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_minoriko_00" "link_DOTA_Tooltip_ability_ability_common_star_up_speed" + "DOTA_Tooltip_ability_thtd_mugiyousei_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_shanghainingyou_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_hourainingyou_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_hanadayousei_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_maidyousei_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_cirno_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_letty_00" "link_DOTA_Tooltip_ability_ability_common_decrease_magic_armor_buff" + "DOTA_Tooltip_ability_thtd_lyrica_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_lunasa_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_merlin_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_rumia_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_satori_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_iku_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_mystia_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_marisa_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_tenshi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_patchouli_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_reisen_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yuyuko_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_youmu_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_rin_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_reimu_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_daiyousei_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_remilia_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_flandre_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_sakuya_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_koishi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_koakuma_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_meirin_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yuuka_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yukari_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_ran_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_chen_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_eirin_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_mokou_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_kaguya_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_aya_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_hatate_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_momiji_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_sanae_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_kanako_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_suwako_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_minamitsu_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_nue_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_sizuha_00" "link_DOTA_Tooltip_ability_ability_common_star_up_speed" + "DOTA_Tooltip_ability_thtd_byakuren_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_toramaru_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_shinki_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_soga_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_futo_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_miko_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yoshika_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_seiga_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_keine_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_luna_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_star_00" "link_DOTA_Tooltip_ability_ability_common_mana_regen_buff" + "DOTA_Tooltip_ability_thtd_suika_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_yuugi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_junko_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_hecatia_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kokoro_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_hina_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kagerou_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_inaba_00" "link_DOTA_Tooltip_ability_ability_common_attack_speed_buff" + "DOTA_Tooltip_ability_thtd_clownpiece_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kisume_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_komachi_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_kyouko_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_ability_thtd_shikieiki_00" "link_DOTA_Tooltip_ability_ability_common_power_buff" + "DOTA_Tooltip_modifier_equip_item" "装备" + "DOTA_Tooltip_modifier_equip_item_Description" "已携带装备" + "DOTA_Tooltip_modifier_item_2005_attack_aura" "「血染的太阳伞」四件套" + "DOTA_Tooltip_modifier_item_2005_attack_aura_Description" "提升周围友方单位的攻击力。" + "DOTA_Tooltip_ability_item_3001" "猪年气球" + "DOTA_Tooltip_ability_item_3001_Description" "

使用

吹出一个可爱又有弹性的芳晓气球。" + "DOTA_Tooltip_ability_item_3001_Lore" "他最爱吃白日梦。" + "DOTA_Tooltip_ability_item_3002" "击掌" + "DOTA_Tooltip_ability_item_3002_Description" "

使用

和队友击掌庆祝。" + "DOTA_Tooltip_ability_item_3002_Lore" "一起Happy!" + "DOTA_Tooltip_ability_item_3003" "足球" + "DOTA_Tooltip_ability_item_3003_Description" "

使用

射门看看。" + "DOTA_Tooltip_ability_item_3003_Lore" "能击中球门么?" + "DOTA_Tooltip_ability_item_3004" "鞭炮" + "DOTA_Tooltip_ability_item_3004_Description" "

使用

扔串鞭炮。真的,快扔!" + "DOTA_Tooltip_ability_item_3004_Lore" "没有比爆炸更喜庆的了!" + "DOTA_Tooltip_ability_item_3005" "投掷雪球" + "DOTA_Tooltip_ability_item_3005_Description" "

使用

向一名友军或敌人投掷雪球。" + "DOTA_Tooltip_ability_item_3005_Lore" "纯手工打造,温度完美。" + "DOTA_Tooltip_ability_item_3006" "召唤雪人" + "DOTA_Tooltip_ability_item_3006_Description" "

使用

召唤一个欢乐的雪人。" + "DOTA_Tooltip_ability_item_3006_Lore" "只要可以,他会一直做你的朋友。" + "DOTA_Tooltip_ability_item_3007" "装饰树木" + "DOTA_Tooltip_ability_item_3007_Description" "

使用

给任意树木加上一丝欢快的节日气氛。" + "DOTA_Tooltip_ability_item_3007_Lore" "节日的装束, 即使是战场上最血腥的斗士也会喜欢。" + "DOTA_Tooltip_ability_item_3008" "节日烟花" + "DOTA_Tooltip_ability_item_3008_Description" "

使用

将烟花射向半空。" + "DOTA_Tooltip_ability_item_3008_Lore" "没有比爆炸更喜庆的了!" + "DOTA_Tooltip_ability_item_3009" "2019年芳晓佳节消耗品捆绑包" + "DOTA_Tooltip_ability_item_3009_Description" "

使用

包含一整套芳晓佳节消耗品。" + "DOTA_Tooltip_ability_item_3010" "凌霜圣地消耗品捆绑包" + "DOTA_Tooltip_ability_item_3010_Description" "

使用

包含一整套凌霜圣地特殊活动的消耗品。" + "DOTA_Tooltip_ability_item_3011" "烁热同盟" + "DOTA_Tooltip_ability_item_3011_Description" "

T5

每有一个不同的地灵殿联动效果,则地灵殿单位获得+30%%物理伤害提升。(古明地觉、古明地恋、火焰猫燐、灵乌路空)" + "DOTA_Tooltip_modifier_bb_buff_3011" "烁热同盟" + "DOTA_Tooltip_modifier_bb_buff_3011_Description" "每有一个不同的地灵殿联动效果,则地灵殿单位获得+30%%物理伤害提升。(古明地觉、古明地恋、火焰猫燐、灵乌路空)" + "DOTA_Tooltip_ability_item_3012" "幸运者的烦恼" + "DOTA_Tooltip_ability_item_3012_Description" "

T2

抽卡有15%%概率额外获得一张对应品质的御币。" + "DOTA_Tooltip_modifier_bb_buff_3012" "幸运者的烦恼" + "DOTA_Tooltip_modifier_bb_buff_3012_Description" "抽卡有15%%概率额外获得一张对应品质的御币。" + "DOTA_Tooltip_ability_item_3013" "无敌意识" + "DOTA_Tooltip_ability_item_3013_Description" "

T4

受到负面效果影响降低50%%(如震荡、黒暗光环)。" + "DOTA_Tooltip_modifier_bb_buff_3013" "无敌意识" + "DOTA_Tooltip_modifier_bb_buff_3013_Description" "受到负面效果影响降低50%%(如震荡、黒暗光环)。" + "DOTA_Tooltip_ability_item_3014" "战斗中铸就" + "DOTA_Tooltip_ability_item_3014_Description" "

T4

无尽回合每通过一波,阵容中的主角单位永久+1点能量(灵梦、魔理沙、东风谷早苗、爱丽丝),999波之后无效。" + "DOTA_Tooltip_modifier_bb_buff_3014" "战斗中铸就" + "DOTA_Tooltip_modifier_bb_buff_3014_Description" "无尽回合每通过一波,阵容中的主角单位永久+1点能量(灵梦、魔理沙、东风谷早苗、爱丽丝),999波之后无效。" + "DOTA_Tooltip_ability_item_3015" "失去天恩" + "DOTA_Tooltip_ability_item_3015_Description" "

T5

在经历失去月之都后,所有月之民进入战斗后战力提升,每有一个不同的月之都单位,则获得+15%%纯粹伤害提升。(八意永琳、蓬莱山辉夜、铃仙、因幡帝)" + "DOTA_Tooltip_modifier_bb_buff_3015" "失去天恩" + "DOTA_Tooltip_modifier_bb_buff_3015_Description" "在经历失去月之都后,所有月之民进入战斗后战力提升,每有一个不同的月之都单位,则获得+15%%纯粹伤害提升。(八意永琳、蓬莱山辉夜、铃仙、因幡帝)" + "DOTA_Tooltip_ability_item_3016" "召唤神石" + "DOTA_Tooltip_ability_item_3016_Description" "

T4

所有召唤物+200攻击力和+40%%攻速(在召唤时生效)。" + "DOTA_Tooltip_modifier_bb_buff_3016" "召唤神石" + "DOTA_Tooltip_modifier_bb_buff_3016_Description" "所有召唤物+200攻击力和+40%%攻速(在召唤时生效)。" + "DOTA_Tooltip_ability_item_3017" "一线希望" + "DOTA_Tooltip_ability_item_3017_Description" "

T3

每有一个外圈漏怪,则对内圈敌方单位的伤害提升5%%。" + "DOTA_Tooltip_modifier_bb_buff_3017" "一线希望" + "DOTA_Tooltip_modifier_bb_buff_3017_Description" "每有一个外圈漏怪,则对内圈敌方单位的伤害提升5%%。" + "DOTA_Tooltip_ability_item_3018" "亲友折扣" + "DOTA_Tooltip_ability_item_3018_Description" "

T2

抽卡价格优惠20%%。" + "DOTA_Tooltip_modifier_bb_buff_3018" "亲友折扣" + "DOTA_Tooltip_modifier_bb_buff_3018_Description" "抽卡价格优惠20%%。" + "DOTA_Tooltip_ability_item_3019" "绝望手段" + "DOTA_Tooltip_ability_item_3019_Description" "

T3

每波最后5秒如果漏怪数量达到30则造成的伤害提高50%%,持续5秒。" + "DOTA_Tooltip_modifier_bb_buff_3019" "绝望手段" + "DOTA_Tooltip_modifier_bb_buff_3019_Description" "每波最后5秒如果漏怪数量达到30则造成的伤害提高50%%,持续5秒。" + "DOTA_Tooltip_ability_item_3020" "扩大阵容" + "DOTA_Tooltip_ability_item_3020_Description" "

T3

同名卡上场最大数量提高50%%(向下取整)。" + "DOTA_Tooltip_modifier_bb_buff_3020" "扩大阵容" + "DOTA_Tooltip_modifier_bb_buff_3020_Description" "同名卡上场最大数量提高50%%(向下取整)。" + "DOTA_Tooltip_ability_item_3021" "邪恶意念" + "DOTA_Tooltip_ability_item_3021_Description" "

T4

秒杀伤害上限提高75%%。" + "DOTA_Tooltip_modifier_bb_buff_3021" "邪恶意念" + "DOTA_Tooltip_modifier_bb_buff_3021_Description" "秒杀伤害上限提高75%%。" + "DOTA_Tooltip_ability_item_3022" "金币满箱" + "DOTA_Tooltip_ability_item_3022_Description" "

T2

获得10000金钱。" + "DOTA_Tooltip_ability_item_3023" "虹吸意图" + "DOTA_Tooltip_ability_item_3023_Description" "

T5

神灵庙单位的神子附加伤害加成效果提高50%%。" + "DOTA_Tooltip_modifier_bb_buff_3023" "虹吸意图" + "DOTA_Tooltip_modifier_bb_buff_3023_Description" "神灵庙单位的神子附加伤害加成效果提高50%%。" + "DOTA_Tooltip_ability_item_3024" "香火长存" + "DOTA_Tooltip_ability_item_3024_Description" "

T5

守矢神社的信仰收集上限提高50%%。" + "DOTA_Tooltip_modifier_bb_buff_3024" "香火长存" + "DOTA_Tooltip_modifier_bb_buff_3024_Description" "守矢神社的信仰收集上限提高50%%。" + "DOTA_Tooltip_ability_item_3025" "终极闪烁" + "DOTA_Tooltip_ability_item_3025_Description" "

T5

红魔馆单位施放技能时有5%%概率刷新技能。" + "DOTA_Tooltip_modifier_bb_buff_3025" "终极闪烁" + "DOTA_Tooltip_modifier_bb_buff_3025_Description" "红魔馆单位施放技能时有5%%概率刷新技能。" + "DOTA_Tooltip_ability_item_3026" "口袋细沙" + "DOTA_Tooltip_ability_item_3026_Description" "

T3

进入无尽波数后怪物移动速度降低30。" + "DOTA_Tooltip_modifier_bb_buff_3026" "口袋细沙" + "DOTA_Tooltip_modifier_bb_buff_3026_Description" "进入无尽波数后怪物移动速度降低30。" + "DOTA_Tooltip_ability_item_3027" "鉴宝大师" + "DOTA_Tooltip_ability_item_3027_Description" "

T5

星莲船单位装备4件套效果所需装备数量降低1件" + "DOTA_Tooltip_modifier_bb_buff_3027" "鉴宝大师" + "DOTA_Tooltip_modifier_bb_buff_3027_Description" "星莲船单位装备4件套效果所需装备数量降低1件" + "DOTA_Tooltip_ability_item_3028" "鬼影一击" + "DOTA_Tooltip_ability_item_3028_Description" "

T5

鬼族单位攻击有5%%概率击晕目标并造成20%%最大生命值伤害。(星熊勇仪、伊吹萃香)" + "DOTA_Tooltip_modifier_bb_buff_3028" "鬼影一击" + "DOTA_Tooltip_modifier_bb_buff_3028_Description" "鬼族单位攻击有5%%概率击晕目标并造成20%%最大生命值伤害。(星熊勇仪、伊吹萃香)" + "DOTA_Tooltip_ability_item_3029" "四季馈赠" + "DOTA_Tooltip_ability_item_3029_Description" "

T2

相关单位获得一个对应的效果。\n春:莉莉白增伤效果提高20%%。\n夏:风见幽香花田加成效果提高20%%。\n秋:秋姐妹每级成长时间减少20秒,成长速度加快20%%。\n冬:蕾蒂和琪露诺伤害提高20%%。" + "DOTA_Tooltip_modifier_bb_buff_3029" "四季馈赠" + "DOTA_Tooltip_modifier_bb_buff_3029_Description" "相关单位获得一个对应的效果。\n春:莉莉白增伤效果提高20%%。\n夏:风见幽香花田加成效果提高20%%。\n秋:秋姐妹每级成长时间减少20秒,成长速度加快20%%。\n冬:蕾蒂和琪露诺伤害提高20%%。" + "DOTA_Tooltip_ability_item_3030" "人多力量大" + "DOTA_Tooltip_ability_item_3030_Description" "

T4

分身加成效果提高50%%。(芙兰朵露、铃仙)" + "DOTA_Tooltip_modifier_bb_buff_3030" "人多力量大" + "DOTA_Tooltip_modifier_bb_buff_3030_Description" "分身加成效果提高50%%。(芙兰朵露、铃仙)" + "DOTA_Tooltip_ability_item_3031" "资深专家" + "DOTA_Tooltip_ability_item_3031_Description" "" + "DOTA_Tooltip_modifier_bb_buff_3031" "资深专家" + "DOTA_Tooltip_modifier_bb_buff_3031_Description" "" + "DOTA_Tooltip_ability_item_3050" "丢失的宝藏" + "DOTA_Tooltip_ability_item_3050_Description" "待解锁。\n宠物成长等级每5级获得1个额外奖励选择。\n使用魔法钥匙开箱有概率获取增加额外奖励选择的物品。" + "DOTA_Tooltip_modifier_fairy_count" "潜能等级" + "DOTA_Tooltip_modifier_fairy_count_Description" "使用觉醒来激活潜能,激活后每级提升3点能量和攻击力,达到特定等级时还会增强某些技能效果。" + "DOTA_Tooltip_ability_faceless_void_time_lock" "鬼影一击" + "DOTA_Tooltip_ability_faceless_void_time_lock_Description" "攻击有%chance_pct%%%概率击晕目标并造成%bonus_damage%%%最大生命值伤害。" + "DOTA_Tooltip_ability_faceless_void_time_lock_chance_pct" "%触发概率:" + "DOTA_Tooltip_ability_faceless_void_time_lock_duration" "持续时间:" + "DOTA_Tooltip_ability_faceless_void_time_lock_bonus_damage" "%生命值伤害:" + "DOTA_Tooltip_ability_faceless_void_time_lock_Lore" "鬼族的突袭伴随着恐怖的大力。" + "DOTA_Tooltip_ability_faceless_void_time_lock_Note0" "眩晕效果无视技能免疫。" + "DOTA_Tooltip_ability_faceless_void_time_lock_Note1" "多个战利品效果叠加。" + "DOTA_Tooltip_modifier_faceless_void_timelock_freeze" "鬼影一击" + "DOTA_Tooltip_modifier_faceless_void_timelock_freeze_Description" "被鬼影一击击晕了!" + "sumireko" "宇佐见堇子" + "renko" "宇佐见莲子" + "maribel" "玛艾露贝莉·赫恩" + "mamizou" "二岩猯藏" + "seija" "鬼人正邪" + "shinmyoumaru" "少名针妙丸" + "kishin" "稀神探女" + "matara" "摩多罗隐岐奈" + "sariel" "萨丽爱尔" + "mima" "魅魔" + "gengetu" "幻月" + "elly" "艾丽" + "yumemi" "冈崎梦美" + "AbilityDamage" "基础伤害:" + "DOTA_HUD_Evasion" "闪避:" + "DOTA_AbilityTooltip_ScepterUpgrade_Header" "" + "DOTA_Tooltip_ability_death_prophet_exorcism_aghanim_description" "" + "reimu_pet" "REIMU_PET" + "DOTA_Tooltip_ability_reimu_pet_01" "「我变我变」" + "DOTA_Tooltip_ability_reimu_pet_01_Description" "变换一个外形。\n外形数量等于成长等级。" + "DOTA_Tooltip_ability_reimu_pet_02" "「我炫我炫」" + "DOTA_Tooltip_ability_reimu_pet_02_Description" "更换一个特效。\n特效数量等于成长等级。" + "DOTA_Tooltip_ability_reimu_pet_03" "「保存形态」" + "DOTA_Tooltip_ability_reimu_pet_03_Description" "保存当前的外形和特效。" + "DOTA_Tooltip_ability_reimu_pet_04" "「劳动小能手」" + "DOTA_Tooltip_ability_reimu_pet_04_Description" "主动:消耗%point%个符卡精华来快速制作一把钥匙(放置于主人背包中)。\n被动:小灵每天会制作5把魔法钥匙,按成长等级每级增加1把,每5级额外增加1把。\n钥匙当天有效,游戏结束会保存未使用的钥匙。\n每日开箱任务只能完成一次(奖励符卡精华),最多保留7天的开箱任务。" + "DOTA_Tooltip_ability_reimu_pet_05" "「主人我懂你」" + "DOTA_Tooltip_ability_reimu_pet_05_Description" "小灵协助主人取得胜利。\n主动:将小灵拴在指定位置,点击自身200码范围内则恢复跟随。\n被动:效果1:成长等级≥2级时,将四次元爆弹放置背包中(前6格),在漏怪超标时自动使用。\n效果2:增加战利品奖励可供选择的数量,每5级额外1个。" + "DOTA_Tooltip_modifier_reimu_pet_01_level" "成长等级" + "DOTA_Tooltip_modifier_reimu_pet_01_level_Description" "小灵的当前成长等级,点击左上角赞助获得等级提升。" + "change_to_pet_model" "当前外形代号:{s:key}" + "change_to_pet_effect" "当前特效代号:{s:key}" + "pet_cumstom_saved" "外形和特效已保存" + "DOTA_Tooltip_ability_item_3101" "博丽魔法宝箱" + "DOTA_Tooltip_ability_item_3102" "博丽魔法宝箱" + "DOTA_Tooltip_ability_item_3103" "博丽魔法宝箱" + "DOTA_Tooltip_ability_item_3121" "魔法钥匙" + "DOTA_Tooltip_ability_item_3121_Description" "可以开启博丽神社的魔法宝箱,或者在商店购买物品。\n由宠物小灵制作,小灵每天制作数量为自身等级,也可以使用符卡精华快速制作。" + "DOTA_Tooltip_ability_item_3149" "「凤凰之灵」" + "DOTA_Tooltip_ability_item_3149_Description" "给目标服用后,提升潜能至满级(Lv%point%)。\n使用灵梦觉醒技能激活潜能,本场游戏有效。\n若不使用,则会保留,后续游戏有效。最多保留4个。" + "DOTA_Tooltip_ability_item_3150" "「布都御魂」" + "DOTA_Tooltip_ability_item_3150_Description" "幻想乡三灵剑之一,只有幸运者才能使用。\n剑技乱舞,数把灵刀在使用者周围环绕,每%damage_interval%秒对进入其中的单位额外进行一次普通攻击并造成星级*能量*%power_damage%的物理伤害(前3个目标可触发攻击特效)。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3150_power_bonus" "攻击力和能量增加:" + "DOTA_Tooltip_ability_item_3151" "「天丛云剑」" + "DOTA_Tooltip_ability_item_3151_Description" "幻想乡三灵剑之一,只有幸运者才能使用。\n攻击时剑气形成一把巨大的神剑从天而降,对范围内的目标造成攻击者星级*能量*%power_damage%的魔法伤害。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3151_power_damage" "伤害(星级*能量点):" + "DOTA_Tooltip_ability_item_3151_range" "范围:" + "DOTA_Tooltip_ability_item_3151_power_bonus" "攻击力和能量增加:" + "DOTA_Tooltip_ability_item_3152" "「天羽羽斩」" + "DOTA_Tooltip_ability_item_3152_Description" "幻想乡三灵剑之一,只有幸运者才能使用。\n攻击时对目标周围%range%范围造成攻击者星级*能量*%power_damage%的纯粹伤害,并封印%duration_time%秒,进入幻境停止移动。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3152_power_bonus" "攻击力和能量增加:" + "DOTA_Tooltip_modifier_item_3152_debuff" "「天羽羽斩」" + "DOTA_Tooltip_modifier_item_3152_debuff_Description" "被封印正在幻境之中。" + "DOTA_Tooltip_ability_item_3153" "「轩辕剑」" + "DOTA_Tooltip_ability_item_3153_Description" "流落幻想乡的圣剑,只有幸运者才能使用。\n攻击时对目标周围造成星级*能量*%power_damage%伤害(伤害类型取增伤最高一类),受影响的单位受到的所有伤害提高%damage_debuff%%%,持续%duration_time%秒。\n(传说武器一经使用上榜将进入巅峰榜)" + "DOTA_Tooltip_ability_item_3153_power_bonus" "攻击力和能量增加:" + "DOTA_NeutralItemSlot_Title" "饰品槽位" + "DOTA_NeutralItemSlot_Description" "可以存放饰品,只有装备在此槽位时才能使用。饰品将逐步推出,请进群讨论。" + "DOTA_ToolTip_Ability_AutoCast" "右键点击切换方式" + "DOTA_InventoryMenu_DropAtFountain" "丢到地上" + } +} diff --git a/english_localization_set/panorama_decompile/Decompiler b/tools/panorama_decompile/Decompiler similarity index 100% rename from english_localization_set/panorama_decompile/Decompiler rename to tools/panorama_decompile/Decompiler diff --git a/english_localization_set/panorama_decompile/Decompiler-linux.zip b/tools/panorama_decompile/Decompiler-linux.zip similarity index 100% rename from english_localization_set/panorama_decompile/Decompiler-linux.zip rename to tools/panorama_decompile/Decompiler-linux.zip diff --git a/panorama/layout/custom_game/custom_loading_screen.xml b/tools/panorama_decompile/decompiled_layout/custom_loading_screen.xml similarity index 100% rename from panorama/layout/custom_game/custom_loading_screen.xml rename to tools/panorama_decompile/decompiled_layout/custom_loading_screen.xml diff --git a/panorama/layout/custom_game/custom_ui_manifest.xml b/tools/panorama_decompile/decompiled_layout/custom_ui_manifest.xml similarity index 100% rename from panorama/layout/custom_game/custom_ui_manifest.xml rename to tools/panorama_decompile/decompiled_layout/custom_ui_manifest.xml diff --git a/panorama/layout/custom_game/dps_panel.xml b/tools/panorama_decompile/decompiled_layout/dps_panel.xml similarity index 100% rename from panorama/layout/custom_game/dps_panel.xml rename to tools/panorama_decompile/decompiled_layout/dps_panel.xml diff --git a/panorama/layout/custom_game/end_screen.xml b/tools/panorama_decompile/decompiled_layout/end_screen.xml similarity index 100% rename from panorama/layout/custom_game/end_screen.xml rename to tools/panorama_decompile/decompiled_layout/end_screen.xml diff --git a/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.css b/tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.css similarity index 100% rename from panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.css rename to tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.css diff --git a/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.js b/tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.js similarity index 100% rename from panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.js rename to tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.js diff --git a/panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.xml b/tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.xml similarity index 100% rename from panorama/layout/custom_game/frames/cosmetic_abilities/cosmetic_abilities.xml rename to tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/cosmetic_abilities.xml diff --git a/panorama/layout/custom_game/frames/cosmetic_abilities/creator.js b/tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/creator.js similarity index 100% rename from panorama/layout/custom_game/frames/cosmetic_abilities/creator.js rename to tools/panorama_decompile/decompiled_layout/frames/cosmetic_abilities/creator.js diff --git a/panorama/layout/custom_game/frames/message/message.css b/tools/panorama_decompile/decompiled_layout/frames/message/message.css similarity index 100% rename from panorama/layout/custom_game/frames/message/message.css rename to tools/panorama_decompile/decompiled_layout/frames/message/message.css diff --git a/panorama/layout/custom_game/frames/message/message.js b/tools/panorama_decompile/decompiled_layout/frames/message/message.js similarity index 100% rename from panorama/layout/custom_game/frames/message/message.js rename to tools/panorama_decompile/decompiled_layout/frames/message/message.js diff --git a/panorama/layout/custom_game/frames/message/message.xml b/tools/panorama_decompile/decompiled_layout/frames/message/message.xml similarity index 100% rename from panorama/layout/custom_game/frames/message/message.xml rename to tools/panorama_decompile/decompiled_layout/frames/message/message.xml diff --git a/panorama/layout/custom_game/frames/payment/payment.css b/tools/panorama_decompile/decompiled_layout/frames/payment/payment.css similarity index 100% rename from panorama/layout/custom_game/frames/payment/payment.css rename to tools/panorama_decompile/decompiled_layout/frames/payment/payment.css diff --git a/panorama/layout/custom_game/frames/payment/payment.js b/tools/panorama_decompile/decompiled_layout/frames/payment/payment.js similarity index 100% rename from panorama/layout/custom_game/frames/payment/payment.js rename to tools/panorama_decompile/decompiled_layout/frames/payment/payment.js diff --git a/panorama/layout/custom_game/frames/payment/payment.xml b/tools/panorama_decompile/decompiled_layout/frames/payment/payment.xml similarity index 100% rename from panorama/layout/custom_game/frames/payment/payment.xml rename to tools/panorama_decompile/decompiled_layout/frames/payment/payment.xml diff --git a/panorama/layout/custom_game/info.xml b/tools/panorama_decompile/decompiled_layout/info.xml similarity index 100% rename from panorama/layout/custom_game/info.xml rename to tools/panorama_decompile/decompiled_layout/info.xml diff --git a/panorama/layout/custom_game/shop.xml b/tools/panorama_decompile/decompiled_layout/shop.xml similarity index 100% rename from panorama/layout/custom_game/shop.xml rename to tools/panorama_decompile/decompiled_layout/shop.xml diff --git a/panorama/layout/custom_game/team_select.xml b/tools/panorama_decompile/decompiled_layout/team_select.xml similarity index 100% rename from panorama/layout/custom_game/team_select.xml rename to tools/panorama_decompile/decompiled_layout/team_select.xml diff --git a/panorama/scripts/custom_game/custom_loading_screen.js b/tools/panorama_decompile/decompiled_scrips/custom_loading_screen.js similarity index 100% rename from panorama/scripts/custom_game/custom_loading_screen.js rename to tools/panorama_decompile/decompiled_scrips/custom_loading_screen.js diff --git a/panorama/scripts/custom_game/display_error.js b/tools/panorama_decompile/decompiled_scrips/display_error.js similarity index 100% rename from panorama/scripts/custom_game/display_error.js rename to tools/panorama_decompile/decompiled_scrips/display_error.js diff --git a/panorama/scripts/custom_game/dps_panel.js b/tools/panorama_decompile/decompiled_scrips/dps_panel.js similarity index 100% rename from panorama/scripts/custom_game/dps_panel.js rename to tools/panorama_decompile/decompiled_scrips/dps_panel.js diff --git a/panorama/scripts/custom_game/end_screen.js b/tools/panorama_decompile/decompiled_scrips/end_screen.js similarity index 100% rename from panorama/scripts/custom_game/end_screen.js rename to tools/panorama_decompile/decompiled_scrips/end_screen.js diff --git a/panorama/scripts/custom_game/info.js b/tools/panorama_decompile/decompiled_scrips/info.js similarity index 100% rename from panorama/scripts/custom_game/info.js rename to tools/panorama_decompile/decompiled_scrips/info.js diff --git a/panorama/scripts/custom_game/power.js b/tools/panorama_decompile/decompiled_scrips/power.js similarity index 100% rename from panorama/scripts/custom_game/power.js rename to tools/panorama_decompile/decompiled_scrips/power.js diff --git a/panorama/scripts/custom_game/shop.js b/tools/panorama_decompile/decompiled_scrips/shop.js similarity index 100% rename from panorama/scripts/custom_game/shop.js rename to tools/panorama_decompile/decompiled_scrips/shop.js diff --git a/panorama/scripts/custom_game/team_select.js b/tools/panorama_decompile/decompiled_scrips/team_select.js similarity index 100% rename from panorama/scripts/custom_game/team_select.js rename to tools/panorama_decompile/decompiled_scrips/team_select.js diff --git a/panorama/scripts/custom_game/team_select_card.js b/tools/panorama_decompile/decompiled_scrips/team_select_card.js similarity index 100% rename from panorama/scripts/custom_game/team_select_card.js rename to tools/panorama_decompile/decompiled_scrips/team_select_card.js diff --git a/panorama/scripts/custom_game/util.js b/tools/panorama_decompile/decompiled_scrips/util.js similarity index 100% rename from panorama/scripts/custom_game/util.js rename to tools/panorama_decompile/decompiled_scrips/util.js diff --git a/english_localization_set/panorama_decompile/libSkiaSharp.so b/tools/panorama_decompile/libSkiaSharp.so similarity index 100% rename from english_localization_set/panorama_decompile/libSkiaSharp.so rename to tools/panorama_decompile/libSkiaSharp.so